联合查询:将多次查询(多条select语句),在记录上进行拼接(一般记录数增加,但是字段数不会增加)
这里需要注意的是,多条select 语句字段数必须一致,字段类型可以不同!
【1】 语法格式
select 1..
union[union 选项]
select 2..
union选项:与select选项一样,有两个
- All : 保留所有记录;
- Distinct : 去重;默认值
对记录去重:
select id ,age from p_user
UNION [DISTINCT]
SELECT id,age from p_user_2;
保留所有记录:
select id ,age from p_user
UNION ALL
SELECT id,age from p_user_2;
字段类型可以不一致
(select bookid ,card from book b limit 10)
union all
(select address,zipcode from people p limit 10)
【2】 联合查询的意义
1.查询同一张表但是需求不同;
如查询学生信息,男生身高升序,女生身高降序。
2.多表查询:
多张表的结构是完全一样的,保存的数据结构也是一样的;
多表结构不同,但是拥有相同的所需字段。
联合查询中的order by
-
如查询学生信息,男生身高升序,女生身高降序。
-
联合查询中,order by 不能直接使用,需要对查询语句使用括号才行;
-
若要order by生效,还必须使用limit搭配,可以直接limit 最大数。
(SELECT * from p_user where sex='femal' ORDER BY age DESC LIMIT 100)
UNION all
(select * from p_user where sex='male' ORDER BY age asc LIMIT 100 )
union、union all在优化中的实践
如果不考虑去重,那么在数量级比较大的时候建议使用union all。因为union all不考虑去重,性能会高一点。为什么说数量级这个问题呢?因为小数量级谈不上性能优化。