主要是SQL语句中exists/not exists的用法,今天实验课遇到一个exists,好久没用,最终还是解决了。
不废话,表如下:
- student
Sno | Sname | age | college |
---|---|---|---|
S00001 | 张三 | 20 | 计算机学院 |
S00002 | 李四 | 19 | 通信学院 |
S00003 | 王五 | 21 | 计算机学院 |
- course
CourseId | CourseName | CourseBeforeId |
---|---|---|
C1 | 计算机导论 | Null |
C2 | C语言 | C1 |
c3 | 数据结构 | C2 |
- Choose
Sno | CourseId | Score |
---|---|---|
S00001 | C1 | 95 |
S00001 | C2 | 80 |
S00001 | C3 | 84 |
S00002 | C1 | 80 |
S00002 | C2 | 85 |
S00003 | C1 | 78 |
S00003 | C3 | 70 |
题目:用SELECT的存在量词EXISTS,查询与”张三“在同一学院学习的学生信息
看到这个之后,多表连接查询
1 | select * from student |
但结果呢
那么为什么不对呢,让我们来看看这条语句是怎样运行的
首先取Student表中的一个元组,然后在Student表中依次找Sname=’张三’,如果存在,则外层查询的where子句返回为真,则Student表中的该元组可以输出。然后依次遍历Student表中的其他元组。因为在Student表中”张三”这个人始终存在,所以where始终返回true,输出了三个学生的信息。
后来问同学,baidu了一下,于是看到了这样一篇
都是外表连接,于是想到自身表连接是否要为表区取别名呢。答案当然是肯定的,因为我是这样做出来的。 = =
1 | SELECT * FROM student AS s1 |
结果如下
好久没更新了,由于上周装双系统不知怎么把Win10的系统引导搞坏了,断断续续重装,现在才有时间。