1、用一条SQL 语句 查询出`chengji`表,每门课都大于80 分的学生姓名。
name kecheng fenshu
张三 语文 81
张三 数学 75
李四 语文 76
李四 数学 90
王五 语文 81
王五 数学 100
王五 英语 90
sql&#xff1a;select distinct name from chengji where name not in (select name from chengji where fenshu<&#61;80 );
sql&#xff1a;select name from chengji group by name having min(fenshu)>80
思路&#xff1a;筛选出小于等于80的分数的名字&#xff0c;过滤掉小于等于80的分数的名字&#xff0c;再对名字进行去重
对名字进行分组&#xff0c;再判断大于80的分数
注&#xff1a;分组前&#xff0c;条件使用where&#xff1b;分组后&#xff0c;条件使用having&#xff1b;having后通常跟聚合函数
2、学生表 如下:
自动编号 学号 姓名 课程编号 课程名称 分数
1 2005001 张三 0001 数学 69
2 2005002 李四 0001 数学 89
3 2005001 张三 0001 数学 69
1)查询出重复的数据&#xff0c;且id为最大或者最小的
sql&#xff1a;select max(id) id,name,kecheng,fenshu from chengji group by fenshu,kecheng,name having count(name)>1
sql&#xff1a;select min(id) id,name,kecheng,fenshu fromchengji group by fenshu,kecheng,name having count(name)>1
2)删除除了自动编号不同, 其他都相同的学生冗余信息。
sql&#xff1a;
3、一个叫 team 的表&#xff0c;里面只有一个字段name, 一共有4 条纪录&#xff0c;分别是a,b,c,d, 对应四个球对&#xff0c;现在四个球对进行比赛&#xff0c;用一条sql 语句显示所有可能的比赛组合.
思路&#xff1a;先把team分成两个表&#xff1b;两表组合&#xff1b;去掉重复的组合
sql&#xff1a;select a.name,b.name from team a,team b where a.name
4、
问题&#xff1a;
1)查询张三的2019年生产产品的销售量(使用left join 关键字)
sql&#xff1a;
select
*
from sales
left join deal on sales.S&#61;deal.S
left join production on deal.P&#61;production.P
where Sname&#61;&#39;张三&#39; and Pdate like &#39;2019%&#39;;
2)查询生产日期2020年的一季度各产品的总销量
sql&#xff1a;
select
t2.P,t2.Pname, SUM(Voulume),t2.Pdate
from deal t1
left join production t2 on t1.P&#61;t2.P
where t2.Pdate like &#39;2020%&#39;
GROUP BY t2.P;
3)查询销售量最高的产品的销量(使用group by关键字)
sql&#xff1a;
select
a.P,a.Pname,max(a.sum1)
from
(
select
t1.P,t1.Pname,sum(Voulume) as sum1
from
production t1
left join deal t2 on t1.P&#61;t2.P
group by t1.P
) a;
5、表名&#xff1a;test_tb_grade
图1
图2
将图1转换为图2
sql&#xff1a;
SELECT id,user_name ,
MAX(CASE course WHEN &#39;数学&#39; THEN score ELSE 0 END ) 数学,
MAX(CASE course WHEN &#39;语文&#39; THEN score ELSE 0 END ) 语文,
MAX(CASE course WHEN &#39;英语&#39; THEN score ELSE 0 END ) 英语
FROM test_tb_grade
GROUP BY USER_NAME;
6、表名&#xff1a;ta
图1
图2
对图1表查成图2的结果
sql&#xff1a;select date_format(datas,&#39;%Y-%m-%d&#39;) &#39;日期&#39; from ta
7、查询出近一周/一月/一年的数据
select * from ta where DATEDIFF(now(),datas)<&#61;7;
select * from ta where DATEDIFF(now(),datas)<&#61;30;
select * from ta where DATEDIFF(now(),datas)<&#61;365;
8、请写出一个SQL来查询分数前五5的所有人&#xff1f;
select * from 分数表 order by 分数 desc limit 5;