DQL常见面试题
where 和 having 的区别

三个排序开窗函数的区别

left join 用where 筛选 和 用on筛选的区别
-
ON子句:用于定义连接条件,不会丢失左表的行。 -
WHERE子句:用于过滤连接后的结果集,可能会丢失左表中没有匹配的行
示例


WHERE 子句在连接操作之后应用,用于过滤结果集中的行。在这个查询中,WHERE b.salary > 5000 会过滤掉所有 b.salary 小于或等于 5000 的行,包括那些 b.salary 为 NULL 的行(即左表中的行在右表中没有找到匹配的行)。
union 和 union all 的区别
union
-
去重:
UNION会自动去除合并后结果集中的重复行。 -
性能:因为需要检查重复行,所以
UNION通常比UNION ALL执行得慢一些
union all
-
不去重:
UNION ALL会保留合并后结果集中的所有行,包括重复行。 -
性能:因为不需要检查重复行,所以
UNION ALL通常比UNION执行得快。
count(*) count(1) count(字段)的区别
-
COUNT(*):计算所有行数,包括列值为NULL的行。 -
COUNT(1):计算所有行数,与COUNT(*)类似 -
COUNT(列):计算指定列非NULL值的数量。
COUNT(*) 可能比 COUNT(列) 更快,因为它不需要检查列值是否为 NULL
COUNT(1) 和 COUNT(*) 的性能相似
a表有3条数据,b表有5条数。a left join b 最少多少条,最多多少条
最少3条>>b表没有与a表匹配的数据
最多15条>>b表的每一条数据都能和a表匹配上,产生笛卡尔积
DDL面试题
truncate 、 delete 、 drop的区别
1.drop删除对象,delete和truncate删除数据;
2.drop和truncate属于DDL(数据库定义语言); delete属于属于DML(数据库操作语言);
3.TRUNCATE只能删除全部数据,DELETE可以删除全部也可以条件删除;
4.性能: drop > TRUNCATE > DELETE;
5.数据恢复:
TRUNCATE的数据不能回滚也不能闪回,
DELETE掉的数据可以回滚(在事务未提交的前提下), 以及闪回查询
DROP可以闪回表,可以恢复数据,但是不能回滚(因为属于DDL);
如何避免索引失效
写文章-CSDN创作中心
什么时候使用索引
经常用于数据过滤的字段(where或having后面的字段)
经常用于表连接的字段,
经常用于排序或分组
需要保持唯一性的字段>>建唯一索引/主键索引
经常用于范围查询的字段>>索引可以加速查询范围的定位频繁查询但是更新较少的字段>>当表中的数据发生变化(插入、更新、删除)时,索引也需要同步更新, 频繁更新会降低索引性能
4. 分区表类型
5. 视图和表的区别



















