123123
题目1 SQL查询及结果
(1)求全体学生的学号、姓名和出生年份
SQL语句:
SELECT sno, sname, YEAR(sbirthday) AS 出生年份
FROM Student;
sno | sname | 出生年份 |
96001 | 张三 | 2002 |
96002 | 李四 | 2003 |
96003 | 王五 | 2001 |
96004 | 赵六 | 2004 |
96005 | 孙七 | 2000 |
(2)求每个系的学生总人数并按降序排列
题目1 SQL查询及结果
(1)求全体学生的学号、姓名和出生年份
SQL语句:
SELECT sno, sname, YEAR(sbirthday) AS 出生年份
FROM Student;
sno sname 出生年份
96001 张三 2002
96002 李四 2003
96003 王五 2001
96004 赵六 2004
96005 孙七 2000
(2)求每个系的学生总人数并按降序排列
SQL语句:
SELECT sdept, COUNT(*) AS 学生人数
FROM Student
GROUP BY sdept
ORDER BY 学生人数 DESC;
sdept 学生人数
CS 2
MA 2
IS 1
(3)求选修了课程号为002或003的学生的学号、课程名和成绩
SQL语句:
SELECT SC.sno, Course.cname, SC.grade
FROM SC
JOIN Course ON SC.cno = Course.cno
WHERE SC.cno IN ('002', '003');
sno cname grade
96001 数据结构 85
96002 大学物理 88
96002 数据结构 92
96004 大学物理 70
96005 数据结构 60
(4)检索选修某课程的学生人数多于3人的教师姓名
SQL语句:
SELECT DISTINCT Teacher.tname
FROM Course
JOIN Teacher ON Course.tno = Teacher.tno
JOIN SC ON Course.cno = SC.cno
GROUP BY Course.cno, Teacher.tname
HAVING COUNT(SC.sno) > 3;
tname
李正科
(5)查询所有未选课程的学生姓名和所在系
SQL语句:
SELECT Student.sname, Student.sdept
FROM Student
WHERE NOT EXISTS (SELECT 1 FROM SC WHERE SC.sno = Student.sno
);
sname sdept
王明 CS
(6)求每个同学的课程成绩的最高分,查询结果项包括:学生姓名、课程号及最高分
SQL语句:
SELECT S.sname, SC.cno, MAX(SC.grade) AS 最高分
FROM Student S
JOIN SC ON S.sno = SC.sno
GROUP BY S.sname, SC.cno;
sname cno 最高分
张三 001 90
张三 003 85
李四 002 88
李四 003 92
王五 001 75
王五 004 80
赵六 002 70
孙七 003 60
(7)求所有讲授数据结构课程的教师姓名
SQL语句:
SELECT DISTINCT T.tname
FROM Course C
JOIN Teacher T ON C.tno = T.tno
WHERE C.cname = '数据结构';
tname
李正科
(8)查询所有选修了李正科老师的课程的学生信息
SQL语句:
SELECT DISTINCT S.*
FROM Student S
JOIN SC ON S.sno = SC.sno
JOIN Course C ON SC.cno = C.cno
JOIN Teacher T ON C.tno = T.tno
WHERE T.tname = '李正科';
sno sname ssex sdept sage sbirthday
96001 张三 男 CS 20 2002-01-01
96002 李四 女 CS 19 2003-02-02
96005 孙七 男 IS 22 2000-05-05
(9)新建一个关系表S1(SNO,SNAME,SD,SA),其字段类型定义与Student表中的相应字段(SNO,SNAME,SDEPT,SAGE)的数据类型定义相同。将表Student中在计算机系'CS'的学生数据插入到表S1中。
SQL语句:
CREATE TABLE S1 (SNO VARCHAR(20),SNAME VARCHAR(50),SD VARCHAR(20),SA INT
);
INSERT INTO S1(SNO, SNAME, SD, SA)
SELECT sno, sname, sdept, sage
FROM Student
WHERE sdept = 'CS';
SNO SNAME SD SA
96001 张三 CS 20
96002 李四 CS 19
(10)建立计算机系的学生的视图STUDENT_CS
SQL语句:
CREATE VIEW STUDENT_CS AS
SELECT *
FROM Student
WHERE sdept = 'CS';
sno sname ssex sdept sage sbirthday
96001 张三 男 CS 20 2002-01-01
96002 李四 女 CS 19 2003-02-02
sdept | 学生人数 |
CS | 2 |
MA | 2 |
IS | 1 |
(3)求选修了课程号为002或003的学生的学号、课程名和成绩
SQL语句:
SELECT SC.sno, Course.cname, SC.grade
FROM SC
JOIN Course ON SC.cno = Course.cno
WHERE SC.cno IN ('002', '003');
sno | cname | grade |
96001 | 数据结构 | 85 |
96002 | 大学物理 | 88 |
96002 | 数据结构 | 92 |
96004 | 大学物理 | 70 |
96005 | 数据结构 | 60 |
(4)检索选修某课程的学生人数多于3人的教师姓名
SQL语句:
SELECT DISTINCT Teacher.tname
FROM Course
JOIN Teacher ON Course.tno = Teacher.tno
JOIN SC ON Course.cno = SC.cno
GROUP BY Course.cno, Teacher.tname
HAVING COUNT(SC.sno) > 3;
tname |
李正科 |
(5)查询所有未选课程的学生姓名和所在系
SQL语句:
SELECT Student.sname, Student.sdept
FROM Student
WHERE NOT EXISTS (
SELECT 1 FROM SC
WHERE SC.sno = Student.sno
);
sname | sdept |
王明 | CS |
(6)求每个同学的课程成绩的最高分,查询结果项包括:学生姓名、课程号及最高分
SQL语句:
SELECT S.sname, SC.cno, MAX(SC.grade) AS 最高分
FROM Student S
JOIN SC ON S.sno = SC.sno
GROUP BY S.sname, SC.cno;
sname | cno | 最高分 |
张三 | 001 | 90 |
张三 | 003 | 85 |
李四 | 002 | 88 |
李四 | 003 | 92 |
王五 | 001 | 75 |
王五 | 004 | 80 |
赵六 | 002 | 70 |
孙七 | 003 | 60 |
(7)求所有讲授数据结构课程的教师姓名
SQL语句:
SELECT DISTINCT T.tname
FROM Course C
JOIN Teacher T ON C.tno = T.tno
WHERE C.cname = '数据结构';
tname |
李正科 |
(8)查询所有选修了李正科老师的课程的学生信息
SQL语句:
SELECT DISTINCT S.*
FROM Student S
JOIN SC ON S.sno = SC.sno
JOIN Course C ON SC.cno = C.cno
JOIN Teacher T ON C.tno = T.tno
WHERE T.tname = '李正科';
sno | sname | ssex | sdept | sage | sbirthday |
96001 | 张三 | 男 | CS | 20 | 2002-01-01 |
96002 | 李四 | 女 | CS | 19 | 2003-02-02 |
96005 | 孙七 | 男 | IS | 22 | 2000-05-05 |
(9)新建一个关系表S1(SNO,SNAME,SD,SA),其字段类型定义与Student表中的相应字段(SNO,SNAME,SDEPT,SAGE)的数据类型定义相同。将表Student中在计算机系'CS'的学生数据插入到表S1中。
SQL语句:
CREATE TABLE S1 (
SNO VARCHAR(20),
SNAME VARCHAR(50),
SD VARCHAR(20),
SA INT
);
INSERT INTO S1(SNO, SNAME, SD, SA)
SELECT sno, sname, sdept, sage
FROM Student
WHERE sdept = 'CS';
SNO | SNAME | SD | SA |
96001 | 张三 | CS | 20 |
96002 | 李四 | CS | 19 |
(10)建立计算机系的学生的视图STUDENT_CS
SQL语句:
CREATE VIEW STUDENT_CS AS
SELECT *
FROM Student
WHERE sdept = 'CS';
sno | sname | ssex | sdept | sage | sbirthday |
96001 | 张三 | 男 | CS | 20 | 2002-01-01 |
96002 | 李四 | 女 | CS | 19 | 2003-02-02 |