ETL面试题

这是一篇关于数据库面试的综合整理,涵盖了索引与主键的区别、数据删除操作的对比、去重查询及处理、SQL查询语句的选择以及事务特性、视图作用、SQL优化等核心知识点,还涉及到数据仓库架构、存储过程、索引原理与优化、数据清洗等内容,是数据库工程师必备的面试准备资料。
摘要由CSDN通过智能技术生成

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
当子查询数据量远超著查询时,用exists

in的判断机制是判断选项内的所有内容是否有可满足的
在使用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࿱
  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值