MYSQL学习(十一)
组合查询
将多条查询语句产生的结果集合并起来的查询方式称为合并查询
或者组合查询
。
设计单表的组合查询
最简单的方法,可以使用OR
操作符连接搜索条件:
1 | SELECT m1 FROM t1 WHERE m1 < 2 OR m1 > 2; |
使用UNION
连接查询语句:
1 | SELECT m1 FROM t1 WHERE m1 < 2 UNION SELECT m1 FROM t1 WHERE m1 > 2; |
建议:使用 UNION 连接起来的各个查询语句的查询列表中位置相同的表达式的类型应该是相同的。
涉及不同表的组合查询
1 | SELECT m1, n1 FROM t1 WHERE m1 < 2 UNION SELECT m2, n2 FROM t2 WHERE m2 > 2; |
包含或去除重复的行
默认情况下,使用UNION
查询到的合并数据会自动去除重复的行;可以使用UNION ALL
操作符保留记录。
1 | SELECT m1, n1 FROM t1 UNION ALL SELECT m2, n2 FROM t2; |
组合查询中的ORDER BY
和LIMIT
子句
在组合查询语句的末尾加上ORDER BY
与LIMIT
子句实现排序与条数筛选。
由于最后的结果集展示的列名是第一个查询中给定的列名,所以 ORDER BY 子句中指定的排序列也必须是第一个查询中给定的列名(别名也可以)。
1 | SELECT m1, n1 FROM t1 UNION SELECT m2, n2 FROM t2 ORDER BY m1 DESC LIMIT 2; |
加上小括号,使语句更加清晰:
1 | (SELECT m1,n1 FROM t1) UNION (SELECT m2, n2 FROM t2) ORDER BY m1 DESC LIMIT 2; |
单独在小括号中的查询语句中加入排序是没有效果的,但是可以和LIMIT
一起使用:
1 | (SELECT m1, n1 FROM t1 ORDER BY m1 DESC LIMIT 1) UNION (SELECT m2, n2 FROM t2 ORDER BY m2 DESC LIMIT 1); |
也可以在小括号中的查询语句中使用LIMIT
筛选:
1 | (SELECT m1, n1 FROM t1 LIMIT 1) UNION (SELECT m2, n2 FROM t2 LIMIT 1); |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment