【数据分析】SQL面试题整理

笔试题链接
SQL笔试题链接1:用户留存问题
SQL笔试题链接2

1、SQL语言类别
  1. 数据查询语言DQL
  2. 数据操纵语言DML:INSERT,UPDATE,DELETE
  3. 数据定义语言DDL:CREATE,ALTER,DROP
  4. 数据控制语言DCL:GRANT,REVOKE,DENY
  5. 事务控制语言TCL
2、MYSQL和SQL Server区别
3、数据库设计步骤
  1. 需求分析:数据字典
  2. 概念结构设计:概念模型(E-R模型→UML图表示)
  3. 逻辑结构设计:将概念模型转换为与数据库管理系统产品所支持的数据模型相符合的逻辑结构
  4. 物理结构设计:存取方法和存储结构(B+树,hash索引,聚簇存取)
  5. 数据库实施
  6. 数据库运行和维护
4、数据库的三级模式
  • 模式:ER图所揭⽰的字段或表间的逻辑
  • 外模式:用户可以操作的视图,例如具体的数据库和表
  • 内模式:数据库的物理结构和存储方式
5、数据库的二级映像
  • 外模式/模式映像:使数据具有较高的逻辑独立性
  • 模式/内模式映像:使数据具有较高的物理独立性
6、如何优化MySQL
  1. 优化查询语句
  2. 优化索引、事务处理
  3. 优化数据表结构
  4. 优化系统配置
  5. 优化硬件
7、索引
  • 索引是帮助MySQL高效获取数据的数据结构
(1)什么情况下索引被设置了但是无法使用?
  1. where子句中用or来连接没有使用索引的条件
  2. where子句中对索引列进行计算或判空
  3. where子句中使用%开头的Like语句
  4. 数据类型出现隐式转化
(2)索引对数据库系统的负面影响:
  1. 占用物理空间,降低正常的运行速度
  2. 降低维护速度
(3)建立索引的原则
  1. 在频繁使用、缩小查询范围的字段上建立
  2. 基于查询创建索引,而不是基于表
8、如何优化SQL查询语句
  1. 对查询进行优化,首先应尽量避免全表扫描,在比较频繁使用的字段上面加上索引
  2. 尽量避免在 where 子句中对索引列使用计算或者进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描
  3. Where子句中:where表之间的连接必须写在其他 Where 条件之前,那些可以过滤掉最大数量
  4. 用EXISTS替代IN,用NOT EXISTS替 NOT IN
9、事务
  • 数据库事务是一个数据库操作序列,这些操作要么全部成功,要么全部失败,是一个不可分割的工作单位。
(1)事务的ACID原则
  • 原子性:事务中的操作要么全执行完,要么全部都不做
  • 一致性:事务开始前和结束后,数据库的完整性约束没有被破坏
  • 隔离性:各事务之间的操作不受影响
  • 持久化:事务一旦成功提交成功后,所有这个事务对数据库的更改全部被保留下来
10、视图
  • 视图可以当成表格来用,可以将查询结果存储在视图中,后面可以直接调用这个视图数据,或者继续在视图中查询。
(1)视图的优点
  1. 简化查询
  2. 安全性
  3. 更易维护(如果没有视图,所有的查询直接指向原始数据表,一旦更改原表设计,就要相应的更改该表所有的查询语句。如果有视图,我们只需要修改视图的查询语句,使其能保持原有查询结果即可,基于视图的查询我们就不需要再修改了。)
11、触发器Trigger
  • 触发器是在插入、更新、删除语句前后自动执行的一堆SQL代码,用于对表执行特定操作。比如在交易表中添加一条交易,在日志表中就自动添加一条记录,这样就要用到触发器。
12、事件

-事件是在特定时刻自动执行任务,操作数据库。比如我们想在每天都执行删除过期日志,就可以创建一个事件,在每天特定时刻来自动执行这一操作。

13、char和varchar
  • 存储方面:CHAR 列长度固定,存储为创建表时声明的长度,如果插入的长度小于定义长度,则可以用空格进行填充。而varchar是一种可变长度的类型,当插入的长度小于定义长度时,插入多长就存多长。
  • 查找效率:char查找效率会很高,varchar查找效率会更低
14、四个范式
  1. 第一范式:每个属性不可再分
  2. 第二范式:不存在非主属性对码的部分依赖
  3. 第三范式:不存在非主属性对码的传递依赖
  4. 修正的第三范式:不存在主属性对码的传递依赖
15、函数
  • concat(字段A,字段B) 合并两个字段

  • limit(n,m) 跳过m条语句返回前n条

  • case when(条件1)then(结果1)
    when(条件2)then(结果2)
    else(结果3)
    end as(列名)

  • DATE_ADD(Date,interval -rn day)

  • TIMESTAMPDIFF(DAY,atime,btime)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WinniToast

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值