数据库学习之MySQL (二十一)—— 分页查询 联合查询 LIMIT UNION 查询语句执行顺序总结

文章目录

    • 前言 ´・ᴗ・`
    • 分页查询
    • 联合查询
    • 查询语句执行顺序总结
    • 表的概念
    • 总结 ´◡`

前言 ´・ᴗ・`

  • 这一节学完 我们的DQL语言的学习就暂时画上句号
  • 本文将会为您带来…
    • 分页查询应该怎么运用
    • 联合查询应该怎么运用
    • 总结 DQL语句 并且归纳执行顺序
    • 表的概念再次复习

分页查询

其实非常简单
我们网页加载往往是动态 用户需要多少就加载多少 好比淘宝搜索匹配1000个商品,它只加载那一页,分页的输出信息,分页的访问数据库而不是一股脑儿全部加载完 以提升性能,降低数据库负担

那么有没有想过 分页访问数据库的方法呢?这就是分页查询 LIMIT

案例 我想查employees员工信息,每10条作为一页 访问数据库的语句该怎么写呢?
第一页这样:
数据库学习之MySQL (二十一)—— 分页查询 联合查询 LIMIT UNION 查询语句执行顺序总结_第1张图片
第二页这样的效果
数据库学习之MySQL (二十一)—— 分页查询 联合查询 LIMIT UNION 查询语句执行顺序总结_第2张图片

USE data1;
SELECT * FROM employees LIMIT 0,10; #第一页
SELECT * FROM employees LIMIT 10,10; #第二页
SELECT * FROM employees LIMIT 20,10; #第三页
SELECT * FROM employees LIMIT 30,10; #第四页

观察一下,语法形式: LIMIT [第一条数据的索引] [本次打印数据的数量]
第一条数据 如同这张表的employee_id 一样 是从0开始 类似C语言的数组索引

用的时候自己推一下就知道该怎么写了 没必要看什么公式2333

联合查询

说白了 就是对两个或者多个查询语句的结果 进行联合 汇总 生成最终结果
联合的方式无非就是数学的那些套路:

名称 英语
合集 UNION
合集不查重 UNION ALL
交集 intersect
差集 minus

这里先讲一下 UNION 和 UNION ALL
玩一下下面这个代码:

USE data1;
SELECT last_name,manager_id FROM employees WHERE manager_id=108 # 没分号结束哦 注意两个SELECT是一句话
UNION
SELECT last_name,manager_id FROM employees WHERE manager_id=114;

数据库学习之MySQL (二十一)—— 分页查询 联合查询 LIMIT UNION 查询语句执行顺序总结_第3张图片
那么如果这样呢?

USE data1;
SELECT last_name,manager_id FROM employees WHERE manager_id=108
UNION
SELECT * FROM employees WHERE manager_id=114;

报错,因为栏目不匹配 也就是属性列不相同 合不到一起去
所以注意 无论哪种联合查询都要匹配属性列
当然你会觉得这个挺没用的——因为WHERE AND都能实现

那如果多表时呢?比如合并一下男神女神咋样:
数据库学习之MySQL (二十一)—— 分页查询 联合查询 LIMIT UNION 查询语句执行顺序总结_第4张图片

USE data2;
SELECT 
  `id` AS 序号,
  `name` AS 名字 
FROM
  beauty 
UNION
SELECT 
  `id`,
  `boyName` 
FROM
  boys ;

现在有几个问题
1️⃣是栏目起别名 到底该怎么用
2️⃣ 如何叠加别的东西 比如排序 分页

1️⃣我们看个例子:

USE data2;
SELECT 
  `id` AS 序号,
  `name` AS 名字 
FROM
  beauty 
UNION
SELECT 
  `id` AS 号码,
  `boyName` AS 称呼 
FROM
  boys
ORDER BY 序号;

思考一下 为啥ORDER BY不跟着 号码
另外 属性的别名为啥是序号 名字 而不是 号码 称呼?

明显 合并之后的表格 别名是由第一个SELECT决定了的
2️⃣用下面代码就OK了

USE data2;
SELECT 
  `id` AS 序号,
  `name` AS 名字 
FROM
  beauty 
UNION
SELECT 
  `id` AS 号码,
  `boyName` AS 称呼 
FROM
  boys
ORDER BY 序号
LIMIT 0,10;

而对于UNION ALL实际上如果SELECT的条目有重复的话 UNION 会自动去重
你可以试试

USE data2;
SELECT 
  `id` AS 序号,
FROM
  beauty 
UNION
SELECT 
  `id`
FROM
  boys
ORDER BY 序号
LIMIT 0,10;

除了这点 性能上说,UNION ALL 要比UNION快很多,所以,不需要去重的话 其实UNION ALL是个更好的选择

那么其他差集 交集咋办?
不幸的是MySQL并不支持 但是显而易见 我们可以利用 [NOT] IN [NOT] EXIST INNER JOIN
来解决 因为貌似用的不多 这里不讲啦 感兴趣CSDN别人有写的 随便查查就有了

查询语句执行顺序总结

这一节作为 查询语句的最后一节
是时候来个大总结——语句的执行顺序问题 了解顺序有助于推理 debug
这是经典模板:

USE [数据库];
SELECT [查询栏目]
FROM [表1名] AS [表2别名]
[连接方式] JOIN [表2名] AS [表2别名]
ON [连接条件]
WHERE [筛选条件]
GROUP BY [分组字段]
HAVING [分组条件]
ORDER BY [排序字段]
LIMIT [数据起始索引] [数据数量]

或者你喜欢英文形式:

USE [db_name];
SELECT [column]
FROM [table1] AS [table1_name]
[join type] JOIN [table2] AS [table2_name]
ON [join condition]
WHERE [condition]
GROUP BY [grouping fields]
HAVING [grouping condition]
ORDER BY [order fields]
LIMIT [offset] [size]

顺序我们可以看图:

数据库学习之MySQL (二十一)—— 分页查询 联合查询 LIMIT UNION 查询语句执行顺序总结_第5张图片
注意 书写代码的顺序也是如此 否则可能会报错

表的概念

这就是一个复习
关系型数据库 MySQL

具体 英语 抽象理解概念 英语 数据库概念 英文
table 映射 mapping 关系 relation
column 属性 attribution 栏位 字段 field
row 对象实例 instance 记录 record

总结 ´◡`

