在写sql语句的时候,经常出现的问题
1. age not in ( ‘2’, ‘3’, ‘4’)的时候,age列如果有null值,会查不出记录,
应该改成 (age not in (‘2’, ‘3’, ‘4’) or age is null )
2. order by 与group by的顺序,group by 比order by先执行,
select * from A group by age order by Date
3. A left join B 之后,如果B有两条满足条件,则会出现两条记录,可以 group by去分组
4. left join on 后and 和 where 的区别,
SELECT * FROM student a LEFT JOIN sc b ON a.Sid = b.Sid AND a.Sname=“赵雷”
结果:(left join 左连接,左表所有数据 拼接 右表符合on条件的数据。on后用and连接,‘a.Sid = b.Sid AND a.Sname="赵雷"’都作为on条件)
SELECT * FROM student a LEFT JOIN sc b ON a.Sid = b.Sid WHERE a.Sname=“赵雷”
结果:(当on后用where连接,where作为筛选条件,筛选**‘student a LEFT JOIN sc b ON a.Sid = b.Sid’的结果集**)
5.inner join和 from 后面两个表的区别
select * from tb1, tb2 where tb1.city = tb2.city and tb1.name = tb2.name
select * from tb1 inner join tb2 on tb1.city = tb2.city and tb1.name = tb2.name
这两种执行没啥区别,第一种是内连接的另一种写法,不过为了可读性,建议使用第二种写法
6.find_in_set函数
判断某个值是否在数据库的某个字段里面,字段里面的值用","隔开(‘00’,‘01’,‘02’)
select * from news_all n where (FIND_IN_SET(‘00’,n.GROUP_CODE) or FIND_IN_SET(‘11’,n.GROUP_CODE) or FIND_IN_SET(‘01’,n.GROUP_CODE));