面试题"/>
ETL面试题
1.索引和主键的区别
1.主键一定含有唯一索引
2.一张表可以有多个索引,但只能有一个主键
3.主键列不能为空,但索引列可为空什么是唯一索引:即该字段没有重复的数据
unique key约束就是通过唯一索引实现的
2.drop、delete、truncate的区别
delete:DML语句,会触发触发器和事务,只删除数据,不删除表结构
truncate和drop:DDL语句,不会触发触发器和事务,truncate只删除表数据,不删除结构,drop会将表的所有数据、结构等全部删除
从执行效率上看:drop>truncate>delete
3.现emp表中含有重复数据,请根据题目完成下列问题
(1)查询出所有的重复数据
(2)查询出多余的数据
(3)删除多余的数据
(4)查询去重
(1) select * from emp where empno in (select empno from emp group by empno having count(1)>1 ;
(2) select * from emp where rowid not in (select max(rowid) from emp group by empno having count(1)>=1);
(3) delete * from emp where rowid not in (select max(rowid) from emp group by empno having count(1)>=1);
(4) select * from emp where rowid in (select max(rowid) from emp group by empno having count(1)>=1);
4.where和having的区别
1.where的过滤发生在分组前,而having发生在分组后
2.where后可以跟的操作符having都可以跟,而having后还可以跟聚合函数
5.exists和in的区别
当主查询数据量远超子查询时,用in
当子查询数据量远超著查询时,用existsin的判断机制是判断选项内的所有内容是否有可满足的
在使用in时,子查询会先全部执行一遍,这时候in再开始匹配
所以当子查询数据量庞大的时候使用in会非常耗时
这样相对于exists的 block nested loop 的嵌套循环能力来说
会显得很无助,exists的查询效率会优于in.在使用exists时,程序会首先执行主查询,然后从外层查询出的一条数据传给内层
这时候子查询判断是否满足子查询的条件,如果满足则返回true并将外部这条数据保留下来,反之返回false.
当外层数据远超内层数据时,exists的嵌套循环能力将会黯然失色,这时候用in更合适此外exists 会避免 not in 和null值带来的问题
当有null值时,in无法正确搜索
6.分析函数和聚合函数的区别
聚合函数和分析函数都可以对数据进行分组并进行相应的聚合运算
1.返回值数量不同
聚合函数使用的函数都只返回的单行数据
而分析函数可以很好的解决这个问题,分析函数在分组时会进行分区
在进入下一个分区的时候会结束并重新初始化计算对每行单独计算返回,完美的解决了聚合函数的软肋问题
2.聚合函数分组使用的是group by 而分析函数使用的是partition by
7.事务的四大特性
ACID
A:atom 原子性:指事务操作的完整性,即当事务执行时要么是完整执行的,要么是完全不能被执行
c
更多推荐
ETL面试题
发布评论