今天是学习数据库的第七天,学习的内容是如何使用子查询,因为提前预习过,所以学起来也比较轻松。
内容如下:
◇ 非相关子查询是独立于外部查询的子查询。子查询总共执行一次,执行完毕后将值传递给外部查询。
◇ 相关子查询的执行依赖于外部查询的数据,外部查询一次返回一行,子查询就执行一次。
※相关子查询通常要消耗更长的执行时间,当数据量增加时,执行时间会急剧增加。
<span style="font-size:14px;">SELECT CoulumnA,(子查询) AS CoulumnB FROM 表名;</span>
子查询嵌套位置
SELECT中嵌套
<span style="font-size:14px;">SELECT 学号,姓名,科目,
(SELECT 班级名称 FROM t_class c WHERE c.班级编号=s.班级编号) 名称
FROM t_student s</span>
※嵌套在SELECT语句中SQL语句要求查询的值只能是单行和单列。
FROM 中嵌套
<span style="font-size:14px;">标准结构:SELECT 列1,列2 FROM (子查询) AS 别名
</span>
※其说明FROM中嵌套的SQL不受任何限制,也就是说子查询结果可以为多行多列
WHERE中嵌套
<span style="font-size:14px;">标准结构:SELECT 列1,列2 FROM 表 WHERE 列=(子查询)</span>
在WHERE中嵌套的子查询根据不同的运算符有不同的分类:1.比较运算符(>、<、=、>=、<=、!=)
※在比较运算符的表达式中可以使用子查询,这个子查询要求返回的结果只能 是单列和单行。
2.in 和not in运算符
※使用IN和NOT IN运算符时,如果表达式中有子查询,则该子查询的结果为单列,可以为单行或多行。
3.子查询运算符(ALL、ANY、 EXISTS)
1.ALL运算符
和子查询的结果逐一比较,必须全部满足时表达式的值才为真。
※使用ALL运算符时要求其中子查询返回的结果是单列,可以为单行或多行。
2.ANY运算符
和子查询的结果逐一比较,其中一条记录满足条件则表达式的值就为真。
※使用ANY运算符时要求其中子查询返回的结果是单列,可以为单行或多行
3.EXISTS/NOT EXISTS运算符
EXISTS判断子查询是否存在数据,如果存在则表达式为真,反之为假。NOT EXISTS相反。
※使用EXISTS运算符时只要子查询有数据则表达式为真,因此子查询的结果是单列或多列、单行或多行都行
GROUP BY中嵌套
※GROUP BY中嵌套和SELECT中嵌套类似,要求子查询只能返回单行单列值。
HAVING中嵌套
※HAVING中嵌套子查询和WHERE中嵌套子查询类似,只是能用到聚合函数。
ORDER BY中嵌套
※ORDER BY中嵌套子查询和SELECT中嵌套子查询类似,要求子查询只能返回单行单列值。
子查询比较简单,还是需要多加练习,才能更加熟练的掌握和运用。