設計一個學生成績數據庫,該庫包含學生,老師,課程和成績等信息並完成后面的練習。
學生:學號(SNO)、姓名(SNAME)、性別(SSEX)、生日(SBIRTHDAY )、所屬班級(SCLASS )
課程:課程編號(CNO)、課程名(CNAME)、授課老師(TNO)
成績:學號(SNO)、課程編號(CNO)、得分(DEGREE)
老師:教師編號(TNO)、教師姓名(TNAME)、性別(TSSEX)、生日(TBIRTHDAY)、職稱(TITLE)、單位科室(DEPART)
要求:
CREATE DATABASE grades;
CREATE TABLE IF NOT EXISTS student(
sno TINYINT UNSIGNED KEY NOT NULL,
sname VARCHAR(20) NOT NULL,
ssex ENUM('男','女') DEFAULT '男',
sbirthday DATE,
sclass TINYINT NOT NULL
);
INSERT student VALUES(1,'ONE',DEFAULT,120101,1),(2,'two','女',120202,2),(3,'three','女',120303,3),(4,'four','女',120404,1),(5,'five',DEFAULT,120505,1),(6,'six',DEFAULT,120606,1),(7,'seeven',DEFAULT,120707,2),(8,'eight',DEFAULT,120808,2),(9,'nine',DEFAULT,120909,1),(10,'ten',DEFAULT,121010,1);
CREATE TABLE IF NOT EXISTS class(
cno TINYINT UNSIGNED NOT NULL UNIQUE,
cname VARCHAR(20) NOT NULL,
tno TINYINT NOT NULL,
FOREIGN KEY(tno) REFERENCES teacher(tno)
);
INSERT class VALUES(1,'chinese',1),(2,'math',2),(3,'englidh',3),(4,'physics',4),(5,'chemical',4),(6,'biology',4),(7,'music',5),(8,'gym',6),(9,'nature',7),(10,'politics',8);
CREATE TABLE IF NOT EXISTS grades(
sno TINYINT UNSIGNED NOT NULL,
cno TINYINT UNSIGNED NOT NULL,
degree TINYINT
);
INSERT grades VALUES(1,1,40),(1,2,50),(1,3,60),(1,4,80),(1,5,80),(2,6,96),(2,7,96),(2,9,96),(3,8,96),(3,10,96);
CREATE TABLE IF NOT EXISTS teacher(
tno TINYINT UNSIGNED KEY NOT NULL,
tname VARCHAR(20) NOT NULL,
tsex ENUM('男','女') DEFAULT '男',
tbirthday DATE,
title VARCHAR(10),
depart VARCHAR(10)
);
INSERT teacher VALUES(1,'wang',DEFAULT,120101,'teacher','teach'),(2,'li',DEFAULT,120202,'teacher','teach'),(3,'zhang','女',120303,'teacher','teach'),(4,'peng',DEFAULT,120505,'teacher','polic'),(5,'mozart',DEFAULT,120606,'teacher','polic'),(6,'strog',DEFAULT,120707,'teacher','teach'),(7,'leave',DEFAULT,120808,'teacher','teach'),(8,'xidada',DEFAULT,120909,'teacher','manager');
1、 查詢Student表中的所有記錄的Sname、Ssex和Class列。
SELECT sname,ssex,sclass FROM student;
2、 查詢教師所有的單位即不重復的Depart列。
SELECT DISTINCT depart FROM teacher GROUP BY depart;
3、 查詢Student表的所有記錄。
SELECT * FROM student;
4、 查詢grades表中成績在60到80之間的所有記錄。
SELECT * FROM grades WHERE degree BETWEEN 60 AND 80;
5、 查詢grades表中成績為85,86或88的記錄。
SELECT * FROM grades WHERE degree=85 OR degree=80 OR degree=86;
6、 查詢Student表中“95031”班或性別為“女”的同學記錄。
SELECT * FROM student WHERE sclass=85 OR ssex='女';
7、 以Class降序查詢Student表的所有記錄。
SELECT * FROM student ORDER BY sno DESC;
8、 以Cno升序、Degree降序查詢grades表的所有記錄。
SELECT * FROM grades ORDER BY cno ASC,degree DESC;
9、 查詢“95031”班的學生人數。
SELECT count(*) FROM class WHERE cno=95031;
10、查詢grades表中的最高分的學生學號和課程號。
SELECT max(degree),sno,cno FROM grades;
11、查詢‘3-105’號課程的平均分。
SELECT AVG(degree) FROM grades WHERE cno BETWEEN 3 AND 105;
12、查詢grades表中至少有5名學生選修的並以3開頭的課程的平均分數。
SELECT AVG(degree) FROM grades WHERE sno>4 AND cno REGEXP '^3';
13、查詢最低分大於70,最高分小於90的Sno列。
SELECT sno FROM grades WHERE degree>70 AND degree<90;
14、查詢所有學生的Sname、Cno和Degree列。
SELECT s.sname,c.cno,g.degree FROM student AS s JOIN grades AS g ON g.sno=s.sno JOIN class AS c ON g.cno=c.cno;
15、查詢所有學生的Sno、Cname和Degree列。
SELECT s.sno,c.cname,g.degree FROM student AS s JOIN grades AS g ON g.sno=s.sno JOIN class AS c ON g.cno=c.cno;
16、查詢所有學生的Sname、Cname和Degree列。
SELECT s.sname,c.cname,g.degree FROM student AS s JOIN grades AS g ON g.sno=s.sno JOIN class AS c ON g.cno=c.cno;
17、查詢“95033”班所選課程的平均分。
SELECT AVG(degree) FROM grades WHERE cno=95031;
18、假設使用如下命令建立了一個grade表:
create table grade(
low int,
upp int,
rank char(1)
);
現查詢所有同學的Sno、Cno和rank列。
SELECT s.sno,c.cno,g.rank FROM student AS s JOIN grade AS g ON g.sno=s.sno JOIN class AS c ON g.cno=c.cno;
19、查詢選修“3-105”課程的成績高於“109”號同學成績的所有同學的記錄。
select * from student as s join grades as g on s.sno=g.sno where g.degree>(select g.degree from grades where s.sno=109) and g.cno=3-105;
20、查詢grades中選學一門以上課程的同學中分數為非最高分成績的記錄。
select * from grades where
21、查詢成績高於學號為“109”、課程號為“3-105”的成績的所有記錄。
select * from grades as g join student as s on s.sno=g.sno where g.degree>(select g.degree from grades where s.sno=109) and g.cno=3-105;
22、查詢和學號為108的同學同年出生的所有學生的Sno、Sname和Sbirthday列。
select sno,sname,sbirthday from student where sbirthday=(select sbirthday from student where sno=108);
23、查詢“張旭“教師任課的學生成績。
select * from grades as g join class as c on c.cno=g.cno join teacher as t on t.tno=c.tno where t.tname='張旭';
24、查詢選修某課程的同學人數多於5人的教師姓名。
25、查詢95033班和95031班全體學生的記錄。
select s.* from student as s join class as c on s.sclass=c.cname where c.cname=95033 or c.cname=95031;
26、查詢存在有85分以上成績的課程Cno.
select cno from grades where degree>85;
27、查詢出“計算機系“教師所教課程的成績表。
select * from grades as g join class as c on c.cno=g.cno join teacher as t on t.tno=c.tno where t.depart='計算機系';
28、查詢“計算機系”與“電子工程系“不同職稱的教師的Tname。
select tname from teacher where depart='計算機系' or depart='電子工程系' group by title;
29、查詢選修編號為“3-105“課程且成績至少高於選修編號為“3-245”的同學的Cno、Sno和Degree,並按Degree從高到低次序排序。
select cno,sno,degree from grades where sno=3-105 and degree>(select degree from grades where sno=3-245) order by degree asc;
30、查詢選修編號為“3-105”且成績高於選修編號為“3-245”課程的同學的Cno、Sno和Degree.
select cno,sno,degree from grades where sno=3-105 and degree>(select degree from grades where sno=3-245);
31、查詢所有教師和同學的name、sex和birthday.
select sname,ssex,sbirthday from student union select tname,tsex,tbirthday from teacher;
32、查詢所有“女”教師和“女”同學的name、sex和birthday.
select sname,sbirthday from student where ssex='女' union select tname,tbirthday from teacher where tsex='女';
33、查詢成績比該課程平均成績低的同學的成績表。
select group_concat(degree),avg(degree) from grades group by degree having degree<avg(degree);
34、查詢所有任課教師的Tname和Depart.
SELECT tname,depart FROM teacher;
35 查詢所有未講課的教師的Tname和Depart.
SELECT t.tname,t.depart FROM teacher as t join class as c on t.tno=c.tno where c.tno=NULL;
36、查詢至少有2名男生的班號。
SELECT c.cno FORM class AS c JOIN grades AS g ON g.cno=c.cno join student as s on s.sno=g.sno where s.ssex='男';
37、查詢Student表中不姓“王”的同學記錄。
SELECT sname FROM student WHERE sname NOT LIKE '王%';
38、查詢Student表中每個學生的姓名和年齡。
SELECT sname,sbirthday FROM student;
39、查詢Student表中最大和最小的Sbirthday日期值。
SELECT MAX(sbirthday) AS ODLDEST,MIN(sbirthday) AS YOUNGEST FROM student;
40、以班號和年齡從大到小的順序查詢Student表中的全部記錄。
SELECT * FROM student ORDER BY sclass DESC,sbirthday DESC;
41、查詢“男”教師及其所上的課程。
SELECT c.cname,t.tname,t.tsex FROM class AS c JOIN teacher AS t ON c.tno=t.tno WHERE t.tsex='男';
42、查詢最高分同學的Sno、Cno和Degree列。
SELECT MAX(g.degree),s.sno,c.cno,g.degree FROM student AS s JOIN grades AS g ON g.sno=s.sno JOIN class AS c ON g.cno=c.cno;
43、查詢和“李軍”同性別的所有同學的Sname.
SELECT sname FROM student WHERE ssex=(SELECT ssex FROM student WHERE sname='李軍');
44、查詢和“李軍”同性別並同班的同學Sname.
SELECT sname FROM student WHERE ssex=(SELECT ssex FROM student WHERE sname='李軍') AND sclass=(SELECT sclass FROM student WHERE sname='李軍');
45、查詢所有選修“計算機導論”課程的“男”同學的成績表
select * from grades as g join class as c on c.cno=g.cno join student as s on s.sno=g.sno where s.ssex='男' and c.cname='計算機導論';