当前位置:Gxlcms > 数据库问题 > 面试题--数据库

面试题--数据库

时间: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      

 

面试题--数据库

标签:

人气教程排行