首页 > 编程知识 正文

mysql原理面试题,mysql常见面试题

时间:2023-05-04 03:27:26 阅读:226532 作者:120

问:where和having有哪些区别?

答:(自己总结)

(1)“where”是一个约束声明,在查询数据库的结果返回之前对数据库中的查询条件进行约束,即在结果返回之前起作用,且“where”后面不能写“聚合函数”。(因为where是从磁盘中取数据的时候就要进行筛选(满足条件就放到内存中,不满足就扔回磁盘中)

(2)“having”是一个过滤声明,是在查询数据库结果返回之后进行过滤,即在结果返回值后起作用,并且“having”后面可以写“聚合函数”。(Having相当于分组之后进行筛选)

进阶问题:什么是聚合函数?

聚合函数就是例如SUM, COUNT, MAX, AVG等对一组(多条)数据操作的函数,需要配合group by 来使用。

进阶问题:where和having字句的执行顺序是什么?

答:where先于group by先于having。(可以从内存中加载的角度进行分析)

where子句在聚合前先筛选记录,也就是说作用在group by 子句和having子句前,而 having子句在聚合后对组记录进行筛选。

问:MySQL中左连接,有连接,内连接,外连接,交叉连接的区别?

答:

left join :左连接,返回左表中所有的记录以及右表中连接字段相等的记录。

right join :右连接,返回右表中所有的记录以及左表中连接字段相等的记录。

inner join: 内连接,又叫等值连接,只返回两个表中连接字段相等的行。

full join:外连接,返回两个表中的行:left join + right join。

cross join:结果是笛卡尔积,就是第一个表的行数乘以第二个表的行数。

进阶问题:在使用left join的时候,on和where的条件有什么区别呢?(比较重要!)

答:

1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

其实以上结果的关键原因就是left join,right join,full join的特殊性,不管on上的条件是否为真都会返回left或right表中的记录,full则具有left和right的特性的并集。 而inner join没这个特殊性,则条件放在on中和where中,返回的结果集是相同的。

问:你了解mysql中的case when语句吗?怎么用呢?

答:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。