基本语法
表达式 θ some(子查询)
表达式 θ all (子查询)语法中,θ是比较运算符 <,>,>=,<=,=,<>
如果表达式的值至少与子查询的结果的某一个值相比较满足θ关系,则“表达式 θ some(子查询)”的结果便为真;
如果表达式的值与子查询结果的所有值相比都满足θ关系,则表达式θ all(子查询)的结果便为真找出工资最低的老师
表内容
select * from teacher+----------------+-----------------+| Name | Money |+----------------+-----------------+| Tom | 1500 || David | 1800 || Andy | 2560 |+----------------+-----------------+
利用ThetaAll子查询
Select Name From TeacherWhere 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 scwhere 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 studentwhere 60 > all(select Score from SC where SID = student.SID )+----------------+| Name |+----------------+| David |+----------------+
注意!
表达式 = some(子查询)
表达式 in (子查询)是等价的但<> some 与 not in不等价!!!
not in 等价于 <> all