嵌套查询又叫子查询或内查询,用于为主查询返回其所需数据,或者对检索数据进行进一步的限制

  • 子查询必须阔在圆括号中
  • 子查询的 SELECT子句只能有一个列,除非主查询中有多个列,用于与子查询中的列相比较
  • 子查询不能使用 ORDER BY,但主查询可以。在子查询中,GROUP BY 可以起到同 ORDER BY 相同的作用
  • 返回多行数据的子查询只能同多值操作符一起使用,如 IN 操作符
  • 子查询不能直接用在集合函数中
  • BETWEEN 操作符不能同子查询一起使用,但是 BETWEEN 操作符可以用在子查询中

运算符法

  1. SELECT 列名 FROM 表名 WHERE 列名 运算符 -- 外层查询,也叫父查询
  2. (
  3. SELECT 列名 FROM 表名 WHERE 条件 -- 内层查询,也叫子查询
  4. );
  1. 1. 找表(父查询和子查询的表)、外键
  2. 2. 先写已知条件,将外键查询出来,即先写子查询
  3. 3. 再根据子查询的结果写外查询,即再写外查询
  4. SELECT * FROM Student WHERE Id =
  5. (
  6. SELECT Id FROM Sore WHERE Name = '数学'
  7. );

父查询的条件即是子查询的结果

范围法

  1. SELECT 列名 FROM 表名 WHERE 列名 IN -- 外层查询,也叫父查询
  2. (
  3. SELECT 列名 FROM 表名 WHERE 条件 -- 内层查询,也叫子查询
  4. )

子查询结果是多个时用 IN,否则就用运算符

  1. SELECT 列名 FROM 表名 WHERE 列名 运算符
  2. ANY
  3. (
  4. SELECT 列名 FROM 表名 WHERE 条件
  5. )
  1. SELECT 列名 FROM 表名 WHERE 列名 运算符
  2. ALL
  3. (
  4. SELECT 列名 FROM 表名 WHERE 条件
  5. )

其他操作

INSERT子查询

  1. INSERT INTO 表名[(列名1, 列名2)]
  2. SELECT [*|列名1,列名2] FROM 表名1 表名2
  3. [WHERE VALUE OPERATOR];

UPDATE子查询

  1. UPDTAE 表名
  2. SET 列名=值
  3. [WHERE VALUE OPERATOR]
  4. (SELECT 列名 FROM 表名)
  5. [WHERE]

DELETE FROM 子查询

  1. DELETE FROM 表名
  2. [WHERE VALUE OPERATOR]
  3. (SELECT 列名 FROM 表名)
  4. [WHERE]