MYSQL之——查詢練習題


1、用一條SQL 語句 查詢出`chengji`表,每門課都大於80 分的學生姓名。

name   kecheng   fenshu
張三     語文         81
張三     數學         75
李四     語文         76
李四     數學         90
王五     語文         81
王五     數學         100
王五     英語         90

sql:select distinct name from chengji where name not in (select name from chengji where fenshu<=80 );

sql:select name from chengji group by name having min(fenshu)>80

思路:篩選出小於等於80的分數的名字,過濾掉小於等於80的分數的名字,再對名字進行去重

   對名字進行分組,再判斷大於80的分數

注:分組前,條件使用where;分組后,條件使用having;having后通常跟聚合函數

 

2、學生表 如下:
自動編號    學號       姓名    課程編號    課程名稱    分數
1             2005001   張三     0001          數學      69
2             2005002   李四     0001          數學      89
3             2005001   張三     0001          數學      69
1)查詢出重復的數據,且id為最大或者最小的

sql:select max(id) id,name,kecheng,fenshu from chengji group by fenshu,kecheng,name having count(name)>1

sql:select min(id) id,name,kecheng,fenshu fromchengji group by fenshu,kecheng,name having count(name)>1

2)刪除除了自動編號不同, 其他都相同的學生冗余信息。

sql:

 

3、一個叫 team 的表,里面只有一個字段name, 一共有4 條紀錄,分別是a,b,c,d, 對應四個球對,現在四個球對進行比賽,用一條sql 語句顯示所有可能的比賽組合.

思路:先把team分成兩個表;兩表組合;去掉重復的組合

 sql:select a.name,b.name from team a,team b where a.name<b.name;

 

4、

 問題:

1)查詢張三的2019年生產產品的銷售量(使用left join 關鍵字)

sql:

select
*
from sales
left join deal on sales.S=deal.S
left join production on deal.P=production.P
where Sname='張三' and Pdate like '2019%';

 

2)查詢生產日期2020年的一季度各產品的總銷量

sql:

select
t2.P,t2.Pname, SUM(Voulume),t2.Pdate
from deal t1
left join production t2 on t1.P=t2.P
where t2.Pdate like '2020%'
GROUP BY t2.P;

 

3)查詢銷售量最高的產品的銷量(使用group by關鍵字)

sql:

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=t2.P
group by t1.P
) a;

 

5、表名:test_tb_grade

圖1

圖2

將圖1轉換為圖2

sql:

SELECT id,user_name ,
MAX(CASE course WHEN '數學' THEN score ELSE 0 END ) 數學,
MAX(CASE course WHEN '語文' THEN score ELSE 0 END ) 語文,
MAX(CASE course WHEN '英語' THEN score ELSE 0 END ) 英語
FROM test_tb_grade
GROUP BY USER_NAME;

 

6、表名:ta

圖1

圖2

對圖1表查成圖2的結果

sql:select date_format(datas,'%Y-%m-%d') '日期' from ta

 

7、查詢出近一周/一月/一年的數據

select * from ta where DATEDIFF(now(),datas)<=7;

select * from ta where DATEDIFF(now(),datas)<=30;

select * from ta where DATEDIFF(now(),datas)<=365;

 

8、請寫出一個SQL來查詢分數前五5的所有人?

select * from 分數表 order by 分數 desc limit 5;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM