建表语句
CREATE TABLE STUDENT
(SNO VARCHAR(3) NOT NULL,
SNAME VARCHAR(4) NOT NULL,
SSEX VARCHAR(2) NOT NULL,
SBIRTHDAY DATETIME,
CLASS VARCHAR(5));
CREATE TABLE COURSE
(CNO VARCHAR(5) NOT NULL,
CNAME VARCHAR(10) NOT NULL,
TNO VARCHAR(10) NOT NULL);
CREATE TABLE SCORE
(SNO VARCHAR(3) NOT NULL,
CNO VARCHAR(5) NOT NULL,
DEGREE NUMERIC(10, 1) NOT NULL) ;
CREATE TABLE TEACHER
(TNO VARCHAR(3) NOT NULL,
TNAME VARCHAR(4) NOT NULL, TSEX VARCHAR(2) NOT NULL,
TBIRTHDAY DATETIME NOT NULL, PROF VARCHAR(6),
DEPART VARCHAR(10) NOT NULL);
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 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,'6-106',79);
INSERT INTO SCORE(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)
1、 查询Student表中的所有记录的Sname、Ssex和Class列。
SELECT SNAME, SSEX, CLASS FROM STUDENT;
2、 查询教师所有的单位即不重复的Depart列。
SELECT DISTINCT DEPART FROM TEACHER;
3、 查询Student表的所有记录。
SELECT * FROM STUDENT;
4、 查询Score表中成绩在60到80之间的所有记录。
(1)SELECT * FROM SCORE WHERE DEGREE BETWEEN 60 AND 80;
(2)SELECT * FROM SCORE WHERE DEGREE >= 60 AND DEGREE <= 80;
5、 查询Score表中成绩为85,86或88的记录。
(1)SELECT * FROM SCORE WHERE DEGREE = 85 OR DEGREE = 86 OR DEGREE = 88;
(2)SELECT * FROM SCORE WHERE DEGREE BETWEEN 85 AND 88 AND DEGREE != 87;
6、 查询Student表中“95031”班或性别为“女”的同学记录。
SELECT * FROM STUDENT WHERE CLASS = "95031" OR SSEX = "女";
7、 以Class降序查询Student表的所有记录。
SELECT * FROM STUDENT ORDER BY CLASS DESC;
8、 以Cno升序、Degree降序查询Score表的所有记录。
SELECT * FROM SCORE ORDER BY CNO, DEGREE DESC;
9、 查询“95031”班的学生人数。
SELECT COUNT(*) FROM STUDENT WHERE CLASS = "95031";
10、查询Score表中的最高分的学生学号和课程号。
SELECT SNO, CNO FROM SCORE WHERE DEGREE IN (
SELECT MAX(DEGREE)
FROM SCORE);
11、查询‘3-105’号课程的平均分。
SELECT AVG(DEGREE) FROM SCORE WHERE CNO = "3-105";
**12、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。
SELECT AVG(DEGREE), CNO FROM SCORE WHERE CNO LIKE "3%" GROUP BY CNO HAVING COUNT(*) >= 5;
**13、查询最低分大于70,最高分小于90的Sno列。
SELECT SNO FROM SCORE GROUP BY SNO HAVING MIN(DEGREE) > 70 AND MAX(DEGREE) < 90;
14、查询所有学生的Sname、Cno和Degree列。
SELECT SNAME, CNO, DEGREE FROM STUDENT AS ST, SCORE AS SC WHERE ST.SNO = SC.SNO;
15、查询所有学生的Sno、Cname和Degree列。
SELECT SNO, CNAME, DEGREE FROM SCORE AS SC, COURSE AS CO WHERE SC.CNO = CO.CNO;
**16、查询所有学生的Sname、Cname和Degree列。
SELECT A.SNAME, B.CNAME, C.DEGREE FROM STUDENT AS A JOIN (COURSE AS B, SCORE AS C) ON A.SNO = C.SNO AND B.CNO = C.CNO;
17、查询“95033”班所选课程的平均分。
SELECT ST.CLASS, AVG(SC.DEGREE) FROM STUDENT AS ST JOIN SCORE AS SC ON ST.SNO = SC.SNO WHERE ST.CLASS = "95031";
**18、假设使用如下命令建立了一个grade表:
create table grade(low TINYINT,up TINYINT,rank varchar(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");
现查询所有同学的Sno、Cno和rank列。
SELECT A.SNO,A.CNO,B.RANK FROM SCORE A,GRADE B WHERE A.DEGREE BETWEEN B.LOW AND B.UP;
19、查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。
SELECT SNO, DEGREE FROM SCORE WHERE CNO = "3-105" AND DEGREE > (
SELECT DEGREE
FROM SCORE
WHERE SNO = "109" AND CNO = "3-105");
**20、查询score中选学一门以上课程的同学中分数为非最高分成绩的记录。
SELECT * FROM SCORE WHERE DEGREE < (SELECT MAX(DEGREE) FROM SCORE) GROUP BY SNO HAVING COUNT(*) > 1;
21、查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。
SELECT * FROM SCORE WHERE CNO = "3-105" AND DEGREE > ALL(SELECT DEGREE FROM SCORE WHERE SNO = "109" AND CNO = "3-105");
**22、查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。
SELECT SNO,SNAME,SBIRTHDAY FROM STUDENT WHERE YEAR(SBIRTHDAY)=(SELECT YEAR(SBIRTHDAY) FROM STUDENT WHERE SNO='108');
23、查询“张旭“教师任课的学生成绩。
SELECT SC.SNO, SC.DEGREE FROM SCORE AS SC JOIN (COURSE AS CO, TEACHER AS TH) ON CO.TNO = TH.TNO AND SC.CNO = CO.CNO WHERE TH.TNAME = '张旭';
24、查询选修某课程的同学人数多于5人的教师姓名。
SELECT TE.TNAME FROM TEACHER AS TE
JOIN (COURSE AS CO, SCORE AS SC)
ON CO.TNO = TE.TNO AND SC.CNO = CO.CNO
GROUP BY TE.TNO
HAVING COUNT(*) > 5;
25、查询95033班和95031班全体学生的记录。
SELECT *
FROM STUDENT AS ST
JOIN (SCORE AS SC, COURSE AS CO)
ON (ST.SNO = SC.SNO AND SC.CNO = CO.CNO)
WHERE ST.CLASS = '95033' OR ST.CLASS = '95031'
ORDER BY ST.CLASS;
26、查询存在有85分以上成绩的课程Cno.
SELECT DISTINCT CNO FROM SCORE WHERE DEGREE >= 85;
27、查询出“计算机系“教师所教课程的成绩表。
SELECT SC.*
FROM SCORE AS SC
JOIN (COURSE AS CO, TEACHER AS TE)
ON (CO.CNO = SC.CNO AND CO.TNO = TE.TNO)
WHERE TE.DEPART = '计算机系';
28、查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。
SELECT TNAME, PROF
FROM TEACHER
WHERE DEPART = '计算机系' AND PROF NOT IN (SELECT PROF FROM TEACHER WHERE DEPART = '电子工程系');
29、查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。
SELECT CNO, SNO, DEGREE FROM SCORE WHERE CNO = '3-105' AND DEGREE > ANY(SELECT DEGREE FROM SCORE WHERE CNO = '3-245') ORDER BY DEGREE DESC;
30、查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree.
SELECT CNO, SNO, DEGREE FROM SCORE WHERE CNO = '3-105' AND DEGREE > ALL(SELECT DEGREE FROM SCORE WHERE CNO = '3-245') ORDER BY DEGREE DESC;
**31、查询所有教师和同学的name、sex和birthday.
SELECT SNAME AS NAME, SSEX AS SEX, SBIRTHDAY AS BIRTHDAY FROM STUDENT
UNION
SELECT TNAME AS NAME, TSEX AS SEX, TBIRTHDAY AS BIRTHDAY FROM TEACHER;
32、查询所有“女”教师和“女”同学的name、sex和birthday.
SELECT SNAME AS NAME, SSEX AS SEX, SBIRTHDAY AS BIRTHDAY FROM STUDENT WHERE SSEX = '女'
UNION
SELECT TNAME AS NAME, TSEX AS SEX, TBIRTHDAY AS BIRTHDAY FROM TEACHER WHERE TSEX = '女';
**33、查询成绩比该课程平均成绩低的同学的成绩表。
SELECT A.* FROM SCORE A WHERE DEGREE<(SELECT AVG(DEGREE) FROM SCORE B WHERE A.CNO=B.CNO);
//错误:Unknown column 'DEGREE' in 'having clause'
//SELECT SNO, CNO FROM SCORE GROUP BY CNO HAVING DEGREE < AVG(DEGREE);
34、查询所有任课教师的Tname和Depart.
SELECT TNAME, DEPART FROM TEACHER AS TE INNER JOIN COURSE AS CO ON TE.TNO = CO.TNO
**35 查询所有未讲课的教师的Tname和Depart.
//NOT IN效率差
SELECT TNAME, DEPART FROM TEACHER WHERE TNO NOT IN (SELECT TE.TNO FROM TEACHER AS TE INNER JOIN COURSE AS CO ON TE.TNO = CO.TNO);
//另一种
SELECT TNAME, DEPART FROM TEACHER A WHERE NOT EXISTS (SELECT * FROM COURSE B WHERE A.TNO = B.TNO);
36、查询至少有2名男生的班号。
SELECT CLASS FROM STUDENT WHERE SSEX = '男' GROUP BY CLASS HAVING COUNT(*) > 1;
37、查询Student表中不姓“王”的同学记录。
SELECT * FROM STUDENT WHERE SNAME NOT LIKE "王%";
38、查询Student表中每个学生的姓名和年龄。
SELECT SNAME, (YEAR(NOW()) - YEAR(SBIRTHDAY)) AS AGE FROM STUDENT;
39、查询Student表中最大和最小的Sbirthday日期值。
SELECT MAX(SBIRTHDAY) AS SBIRTHDAY FROM STUDENT
UNION
SELECT MIN(SBIRTHDAY) AS SBIRTHDAY FROM STUDENT;
40、以班号和年龄从大到小的顺序查询Student表中的全部记录。
SELECT * FROM STUDENT ORDER BY CLASS DESC, (YEAR(NOW()) - YEAR(SBIRTHDAY)) DESC;
41、查询“男”教师及其所上的课程。
SELECT TNAME, TSEX, CNAME FROM TEACHER JOIN COURSE USING(TNO) WHERE TSEX = '男';
42、查询最高分同学的Sno、Cno和Degree列。
SELECT SNO, CNO, DEGREE FROM SCORE WHERE DEGREE = (SELECT MAX(DEGREE) FROM SCORE);
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 CLASS = (SELECT CLASS FROM STUDENT WHERE SNAME = '李军');
45、查询所有选修“计算机导论”课程的“男”同学的成绩表
SELECT ST.SNAME, SC.DEGREE FROM STUDENT AS ST
JOIN (COURSE AS CO, SCORE AS SC)
ON (SC.CNO = CO.CNO AND SC.SNO = ST.SNO)
WHERE CO.CNAME = '计算机导论' AND ST.SSEX = '男';
CREATE TABLE STUDENT
(SNO VARCHAR(3) NOT NULL,
SNAME VARCHAR(4) NOT NULL,
SSEX VARCHAR(2) NOT NULL,
SBIRTHDAY DATETIME,
CLASS VARCHAR(5));
CREATE TABLE COURSE
(CNO VARCHAR(5) NOT NULL,
CNAME VARCHAR(10) NOT NULL,
TNO VARCHAR(10) NOT NULL);
CREATE TABLE SCORE
(SNO VARCHAR(3) NOT NULL,
CNO VARCHAR(5) NOT NULL,
DEGREE NUMERIC(10, 1) NOT NULL) ;
CREATE TABLE TEACHER
(TNO VARCHAR(3) NOT NULL,
TNAME VARCHAR(4) NOT NULL, TSEX VARCHAR(2) NOT NULL,
TBIRTHDAY DATETIME NOT NULL, PROF VARCHAR(6),
DEPART VARCHAR(10) NOT NULL);
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 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,'6-106',79);
INSERT INTO SCORE(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','助教','电子工程系');
course
score
student
teacher
grade
1、 查询Student表中的所有记录的Sname、Ssex和Class列。
SELECT SNAME, SSEX, CLASS FROM STUDENT;
2、 查询教师所有的单位即不重复的Depart列。
SELECT DISTINCT DEPART FROM TEACHER;
3、 查询Student表的所有记录。
SELECT * FROM STUDENT;
4、 查询Score表中成绩在60到80之间的所有记录。
(1)SELECT * FROM SCORE WHERE DEGREE BETWEEN 60 AND 80;
(2)SELECT * FROM SCORE WHERE DEGREE >= 60 AND DEGREE <= 80;
5、 查询Score表中成绩为85,86或88的记录。
(1)SELECT * FROM SCORE WHERE DEGREE = 85 OR DEGREE = 86 OR DEGREE = 88;
(2)SELECT * FROM SCORE WHERE DEGREE BETWEEN 85 AND 88 AND DEGREE != 87;
6、 查询Student表中“95031”班或性别为“女”的同学记录。
SELECT * FROM STUDENT WHERE CLASS = "95031" OR SSEX = "女";
7、 以Class降序查询Student表的所有记录。
SELECT * FROM STUDENT ORDER BY CLASS DESC;
8、 以Cno升序、Degree降序查询Score表的所有记录。
SELECT * FROM SCORE ORDER BY CNO, DEGREE DESC;
9、 查询“95031”班的学生人数。
SELECT COUNT(*) FROM STUDENT WHERE CLASS = "95031";
10、查询Score表中的最高分的学生学号和课程号。
SELECT SNO, CNO FROM SCORE WHERE DEGREE IN (
SELECT MAX(DEGREE)
FROM SCORE);
11、查询‘3-105’号课程的平均分。
SELECT AVG(DEGREE) FROM SCORE WHERE CNO = "3-105";
**12、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。
SELECT AVG(DEGREE), CNO FROM SCORE WHERE CNO LIKE "3%" GROUP BY CNO HAVING COUNT(*) >= 5;
**13、查询最低分大于70,最高分小于90的Sno列。
SELECT SNO FROM SCORE GROUP BY SNO HAVING MIN(DEGREE) > 70 AND MAX(DEGREE) < 90;
14、查询所有学生的Sname、Cno和Degree列。
SELECT SNAME, CNO, DEGREE FROM STUDENT AS ST, SCORE AS SC WHERE ST.SNO = SC.SNO;
15、查询所有学生的Sno、Cname和Degree列。
SELECT SNO, CNAME, DEGREE FROM SCORE AS SC, COURSE AS CO WHERE SC.CNO = CO.CNO;
**16、查询所有学生的Sname、Cname和Degree列。
SELECT A.SNAME, B.CNAME, C.DEGREE FROM STUDENT AS A JOIN (COURSE AS B, SCORE AS C) ON A.SNO = C.SNO AND B.CNO = C.CNO;
17、查询“95033”班所选课程的平均分。
SELECT ST.CLASS, AVG(SC.DEGREE) FROM STUDENT AS ST JOIN SCORE AS SC ON ST.SNO = SC.SNO WHERE ST.CLASS = "95031";
**18、假设使用如下命令建立了一个grade表:
create table grade(low TINYINT,up TINYINT,rank varchar(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");
现查询所有同学的Sno、Cno和rank列。
SELECT A.SNO,A.CNO,B.RANK FROM SCORE A,GRADE B WHERE A.DEGREE BETWEEN B.LOW AND B.UP;
19、查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。
SELECT SNO, DEGREE FROM SCORE WHERE CNO = "3-105" AND DEGREE > (
SELECT DEGREE
FROM SCORE
WHERE SNO = "109" AND CNO = "3-105");
**20、查询score中选学一门以上课程的同学中分数为非最高分成绩的记录。
SELECT * FROM SCORE WHERE DEGREE < (SELECT MAX(DEGREE) FROM SCORE) GROUP BY SNO HAVING COUNT(*) > 1;
21、查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。
SELECT * FROM SCORE WHERE CNO = "3-105" AND DEGREE > ALL(SELECT DEGREE FROM SCORE WHERE SNO = "109" AND CNO = "3-105");
**22、查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。
SELECT SNO,SNAME,SBIRTHDAY FROM STUDENT WHERE YEAR(SBIRTHDAY)=(SELECT YEAR(SBIRTHDAY) FROM STUDENT WHERE SNO='108');
23、查询“张旭“教师任课的学生成绩。
SELECT SC.SNO, SC.DEGREE FROM SCORE AS SC JOIN (COURSE AS CO, TEACHER AS TH) ON CO.TNO = TH.TNO AND SC.CNO = CO.CNO WHERE TH.TNAME = '张旭';
24、查询选修某课程的同学人数多于5人的教师姓名。
SELECT TE.TNAME FROM TEACHER AS TE
JOIN (COURSE AS CO, SCORE AS SC)
ON CO.TNO = TE.TNO AND SC.CNO = CO.CNO
GROUP BY TE.TNO
HAVING COUNT(*) > 5;
25、查询95033班和95031班全体学生的记录。
SELECT *
FROM STUDENT AS ST
JOIN (SCORE AS SC, COURSE AS CO)
ON (ST.SNO = SC.SNO AND SC.CNO = CO.CNO)
WHERE ST.CLASS = '95033' OR ST.CLASS = '95031'
ORDER BY ST.CLASS;
26、查询存在有85分以上成绩的课程Cno.
SELECT DISTINCT CNO FROM SCORE WHERE DEGREE >= 85;
27、查询出“计算机系“教师所教课程的成绩表。
SELECT SC.*
FROM SCORE AS SC
JOIN (COURSE AS CO, TEACHER AS TE)
ON (CO.CNO = SC.CNO AND CO.TNO = TE.TNO)
WHERE TE.DEPART = '计算机系';
28、查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。
SELECT TNAME, PROF
FROM TEACHER
WHERE DEPART = '计算机系' AND PROF NOT IN (SELECT PROF FROM TEACHER WHERE DEPART = '电子工程系');
29、查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。
SELECT CNO, SNO, DEGREE FROM SCORE WHERE CNO = '3-105' AND DEGREE > ANY(SELECT DEGREE FROM SCORE WHERE CNO = '3-245') ORDER BY DEGREE DESC;
30、查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree.
SELECT CNO, SNO, DEGREE FROM SCORE WHERE CNO = '3-105' AND DEGREE > ALL(SELECT DEGREE FROM SCORE WHERE CNO = '3-245') ORDER BY DEGREE DESC;
**31、查询所有教师和同学的name、sex和birthday.
SELECT SNAME AS NAME, SSEX AS SEX, SBIRTHDAY AS BIRTHDAY FROM STUDENT
UNION
SELECT TNAME AS NAME, TSEX AS SEX, TBIRTHDAY AS BIRTHDAY FROM TEACHER;
32、查询所有“女”教师和“女”同学的name、sex和birthday.
SELECT SNAME AS NAME, SSEX AS SEX, SBIRTHDAY AS BIRTHDAY FROM STUDENT WHERE SSEX = '女'
UNION
SELECT TNAME AS NAME, TSEX AS SEX, TBIRTHDAY AS BIRTHDAY FROM TEACHER WHERE TSEX = '女';
**33、查询成绩比该课程平均成绩低的同学的成绩表。
SELECT A.* FROM SCORE A WHERE DEGREE<(SELECT AVG(DEGREE) FROM SCORE B WHERE A.CNO=B.CNO);
//错误:Unknown column 'DEGREE' in 'having clause'
//SELECT SNO, CNO FROM SCORE GROUP BY CNO HAVING DEGREE < AVG(DEGREE);
34、查询所有任课教师的Tname和Depart.
SELECT TNAME, DEPART FROM TEACHER AS TE INNER JOIN COURSE AS CO ON TE.TNO = CO.TNO
**35 查询所有未讲课的教师的Tname和Depart.
//NOT IN效率差
SELECT TNAME, DEPART FROM TEACHER WHERE TNO NOT IN (SELECT TE.TNO FROM TEACHER AS TE INNER JOIN COURSE AS CO ON TE.TNO = CO.TNO);
//另一种
SELECT TNAME, DEPART FROM TEACHER A WHERE NOT EXISTS (SELECT * FROM COURSE B WHERE A.TNO = B.TNO);
36、查询至少有2名男生的班号。
SELECT CLASS FROM STUDENT WHERE SSEX = '男' GROUP BY CLASS HAVING COUNT(*) > 1;
37、查询Student表中不姓“王”的同学记录。
SELECT * FROM STUDENT WHERE SNAME NOT LIKE "王%";
38、查询Student表中每个学生的姓名和年龄。
SELECT SNAME, (YEAR(NOW()) - YEAR(SBIRTHDAY)) AS AGE FROM STUDENT;
39、查询Student表中最大和最小的Sbirthday日期值。
SELECT MAX(SBIRTHDAY) AS SBIRTHDAY FROM STUDENT
UNION
SELECT MIN(SBIRTHDAY) AS SBIRTHDAY FROM STUDENT;
40、以班号和年龄从大到小的顺序查询Student表中的全部记录。
SELECT * FROM STUDENT ORDER BY CLASS DESC, (YEAR(NOW()) - YEAR(SBIRTHDAY)) DESC;
41、查询“男”教师及其所上的课程。
SELECT TNAME, TSEX, CNAME FROM TEACHER JOIN COURSE USING(TNO) WHERE TSEX = '男';
42、查询最高分同学的Sno、Cno和Degree列。
SELECT SNO, CNO, DEGREE FROM SCORE WHERE DEGREE = (SELECT MAX(DEGREE) FROM SCORE);
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 CLASS = (SELECT CLASS FROM STUDENT WHERE SNAME = '李军');
45、查询所有选修“计算机导论”课程的“男”同学的成绩表
SELECT ST.SNAME, SC.DEGREE FROM STUDENT AS ST
JOIN (COURSE AS CO, SCORE AS SC)
ON (SC.CNO = CO.CNO AND SC.SNO = ST.SNO)
WHERE CO.CNAME = '计算机导论' AND ST.SSEX = '男';