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

SQL语句全面解析:概念、分类及语法SQL 全称为 StructuredQu 是一种用于管理关系数据库的标准编程语言

大家好,欢迎来到IT知识分享网。

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

3.2 ALTER语句

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

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

3.3 DROP语句

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

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

4. 数据查询语言(DQL)

4.1 可同步看

  • SQL数据查询的艺术:深入探索SELECT的无限可能

4.2 SELECT语句

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

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

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

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

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

4.3 DISTINCT关键字

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

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

4.4 JOIN操作

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

4.4.1 INNER JOIN(内连接)

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

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

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

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

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

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

5. 数据操纵语言(DML)

5.1 可同步看

  • SQL中如何添加数据
  • 精通SQL:数据删除的艺术
  • 深入SQL:精通数据更新的多种方法

5.2 INSERT语句

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

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

5.3 UPDATE语句

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

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

5.4 DELETE语句

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

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

6. 数据控制语言(DCL)

6.1 GRANT语句

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

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

6.2 REVOKE语句

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

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

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/141531.html

(0)
上一篇 2025-05-16 17:15
下一篇 2025-05-16 17:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信