《數據庫原理與應用》(第三版)書後上機練習題——第六章

《數據庫原理與應用》(第三版)書後上機練習題——第六章


書上給的三個表的數據

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

題目錯誤的地方

  • 所有關於VB課的題目,這裏可以選擇把表中的Java課改成VB課,或者把題目中的VB課改爲Java課
    • 我這裏是把題目中的VB課改爲Java課來寫的
  • 18題: 查詢選課人數最多的前兩名學生的學號和選課門數,包括並列的情況。
    • 這裏不通順應該是: 選課門數最多的前兩名學生

答案

題1.查詢學生選課表中的全部數據。

SELECT * FROM SC

在這裏插入圖片描述

題2.查詢計算機系的學生姓名、年齡。

SELECT Sname,Sage FROM Student WHERE Sdept='計算機系'

在這裏插入圖片描述

題3.查詢成績在70 ~ 80 分之間的學生學號、課程號和成績。

SELECT Sno,Cno,Grade FROM SC WHERE Grade BETWEEN 70 AND 80

在這裏插入圖片描述

題4.查詢計算機系年齡在18 ~ 20且性別爲“男”的學生姓名、年齡。

SELECT Sname,Sage FROM Student 
	WHERE Sdept='計算機系' AND Sage BETWEEN 18 AND 20 AND Ssex='男'

在這裏插入圖片描述

題5.查詢“c01” 課程最高分。

SELECT MAX(Grade) AS c01的最高分 FROM SC WHERE Cno = 'c01'

在這裏插入圖片描述

題6.查詢計算機系學生的最大年齡和最小年齡。

SELECT MAX(Sage) AS 計算機系的最大年齡,MIN(Sage) AS 計算機系的最小年齡 FROM Student
	WHERE Sdept = '計算機系'

在這裏插入圖片描述

題7.統計每個系的學生人數。

SELECT Sdept,COUNT(*) AS 學生人數 FROM Student GROUP BY Sdept

在這裏插入圖片描述

題8.統計每個學生的選課門數和考試總成績,並按選課門數升序顯示結果(不包括沒選課的學生)。

SELECT Sno,COUNT(*) AS 選課門數,SUM(Grade) AS 總成績 FROM sc GROUP BY Sno
	ORDER BY COUNT(*) ASC

在這裏插入圖片描述

題9.查詢總成績超過200分的學生,列出學號、總成績。

SELECT Sno,SUM(Grade) AS 總成績 FROM SC
	GROUP BY Sno HAVING SUM(Grade)>200

在這裏插入圖片描述

題10.查詢選了“c02”課程的學生姓名和所在系。

SELECT Sname,Sdept FROM Student S JOIN SC ON S.Sno = SC.Sno
	WHERE Cno = 'c02'

在這裏插入圖片描述

題11.查詢成績80分以上的學生姓名、課程號和成績,並按成績降序排列結果。

SELECT Sname,Cno,Grade FROM Student S JOIN SC ON S.sno = SC.sno
	WHERE Grade>80 ORDER BY Grade DESC

在這裏插入圖片描述

題12.查詢哪些學生沒有選課,要求列出學號、姓名和所在系。

SELECT S.Sno,Sname,Sdept FROM Student S LEFT JOIN SC ON S.Sno = SC.Sno
	WHERE SC.Cno is NULL

在這裏插入圖片描述

題13.統計每門課程的選課人數,列出課程號和選課人數(包括沒人選的課程)。

SELECT C.Cno,COUNT(SC.Sno) AS 選課人數 FROM Course C LEFT JOIN SC
	ON C.Cno = SC.Cno GROUP BY C.Cno

在這裏插入圖片描述

題14.查詢與"VB""Java"在同一學期開設的課程的課程名和開課學期。

/*題目應該是 查詢與“Java"在同一學期開設的課程的課程名和開課學期。*/
SELECT Cname,Semester FROM Course
	WHERE Semester IN (
		SELECT Semester FROM Course WHERE Cname='Java')

在這裏插入圖片描述

題15.查詢與李勇年齡相同的學生的姓名、所在系和年齡。

SELECT Sname,Sdept,Sage FROM Student
	WHERE Sage IN (
		SELECT Sage FROM Student WHERE Sname='李勇')

在這裏插入圖片描述

題16.查詢計算機系年齡最小的兩名學生的姓名和年齡。

