查出选修了数据库和数学这两门课程的学生姓名和院系
数据库表,字段信息如下
课程表course:
select * from course ;
cno cname
1001 数学
1002 数据库
1003 语文
学生表student:
select * from student ;
sno sname sex age sdept
20121011 张三 男 18 计算机
20131011 李四 男 17 计算机
20131012 王五 女 16 信息
20131013 赵六 女 19 信息
选课表sc:
select * from sc;
sno cno grade
20131011 1001 100
20131012 1001 70
20131011 1002 98
sql:
SELECT
sname, sdept
from Student
WHERE sno IN (
SELECT sno FROM sc WHERE cno IN (
SELECT cno FROM course WHERE cname = '数学'
AND sno IN (
SELECT sno FROM sc WHERE cno IN (
SELECT cno FROM course
WHERE cname = '数据库' ))));
运行结果为:
sname sdept
李四 计算机
期望的结果是运行失败,因为针对第三层子查询来说,提示语法错误:
SELECT cno FROM course WHERE cname = '数学' AND sno IN (
SELECT sno FROM sc WHERE cno IN (
SELECT cno FROM course WHERE cname = '数据库' ))
[Err] 1054 - Unknown column 'sno' in 'IN/ALL/ANY subquery'
疑问:为什么在子查询失败的情况下,整体查询能正常执行???