面试题首页 > MySQL面试题

SQL语句面试题

001MySQL中聚合函数有哪些?

如sum. avg, count, max, min等

002MySQL的函数中有关String的操作?

1、LOCATE(substr , str ):返回子串 substr 在字符串 str 中第一次出现的位置,如果字符substr在字符串str中不存在,则返回0;
2、POSITION(substr IN str ):返回子串 substr 在字符串 str 中第一次出现的位置,如果字符substr在字符串str中不存在,与LOCATE函数作用相同;
3、LEFT(str, length):从左边开始截取str,length是截取的长度;
4、RIGHT(str, length):从右边开始截取str,length是截取的长度;
5、SUBSTRING_INDEX(str ,substr ,n):返回字符substr在str中第n次出现位置之前的字符串;
6、SUBSTRING(str ,n ,m):返回字符串str从第n个字符截取到第m个字符;
7、REPLACE(str, n, m):将字符串str中的n字符替换成m字符;
8、LENGTH(str):计算字符串str的长度。

003count(1)、count(*) 与 count(列名) 的区别?

1)从含义上讲,count(1) 与 count(*) 都表示对全部数据行的查询。count(*) 包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL ;count(1) 用1代表代码行,在统计结果的时候不会忽略列值为NULL 。
2)执行效率上:
count(*)对行的数目进行计算,包含NULL,count(1)这个用法和count(*)的结果是一样的。如果表没有主键,那么count(1)比count(*)快。表有主键,count(*)会自动优化到主键列上。如果表只有一个字段,count(*)最快。
count(1)跟count(主键)一样,只扫描主键。count(*)跟count(非主键)一样,扫描整个表。明显前者更快一些。
count(1)和count(*)基本没有差别,但在优化的时候尽量使用count(1)。

004MySQL的时间函数有哪些?

1) DATE_FORMAT(time, ‘%Y-%m-%d’) 或者 “%H:%i:%S”
2) extract(year from “2019-12-25 22:47:37”) 从时间提前年/月/日
3) datediff(end_date,start_date) 时间做差,得到日期day
4) timestampdiff( day, end_date,start_date) 时间做差,可选择返回的时间类型

005MySQL中int(20)和char(20)以及varchar(20)的区别?

1、 int(20) 表示字段是int类型,显示长度是 20
2、 char(20)表示字段是固定长度字符串,长度为 20
3、 varchar(20) 表示字段是可变长度字符串,长度为 20

006SQL语句中关键字的执行顺序?

SQL的执行顺序:from---where--group by---having---select---order by

007SQL的生命周期?

第一步:客户端请求
第二步:连接器(负责跟客户端建立连接、获取权限、维持和管理连接)
第三步:查询缓存(存在缓存则直接返回,不存在则执行后续操作)
第四步:分析器(对SQL进行词法分析和语法分析操作)
第五步:优化器(主要对执行的sql优化选择最优的执行方案方法)
第六步:执行器(执行时会先看用户是否有执行权限,有才去使用这个引擎提供的接口)
第七步:去引擎层获取数据返回(如果开启查询缓存则会缓存查询结果)

008drop、delete与truncate的区别?

delete和truncate只删除表的数据不删除表的结构
速度,一般来说: drop> truncate >delete
delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效,如果有相应的trigger,执行的时候将被触发.
 truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.

009UNION与UNION ALL的区别?

● Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
● Union All:对两个结果集进行并集操作,包括重复行,不进行排序;
● UNION ALL的效率高于 UNION

目录

返回顶部