基于数据表基于第一次分享的SQL语句联系
Snum | Sname | Ssex | Sage | Sphone | Dname |
---|---|---|---|---|---|
S001 | 王明 | 男 | 19 | 86824571 | 数学系 |
S002 | 李勇 | 男 | 23 | 89454321 | 物理系 |
S003 | 刘燕 | 女 | 21 | 计算机系 | |
S004 | 王萍 | 女 | 23 | 电子系 | |
S005 | 王佳 | 男 | 24 | 13098765892 | 计算机系 |
S006 | 赵婷 | 女 | 20 | 物理系 |
学生表S
Snum | Cnum | Score |
---|---|---|
S001 | C1 | 83 |
S001 | C2 | 89 |
S001 | C3 | NULL |
S001 | C4 | 85 |
S001 | C5 | 69 |
S002 | C3 | 78 |
S002 | C4 | 75 |
S003 | C1 | 85 |
S004 | C2 | NULL |
S005 | C1 | 92 |
S005 | C3 | 76 |
选课表SC
Cnum | Cname | Cfreq |
---|---|---|
C1 | 数据库系统原理 | 4 |
C2 | C程序设计 | 4 |
C3 | 计算机体系结构 | 3 |
C4 | 自动控制原理 | 2 |
C5 | 数据结构 | 4 |
课程表C
下面是题目的分享:
1. 简单查询操作。
1)求数学系学生的学号和姓名。
2)求选修了课程的学生学号。
3)求选修课程号为‘C1’的学生号和成绩,并要求对查询结果按成绩的降序排列,如果成绩相同按学号的升序排列。
4)求选修课程号为‘C1’且成绩在80~90之间的学生学号和成绩,成绩乘以0.8输出。
5)求数学系或计算机系姓王的学生的信息。
6)求缺少了成绩的学生的学号和课程号。
7)查询有选课记录的所有学生的学号,用DISTINCT限制结果中学号不重复。
2. 连接查询操作。
1)查询每个学生的情况以及他所选修的课程。
2)求学生的学号、姓名、选修的课程及成绩。
3)求选修课程号为‘C1’且成绩在90以上的学生学号、姓名和成绩。
解题步骤如下,为个人代码,均成功测试过,仅供参考
--(1)
SELECT Snum,Sname FROM 学生 WHERE Dname = '数学系'
--(2)
SELECT Snum FROM 学生 WHERE Snum IN (SELECT Snum FROM 选课)
--(3)
SELECT Snum,Score FROM 选课 WHERE Cnum = 'C1' ORDER BY Score DESC, Snum;
--(4)
SELECT Snum,Score*0.8 as Score FROM 选课 WHERE Cnum = 'C1' AND Score Between 80 AND 90;
--(5)
SELECT Snum,Sname,Ssex,Sage,Sphone,Dname FROM 学生
WHERE Sname Like '王%' AND Dname IN ('数学系','计算机系')
--(6)
SELECT Snum,Cnum FROM 选课 WHERE Score IS NULL
--(7)
SELECT DISTINCT Snum FROM 选课
--(1)
SELECT 学生.Snum,学生.Sname,学生.Ssex,学生.Sage,学生.Sphone,学生.Dname,课程.Cname
FROM 学生 LEFT JOIN 选课 on 学生.Snum = 选课.Snum LEFT JOIN 课程 ON 课程.Cnum = 选课.Cnum
--(2)
SELECT 学生.Snum,学生.Sname,课程.Cname,选课.Score
FROM 学生 join 选课 on 学生.Snum = 选课.Snum join 课程 ON 课程.Cnum = 选课.Cnum
--(3)
SELECT 学生.Snum,学生.Sname,选课.Score
FROM 学生 join 选课 on 学生.Snum = 选课.Snum
WHERE 选课.Cnum = 'C1' AND 选课.Score>= 90