时间:2021-07-01 10:21:17 帮助过:2人阅读
都是将多个slelect语句的结果作为一个整体显示。
区别在于:union会自动压缩多个结果集合中的重复结果(系统会自动将重复的元组去掉),而union all则将所有的结果全部显示出来(保留重复元祖),不管是不是重复。
Union因为要进行重复值扫描,所以效率低。如果合并没有刻意要删除重复行,那么就使用Union All
两个要联合的SQL语句,字段个数必须一样,而且字段类型要“相容”(一致)。
2. 分页
用rownum。
注意:
select * from (select t.*,rownum row_num from tableA t order by t.id) tableB where tableB.row_num between 1 and 10
上面的语句会先生成rownum 后执行order by 子句,因而排序结果根本不对。
调整为
select * from (select a.*,rownum row_num from (select * from tableA t order by t.id desc) a ) b where b.row_num between 1 and 10
这下排序对了,但是sql语句还可以进一步优化:
SELECT * FROM ( SELECT A.*, ROWNUM RN FROM --这个A是实际的sql查询 (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 10 ) WHERE RN >= 1
面试题--数据库
标签: