20条 sql优化

1.inner join 和 outer join差别

  1. inner join 是2张表的合集
  2. outer join 像left join /right join 等
  3. left outer join 如果第二张表的数据有多条,left 表也会有多条记录

2. join 和 union

  1. union 是对两张结构一样表的结果集返回
  2. join 是根据条件返回结果集
  3. union 会去重

3. union 和 union all 直接的区别

  1. union 会去重
  2. union all 不会去重,会返回重复的
  3. union all 效率高

4. having 和 where

1.如果没有用group by ,where 和 having 是等价的
2.如果使用了group ,where 在group by 之前过滤,having 对group by 之后数据进行过滤

5. union minus intersect之间的区别?

  1. minus 返回本表减去两个表都有的数据
  2. intersect是两个表都有的数据
  3. join 根据条件返回结果集,不好说,情况较多

6. 为什么要self join?

将继承结构变成扁平结构,例如部门



EMPLOYEE MANAGER

Pete Hash 
Darl Hash 
Inno Hash 
Robo Hash 
Tomiti Robo 
Anno Robo 
Privy Robo 
Meme Pete 
Bhuti Tomiti 
Hash 


7. 强一张表行/列转换]

  1. 简单的可以直接用excel 直接换了
  2. 复杂的例如要求和的,根据具体的业务来编写代码

8. 不使用rownum 来生成 row number

SELECT name, sal, (SELECT COUNT(*)  FROM EMPLOYEE i WHERE o.name >= i.name) row_num
FROM EMPLOYEE o
order by row_num


NAME SAL ROW_NUM

Anno 80 1 
Bhuti 60 2 
Darl 80 3 
Hash 100 4 
Inno 50 5 
Meme 60 6 
Pete 70 7 
Privy 50 8 
Robo 100 9 
Tomiti 70 10 

9. 查出前5条记录


select top 5 * from xxx

-----------------------

SELECT * 
FROM EMP
WHERE ROWNUM <= 5;


10. 写出rownum和 row_number()之间的区别
  1. 用于 over 语句中
  2. rownum 好像是oracle的特殊语句

11. ROWNUM, RANK ,DENSE_RANK的不同?

ROWNUM 是行号,连续的不间断的,是唯一的不重复否的


-- rank --------------


name Sal RANK_BY_SAL

Hash 100 1 
Robo  100 1 
Anno  80 3 
Darl  80 3 
Tomiti  70 5 
Pete 70 5 

-- DENSE_RANK --------------
name Sal DENSE_RANK_BY_SAL
Hash 100 1 
Robo  100 1 
Anno  80 2 
Darl  80 2 
Tomiti  70 3 
Pete 70 3 

参考文档

Top 20 SQL Interview Questions with Answers

    原文作者:静心多想
    原文地址: https://www.jianshu.com/p/700dd16500d1
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