这一节 我们终于完结了DQL语句 也就是SQL中的重中之重——查询
下面我们会好好收拾 DML 数据操作语言 还有DDL 数据定义语言 以及 TCL 事务操作语言
这些的学习都是并行不悖的
DML :数据库学习之MySQL (二十二)——DML 数据操作语言 INSERT UPDATE DELETE
DDL:数据库学习之MySQL (二十三)—— DDL(一) 概述 创建 修改 删除 库 表
TCL:数据库学习之MySQL (二十七)—— 事务 transaction 事务控制语言 TCL commit rollback

对了 这么重要的日子 我们需要庆祝一下 :)
数据库学习之MySQL (二十一)—— 分页查询 联合查询 LIMIT UNION 查询语句执行顺序总结_第6张图片
算了 还是笑着好看
数据库学习之MySQL (二十一)—— 分页查询 联合查询 LIMIT UNION 查询语句执行顺序总结_第7张图片
嗯咳咳 还要继续学习 下一站:
数据库学习之MySQL (二十二)——DML 数据操作语言 INSERT UPDATE DELETE

  • 本文专栏
    MySQL专栏
  • 我的其他专栏 希望能够帮到你 ( •̀ ω •́ )✧
    • 手把手带你学后端(服务端)
    • python这么火 想要深入学习python 玩一下简单的应用嘛?
      python应用
  • 谢谢大佬支持! 萌新有礼了:)

你可能感兴趣的:(MySQL)