MySQL 高阶语句
文章目录
- MySQL 高阶语句(一)
- 一、常用查询
- 1. 排序查询
- 2. 区间判断与查询不重复记录
- 3. 分组查询
- 4. 限制查询条目
- 5. 设置别名
- 6. 通配符
- 二、子查询
- 三、连接查询
- 1. 内连接(`INNER JOIN`)
- 2. 左连接(`LEFT JOIN`)
- 3. 右连接(`RIGHT JOIN`)
- 四、视图(`VIEW`)
- 五、NULL 值处理
- 总结
- 总结
MySQL 高阶语句(一)
在日常数据库操作中,MySQL 不仅可以执行基础的增、删、改、查操作,还提供了丰富的语句用于对查询结果进行排序、分组、筛选等操作。本博客将介绍 MySQL 中常用的高阶查询语句,如排序、区间判断、去重、分组、限制条目、别名设置、通配符、子查询和连接查询。
一、常用查询
1. 排序查询
MySQL 提供 ORDER BY
语句来对查询结果进行排序。可以按升序(ASC
,默认)或降序(DESC
)进行排序,还可以组合多个字段进行排序。
示例:
SELECT id, name, score FROM info ORDER BY score; -- 按分数升序排列
SELECT id, name, score FROM info ORDER BY score DESC; -- 按分数降序排列
SELECT id, name, score FROM info WHERE address = 'hangzhou' ORDER BY score DESC; -- 结合 WHERE 条件
你也可以使用多个字段进行排序:
SELECT id, name, hobbid FROM info ORDER BY hobbid DESC, id; -- 先按兴趣降序,再按 ID 升序
2. 区间判断与查询不重复记录
AND
和 OR
操作符 用于区间判断,DISTINCT
可以查询不重复记录。
示例:
SELECT * FROM info WHERE score > 70 AND score <= 90;
SELECT DISTINCT hobbid FROM info; -- 查询不重复的 hobbid
3. 分组查询
GROUP BY
结合聚合函数(如 COUNT
、SUM
、AVG
、MAX
、MIN
)可以对查询结果进行分组。
示例:
SELECT COUNT(name), hobbid FROM info GROUP BY hobbid; -- 按 hobbid 分组统计学生人数
SELECT COUNT(name), hobbid FROM info WHERE score >= 80 GROUP BY hobbid; -- 只统计分数大于 80 的学生人数
4. 限制查询条目
LIMIT
用于限制返回的记录行数。可以从任意偏移量开始,返回指定数量的记录。
示例:
SELECT * FROM info LIMIT 3; -- 返回前 3 行
SELECT * FROM info LIMIT 3, 3; -- 从第 4 行开始,返回 3 行
结合 ORDER BY
使用:
SELECT id, name FROM info ORDER BY id LIMIT 3; -- 按 ID 升序,返回前 3 行
5. 设置别名
AS
用于为表或字段设置别名,使 SQL 语句更简洁。
示例:
SELECT name AS 姓名, score AS 成绩 FROM info; -- 为字段设置别名
SELECT i.name, i.score FROM info AS i; -- 为表设置别名
6. 通配符
LIKE
和通配符(%
和 _
)用于模糊查询。
示例:
SELECT id, name FROM info WHERE name LIKE 'c%'; -- 名字以 c 开头
SELECT id, name FROM info WHERE name LIKE '%g%'; -- 名字包含字母 g
二、子查询
子查询是指在一个查询语句中嵌套另一个查询语句,常用于复杂查询场景。
示例:
SELECT name, score FROM info WHERE id IN (SELECT id FROM info WHERE score > 80); -- 查询分数大于 80 的学生
子查询也可以用于 INSERT
、UPDATE
和 DELETE
语句中:
INSERT INTO t1 SELECT * FROM info WHERE id IN (SELECT id FROM info); -- 将查询结果插入 t1 表
三、连接查询
连接查询用于从多个表中获取相关数据,常用的连接类型有内连接、左连接和右连接。
1. 内连接(INNER JOIN
)
只返回两个表中匹配的记录。
SELECT info.id, info.name FROM info INNER JOIN infos ON info.name = infos.name;
2. 左连接(LEFT JOIN
)
返回左表的所有记录,即使右表中没有匹配的记录。
SELECT * FROM info LEFT JOIN infos ON info.name = infos.name;
3. 右连接(RIGHT JOIN
)
返回右表的所有记录,即使左表中没有匹配的记录。
SELECT * FROM info RIGHT JOIN infos ON info.name = infos.name;
四、视图(VIEW
)
视图是数据库中的虚拟表,不存储真实数据,只是存储 SQL 查询的结果集。视图用于简化复杂查询、提高安全性等。
创建视图:
CREATE VIEW v_score AS SELECT * FROM info WHERE score >= 80;
视图可以像表一样使用,也可以修改原表的数据:
UPDATE v_score SET score = 120 WHERE name = 'tianqi'; -- 修改视图同时修改原表
五、NULL 值处理
IS NULL
和 IS NOT NULL
用于判断字段是否为空值。需要注意,NULL
值与 0
或空字符串不同。
示例:
SELECT * FROM info WHERE addr IS NULL; -- 查询地址为空的记录
总结
MySQL 提供了多种高级查询语句,使开发者能够更灵活地处理复杂的查询任务。从排序、分组到连接查询、视图创建等操作,这些语句都是数据库操作中不可或缺的工具。
示例:
SELECT * FROM info WHERE addr IS NULL; -- 查询地址为空的记录
总结
MySQL 提供了多种高级查询语句,使开发者能够更灵活地处理复杂的查询任务。从排序、分组到连接查询、视图创建等操作,这些语句都是数据库操作中不可或缺的工具。
通过合理使用这些高级语句,不仅可以提高查询效率,还可以优化数据库结构,提升业务系统的性能。