MySQL 联合查询
概念 : 将多个查询结果放置到一个结果集的方法
- union 去除重复行
- union all 保留重复行
select * from studio where cl_id=1 -- 查询学生表中的班级编号的为1的学生
union all -- 保留重复行
select * from studio where ho_id=1 -- 查询宿舍编号为1的学生
union all
select * from studio where st_age>=30 -- 查询学生年龄大于30的学生
-- 返回结果
+-------+----------+--------+--------+------+--------------+-------+-------+----------------------------------+
| st_id | st_name | st_sex | st_age | z_id | st_tel | cl_id | ho_id | st_remark |
+-------+----------+--------+--------+------+--------------+-------+-------+----------------------------------+
| 5 | 刘小琴 | 0 | 18 | 9 | 1383838438 | 1 | 1 | 无语 |
| 9 | 陈小春 | 1 | 28 | 8 | 1383838438 | 1 | 1 | 不爱说话,有忧郁症 |
| 3 | 陆小凤 | 1 | 65 | 7 | 028-90909501 | 3 | 1 | 除了游戏,基本上是没有什么特长了 |
| 5 | 刘小琴 | 0 | 18 | 9 | 1383838438 | 1 | 1 | 无语 |
| 9 | 陈小春 | 1 | 28 | 8 | 1383838438 | 1 | 1 | 不爱说话,有忧郁症 |
| 2 | 林黛玉 | 0 | 45 | 8 | 13557571240 | 2 | 2 | 光晓得谈恋爱 |
| 3 | 陆小凤 | 1 | 65 | 7 | 028-90909501 | 3 | 1 | 除了游戏,基本上是没有什么特长了 |
| 4 | 西门吹水 | 1 | 67 | 9 | 1383838438 | 4 | 4 | 果然是个灌水狂人 |
| 6 | 黄平 | 1 | 31 | 12 | 1383838438 | 2 | 4 | 学习认真,就是不太玩笑 |
+-------+----------+--------+--------+------+--------------+-------+-------+----------------------------------+
注意事项
- 多个结果集的列数量一定要是相同的。
- 多个结果集中对应的列的数据类型必须是可以自动转换,比如tinyint类型可以隐式转换为int类型
查询不同表的列数据返回同一个结果集
select st_name,st_sex,'学生' as '角色' from studio
union
select te_name , te_sex,'教师' as '角色' from teacher
order by '角色'
-- 输出结果
+----------+--------+------+
| st_name | st_sex | 角色 |
+----------+--------+------+
| 林黛玉 | 0 | 学生 |
| 陆小凤 | 1 | 学生 |
| 西门吹水 | 1 | 学生 |
| 刘小琴 | 0 | 学生 |
| 黄平 | 1 | 学生 |
| 陈小春 | 1 | 学生 |
| 陈涛 | 1 | 教师 |
| 付贵 | 1 | 教师 |
| 佳伦 | 1 | 教师 |
| 谌燕 | 0 | 教师 |
| 李华全 | 1 | 教师 |
+----------+--------+------+
网友评论