当前位置: 首页 > news >正文

从零起步学习MySQL || 第四章:DQL语句定义及常见用法示例

🧩 一、DQL 概念

DQL(Data Query Language) 主要用于从数据库中查询数据
在 MySQL 中,核心语句就是:

SELECT

简单理解:

DML(INSERT、UPDATE、DELETE)是“改数据”,
DQL(SELECT)是“查数据”。


🏗 二、SELECT 语句的基本结构

SELECT [字段列表]
FROM [表名]
WHERE [筛选条件]
GROUP BY [分组字段]
HAVING [分组后的筛选条件]
ORDER BY [排序字段]
LIMIT [分页限制]

这七个部分是 SELECT 的执行顺序逻辑框架。
你可以这样记:

FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT


📘 三、基础查询(Basic SELECT)

1️⃣ 查询所有字段

SELECT * FROM student;

不建议在生产环境中使用 *,因为会影响性能、可维护性。
推荐写明字段名:

SELECT id, name, age FROM student;


2️⃣ 给字段起别名

SELECT name AS 姓名, age AS 年龄 FROM student;

别名方便前端显示或多表查询时避免重名。


3️⃣ 去重查询

SELECT DISTINCT department FROM student;

DISTINCT 用于去除重复值。


🧮 四、条件查询(WHERE)

1️⃣ 常见比较运算符

运算符含义
=等于
<> 或 !=不等于
>、<、>=、<=大于 / 小于等
BETWEEN ... AND ...在某范围内
IN (...)在集合中
LIKE模糊匹配
IS NULL / IS NOT NULL是否为空

示例:

SELECT * FROM student WHERE age BETWEEN 18 AND 22;
SELECT * FROM student WHERE department IN ('CS', 'Math');
SELECT * FROM student WHERE name LIKE '张%';


2️⃣ 逻辑运算符

运算符含义
AND并且
OR或者
NOT取反
SELECT * FROM student
WHERE age >= 18 AND department = 'CS';


🧰 五、排序(ORDER BY)

SELECT * FROM student ORDER BY age DESC;

  • ASC:升序(默认)

  • DESC:降序

可以按多个字段排序:

SELECT * FROM student ORDER BY department ASC, age DESC;


📊 六、聚合函数(Aggregate Functions)

函数功能
COUNT()计数
SUM()求和
AVG()平均值
MAX()最大值
MIN()最小值

示例:

SELECT COUNT(*) AS 人数, AVG(age) AS 平均年龄 FROM student;


🧱 七、分组查询(GROUP BY / HAVING)

1️⃣ 基本用法

SELECT department, COUNT(*) AS 人数
FROM student
GROUP BY department;

2️⃣ HAVING 与 WHERE 区别

  • WHERE:在分组前筛选记录

  • HAVING:在分组后筛选结果

示例:

SELECT department, COUNT(*) AS 人数
FROM student
GROUP BY department
HAVING COUNT(*) > 10;


🪜 八、分页(LIMIT)

MySQL 分页语法:

LIMIT [偏移量], [行数]

示例:

SELECT * FROM student LIMIT 0, 10;  -- 查询前10条
SELECT * FROM student LIMIT 10, 10; -- 查询第11到20条

Java 后端分页(如 Spring Boot + MyBatis)中会常见这种拼接:

SELECT * FROM student LIMIT #{offset}, #{pageSize};


🧩 九、连接查询(JOIN)

1️⃣ 内连接(INNER JOIN)

SELECT s.name, c.course_name
FROM student s
INNER JOIN course c ON s.id = c.student_id;

返回两个表中“匹配的行”。


2️⃣ 左连接(LEFT JOIN)

SELECT s.name, c.course_name
FROM student s
LEFT JOIN course c ON s.id = c.student_id;

返回左表所有行,即使右表没有匹配的行。


3️⃣ 右连接(RIGHT JOIN)

SELECT s.name, c.course_name
FROM student s
RIGHT JOIN course c ON s.id = c.student_id;

返回右表所有行,即使左表没有匹配的行。


🧠 十、子查询(Subquery)

子查询是指一个 SELECT 语句嵌套在另一个查询中。

示例:

SELECT name
FROM student
WHERE department_id = (SELECT id FROM department WHERE name = 'CS'
);

还可以作为虚拟表:

SELECT AVG(age) FROM (SELECT * FROM student WHERE gender='M') AS male_students;


⚙️ 十一、DQL 与 Java 后端结合

在 Java 后端(如 Spring Boot、MyBatis、JDBC)中:

  • DQL 通常用于 查询接口,如 /user/list

  • 通过 ORM 框架执行 SQL 并封装结果为 Java 对象。

示例(MyBatis Mapper):

@Select("SELECT * FROM user WHERE age > #{age}")
List<User> findUsersByAge(@Param("age") int age);

对应 SQL:

SELECT * FROM user WHERE age > 20;


🎯 十二、实战建议

  1. 多写 WHERE + GROUP BY + HAVING + ORDER BY 组合查询。

  2. 避免在大表中随意使用 SELECT *

  3. 了解执行顺序:

    FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT
    

  4. 熟悉分页、连接和子查询的使用场景。

http://www.dtcms.com/a/482638.html

相关文章:

  • 网站建设费如何核算.la域名的门户网站
  • 场景中的建筑静态物体转为actor,保持建筑的相对位置。
  • 数字孪生为什么需要5G?低延迟与高可靠实现精准控制
  • Idea 启动项目把启动类显示在左下角 并显示端口号
  • 网站网页模板网页设计培训哪家机构好
  • SLAM: 如何生成odom数据
  • 环境搭建node.js gnvm
  • 网站建设 就业方向东莞房价2021
  • Spring容器的实现
  • JWT 漏洞全解析:从原理到实战
  • 基于Redis6.2.8版本部署Redis Cluster集群
  • 工控一体机在智慧称重食堂中的应用
  • 网络包封装全解析:从字节流到数据帧
  • Spring MVC入门补充2
  • 石家庄站列车时刻表美食网站二级页面模板
  • GS016电动工具调速控制电路
  • Gartner:AI增强软件测试工具魔力象限报告精编(2025年10月)
  • 绵阳公司商务网站制作沈阳企业网站制作公司
  • elasticsearch-8.12.2集群部署
  • 【教程】增强版 print 函数,支持彩色与样式化终端输出
  • Python下载实战技巧技术文章大纲
  • TCP 拆包现象解决方案(一)
  • 陕西省城乡建设学校网站网页设计图片加载不出来
  • 商业智能BI与业务结构分析
  • 视频融合平台EasyCVR助力构建智慧园区的“视觉中枢”与“智能引擎”
  • 基于python+Java的二手车与奔驰销量数据可视化平台
  • 网站返回顶部怎么做制作企业网站页面实训报告
  • 基于ArcGIS的作物适宜区分析案例 | 当GIS化身农科月老
  • 贵阳网站建设开发开发区二手房
  • SpringCloud中的网关(Gateway)的作用是什么?