環境: win10系統,MySQL數據庫
一、題目:
已知關係:
S(Sno,Sname,Sage,Ssex,Sdept)
C(cno,cname,cpno,ccredit)
SC(sno,cno,grade)
(其中sno:學號;sname:姓名;Ssex:性別;Sdept:系別;Sage :年齡;cno:課程號;cname:課程名;
cpno: 直接先行課;ccredit:學分;grade:成績),
1、查詢“CS”系學生的基本信息;
2、查詢“CS”系學生年齡不在19到21之間的學生的學號、姓名;
3、查詢學生中的最大年齡;
4、找出“計算機”系年齡最大的學生,顯示其學號、姓名;
5、統計各系學生的人數,結果按升序排列;
6、按系統計各系學生的平均年齡,結果按降序排列;
7、查詢選修了“1”或“2”號課程的學生學號和姓名;
8、查詢選修了課程名爲“數據庫”且成績在60分以下的學生的學號、姓名和成績;
9、查詢選修了3門以上課程的學生學號;
10、查詢選修課程成績至少有一門在80分以上的學生學號;
11、查詢選修課程成績均在80分以上的學生學號;
12、查詢選修課程平均成績在80分以上的學生學號
13、找出各系年齡最大的學生,顯示其學號、姓名;
二、創建學生,課程,選課表並插入數據
#創建學生表:包括學號,姓名,年齡,性別,院系
CREATE TABLE S
(
Sno VARCHAR(7)PRIMARY KEY,
Sname VARCHAR(10)NOT NULL,
Sage INT,
Ssex VARCHAR(2),
Sdept VARCHAR(20)DEFAULT('計算機系')
);
#創建課程表:包括課程號,課程名,選修課課程號,學分
CREATE TABLE C
(
Cno VARCHAR(10)PRIMARY KEY,
Cname VARCHAR (20)NOT NULL,
Cpno VARCHAR(10),
Ccredit INT
);
#創建選課表
CREATE TABLE SC
(
Sno VARCHAR(7),
Cno VARCHAR(10),
grade INT,
FOREIGN KEY (sno) REFERENCES S(Sno),
FOREIGN KEY (cno) REFERENCES C(cno)
);
# 向學生表S中插入數據
INSERT INTO s
(Sno,Sname,Sage,Ssex,Sdept)
VALUE
("10001","張三",20,'男','計算機'),
("10002","李梅",19,'女','計算機'),
("10003","王五",18,'男','CS'),
("10004","小明",21,'男','計算機'),
("10006","黎明",18,'男','藝術表演'),
("10008","傑克",21,'男','計算機'),
("10005","小紅",22,'女','CS');
# 向課程表C中插入數據
INSERT INTO c
(Cno,Cname,Cpno,Ccredit)
VALUE
("1","離散數學",NULL,5),
("2","線性代數",'3',6),
("3","高等數學",NULL,4),
("4","數據結構",'3',6),
("5","操作系統",'1',4),
("6","數據庫",'4',5);
DELETE FROM c;
# 向選課表SC中插入數據
INSERT INTO sc
(Sno,Cno,grade)
VALUE
("10001","1",70),
("10001","6",56),
("10003","4",90),
("10003","5",83),
("10004","1",75),
("10004","3",90),
("10008","1",70),
("10008","5",70),
("10008","6",88),
("10002","1",85),
("10002","6",89);
三、習題答案
# 1、查詢“CS”系學生的基本信息;
SELECT * FROM s WHERE Sdept="CS";
# 2、查詢“CS”系學生年齡不在19到21之間的學生的學號、姓名;
SELECT Sno,Sname,Sage,Sdept
FROM s
WHERE (Sage<19 OR Sage>21) AND Sdept = "CS";
# 3、查詢學生中的最大年齡;
SELECT MAX(Sage) FROM s;
# 4、找出“計算機”系年齡最大的學生,顯示其學號、姓名;
SELECT Sno, Sname
FROM s
WHERE Sdept="計算機"
ORDER BY Sage DESC
LIMIT 1;
# 5、統計各系學生的人數,結果按升序排列;
SELECT Sdept,COUNT(*) '人數'
FROM s
GROUP BY Sdept
ORDER BY '人數';
# 6、按系統計各系學生的平均年齡,結果按降序排列;
SELECT Sdept,AVG(Sage) '平均年齡'
FROM s
GROUP BY Sdept
ORDER BY '平均年齡'DESC;
# 7、查詢選修了“1”或“2”號課程的學生學號和姓名;
SELECT s.Sno,Sname
FROM s JOIN sc ON s.`Sno`=sc.`Sno`
WHERE Cno IN ("1","2");
# 8、查詢選修了課程名爲“數據庫”且成績在60分以下的學生的學號、姓名和成績;
SELECT s.Sno,Sname
FROM s JOIN sc ON s.`Sno`=sc.`Sno`
JOIN c ON sc.`Cno`=c.`Cno`
WHERE Cname ="數據庫" AND grade<60;
# 9、查詢選修了3門以上課程的學生學號;
SELECT sno
FROM sc
GROUP BY sc.Sno
HAVING COUNT(*)>=3;
# 10、查詢選修課程成績至少有一門在80分以上的學生學號;
SELECT sno
FROM sc
GROUP BY sc.Sno
HAVING MAX(grade)>80;
# 11、查詢選修課程成績均在80分以上的學生學號;
SELECT sno
FROM sc
GROUP BY sc.Sno
HAVING MIN(grade)>80;
# 12、查詢選修課程平均成績在80分以上的學生學號
SELECT sno
FROM sc
GROUP BY sc.Sno
HAVING AVG(grade)>80;
# 13、找出各系年齡最大的學生,顯示其學號、姓名;
SELECT sno,Sname
FROM s JOIN
(SELECT Sdept,MAX(Sage) Sage
FROM s
GROUP BY Sdept) a
ON (s.`Sage`=a.Sage AND s.`Sdept` = a.Sdept) ;
如果對你有幫助,請點個贊。