当前位置:   article > 正文

SQL语句全面解析:概念、分类及语法_sql 语义

sql 语义

1. 概念

SQL,全称Structured Query Language,即结构化查询语言,是用于管理关系数据库管理系统(RDBMS)的标准编程语言。SQL语言的主要功能包括数据查询(Data Query)、数据操纵(Data Manipulation)、数据定义(Data Definition)和数据控制(Data Control)。


2. 分类

  1. 数据定义语言(DDL,Data Definition Language):这类语句用于定义不同的数据库、表、视图、索引等数据库对象,以及用来创建、删除、修改数据库和数据表的结构。主要的语句关键字包括CREATE、DROP、ALTER等。
  2. 数据查询语言(DQL,Data Query Language):DQL用于检索数据库中的数据,其核心指令为SELECT。它允许用户查询存储在数据库中的信息,包括从单个或多个表中检索数据。
  3. 数据操纵语言(DML,Data Manipulation Language):DML用于添加、删除、更新和查询数据库记录,并检查数据完整性。主要的语句关键字包括INSERT、DELETE、UPDATE等。
  4. 数据控制语言(DCL,Data Control Language):DCL用于定义数据库、表、字段、用户的访问权限和安全级别。它控制特定用户或角色对数据库结构和数据的访问。主要的语句关键字包括GRANT、REVOKE等。

3. 数据定义语言(DDL)

3.1 CREATE语句

CREATE语句用于创建数据库对象,如表、索引、视图等。以下是一些常见的用法。

3.1.1 创建数据库
  • 语法
CREATE DATABASE 数据库名;
  • 1
  • 示例
CREATE DATABASE my_database;
  • 1
3.1.2 创建表
  • 语法
CREATE TABLE 表名 (
    列名1 数据类型,
    列名2 数据类型,
    ...
);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 示例
CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    age INT,
    department_id INT
);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
3.1.3 创建索引
  • 语法
CREATE [UNIQUE] INDEX 索引名 ON 表名 (列名);
  • 1
  • 示例
CREATE INDEX idx_employees_name ON employees (name);
  • 1
3.1.4 创建视图
  • 语法
CREATE VIEW 视图名 AS
SELECT 列名1, 列名2, ...
FROM 表名
WHERE 条件;
  • 1
  • 2
  • 3
  • 4
  • 示例
CREATE VIEW employees_by_department AS
SELECT id, name, department_id
FROM employees
WHERE department_id = 1;
  • 1
  • 2
  • 3
  • 4

3.2 ALTER语句

ALTER语句用于修改数据库对象的定义,如表的结构、索引等。以下是一些常见的用法。

3.2.1 添加列
  • 语法
ALTER TABLE 表名 ADD 列名 数据类型;
  • 1
  • 示例
ALTER TABLE employees ADD salary DECIMAL(10, 2);
  • 1
3.2.2 修改列
  • 语法
ALTER TABLE 表名 MODIFY 列名 新数据类型;
  • 1
  • 示例
ALTER TABLE employees MODIFY age INT;
  • 1
3.2.3 删除列
  • 语法
ALTER TABLE 表名 DROP COLUMN 列名;
  • 1
  • 示例
ALTER TABLE employees DROP COLUMN department_id;
  • 1

3.3 DROP语句

DROP语句用于删除数据库对象,如表、索引、视图等。以下是一些常见的用法。

3.3.1 删除表
  • 语法
DROP TABLE 表名;
  • 1
  • 示例
DROP TABLE employees;
  • 1
3.3.2 删除索引
  • 语法
DROP INDEX 索引名 ON 表名;
  • 1
  • 示例
DROP INDEX idx_employees_name ON employees;
  • 1
3.3.3 删除视图
  • 语法
DROP VIEW 视图名;
  • 1
  • 示例
DROP VIEW employees_by_department;
  • 1

4. 数据查询语言(DQL)

4.1 可同步看


4.2 SELECT语句

4.2.1 检索所有列
  • 语法
SELECT * FROM 表名;
  • 1
  • 示例
SELECT * FROM employees;
  • 1
4.2.2 检索指定列
  • 语法
SELECT 列名1, 列名2, ... FROM 表名;
  • 1
  • 示例
SELECT name, age FROM employees;
  • 1
4.2.3 使用WHERE子句过滤数据
  • 语法
SELECT 列名1, 列名2, ... FROM 表名 WHERE 条件;
  • 1
  • 示例
SELECT name, age FROM employees WHERE age > 30;
  • 1
4.2.4 模糊查询

在SQL中,模糊查询可以使用LIKE关键字来实现。LIKE关键字用于匹配模式,可以与通配符一起使用来执行模糊查询。

  • 通配符
    • %:代表零个、一个或多个字符。
    • _:代表一个单一字符。
  • 语法
SELECT 列名1, 列名2, ... FROM 表名 WHERE 列名 LIKE '模式';
  • 1
  • 示例:查找以"A"开头的所有姓名
