數據庫嵌套查詢和集合查詢

一、下面進行一些比較典型的查詢例子:
1.在教學管理JXGL數據庫中進行如下操作:
(1) 求選修了數學的學生的學號和姓名。

SELECT DISTINCT SC.Sno,Sname
FROM STUDENT,SC
WHERE Cno='2'AND SC.Sno=STUDENT.Sno;

(2) 求數學課程成績高於李勇的學生學號和成績。

SELECT DISTINCT SC.Sno,Grade
FROM STUDENT,SC
WHERE Cno='2'AND Grade>=92 AND SC.Sno=STUDENT.Sno;

(3) 求其他系中年齡小於計算機系年齡最大者的學生。

SELECT *
FROM STUDENT
WHERE Sage>ALL(SELECT Sage
FROM STUDENT
WHERE Sdept='CS'
)AND Sdept!='CS';

(4) 求其他系中比計算機系學生年齡都小的學生。

SELECT *
FROM STUDENT
WHERE Sage<ANY(SELECT Sage
FROM STUDENT
WHERE Sdept='CS'
)AND Sdept!='CS';

(5) 求選修了數學課的學生姓名。

SELECT Sname
FROM STUDENT
WHERE EXISTS(SELECT *
FROM SC
WHERE Cno='2' AND SC.Sno=STUDENT.Sno);

(6) 求沒有選修數學課的學生姓名。

SELECT Sname
FROM STUDENT
WHERE NOT EXISTS
	( SELECT *
	  FROM SC
      WHERE Cno='2' AND SC.Sno=STUDENT.Sno); 

(7) 查詢選修了全部課程的學生的姓名。

SELECT Sname
FROM STUDENT
WHERE NOT EXISTS( SELECT *
FROM COURSE
WHERE NOT EXISTS(SELECT *
FROM SC
WHERE STUDENT.Sno=SC.Sno AND COURSE.Cno=SC.Cno));

(8) 求至少選修了學號爲“95002”的學生所選修的全部課程的學生學號和姓名。

SELECT Sno,Sname
FROM STUDENT
WHERE EXISTS(SELECT *
FROM SC
WHERE Sno=STUDENT.Sno AND Cno IN(SELECT Cno
FROM SC
WHERE Sno='95002'));

(9) 求選修各門課的人數及平均成績。

SELECT Cno,COUNT(*)AS 人數,AVG(Grade)AS 平均成績
FROM SC
GROUP BY Cno;

(10)求選修課程在2門以上且都及格的學生號及總平均分。

SELECT Sno,AVG(Grade)AS 總平均分
FROM SC
GROUP BY Sno
HAVING COUNT(Cno)>=2 AND MIN(Grade)>='60';

(11)求95級學生中選修課程在2門以上且都及格的學生號及總平均分,並按平均成績排序。

SELECT Sno,AVG(Grade)AS 總平均分
FROM SC
WHERE EXISTS(SELECT *
FROM STUDENT
WHERE NOT EXISTS(SELECT *
FROM SC
WHERE Sno=SC.Sno  AND Cno>='60'))
GROUP BY Sno
HAVING COUNT(Cno)>='2';

(12)統計每個人及格的成績的平均值,及格的門數,結果按平均成績降序,及格門數降序排列。

SELECT AVG(Grade)AS 平均值,COUNT(*)AS 及格的門數
FROM SC
WHERE Grade>='60'
GROUP BY Sno
ORDER BY 平均值DESC, 及格的門數DESC;

(13)統計所有課程均及格學生的平均成績,及格的門數,結果按平均成績降序,及格門數降序排列。

SELECT Sno,AVG(Grade)AS 平均成績,COUNT(*)AS 及格的門數
FROM SC
WHERE EXISTS(SELECT *
FROM STUDENT
WHERE NOT EXISTS(SELECT *
FROM SC
WHERE Sno=STUDENT.Sno))
AND Grade>='60'
GROUP BY Sno
ORDER BY 平均成績DESC, 及格的門數DESC;

2.在供應系統GYXT數據庫中進行如下操作:
(1) 求供應工程J1紅色零件的供應商號SNO。

SELECT DISTINCT SPJ.SNO
FROM SPJ
WHERE PNO IN(
	SELECT PNO
	FROM P
	WHERE COLOR='紅')AND JNO='J1'
 

在這裏插入圖片描述
(2) 求零件供應總量在1000種以上的供應商名字。

SELECT SNAME
FROM S
WHERE SNO IN(
	SELECT SNO
	FROM SPJ
	GROUP BY SNO
	HAVING SUM(QTY)>='1000')

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章