写sql需要注意的点

在写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));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值