SELECT name FROM employees WHERE name LIKE 'A%';
  • 1
  • 示例:查找名字长度为3个字符,且第三个字符是"A"的所有姓名
SELECT name FROM employees WHERE name LIKE '_A_';
  • 1
  • 示例:查找包含"A"的所有姓名
SELECT name FROM employees WHERE name LIKE '%A%';
  • 1
4.2.5 聚合函数:

SQL中的聚合函数用于对一组值执行计算,并返回单个值。

  • 语法
SELECT COUNT(列名), MAX(列名), MIN(列名), AVG(列名), SUM(列名) FROM 表名;
  • 1
  • COUNT():计算指定列中非NULL值的数量。
  • 语法
SELECT COUNT(column_name) FROM table_name;
  • 1
  • 示例:计算employees表中的记录数量
SELECT COUNT(id) FROM employees;
  • 1
  • SUM():计算指定列中所有值的总和。
  • 语法
SELECT SUM(column_name) FROM table_name;
  • 1
  • 示例:计算employees表中薪水的总和
SELECT SUM(salary) FROM employees;
  • 1
  • AVG():计算指定列中所有值的平均值。
  • 语法
SELECT AVG(column_name) FROM table_name;
  • 1
  • 示例:计算employees表中员工的平均年龄
SELECT AVG(age) FROM employees;
  • 1
  • MIN():从指定列中找到最小值。
  • 语法
SELECT MIN(column_name) FROM table_name;
  • 1
  • 示例:找到employees表中薪水的最小值
SELECT MIN(salary) FROM employees;
  • 1
  • MAX():从指定列中找到最大值。
  • 语法
SELECT MAX(column_name) FROM table_name;
  • 1
  • 示例:找到employees表中员工的最大年龄
SELECT MAX(age) FROM employees;
  • 1
  • 聚合函数通常与GROUP BY子句结合使用
  • 语法
SELECT column1, aggregate_function(column2)
FROM table_name
GROUP BY column1;
  • 1
  • 2
  • 3
  • 下面是一些示例
  • 计算每个部门的员工数量
SELECT department, COUNT(*) AS employee_count
FROM employees
GROUP BY department;
  • 1
  • 2
  • 3
  • 计算每个部门的总薪水
SELECT department, SUM(salary) AS total_salary
FROM employees
GROUP BY department;
  • 1
  • 2
  • 3
  • 计算每个部门的平均薪水
SELECT department, AVG(salary) AS average_salary
FROM employees
GROUP BY department;
  • 1
  • 2
  • 3
  • 找到每个部门中薪水最高的员工
SELECT department, MAX(salary) AS max_salary
FROM employees
GROUP BY department;
  • 1
  • 2
  • 3
  • 使用聚合函数时,还需要注意以下几点:
    • 聚合函数忽略NULL值。
    • 可以在聚合函数中使用DISTINCT关键字来去除重复值后再进行计算。
    • 聚合函数可以与其他SQL函数结合使用,以创建复杂的查询。
4.2.6 使用ORDER BY子句排序数据
  • 语法
SELECT 列名1, 列名2, ... FROM 表名 ORDER BY 列名 [ASC|DESC];
  • 1
  • 示例
SELECT name, age FROM employees ORDER BY age DESC;
  • 1
4.2.7 使用GROUP BY子句对数据进行分组
  • 语法
SELECT 列名1, 列名2, ... FROM 表名 GROUP BY 列名;
  • 1
  • 示例
SELECT department_id, COUNT(*) FROM employees GROUP BY department_id;
  • 1
4.2.8 使用HAVING子句过滤分组后的数据
  • 语法
SELECT 列名1, 列名2, ... FROM 表名 GROUP BY 列名 HAVING 条件;
  • 1
  • 示例
SELECT department_id, COUNT(*) FROM employees GROUP BY department_id HAVING COUNT(*) > 5;
  • 1
4.2.9 LIMIT查询
  • 语法
SELECT 列名1, 列名2, ... FROM 表名 LIMIT 数量 OFFSET 偏移量;
  • 1
  • 示例
SELECT name, age FROM employees 
LIMIT 5, 5;  -- 或者 LIMIT 5 OFFSET 5;
  • 1
  • 2
  • 这里,LIMIT 5, 5 表示跳过前 5 条记录,然后返回接下来的 5 条记录。

4.3 DISTINCT关键字

DISTINCT关键字用于去除查询结果中的重复行。

4.3.1 去除重复行
  • 语法
SELECT DISTINCT 列名1, 列名2, ... FROM 表名;
  • 1
  • 示例
SELECT DISTINCT department_id FROM employees;
  • 1

4.4 JOIN操作

JOIN操作用于将多个表中的数据进行关联。

4.4.1 INNER JOIN(内连接)

返回两个表中满足连接条件的记录。

  • 语法
