count 主键和 count 非主键结果会有不同吗?
首先,需要知道count()函数是返回表中某个列的非null值的数量。
所以,如果非主键不能为null,则结果相同。
如果非主键可以为null,则结果可能不同。
count(*)、count(1)、count(主键)、count(非主键)效率排行
count(*) = count(1) > count(主键) > count(非主键)
count(*) 相当于 count(0) = count(1)
count(主键) 是对主键进行遍历,相比于count(*)和count(1)多了一步读取主键值。所以相对会慢一点。
count(非主键) 会采用全表扫描的方式来技术。所以效率最差。
MySQL内连接、外连接有什么区别?
内连接和外连接都用于连表查询。
内连接是只返回两个表匹配的数据行,外连接可以返回两个表匹配和不匹配的数据行。
外连接又分为左外连接和右外连接:
左外连接:返回左表中的所有行和右表中匹配的行。如果右表中没有匹配的行,则用null值填充。
右外连接:返回右表中的所有行和左表中匹配的行。如果左表中没有匹配的行,则用null值填充。
外连接时 on 和 where 过滤条件区别?
on 用于指定两个表之间的关联条件。
where 用于对连接后的结果进一步筛选。
having 和 where 的区别
where 是在 group by 之前进行筛选。
having 是在 group by 之后进行筛选,可以使用聚合函数。
delete、drop、truncate 有什么区别?
delete 是DML语言,只删除指定数据。而且,delete 删除数据只是给数据打上删除标签,目的是为了空间复用,所以delete删除数据后,磁盘大小不会缩减。
drop 是删除表结构和表中所有的数据,truncate 是只删除表中所有的记录,表结构不会被删除,drop 和 truncate 删除的数据都是不可以回滚的,并且删除表会立即释放磁盘空间。
从删除表的性能来看,drop > truncate > delete。
Union 和 Union all 的区别
union:合并完需要去重
union all :合并完不去重
数据库三大范式是什么?
第一范式:要求所有属性都具有不可再分的性质。
第二范式:要求解决部分依赖问题
第三范式:要求解决传递依赖问题