SELECT DISTINCT SC.`S#`,SNAME FROM SC,S,C WHERE SC.`S#`=S.`S#` AND C.`C#`=SC.`C#` AND CNAME EXISTS('数据库','编译原理') 为什么会发生错误
时间: 2023-10-22 18:05:20 浏览: 102
这个 SQL 语句存在语法错误,正确的语法应该是:
```
SELECT DISTINCT SC.`S#`, S.SNAME
FROM SC
JOIN S ON SC.`S#` = S.`S#`
JOIN C ON C.`C#` = SC.`C#`
WHERE C.CNAME IN ('数据库', '编译原理');
```
在这个 SQL 语句中,我们使用了 JOIN 关键字来连接 SC、S 和 C 三张表,其中 SC 和 S 表通过 S# 字段连接,C 和 SC 表通过 C# 字段连接。这样,我们就能够查询出选了“数据库”或“编译原理”这两门课程的学生的学号和姓名。注意,我们使用了 WHERE 子句来限制课程名称只能是“数据库”或“编译原理”,而且使用了 IN 关键字来简化语句。
相关问题
SELECT DISTINCT SC.`S#`,SNAME FROM SC,S,C WHERE SC.`S#`=S.`S#` AND C.`C#`=SC.`C#` AND CNAME IN('数据库','编译原理') 怎么用EXISTS替代
可以使用 EXISTS 来替代该查询,具体的 SQL 语句如下:
```
SELECT DISTINCT S.`S#`, S.SNAME
FROM S
WHERE EXISTS (
SELECT *
FROM SC
INNER JOIN C ON C.`C#`=SC.`C#`
WHERE SC.`S#`=S.`S#` AND C.CNAME IN ('数据库', '编译原理')
)
```
这里我们使用了 EXISTS 子句,其作用是检查子查询是否存在结果,如果存在则返回 true,否则返回 false。在这个查询中,我们将外层查询的 FROM 语句改为 S 表,然后使用 EXISTS 子句来检查是否存在符合条件的 SC 和 C 表的记录。
select Sno,Sname from Student where Sno in(select distinct Sno from SC s1 where not exists(select * from SC s2 where s2.Sno='200215121' and not exists(select * from SC s3 where s1.Sno=s3.Sno and s2.Cno=s3.Cno))
这是一个 SQL 查询语句,目的是查找选修了与学号为200215121的学生选修的课程相同的其他学生的学号和姓名。具体实现为:首先从 SC 表中查出所有选过与学号为200215121的学生选修相同课程的学生学号,然后再从 Student 表中查出这些学生的学号和姓名。
请注意,这只是一个查询语句,需要在实际数据库系统中执行才能得到正确结果。
阅读全文