查询增强
子句顺序
SELECT 列名1, 列名2……
FROM 表名
WHERE ……
GROUP BY 列名1, 列名2 ……
HAVING ……
ORDER BY 列名1,列名2 ……
LIMIT start, rows;
排序
1、ORDER BY 子句
2、ASC(ascend):升序,默认
3、DESC(descend):降序
4、多列排序
(1)可以使用不在 SELECT 列表中的列排序
(2)在对多列进行排序的时,首先排序的第一列必须有相同的列值,才会对第二列进行排序
(3)如果第一列数据中所有值都是唯一的,将不再对第二列进行排序
分页查询
SELECT 列名1, 列名2,……
FROM 表名
LIMIT start, rows;
1、表示从第 start + 1 行开始,取出并显示 rows 行
2、start:位置偏移量,指示MySQL从哪一行开始显示,可选参数,如果不指定,从 0 开始,将会从表中的第一条记录开始,第一条记录的位置偏移量为 0,第二条记录的位置偏移量是 1,以此类推
3、rows:行数,指示返回的记录条数
4、MySQL 8.0 中可以使用 LIMIT 3 OFFSET 4 ,获取从第 5 条记录开始后面的 3 条记录,和 LIMIT 4, 3; 返回的结果相同
5、分页显式公式:(当前页数 - 1) * 每页条数
6、作用
(1)减少数据表的网络传输量
(2)提升查询效率
多表查询
1、(例)查询两张表的规则
(1)从第一张表,取出每一行,依次与第二张表每一行进行组合,并返回结果(包含两表的所有列)
(2)总共返回记录数 = 第一张表的行数 * 第二张表的行数
(3)该表称为笛卡尔集,可以使用 WHERE 过滤多余记录
2、多个表的列名不重名时,才可以直接写列名,否则需要指定某个表的某个列:表名.列名
3、外层查询使用 * 会显示多表的所有列,即笛卡尔集
4、避免出现笛卡尔集:多表查询条件 >= 表的总个数 - 1
自连接
SELECT 表别名1.列名1 AS 列别名1, 表别名2.列名2 AS 列别名2
FROM 表名1 表别名1, 表名2 表别名2
1、在同一张表的连接查询,即同一张表看作两张表
2、表名可以指定别名
3、不同表存在重复列名,需要指定别名
子查询 / 嵌套查询
1、嵌入在其它 sql 语句中的 SELECT 语句
2、单行子查询:只返回一行数据的子查询语句
3、多行子查询:返回多行数据的子查询,使用关键字 IN、DISTINCT 去重
4、WHERE 型子查询:把内层查询作外层查询的比较条件
5、FROM 型子查询:内层查询结果作为临时表,供外层再次查询
(1)临时表需要定义别名
(2)外层查询结果、WHERE 子句中,表名.列名,区分不同表的重名列
6、子查询操作符
(1)ALL:比较子查询返回值,所有比较i结果为 true,才符合
(2)ANY:比较子查询返回值,只要任意一个比较结果为 true,就符合
(3)SOME:与 ANY 功能相同,相当于 ANY 别称
(4)IN:比较子查询返回值,只要与其中一个值相等,就符合
(5)ALL、ANY、SOME 必须搭配比较操作符使用,即比较操作符 + ALL / ANY / SOME
7、多列子查询
SELECT ……
FROM ……
WHERE(字段1, 字段2,……) = (
SELECT 字段1, 字段2,……
FROM……
WHERE……);
(1)查询返回多个列数据
(2)外层查询 WHERE 子句中的字段,必须对应内层查询 SELECT 中的字段
(3)表.* 可以显示表的所有列,简化 sql 语句
表复制 / 蠕虫赋值 / 自我复制数据
1、创建海量数据,对某个 sql 语句进行效率测试
INSERT INTO 表名
SELECT * FROM 表名
2、表数据去重
(1)创建临时表 temp,temp 结构与 table 相同
CREATE TABLE temp LIKE table;
(2)使用 DISTINCT 去重 table 的记录,把记录复制到 temp
(3)DISTINCT 位置必须在所有字段名之前,表示对所有字段的联合去重
INSERT INTO temp SELECT DISTINCT * FROM table;
(4)清除 table 的记录,temp 的记录复制到 table,删除 temp;或删除 table,temp 改名为 table
DELETE table;
INSERT INTO table SELECT * FROM temp;
DROP TABLE temp;
DELETE table;
ALTER TABLE temp RENAME TO table;
合并查询
1、合并多个 SELECT 语句的结果
2、集合操作符号
(1)UNION ALL:取两个结果的并集,不会去重记录
(2)UNION:取两个结果的并集,并去重记录
MySQL 表外连接
1、左外连接:左侧表完全显示
SELECT……
FROM 表1 LEFT JOIN 表2
ON 条件
2、右外连接:右侧表完全显示
SELECT……
FROM 表1 RIGHT JOIN 表2
ON 条件
3、左表、右表是相对的
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战