查询增强

子句顺序

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……
FROM1 LEFT JOIN2
ON 条件

2、右外连接:右侧表完全显示

SELECT……
FROM1 RIGHT JOIN2
ON 条件

3、左表、右表是相对的

posted @   半条咸鱼  阅读(31)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示