SQL点滴学习记录(一)

SQL的掌握程度对于开发很重要,尤其是涉及到多表大数据量的环境,很考验一个人的SQL能力,先实现后优化。


鉴于自己一般的sql水平,在此记录一些日常开发中学习的或即查即用的SQL


1.修改表结构,增加多个字段

alter table table_name 
add column column_name1 varchar(100) default null comment "注释",
add column column_name2 varchar(100) default null comment "注释";

2.left join、right join、inner join

1)最近用的比较多的left join,当两表左连接时,on连接字段在多条记录中都有时,会导致查询出多条重复记录,我的解决办法是group by 左表的主键id
2)left join 查询为null值
需求:A left join B,希望得到的是 那些 与B有关联,并且B满足 B.b < c的结果,以及没有与B关联的结果都出来
问题:当以右表的字段作为where条件时,并且没有关联数据时,查询为空
解决①

select  A.a,B.b from A left join B on A.c = b.c where  A.a > 0 and (B.b is null or  B.b < c);

解决②

select  A.a,B.b from A left join B on A.c = b.c and B.b < c where A.a > 0;

3.limit的分页查询使用

基本使用 limit ?,?
在筛选查询时,设置limit为第一页,而不是当前页,当limit的偏移量超出了符合掉件的总记录数,就会查询为空列表

4.You can’t specify target table ‘表名’ for update in FROM clause错误

5.update多表联查更新

UPDATE pro_base_knowledge
INNER JOIN (
SELECT
knowledge_id,
COUNT(0) nums
FROM
pro_base_timu_knowledge
GROUP BY
knowledge_id
 ) b ON pro_base_knowledge.id = b.knowledge_id
SET pro_base_knowledge.timu_num = b.nums

6.count(case when(条件) then 列名 else 列名 end)

sql利用上述标题的语法在一条语句中count出不同条件的值

select c_id,
count(case when status = 0 then 'state' end) as 成功,
count(case when status = 1 then 'state' end)  as 失败,
count(case when status = 2 then 'state' end) as 中断
from tableName
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值