設有一數據庫,包括四個表:學生表(Student)、課程表(Course)、成績表(Score)以及教師信息表(Teacher)。用SQL語句建立四個表並完成相關題目。sql
#建學生信息表 create table student( sno varchar(20) not null primary key, sname varchar(20) not null, ssex varchar(20) not null, sbirthday datetime, class varchar(20) )ENGINE=InnoDB DEFAULT CHARSET=utf8; #創建教師表 create table teacher ( tno varchar(20) not null primary key, tname varchar(20) not null, tsex varchar(20) not null, tbirthday datetime, prof varchar(20), depart varchar(20) not null )ENGINE=InnoDB DEFAULT CHARSET=utf8; #創建課程表 create table course ( cno varchar(20) not null primary key, cname varchar(20) not null, tno varchar(20) not null, foreign key(tno) references teacher(tno) )ENGINE=InnoDB DEFAULT CHARSET=utf8; #創建成績表 create table score ( sno varchar(20) not null, foreign key(sno) references student(sno), cno varchar(20) not null, foreign key(cno) references course(cno), degree decimal )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 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','助教','電子工程系'); #note:這裏提醒你們一下,請按照個人順序插入數據,由於被定義爲外鍵的字段在插入數據的前提是主表的主鍵有相對應的值才能夠插入不然會報錯1452 - Cannot add or update a child row: a foreign key constraint fails ,因此主外鍵表先插主鍵表 #插入課程表數據 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' ,'高等數學' ,831); #插入成績表數據 INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (103,'3-245',86); INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (105,'3-245',75); INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (109,'3-245',68); INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (103,'3-105',92); INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (105,'3-105',88); INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (109,'3-105',76); INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (101,'3-105',64); INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (107,'3-105',91); INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (108,'3-105',78); INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (101,'6-166',85); INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (107,'9-888',79); INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (108,'6-166',81);
一、 查詢Student表中的全部記錄的Sname、Ssex和Class列。
二、 查詢教師全部的單位即不重複的Depart列。
三、 查詢Student表的全部記錄。
四、 查詢Score表中成績在60到80之間的全部記錄。
五、 查詢Score表中成績爲85,86或88的記錄。
六、 查詢Student表中「95031」班或性別爲「女」的同窗記錄。
七、 以Class降序查詢Student表的全部記錄。
八、 以Cno升序、Degree降序查詢Score表的全部記錄。
九、 查詢「95031」班的學生人數。
十、查詢Score表中的最高分的學生學號和課程號。
十一、查詢‘3-105’號課程的平均分。
十二、查詢Score表中至少有5名學生選修的並以3開頭的課程的平均分數。
1三、查詢最低分大於70,最高分小於90的Sno列。
1四、查詢全部學生的Sname、Cno和Degree列。
1五、查詢全部學生的Sno、Cname和Degree列。
1六、查詢全部學生的Sname、Cname和Degree列。
1七、查詢「95033」班所選課程的平均分。
1八、假設使用以下命令創建了一個grade表:
create table grade(low number(3,0),upp number(3),rank char(1));
insert into grade values(90,100,’A’);
insert into grade values(80,89,’B’);
insert into grade values(70,79,’C’);
insert into grade values(60,69,’D’);
insert into grade values(0,59,’E’);
commit;
現查詢全部同窗的Sno、Cno和rank列。
1九、查詢選修「3-105」課程的成績高於「109」號同窗成績的全部同窗的記錄。
20、查詢score中選學一門以上課程的同窗中分數爲非最高分紅績的記錄。
2一、查詢成績高於學號爲「109」、課程號爲「3-105」的成績的全部記錄。
2二、查詢和學號爲108的同窗同年出生的全部學生的Sno、Sname和Sbirthday列。
2三、查詢「張旭「教師任課的學生成績。
2四、查詢選修某課程的同窗人數多於5人的教師姓名。
2五、查詢95033班和95031班全體學生的記錄。數據庫
2六、查詢存在有85分以上成績的課程Cno.
2七、查詢出「計算機系「教師所教課程的成績表。
2八、查詢「計算機系」與「電子工程系「不一樣職稱的教師的Tname和Prof。
2九、查詢選修編號爲「3-105「課程且成績至少高於選修編號爲「3-245」的同窗的Cno、Sno和Degree,並按Degree從高到低次序排序。
30、查詢選修編號爲「3-105」且成績高於選修編號爲「3-245」課程的同窗的Cno、Sno和Degree.
3一、查詢全部教師和同窗的name、sex和birthday.
3二、查詢全部「女」教師和「女」同窗的name、sex和birthday.
3三、查詢成績比該課程平均成績低的同窗的成績表。
3四、查詢全部任課教師的Tname和Depart.
35 查詢全部未講課的教師的Tname和Depart.
3六、查詢至少有2名男生的班號。
3七、查詢Student表中不姓「王」的同窗記錄。
3八、查詢Student表中每一個學生的姓名和年齡。
3九、查詢Student表中最大和最小的Sbirthday日期值。
40、以班號和年齡從大到小的順序查詢Student表中的所有記錄。
4一、查詢「男」教師及其所上的課程。
4二、查詢最高分同窗的Sno、Cno和Degree列。
4三、查詢和「李軍」同性別的全部同窗的Sname.
4四、查詢和「李軍」同性別並同班的同窗Sname.
4五、查詢全部選修「計算機導論」課程的「男」同窗的成績表操作系統
一、 查詢Student表中的全部記錄的Sname、Ssex和Class列。code
SELECT sname,ssex,class FROM student;
二、 查詢教師全部的單位即不重複的Depart列。排序
SELECT DISTINCT depart FROM teacher;
三、 查詢Student表的全部記錄。ci
SELECT * FROM student;
四、 查詢Score表中成績在60到80之間的全部記錄。數學
SELECT * FROM score WHERE degree BETWEEN 60 AND 80;
五、 查詢Score表中成績爲85,86或88的記錄。it
SELECT * FROM score WHERE degree IN (85,86,88);
六、 查詢Student表中「95031」班或性別爲「女」的同窗記錄。table
SELECT * FROM student WHERE class = 95031 OR ssex = '女';
七、 以Class降序查詢Student表的全部記錄。class
SELECT * FROM student ORDER BY class DESC;
八、 以Cno升序、Degree降序查詢Score表的全部記錄。
SELECT * FROM score ORDER BY cno,degree DESC;
*九、 查詢「95031」班的學生人數。
SELECT class,count(*) AS StuNum FROM student WHERE class = 95031;
*十、查詢Score表中的最高分的學生學號和課程號。
SELECT sno, cno FROM score WHERE degree in (SELECT max(degree) FROM score)
十一、查詢‘3-105’號課程的平均分。
SELECT cno, avg(degree) as avg_degree FROM sql_exercise.score WHERE cno='3-105'
*十二、查詢Score表中至少有3名學生選修的並以3開頭的課程的平均分數。
SELECT cno as new_cno, avg(degree) as avg_degree FROM score WHERE cno LIKE '3%' GROUP BY cno Having count(cno) >= 3
1三、查詢最低分大於70,最高分小於90的Sno列。
SELECT sno FROM score GROUP BY sno HAVING MIN(degree)>=70 AND MAX(degree)<=90
1四、查詢全部學生的Sname、Cno和Degree列。
SELECT a.sname,b.cno,b.degree FROM sql_exercise.student a JOIN sql_exercise.score b ON a.sno=b.sno
1五、查詢全部學生的Sno、Cname和Degree列。
SELECT b.sno,a.cname,b.degree FROM course a JOIN score b ON a.cno=b.cno
1六、查詢全部學生的Sname、Cname和Degree列。
SELECT b.sname,a.degree,c.cname FROM score a JOIN student b ON a.sno=b.sno JOIN course c ON a.cno=c.cno
1七、查詢「95033」班所選課程的平均分。
SELECT b.cno, avg(b.degree) as avg_degree FROM student as a JOIN score as b ON a.sno=b.sno WHERE a.class='95033' GROUP BY b.cno
1八、假設使用以下命令創建了一個grade表:
CREATE TABLE rank( low_number INT(3) , high_number INT(3), rank VARCHAR(1) )ENGINE=InnoDB DEFAULT CHARSET=utf8; insert into rank values(90,100,'A'); insert into rank values(80,89,'B'); insert into rank values(70,79,'C'); insert into rank values(60,69,'D'); insert into rank values(0,59,'E');
現查詢全部同窗的Sno、Cno和rank列 ``` SELECT a.Sno,a.Cno,b.rank FROM score a JOIN grade b ON a.degree>=b.low_number AND a.degree<=b.high_number ```
1九、在選修「3-105」課程中的成績高於「109」號同窗成績 的全部同窗的記錄。
SELECT * FROM score WHERE cno = '3-105' AND degree > (SELECT degree FROM score WHERE sno = '109' AND cno = '3-105')
20、查詢score中選學一門以上課程的同窗中分數爲非最高分紅績的記錄。
//todo
2一、查詢成績高於學號爲「109」、課程號爲「3-105」的成績的全部記錄。
//todo