继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

MySQL语句使用 笔记(1)

麦芒
关注TA
已关注
手记 48
粉丝 172
获赞 904

1、查询tids字段包含的多个tid,tid是用分隔,例如tid111tid222。
重点:用like+and

select * from tag where tids like 't111' and tids like 't222' ;

2、查询书籍下有多少个章节。
重点:用group by+聚合函数

select bid,count(cid) cnt from chapter where group by bid order by cnt desc;

3、查询每笔提现大于100的作者。
思路:先查出类型为作者提现的数据,再按作者分组,筛选出最小提现金额大于100的作者。
重点:HAVING子句可以让我们筛选成组后的各组数据

SELECT DISTINCT author FROM (SELECT * FROM author_money WHERE type=2) AS cn GROUP BY author HAVING min(amount)>100 ;

4、表一test1 id fgid source,表二test2 id fgid cuid,test1的fgid和source是一一对应的,求每个source的cuid的个数。
重点:左连接,返回左表中的所有行,即使右表中没有相应的匹配行。

SELECT test1.source,count(test2.cuid) FROM `test1` LEFT JOIN test2 ON test1.fgid=test2.fgid GROUP BY source;

5、学生表student id name class score,找出每门功课都大于80分的同学名字
思路1:先找到每个学生所有科目中最低分数,再取最低分大于80的同学就能得到每门科目都大于80的同学

SELECT name FROM(SELECT name,min(score) minscore FROM `student` GROUP BY `name`) a WHERE minscore>80;

思路2:找到成绩小于80的数据,再从中筛选出不在内学生名字去重

SELECT DISTINCT name FROM student WHERE name not in (SELECT `name` from student WHERE score<80)

6、学生表student id name class score,查询除id外,name、class、socre相同的冗余数据。
注意:①不能对同一张表同时进行更新和查询操作,比如查询的结果作为更新表的筛选条件,只能把查询出来额数据作为一个第三方表。②分组一般需要和聚合函数使用。
思路:按名字、科目、分数分组查询最小值的id表a,再删除不在表a里的id数据

DELETE from student WHERE id NOT IN (SELECT * FROM(SELECT min(id) FROM `student` GROUP BY name,class,score) a);

7、插入数据

insert into 表名 values(值1,值2....)
insert into 表名 (列1,列2....) values(值1,值2....)

8、一张score表有id、name、course、score四个字段,需要删除掉里面重复的数据,保留id最小的数据
思路:①查出所有重复的数据的name course和重复数据分组中最小的id

delete from score where name,course in (select name,course,score from score group by name,course,score having count(*)>1) and id not in (select min(id) from score group by name,course,score having count(*)>1)

9、查询学生成绩表,根据学生成绩对查询结果添加新的一列,score>=60显示pass,score<60显示fail

select *,result=(case when score>=60 then 'pass' else 'fail' end) from score 
打开App,阅读手记
2人推荐
发表评论
随时随地看视频慕课网APP