1. 程式人生 > >資料庫學習總結(六)——查詢練習題(1)

資料庫學習總結(六)——查詢練習題(1)

這篇部落格是我再學習資料庫過程中所練習的查詢操作題
供大家學習參考用
查詢所使用的資料庫是teach.sql,已上傳資源,下載後匯入在資料庫中即可,具體步驟文末貼圖
練習題可在匯入的資料庫中執行
建議先自己做再看答案,答案是我自己做的,不是唯一的,如果有問題也歡迎指出~

1、列出XSB表中所有記錄的XM、XB和ZY列。
select xm,xb,zy
form xsb;

2、顯示所有的專業名稱即不重複的專業列。
SELECT DISTINCT zy
from xsb;

distinct去掉重複值

3、顯示CJB表中成績在60到80之間的所有記錄。
select *
form cjb
where cj>=60 and cj<=80;

或者
select *
from cjb
where cj between 60 and 80;

4、顯示CJB表中成績為85,86或88的記錄。
select * from cjb where cj=85 or cj=86 or cj=88;
select * from cjb where cj in(85,86,88);

5、顯示XSB表中“計算機”專業或性別為“女”的同學記錄。

select * from xsb where zy=‘計算機’ or xb=‘女’;

6、顯示“計算機”專業的學生人數。
select count(*)
from xsb
where zy=‘計算機’;

sum(),avg(),max(),min(),count() 5個統計函式(聚合函式)
這5個函式不能直接在where的條件中使用

7、顯示CJB表中的最高分的學生學號和課程號。
select xh,kch
from cjb
where cj=(select max(cj) from cjb);

8、顯示課程號以“2”開頭的課程的課程號和平均分。
select kch as 課程號 ,avj(cj) as 平均分
from cjb
where kch like ‘2%’

模糊查詢
% 任意一串字元 _任意一個字元

9、顯示課程號中姓劉”,三個字學生的所有資訊
select * from xsb where xm like ‘劉__’

10、顯示CJB表中至少有5名學生選修的課程的平均分數。
select kch,ayg(cj)
from cjb
goup by kch
having count(*)>=5;

having 篩選分組 去掉分組之後不滿足條件的行,和group by 巢狀使用

11、統計學生表中有多少學生
select count(*)
from xsb;

12、統計各專業男女生的數
select zy,xb,count(XH)
from xsb
GROUP BY zy,xb;

13、請統計各專業姓王的男女生人數,只顯示人數多於2人的
select zy,xb,count(xh)
from xsb
where xm like ‘王%’
group by zy,xb,
having count(*)>=2;

如果有group by,則select 後只能放分組相關的列及統計函式,否則會出錯或無意義;
如果有統計函式,且統計函式值可能多於一個,此時必須用group by
order by 對查詢結果排序

在分組前篩選 where 分組後篩選 having

14、顯示CJB表中各門課程的平均分數
SELECT kch,avg(cj)
from cjb
GROUP BY kch;

15、顯示最低分大於70,最高分小於90 的XH。
select xh
from cjb
group by xh
having max(cj)<=90 and min(cj)>=70;

SELECT xh,MAX(cj),MIN(cj),COUNT(*)
from cjb
group by xh
having max(cj)<=90 and min(cj)>=70;

16、查詢所有學生的 XM、 KCH和CJ列,只顯示前面10條記錄。
select xsb.xh,xm,kch,cj – 對學號要設定是哪個表,否則是一個模糊值 會出錯
from cjb,xsb
where cjb.xh=xsb.xh
limit 0,10; – 0可以省略 偏移量

17、查詢所有學生的 XM、 KCM和CJ列。
select xm,kcm,cj
from cjb,kcb,xsb
where cjb.xh=xsb.xh and cjb.kch=kcb.kch;

18、查詢所有學生的 XM、 KCM和CJ列,按kcm,cj排序
select xm,kcm,cj
from cjb,kcb,xsb
where cjb.xh=xsb.xh and cjb.kch=kcb.kch – 第一列相等 再按第二列排序
ORDER BY KCM,cj DESC;

19、列出“計算機”專業學生的總平均分。
select avg(cj)
from cjb,xsb
where cjb.xh=xsb.xh and zy=‘計算機’;

20、顯示成績高於學號為“101101”、課程號為“101”的成績的所有成績記錄。
select *
from cjb
where cj>(select cj from cjb where xh=‘101101’ and kch=‘101’);

21、顯示出和學號為“101101”的同學同年出生的所有學生的 XH、XM和 CSSJ列。
select xh,xm,cssj
from xsb
where year(cssj)=(SELECT year(cssj) from xsb where xh=‘101101’);

子查詢,先查詢括號內部的語句

22、顯示“軟體工程”課程的學生成績。
SELECT cjb.*
FROM cjb,kcb
WHERE kcb.kch=cjb.KCH and kcm=‘軟體工程’;

23、顯示選修人數多於5人的課程名稱。

SELECT kcm
from cjb,kcb
where cjb.kch=kcb.KCH
GROUP BY kcb.KCH
HAVING COUNT(*)>=5

KCH前加kcb ,否則是模糊查詢
如果有group by,則select 後只能放分組相關的列及統計函式,否則會出錯或無意義;
如果有統計函式,且統計函式值可能多於一個,此時必須用group by

24、顯示 “101”課程成績高於“102”課程成績的同學的學號、姓名和成績。
資料庫是逐行掃描,不在一行要放入一行內
學號相等得兩份成績表交叉相連
SELECT xsb.xh,xm,a.cj,b.cj
from xsb,cjb a,cjb b
where xsb.xh=a.xh and a.xh=b.xh and a.kch=101 and b.kch=102 and a.cj>b.cj;

SELECT xsb.xh,xm,a.cj 101成績,b.cj 102成績
from xsb,cjb a,cjb b
where xsb.xh=a.xh and a.xh=b.xh and a.kch=101 and b.kch=102 and a.cj>b.cj;

25、列出沒有學生選修的課程的基本資訊。

select * from kcb where not EXISTS(SELECT * FROM cjb where kch=kcb.KCH)

SELECT * from kcb
where kch not in (SELECT DISTINCT KCH from cjb)
外連線,把原本捨棄的資訊儲存下來 right join 右連線,以右邊的表為主,全部儲存下來

26、請查詢所有課程的課程號即其選課人數
SELECT kcb.KCH,COUNT(xh)
FROM cjb
RIGHT JOIN kcb on cjb.kch=kcb.KCH
GROUP BY kch;
ORDER BY COUNT(xh);

27、檢索所有學生都選修的課程名稱。

SELECT kcm from kcb
where not EXISTS ( SELECT * FROM xsb WHERE not EXISTS (SELECT * from cjb where xh=xsb.xh AND kch=KCb.kch))

匯入資料庫操作
1.開啟MySQL,右擊任意一個數據庫,選擇新建資料庫,資料庫名為teach
2下載我的資源裡上傳得到teach.mysql,右擊選擇開啟方式,選擇記事本的方式開啟,複製裡面的全部內容
teach.mysql點這裡
3.點選這個新建的資料庫,在選單欄裡選擇 工具——命令列介面
在這裡插入圖片描述
4.在開啟的窗口裡把剛剛複製的文字貼上上去,然後敲回車,出現如下圖情況則成功,重新整理一下資料庫裡面會有題目中涉及的資料表
在這裡插入圖片描述
5.然後CTRL+Q 新建查詢編輯器就可以進行查詢操作啦