1.左右连接区别?
left join(左连接)查询的包括左表的所有记录和右表中交集的记录,如果右表中的没有对应数据,按null补充。
right join(右连接) 查询的包括右表的所有记录和左表中交集的记录。如果左表中的没有对应数据,按null补充。
2.having和where的区别?
(1)having 后面可以进行聚合函数的判断,where后不可以跟聚合函数
(2)where在分组之间进行限定,如果不满足条件,则不参与分组。having在分组之后,如果不满足条件,则不会被查询出来。
3.char和varchar的区别?
区别一:定长和变长
char表示定长,长度固定,varchar表示变长,即长度可变。char如果插入的长度小于定义长度时,则用空格填充;carchar小于定义长度时,还是按实际长度存储,插入多长就存多长。
char因为长度固定,char的读取速度还是要比varchar要快得多,方便程序的存储于查找,但是会占据多余的空间。
区别二:存储的容量不同
对char来说,最多能存放的字符个数255。
对varchar呢,最多能存放65532个字符。varchar的最大有效长度由最大行大小和使用的字符集确定。
4.三范式是什么?
第一范式:第一范式每一列不可再拆分,列为原子性
第二范式:第二范式在满足第一范式的基础上所有列完全依赖于主键列
第三范式:第三范式就是满足第二范式的前提下,表中的每一列都直接依赖于主键,而不是通过其他的列来间接依赖于主键。
5.说一下sql是怎么优化的?