ThetaSome_ThetaAll子查询

基本语法

表达式 θ some(子查询)
表达式 θ all (子查询)

语法中,θ是比较运算符 <,>,>=,<=,=,<>

如果表达式的值至少与子查询的结果的某一个值相比较满足θ关系,则“表达式 θ some(子查询)”的结果便为真;
如果表达式的值与子查询结果的所有值相比都满足θ关系,则表达式θ all(子查询)的结果便为真

找出工资最低的老师

表内容

select * from teacher
+----------------+-----------------+
| Name           | Money           |
+----------------+-----------------+
| Tom            |            1500 |
| David          |            1800 |
| Andy           |            2560 |
+----------------+-----------------+

利用ThetaAll子查询

Select Name From Teacher
Where Money <= all( Select Money From Teacher )

+----------------+
| Name           |
+----------------+
| Tom            |
+----------------+

子查询首先找出了所有教师的工资,然后ThetaAll查询工资比所有教师的工资都低的教师姓名。输出为Tom。

找出高等数学课成绩不是最高的学生

表内容

mysql>select * from SC
+---------------+---------------+-----------------+
| SID           | CID           | Score           |
+---------------+---------------+-----------------+
| 001           | 高等数学      |              85 |
| 002           | 高等数学      |              90 |
| 003           | 高等数学      |              60 |
| 004           | 高等数学      |              75 |
+---------------+---------------+-----------------+

利用ThetaSome子查询

select SID from sc
where CID='高等数学' and Score < some( select Score From SC where CID='高等数学' )

+---------------+
| SID           |
+---------------+
| 001           |
| 003           |
| 004           |
+---------------+

子查询首先找出了高等数学课所有同学的成绩,然后thetasome查询“高等数学成绩比子查询结果中任意一个成绩小的同学学号”,就找出了成绩不是最高的同学。

找出所有课程都不及格的学生姓名

表内容

SC
+---------------+---------------+-----------------+
| SID           | CID           | Score           |
+---------------+---------------+-----------------+
| S001          | C001          |              40 |
| S001          | C002          |              65 |
| S002          | C001          |              59 |
| S002          | C002          |              45 |
| S002          | C003          |              18 |
+---------------+---------------+-----------------+
student
+---------------+----------------+
| SID           | Name           |
+---------------+----------------+
| S001          | Tom            |
| S002          | David          |
+---------------+----------------+

利用thetaAll子查询

select Name from student
where 60 > all(select Score from SC where SID = student.SID )
+----------------+
| Name           |
+----------------+
| David          |
+----------------+

注意!

表达式 = some(子查询)
表达式 in (子查询)是等价的

但<> some 与 not in不等价!!!
not in 等价于 <> all

posted @ 2019-03-08 16:15  Velscode  阅读(113)  评论(0编辑  收藏