1.inner join 和 outer join差别
- inner join 是2张表的合集
- outer join 像left join /right join 等
- left outer join 如果第二张表的数据有多条,left 表也会有多条记录
2. join 和 union
- union 是对两张结构一样表的结果集返回
- join 是根据条件返回结果集
- union 会去重
3. union 和 union all 直接的区别
- union 会去重
- union all 不会去重,会返回重复的
- union all 效率高
4. having 和 where
1.如果没有用group by ,where 和 having 是等价的
2.如果使用了group ,where 在group by 之前过滤,having 对group by 之后数据进行过滤
5. union minus intersect之间的区别?
- minus 返回本表减去两个表都有的数据
- intersect是两个表都有的数据
- 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. 强一张表行/列转换]
- 简单的可以直接用excel 直接换了
- 复杂的例如要求和的,根据具体的业务来编写代码
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()之间的区别
- 用于 over 语句中
- 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