史上最简单的 MySQL 教程(三十)「联合查询」
来源:互联网 发布:佳园软件 编辑:程序博客网 时间:2024/05/01 08:54
联合查询
联合查询:union
,将多次查询(多条select
语句)的结果,在字段数相同的情况下,在记录的层次上进行拼接。
基本语法
联合查询由多条select
语句构成,每条select
语句获取的字段数相同,但与字段类型无关。
- 基本语法:
select 语句1 + union + [union选项] + select 语句2 + ...;
- union 选项:与
select
选项一样有两种all
:无论重复与否,保留所有记录;distinct
:表示去重,为默认选项。
- union 选项:与
执行如下 SQL 语句,进行测试:
-- 联合查询,默认去重select * from classunion distinctselect * from class;-- 联合查询,保留所有记录select * from classunion allselect * from class;
如上图所示,展示了联合查询的两种形式。特别地,联合查询只要求字段数相同,而跟类型无关。执行如下 SQL 语句,进行测试:
-- 联合查询,字段数相同,类型不同select id, grade, room from classunion distinctselect name, age, id from student;
如上图所示,联合查询只保留了第一张表的字段,而不保留第二张表的字段。
意义
联合查询的意义有两种,分别为:
- 查询同一张表,按时需要不同,例如查询学生信息,要求男生按年龄升序排序,女生按年龄降序排序;
- 多表查询,多张表的结构是完全一样的,保持的数据结构也是一样的。
此外,如果数据量非常的大,就要进行分表(垂直分表和水平分表),而分表的依据无外乎数据多不多和常不常用。
排序
首先,让我们看看student
表中的数据:
接下来,给出一个需求:在student
表中,让男生按年龄升序排序,让女生按年龄降序排序。根据我们刚刚学到的联合查询,貌似很容易啊!执行如下 SQL 语句,进行测试:
-- 在 student 表中,按年龄,男升女降select * from student where gender = "boy" order by age ascunionselect * from student where gender = "girl" order by age desc;
如上图所示,呃,好吧,貌似出错啦!这是因为要想在联合查询中使用order by
,我们必须将select
语句用括号括起来。执行如下 SQL 语句,进行测试:
-- 在 student 表中,按年龄,男升女降(select * from student where gender = "boy" order by age asc)union(select * from student where gender = "girl" order by age desc);
如上图所示,啊,我们都已经将select
语句用括号括起来了,但是男生和女生也没有按我们的目的实现啊!好吧,这是因为要想在联合查询中使order by
生效,我们必须将其与limit
搭配使用,而limit
的限定数,我们设置为一个非常大的数即可。执行如下 SQL 语句,进行测试:
-- 在 student 表中,按年龄,男升女降(select * from student where gender = "boy" order by age asc limit 666)union(select * from student where gender = "girl" order by age desc limit 666);
如上图所示,显然,这次咱们的目的实现啦!
温馨提示:符号[]
括起来的内容,表示可选项;符号+
,则表示连接的意思。
———— ☆☆☆ —— 返回 -> 史上最简单的 MySQL 教程 <- 目录 —— ☆☆☆ ————
- 史上最简单的 MySQL 教程(三十)「联合查询」
- 史上最简单的 MySQL 教程(二十六)「连接查询(上)」
- 史上最简单的 MySQL 教程(二十七)「连接查询(下)」
- 史上最简单的 MySQL 教程(二十六)「连接查询(上)」
- 史上最简单的 MySQL 教程(二十七)「连接查询(下)」
- 史上最简单的 MySQL 教程(三十一)「子查询(上)」
- 史上最简单的 MySQL 教程(三十二)「子查询(下)」
- MySQL的联合查询
- MySql的联合查询
- mysql的联合查询
- 一个简单的Mysql的联合查询列子
- 史上最简单的 MySQL 教程(二十三)「数据的高级操作 之 查询(上)」
- 史上最简单的 MySQL 教程(二十四)「数据的高级操作 之 查询(中)」
- 史上最简单的 MySQL 教程(二十五)「数据的高级操作 之 查询(下)」
- 史上最简单的 MySQL 教程(二十三)「数据的高级操作 之 查询(上)」
- 史上最简单的 MySQL 教程(二十四)「数据的高级操作 之 查询(中)」
- MySQL 学习教程(十)【整理】-联合查询
- 史上最简单的 MySQL 教程(一)「数据库」
- protege4.3 本体构建及推理机racer的使用
- c/c++冒泡排序实现
- [jzoj]4246. 【五校联考6day2】san(高级套路题--拓扑序Dp)
- Frogger POJ
- test——图
- 史上最简单的 MySQL 教程(三十)「联合查询」
- 鼠标和滚轮方向判断
- 最大连续子数组问题
- 横向滑动的折线图
- iOS开发之修改分页控制器UIPageControl的图片和大小以及圆点之间的距离
- MySQL (七)
- 青蛙的约会 POJ
- iOS 最新上架心得
- 学生管理系统问题总结- 0.2