一、已知有如下表,請用sql語句在mysql里建立相應的表
表1 學生表(student)
列名 | 意義 | 類型 | 約束 |
---|---|---|---|
sno | 學號 | varchar(3) | 主鍵 |
sname | 姓名 | varchar(10) | 非空 |
ssex | 性別 | varchar(3) | |
sbirthday | 生日 | datetime | |
class | 班級編號 | varchar(5) | 非空 |
表2 課程表(course)
列名 | 意義 | 類型 | 約束 |
---|---|---|---|
cno | 課程號 | varchar(10) | 主鍵 |
cname | 課程名 | varchar(30) | 非空 |
tno | 教師編號 | varchar(10) | 非空 |
表3 成績表(grade)
列名 | 意義 | 類型 | 約束 |
---|---|---|---|
sno | 學號 | varchar(3) | 主鍵 |
cno | 課程號 | varchar(5) | 主鍵 |
degree | 分數 | tinyint | 非空 |
表4 教師表(teacher)
列名 | 意義 | 類型 | 約束 |
---|---|---|---|
tno | 教師編號 | varchar(5) | 主鍵 |
tname | 教師姓名 | varchar(20) | 非空 |
tsex | 性別 | varchar(2) | |
tbirthday | 生日 | datetime | |
prof | 職稱 | varchar(20) | 非空 |
depart | 系 | varchar(30) | 非空 |
表5 等級表(rank)
列名 | 意義 | 類型 | 約束 |
---|---|---|---|
down | 分數下屆 | tinyint | 非空 |
up | 分數上界 | tinyint | 非空 |
rank | 級別 | varchar(2) | 主鍵 |
SQL語句:
CREATE TABLE `student` (
`sno` varchar(3) NOT NULL,
`sname` varchar(10) NOT NULL,
`ssex` varchar(3) NOT NULL,
`sbirthday` datetime NOT NULL,
`class` varchar(5) NOT NULL,
PRIMARY KEY (`sno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
CREATE TABLE `course` (
`cno` varchar(10) NOT NULL,
`cname` varchar(30) NOT NULL,
`tno` varchar(10) NOT NULL,
PRIMARY KEY (`cno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
CREATE TABLE `grade` (
`sno` varchar(3) NOT NULL,
`cno` varchar(5) NOT NULL,
`degree` tinyint(4) NOT NULL,
PRIMARY KEY (`sno`,`cno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
CREATE TABLE `teacher` (
`tno` varchar(5) NOT NULL,
`tname` varchar(20) NOT NULL,
`tsex` varchar(2) NOT NULL,
`tbirthday` datetime NOT NULL,
`prof` varchar(20) NOT NULL,
`depart` varchar(30) NOT NULL,
PRIMARY KEY (`tno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
CREATE TABLE `rank` (
`down` tinyint(4) NOT NULL,
`up` tinyint(4) NOT NULL,
`rank` varchar(2) NOT NULL,
PRIMARY KEY (`rank`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
二、將如下數據插入到表里
INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (108 ,'曾華' ,'男' , '1977-09-01',95033);
INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (105 ,'匡明' ,'男' ,’1975-10-02’,95031);
INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (107 ,'王麗' ,'女' ,’1976-01-23’, 95033);
INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (101 ,'李軍' ,'男' ,’1976-02-20’,95033);
INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (109 ,'王芳' ,'女' ,’1975-02-10’,95031);
INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (103 ,'陸君' ,'男' ,’1974-06-03’,95031);
INSERT INTO COURSE(CNO,CNAME,TNO)VALUES ('3-105' ,'計算機導論', '825');
INSERT INTO COURSE(CNO,CNAME,TNO)VALUES ('3-245' ,'操作系統' , '804');
INSERT INTO COURSE(CNO,CNAME,TNO)VALUES ('6-166' ,'數據電路' , '856');
INSERT INTO COURSE(CNO,CNAME,TNO)VALUES ('9-888' ,'高等數學' , '100');
INSERT INTO GRADE(SNO,CNO,DEGREE)VALUES ('103','3-245',86);
INSERT INTO GRADE(SNO,CNO,DEGREE)VALUES (105,'3-245',75);
INSERT INTO GRADE(SNO,CNO,DEGREE)VALUES (109,'3-245',68);
INSERT INTO GRADE(SNO,CNO,DEGREE)VALUES (103,'3-105',92);
INSERT INTO GRADE(SNO,CNO,DEGREE)VALUES (105,'3-105',88);
INSERT INTO GRADE(SNO,CNO,DEGREE)VALUES (109,'3-105',76);
INSERT INTO GRADE(SNO,CNO,DEGREE)VALUES (101,'3-105',64);
INSERT INTO GRADE(SNO,CNO,DEGREE)VALUES (107,'3-105',91);
INSERT INTO GRADE(SNO,CNO,DEGREE)VALUES (108,'3-105',78);
INSERT INTO GRADE(SNO,CNO,DEGREE)VALUES (101,'6-166',85);
INSERT INTO GRADE(SNO,CNO,DEGREE)VALUES (107,'6-106',79);
INSERT INTO GRADE(SNO,CNO,DEGREE)VALUES (108,'6-166',81);
INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)
VALUES (804,'李誠','男','1958-12-02','副教授','計算機系');
INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)
VALUES (856,'張旭','男','1969-03-12','講師','電子工程系');
INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)
VALUES (825,'王萍','女','1972-05-05','助教','計算機系');
INSERT INTO TEACHER(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART)
VALUES (831,'劉冰','女','1977-08-14','助教','電子工程系');
insert into rank(down,up,rank) values(90,100,'A');
insert into rank(down,up,rank) values(80,89,'B');
insert into rank(down,up,rank) values(70,79,'C');
insert into rank(down,up,rank) values(60,69,'D');
insert into rank(down,up,rank) values(0,59,'E');
三、sql語句練習
1、 查詢Student表中的所有記錄的Sname、Ssex和Class列。
select sname,ssex,class from student
2、查詢“張旭“教師任課的學生成績。
select g.degree from grade as g join course as c on g.cno=c.cno join teacher as t on c.tno=t.tno where t.tname='張旭';
3、查詢選修某課程的同學人數多于5人的教師姓名。
select tname from teacher where tno in (select tno from course where cno in (select cno from grade group by cno having count(cno)>5));
4、查詢95033班和95031班全體學生的記錄。
Select * from student where class in (‘95033’, ‘95031’)
5、查詢存在有85分以上成績的課程Cno.
Select distinct cno from grade where degree>85;
6、查詢出“計算機系“教師所教課程的成績表。
select degree from grade where cno in (select cno from course where tno in (select tno from teacher where depart='計算機系'));
7、查詢選修編號為“3-105“課程且成績至少高于選修編號為“3-245”的同學最低分的Cno、Sno和Degree,并按Degree從高到低次序排序。
select sno,cno,degree from grade where cno='3-105' and degree>(select min(degree) from grade where cno='3-245') order by degree desc;
8、查詢同時選修編號為“3-105”和“3-245”并且“3-105”成績高于“3-245”成績的同學的Cno、Sno和Degree.
select g1.sno from grade as g1 join grade as g2 on g1.sno=g2.sno where g1.cno='3-105' and g2.cno='3-245' and g1.degree > g2.degree;
9、查詢所有教師和同學的name、sex和birthday.
select sname,ssex,sbirthday from student union select tname,tsex,tbirthday from teacher;
10、查詢所有“女”教師和“女”同學的name、sex和birthday.
select sname,ssex,sbirthday from student where ssex=’女’ union select tname,tsex,tbirthday from teacher where tsex=’女’;