SELECT TOP 2 WITH TIES Sname,Sage FROM Student
	WHERE Sdept='計算機系'
	ORDER BY Sage ASC

在這裏插入圖片描述

題17.查詢"VB"“Java"成績最高的前兩名學生的姓名、所在系和"VB”"Java"成績,包括並列的情況。

/*題目應該是 查詢Java成績最高的前兩名學生的姓名,所在系和Java成績,包括並列情況*/
SELECT TOP 2 WITH TIES Sname,Sdept,Grade
	FROM Student S JOIN	SC ON	S.Sno=SC.Sno
	JOIN Course C ON C.Cno=SC.Cno
	WHERE Cname = 'Java'
	ORDER BY Grade DESC

在這裏插入圖片描述

題18.查詢選課人數門數最多的前兩名學生的學號和選課門數,包括並列的情況。

/*題目應該是 查詢選課門數組多的前兩名學生的學號和選課門數,包括並列情況*/
SELECT TOP 2 WITH TIES Sno,COUNT(*) AS 選課門數
	FROM SC GROUP BY Sno ORDER BY COUNT(*) DESC

在這裏插入圖片描述

題19.查詢學生人數最多的系,列出系名和人數。

SELECT TOP 1 Sdept,COUNT(*) AS 人數 FROM Student
	GROUP BY Sdept ORDER BY COUNT(*) DESC

在這裏插入圖片描述

題20.用子查詢實現如下查詢:

(1)查詢選修了"c01"號課程的學生的姓名和所在系。

SELECT Sname,Sdept FROM Student
	WHERE Sno IN (SELECT Sno FROM SC WHERE Cno = 'c01')

在這裏插入圖片描述

(2)查詢數學系成績在80分以上的學生學號、姓名、課程號和成績。

SELECT Student.Sno,Sname,Cno,Grade FROM Student JOIN SC ON Student.Sno=SC.Sno
	WHERE Student.Sno IN(SELECT Sno FROM Student WHERE Sdept = '數學系') 
	AND SC.Sno IN(SELECT Sno FROM SC WHERE Grade > 80)

在這裏插入圖片描述

(3)查詢計算機系考試成績最高的學生姓名。

SELECT Sname FROM Student JOIN SC ON Student.Sno=SC.Sno 
	WHERE Sdept = '計算機系' AND Grade = (SELECT MAX(Grade) FROM
		SC JOIN Student ON SC.Sno=Student.Sno WHERE Sdept = '計算機系') 

在這裏插入圖片描述

(4)查詢數據結構考試成績最高的學生姓名、所在系、性別和成績。

SELECT Sname,Sdept,Ssex,Grade FROM Student
	JOIN SC ON Student.Sno=SC.Sno
	JOIN Course ON SC.Cno=Course.Cno
	WHERE Cname='數據結構' AND Grade=(SELECT MAX(Grade)
		FROM SC JOIN Course ON SC.Cno=Course.Cno WHERE Cname='數據結構')

在這裏插入圖片描述

題21.查詢沒選"VB""Java"課程的學生姓名和所在系。

/*題目應該是 查詢沒選“Java*課程的學生姓名和所在系*/
SELECT Sname,Sdept FROM Student 
	WHERE Sno IN(SELECT Sno FROM SC JOIN Course ON SC.Cno = Course.Cno
		WHERE Cname != 'Java')

在這裏插入圖片描述

題22.查詢計算機系沒有選課的學生的姓名和性別。

SELECT Sname,Ssex FROM Student
 LEFT JOIN SC ON Student.Sno=SC.Sno
 WHERE Sdept='計算機系' AND SC.Sno IS NULL

在這裏插入圖片描述

題23.查詢計算機系考試平均成績最低的學生的姓名以及所選的課程名。

SELECT Sname,Cname FROM Student
	JOIN SC ON Student.Sno=SC.Sno
	JOIN Course ON SC.Cno=Course.Cno
	WHERE  Student.Sno IN
	(SELECT TOP 1 WITH TIES Student.Sno 
		FROM Student JOIN SC ON Student.Sno=SC.Sno
		WHERE Sdept='計算機系'
		GROUP BY Student.Sno ORDER BY AVG(Grade) ASC)

在這裏插入圖片描述

題24.查詢1 ~ 5學期中,選課人數最少的課程的課程名、開課學期和學分。