SELECT 表名1.列名1, 表名2.列名2, ... FROM 表名1 INNER JOIN 表名2 ON 表名1.列名 = 表名2.列名;
  • 1
  • 示例
SELECT employees.name, departments.department_name 
FROM employees 
INNER JOIN departments ON employees.department_id = departments.department_id;
  • 1
  • 2
  • 3
4.4.2 LEFT JOIN(左连接)

返回左表中的所有记录,以及右表中满足连接条件的记录。如果右表中没有满足条件的记录,则用NULL填充。

  • 语法
SELECT 表名1.列名1, 表名2.列名2, ... FROM 表名1 LEFT JOIN 表名2 ON 表名1.列名 = 表名2.列名;
  • 1
  • 示例
SELECT employees.name, departments.department_name 
FROM employees 
LEFT JOIN departments ON employees.department_id = departments.department_id;
  • 1
  • 2
  • 3
4.4.3 RIGHT JOIN(右连接)

返回右表中的所有记录,以及左表中满足连接条件的记录。如果左表中没有满足条件的记录,则用NULL填充。

  • 语法
SELECT 表名1.列名1, 表名2.列名2, ... FROM 表名1 RIGHT JOIN 表名2 ON 表名1.列名 = 表名2.列名;
  • 1
  • 示例
SELECT employees.name, departments.department_name 
FROM employees 
RIGHT JOIN departments ON employees.department_id = departments.department_id;
  • 1
  • 2
  • 3

5. 数据操纵语言(DML)

5.1 可同步看


5.2 INSERT语句

INSERT语句用于向表中插入新的数据行

5.2.1 插入单行数据
  • 语法
INSERT INTO 表名 (列名1, 列名2, ...) VALUES (1,2, ...);
  • 1
  • 示例
INSERT INTO employees (name, age, department_id) VALUES ('John Doe', 30, 1);
  • 1
5.2.2 插入多行数据
  • 语法
INSERT INTO 表名 (列名1, 列名2, ...) VALUES (1,2, ...), (1,2, ...), ...;
  • 1
  • 示例
INSERT INTO employees (name, age, department_id) VALUES 
('John Doe', 30, 1),
('Jane Smith', 28, 2),
('Bob Johnson', 35, 1);
  • 1
  • 2
  • 3
  • 4

5.3 UPDATE语句

UPDATE语句用于修改表中的数据

5.3.1 更新单列数据
  • 语法
UPDATE 表名 SET 列名 = 新值 WHERE 条件;
  • 1
  • 示例
UPDATE employees SET salary = 5000 WHERE name = 'John Doe';
  • 1
5.3.2 更新多列数据
  • 语法
UPDATE 表名 SET 列名1 = 新值1, 列名2 = 新值2, ... WHERE 条件;
  • 1
  • 示例
UPDATE employees SET salary = 5000, department_id = 3 WHERE name = 'John Doe';
  • 1

5.4 DELETE语句

DELETE语句用于从表中删除数据

5.4.1 删除指定行
  • 语法
DELETE FROM 表名 WHERE 条件;
  • 1
  • 示例
DELETE FROM employees WHERE name = 'John Doe';
  • 1
5.4.2 删除所有行(慎用,会删除表中所有数据)
  • 语法
DELETE FROM 表名;
  • 1
  • 示例
DELETE FROM employees;
  • 1
  • 要删除表中的所有记录,也可以使用 TRUNCATE 语句
TRUNCATE TABLE employees;
  • 1

6. 数据控制语言(DCL)

6.1 GRANT语句

GRANT语句用于授予用户或角色对数据库对象的操作权限

6.1.1 授予特定用户的权限
  • 语法
GRANT 权限 ON 对象 TO 用户;
  • 1
  • 示例
GRANT SELECT ON employees TO john;
  • 1
6.1.2 授予所有用户的权限
  • 语法
GRANT 权限 ON 对象 TO PUBLIC;
  • 1
  • 示例
GRANT SELECT ON employees TO PUBLIC;
  • 1
6.1.3 授予多个权限
  • 语法
GRANT 权限1, 权限2 ON 对象 TO 用户;
  • 1
  • 示例
GRANT SELECT, UPDATE ON employees TO john;
  • 1

6.2 REVOKE语句

REVOKE语句用于移除之前授予的权限

6.2.1 移除特定用户的权限
  • 语法
REVOKE 权限 ON 对象 FROM 用户;
  • 1
  • 示例
REVOKE SELECT ON employees FROM john;
  • 1
6.2.2 移除所有用户的权限
  • 语法
REVOKE 权限 ON 对象 FROM PUBLIC;
  • 1
  • 示例
REVOKE SELECT ON employees FROM PUBLIC;
  • 1
6.2.3 移除多个权限
  • 语法
REVOKE 权限1, 权限2 ON 对象 FROM 用户;
  • 1
  • 示例
REVOKE SELECT, UPDATE ON employees FROM john;
  • 1

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/707687
推荐阅读
相关标签
  

闽ICP备14008679号