一、下面進行一些比較典型的查詢例子:
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')