10. 子查询

简介: <div style="font-family:微软雅黑; font-size:14px; line-height:21px; widows:auto">        子查询就是在查询语句中嵌套另一个查询,子查询支持多层嵌套。</div> <div style="font-family:微软雅黑; font-size:14px; line-height:21px; widows:aut
        子查询就是在查询语句中嵌套另一个查询,子查询支持多层嵌套。
子查询出现位置:
  • form语句后当成数据表(实质是一个临时视图,so这种方法也被称为内视图);
  • where条件后作为过滤条件的值。
Note:
  • 子查询要用括号括起来;
  • 把子查询作为数据表时(出现在from后),可为其起别名,作为前缀来限定数据列时,必须起别名【临时视图】。
  • 作为过滤条件where时,将子查询放在比较运算符的右边,可增强查询的可读性;
  • 作为过滤条件where时,单行子查询使用单行运算符,多行子查询使用多行运算符;
  • 作为过滤条件where,如果子查询返回单行或单列值,则被当成一个标量值使用,即可使用单行记录比较符。
  • ①若子查询返回多个值,则需要使用in、any、all等关键字。
  • ②in可单独使用,效果同比较运算符的in,子查询返回的多个值将被当成一个值列表。
  • ③any、all可与>、>=、<、<=、<>、=等运算符结合使用。与any(all)结合表示大于其中任意一个值(所有值)。
  • ④=any 与 in 的作用相同。
  • 作为where条件时,若子查询返回多行多列,则where应该有对应的数据列,并用圆括号将其组合起来。

子查询

#

数据表(临时视图)

SELECT *

FROM (SELECT FROM student) s

WHERE  s.id =6;

 

where条件,若子查询返回单行或单列,则被当成一标量使

SELECT *

FROM student

WHERE

     grade >(

         此子查询返回单行数据

         SELECT math

         FROM  grades

         WHERE id =1

     );

 

子查询返回多个值,则需要使inanyall等关

SELECT *

FROM student

WHERE

     id IN(

         in可单独使,效果同比较运算in,子查询返回的多个值将被当成一个值列表。

         SELECT id

         FROM  grades

         WHERE id = OR id =6

     );

 

=any

SELECT *

FROM student

WHERE

     =any等价于in

     id =ANY(SELECT id FROM grades);

 

>=all

SELECT *

FROM  student

WHERE

     id >=ALL(SELECT id FROM grades);

 

子查询返回多行多列,则where应该有对应的数据列,并圆括号将其组合起来。

SELECT  s.*

FROM student s

WHERE # 组合内的字段均对应相等

     (id, grade)=ANY(SELECT id, math FROM grades g);


目录
相关文章
|
6月前
|
SQL 关系型数据库 MySQL
MySQL数据库子查询练习——单个数据的子查询
MySQL数据库子查询练习——单个数据的子查询
30 1
|
7月前
(头哥)多表查询与子查询
(头哥)多表查询与子查询
130 0
|
7月前
|
SQL
深入了解关联查询和子查询
深入了解关联查询和子查询
69 0
|
7月前
聚合函数、子查询
聚合函数、子查询
|
SQL 关系型数据库 MySQL
第9章_子查询
第9章_子查询
68 0
|
SQL 索引
相关子查询
相关子查询
233 0
|
SQL 关系型数据库 MySQL
第09章_子查询
第09章_子查询
99 0
联合查询和子查询
联合查询和子查询
WITH 子句
WITH 子句
111 1
|
数据库管理
子查询(2)
如果子查询的执行依赖于外部查询,通常情况下都是因为子查询中的表用到了外部的表,并进行了条件关联,因此每执行一次外部查询,子查询都要重新计算一次,这样的子查询就称之为 关联子查询 。相关子查询按照一行接一行的顺序执行,主查询的每一行都执行一次子查询。
子查询(2)