SELECT Cname,Semester,Credit FROM Course 
	WHERE Cno IN 
	(SELECT TOP 1 WITH TIES Cno FROM SC 
		WHERE Cno IN
		(SELECT Cno FROM Course
		 WHERE Semester
		 BETWEEN 1 AND 5)
		GROUP BY Cno ORDER BY COUNT(Sno) 
	)
	/*對1到5學期的課程號進行分組,根據學生數量排序(就是選課人數)*/

在這裏插入圖片描述

題25.查詢計算機系每個學生的考試情況,列出姓名、課程名和考試成績,並將查詢結果保存到一個新表中。新表名爲: Computer_Dept。

/*查詢計算機系每個學生的考試情況,列出姓名、課程名和考試成績,並將查詢結果保存到一個新表中。新表名爲: Computer_Dept*/
SELECT Sname,Cname,Grade INTO Computer_Dept
	FROM Student 
	LEFT JOIN SC ON Student.Sno=SC.Sno
	LEFT JOIN Course ON SC.Cno=Course.Cno
	WHERE Sdept='計算機系'

在這裏插入圖片描述
在這裏插入圖片描述

題26.創建一個新表,表名爲test _t,其結構爲(COLI, COL2, COL3),其中:

在這裏插入圖片描述

CREATE TABLE test_t(
	COL1 int,
	COL2 char(10) not NULL,
	COL3 char(10)
)
INSERT INTO test_t(COL2) VALUES('B1')
INSERT INTO test_t(COL1,COL2,COL3) VALUES(1,'B2','C2')
INSERT INTO test_t(COL1,COL2) VALUES(2,'B3')

在這裏插入圖片描述
在這裏插入圖片描述

題27.刪除考試成績低於50分的學生的選課記錄。

DELETE FROM SC WHERE Grade < 50

沒有低於50分的
在這裏插入圖片描述

題28.刪除沒有人選的課程。

DELETE FROM Course
	WHERE Cno NOT IN(SELECT Cno FROM SC)

刪了兩個課程 c03計算機網路,c08離散數學
在這裏插入圖片描述
在這裏插入圖片描述

題29.刪除計算機系"VB"“Java"成績不及格學生的"VB”"Java"選課記錄。

DELETE FROM SC
	FROM SC JOIN Student ON Student.Sno=SC.Sno
	JOIN Course ON Course.Cno=SC.Cno
	WHERE Cname='Java' AND Grade < 60 AND Sdept='計算機系'

沒有不及格的
在這裏插入圖片描述

題30.刪除"VB"“Java"考試成績最低的學生的"VB”"Java"選課記錄。

DELETE FROM SC
	FROM SC JOIN Course ON Course.Cno=SC.Cno
	WHERE Cname='Java' AND Grade=(
		SELECT MIN(Grade) FROM SC
		JOIN Course ON Course.Cno=SC.Cno
		WHERE Cname='Java')

刪除了9521103 c02 68 這條記錄
在這裏插入圖片描述
在這裏插入圖片描述

題31.將第2學期開設的所有課程的學分增加2分。

UPDATE Course SET Credit=Credit+2 
	WHERE Semester=2

高等數學學分從8變爲10
在這裏插入圖片描述
在這裏插入圖片描述

題32.將VBJava課程的學分改爲3分。

UPDATE Course SET Credit=3
	WHERE Cname='Java'

在這裏插入圖片描述
在這裏插入圖片描述

題33.將計算機系學生的年齡增加1歲。

UPDATE Student SET Sage=Sage+1
	WHERE Sdept='計算機系'

在這裏插入圖片描述
在這裏插入圖片描述

題34.將信息系學生的“計算機文化學”課程的考試成績加5分。

UPDATE SC SET Grade=Grade+5
	FROM SC JOIN Course ON Course.Cno=SC.Cno
	JOIN Student ON SC.Sno=Student.Sno
	WHERE Sdept = '信息系' AND Cname='計算機文化學'

9521102 c01 分數從82變爲87
在這裏插入圖片描述
在這裏插入圖片描述

題35.將選課人數最少的課程的學分降低1分。

UPDATE Course SET Credit=Credit-1
	WHERE Cno IN (
		SELECT TOP 1 WITH TIES Cno
		FROM SC GROUP BY Cno
		ORDER BY COUNT(Sno) ASC)

數據庫基礎、數據結構、操作系統的學分從4、5、4變爲3、4、3
在這裏插入圖片描述
在這裏插入圖片描述
如有大佬發現錯誤,還請指正,感謝!

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