DQL(数据查询语言)

目录

SELECT 基础语句语法

示例

1. 查询所有列

2. 查询特定列

3. 使用 DISTINCT 去重

4. 使用 WHERE 子句过滤

5. 使用 ORDER BY 排序

6. 使用 GROUP BY 分组

7. 使用 HAVING 过滤分组后的结果

8. 使用 LIMIT 和 OFFSET 分页

执行顺序

书写顺序

写建议


DQL(数据查询语言)语句用于从数据库中检索数据。MySQL 中主要的 DQL 语句是 SELECT 语句。

SELECT 基础语句语法

SELECT [DISTINCT] 列名1, 列名2, ...
FROM 表名 [别名]
[WHERE 条件]
[GROUP BY 列名]
[HAVING 条件]
[ORDER BY 列名 [ASC|DESC]]
[LIMIT n OFFSET m];
  • DISTINCT:可选。用于去除重复的记录。
  • 列名1, 列名2, ...:要检索的列名。如果要检索所有列,可以使用 *
  • 表名:要从中检索数据的表名。对于别名是可选操作。
  • WHERE 条件:可选。用于过滤记录。
  • GROUP BY 列名:可选。用于将结果集按指定列分组。
  • HAVING 条件:可选。用于过滤分组后的结果。
  • ORDER BY 列名 [ASC|DESC]:可选。用于对结果集排序。ASC 为升序(默认),DESC 为降序。
  • LIMIT n OFFSET m:可选。用于限制返回的记录数量。n 为返回的记录数量,m 为结果集的起始位置(从 0 开始)。

示例

1. 查询所有列
SELECT * FROM employees;

说明:检索 employees 表中的所有列和所有记录。

2. 查询特定列
SELECT id, name, salary FROM employees;

说明:只检索 employees 表中的 idnamesalary 列。

3. 使用 DISTINCT 去重
SELECT DISTINCT department_id FROM employees;

说明:检索 employees 表中所有唯一的 department_id 值。

4. 使用 WHERE 子句过滤
SELECT * FROM employees
WHERE department_id = 101;

说明:检索 employees 表中 department_id101 的所有记录。

5. 使用 ORDER BY 排序
SELECT * FROM employees
ORDER BY salary DESC;

说明:按 salary 列降序排列 employees 表中的所有记录。

6. 使用 GROUP BY 分组
SELECT department_id, AVG(salary) AS average_salary
FROM employees
GROUP BY department_id;

说明:按 department_id 分组,计算每个部门的平均薪资。

7. 使用 HAVING 过滤分组后的结果
SELECT department_id, AVG(salary) AS average_salary
FROM employees
GROUP BY department_id
HAVING AVG(salary) > 50000;

说明:检索 employees 表中平均薪资大于 50000 的部门。

8. 使用 LIMIT 和 OFFSET 分页
SELECT * FROM employees
ORDER BY id
LIMIT 10 OFFSET 20;

说明:检索从第 21 条记录开始的 10 条记录,按 id 排序。

执行顺序

执行顺序FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY -> LIMIT

1. FROM 子句

  • 首先,数据库系统确定要从哪些表中获取数据。如果涉及到连接(JOIN)操作,这一步会处理这些连接,生成一个临时的结果集。

2. WHERE 子句

  • 接下来,应用 WHERE 子句中的条件来过滤数据。只有满足这些条件的记录会被保留在结果集中。

3. GROUP BY 子句

  • 如果存在 GROUP BY 子句,数据库系统会根据指定的列对记录进行分组。此时,记录会被分成多个组,每个组的记录在逻辑上是相同的。

4. HAVING 子句

  • HAVING 子句用于过滤分组后的记录。与 WHERE 子句类似,但 HAVING 是在分组之后应用的,用于筛选满足条件的分组。

5. SELECT 子句

  • 在过滤和分组后,SELECT 子句从结果集中选择要显示的列。此时可以使用聚合函数(如 COUNTSUMAVG 等)来计算每个分组的统计信息。

6. ORDER BY 子句

  • 数据按 ORDER BY 子句指定的列排序。排序是基于之前筛选和分组后的结果进行的。

7. LIMITOFFSET 子句

  • 最后,应用 LIMITOFFSET 子句来限制结果集的数量或位置。这用于分页和限制查询结果的条数。

书写顺序

1. SELECT 子句

  • 位置:最开始
  • 作用:指定要检索的列或表达式。可以使用 DISTINCT 关键字来去除重复记录。
  • 示例SELECT DISTINCT column1, column2

2. FROM 子句

  • 位置SELECT 子句之后
  • 作用:指定数据来源的表。可以包含表的别名。
  • 示例FROM table_name AS t

3. WHERE 子句

  • 位置FROM 子句之后
  • 作用:过滤记录,确定哪些记录满足指定条件。
  • 示例WHERE column1 = value

4. GROUP BY 子句

  • 位置WHERE 子句之后
  • 作用:对记录进行分组。通常与聚合函数一起使用。
  • 示例GROUP BY column1

5. HAVING 子句

  • 位置GROUP BY 子句之后
  • 作用:过滤分组后的记录。用于对分组结果进行条件过滤。
  • 示例HAVING COUNT(column1) > 5

6. ORDER BY 子句

  • 位置HAVING 子句之后
  • 作用:对结果集进行排序。可以指定升序(ASC)或降序(DESC)。
  • 示例ORDER BY column1 DESC

7. LIMITOFFSET 子句

  • 位置ORDER BY 子句之后
  • 作用:限制返回的记录数量和结果集的起始位置。LIMIT 控制返回的记录数,OFFSET 控制从结果集的哪个位置开始。
  • 示例LIMIT 10 OFFSET 20

写建议

  • 一致性:在整个 SQL 代码中保持一致的书写顺序和格式,有助于提高代码的可读性。
  • 逻辑顺序:按逻辑顺序书写 SQL 子句,遵循 SQL 的执行顺序可以帮助理解和维护 SQL 语句。
  • 注释:在复杂查询中,添加注释解释每个子句的作用或目的,有助于其他开发人员理解代码。
  • 30
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZZDICT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值