这里写的都是经验和教训,以后会不断更新该博客
1.对MySQL中表的char字段查询时别忘记了单引号!
2.一旦用到聚合函数(group function)就要使用group by!(看到因为名就应该想到聚合函数,报错报的就是这个)
有一个特例:count(*),它会统计所有列数,不管三七二十一,但是遇到group by只会统计分组的每一个值
3.在做多表联查的时候,若两张表查询的字段有内容重合的时候,这时候不论指定这个字段是属于哪张表,查询出来的结果是一样的,唯有那些字段不是共有的时候才需要指定是哪张表的字段
4.使用avg()函数一般都是需要使用avg(ifnull())。不论使用上面聚合函数都应该特别注意IFNULL的使用,因为null值的存在很可能查询出来的结果并不是我们实际生活中想要的值,例如最小值中有null值,我们查询的时候不使用IFNULL则查询出来的结果忽略了null值,而现实生活中我们要用的结果应该是0值。
5.多体会体会连接,怎么连接的,连接起来是什么样子的表,内连接外连接的表是什么样子的,对于分步查询出来的表想不出来是什么样子的时候应当对分步查询出来的结果一一提交出来,先看看结果是什么
6.count(*)统计结果记录总数会自动忽略存在NULL的记录,count(字段)只能算出非NULL的总数
7.在from后面写一个select子查询可以使用子查询里的多个列,并且要将子查询join起来,则子查询的结果上里要添加上和外层查询一样的公共字段。而在where里写一个select子查询只能使用一个列里的所有数据,并且和in结合使用
8.能用union就用union,or是可以使用union代替的,提高效率
错误集锦
错误代码: 1052
Column 'deptno' in field list is ambiguous
说的是deptno这个属性在 属性列表中模棱两可,这就要求我们在做多表联查的时候应该指明这个变量属于哪个表
错误代码: 1054
Unknown column 't.deptno' in 'on clause'
clause:句子
一张表中的字段一旦起了别名就不能再使用原来的名字,应该改为t.dt
错误代码: 1242
Subquery returns more than 1 row
意思是指子查询的结果多于一行,外层查询的结果不能和子查询查出来的一张表比较,只能比较内层查询的一个值