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

前言 ´・ᴗ・`

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

分页查询

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

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

案例 我想查employees员工信息,每10条作为一页 访问数据库的语句该怎么写呢?
第一页这样:
在这里插入图片描述
第二页这样的效果
在这里插入图片描述

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;

在这里插入图片描述
那么如果这样呢?

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

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

那如果多表时呢?比如合并一下男神女神咋样:
在这里插入图片描述

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

具体英语抽象理解概念英语数据库概念英文
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 (二十二)——DML 数据操作语言 INSERT UPDATE DELETE

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值