SQL语句,已知Student、Course和SC表,查询至少同时选了C001和C002两门课程的学生的学号和所选的课程号。
时间: 2023-06-12 17:05:05 浏览: 128
可以使用子查询和交集(intersect)操作来解决这个问题,具体的 SQL 语句如下:
```
SELECT SC.SID, SC.CID
FROM SC
WHERE SC.CID = 'C001'
INTERSECT
SELECT SC.SID, SC.CID
FROM SC
WHERE SC.CID = 'C002'
```
首先,第一个子查询选出选了课程 C001 的学生编号和所选的课程编号,第二个子查询选出选了课程 C002 的学生编号和所选的课程编号,然后将两个子查询的结果取交集,得到同时选了两门课程的学生编号和所选的课程编号。
相关问题
SQL语句,已知Student、Course和SC表,查询至少选了C001和C002两门课程的学生的学号和所选的课程号。
可以使用子查询的方式来解决这个问题。具体的 SQL 语句如下:
```
SELECT SC.SID, SC.CID
FROM SC
WHERE SC.CID IN ('C001', 'C002')
AND SC.SID IN (SELECT SC2.SID
FROM SC SC2
WHERE SC2.CID='C001'
AND SC2.SID IN (SELECT SC3.SID
FROM SC SC3
WHERE SC3.CID='C002'))
```
其中,第一个子查询选出选了 C001 或 C002 课程的学生,第二个子查询选出同时选了 C001 和 C002 课程的学生。两个子查询的交集即为至少选了 C001 和 C002 两门课程的学生。
检索出 sc表中至少选修了’C001’与’C002’课程的学生学号。
可以使用以下 SQL 查询语句来实现:
```
SELECT DISTINCT 学号
FROM sc
WHERE 课程号 IN ('C001', 'C002')
GROUP BY 学号
HAVING COUNT(DISTINCT 课程号) = 2
```
解释一下查询语句:
- 首先在 `sc` 表中选取所有选修了 'C001' 或 'C002' 课程的记录。
- 然后按照学号分组,统计每个学生选修的不同课程数目。
- 最后筛选出选修了两门不同课程的学生学号。`HAVING` 子句用于筛选符合条件的分组结果,`COUNT(DISTINCT 课程号)` 表示统计不同的课程数目,这里要求等于 2,即同时选修了 'C001' 和 'C002' 两门课程。
阅读全文