个性化阅读
专注于IT技术分析

DBMS SQL子查询

本文概述

子查询是另一个SQL查询中的查询, 并且嵌入在WHERE子句中。

重要规则:

  • 子查询可以放置在许多SQL子句中, 例如WHERE子句, FROM子句, HAVING子句。
  • 你可以将子查询与SELECT, UPDATE, INSERT, DELETE语句以及=, <, >, > =, <=, IN, BETWEEN等运算符一起使用。
  • 子查询是另一个查询中的查询。外部查询称为主查询, 内部查询称为子查询。
  • 子查询在比较运算符的右侧。
  • 子查询括在括号中。
  • 在子查询中, 不能使用ORDER BY命令。但是GROUP BY命令可用于执行与ORDER BY命令相同的功能。

1.使用Select语句的子查询

SQL子查询最常与Select语句一起使用。

句法

SELECT column_name
FROM table_name
WHERE column_name expression operator 
( SELECT column_name  from table_name WHERE ... );

考虑EMPLOYEE表具有以下记录:

ID NAME 年龄 地址 薪水
1 John 20 US 2000.00
2 Stephan 26 Dubai 1500.00
3 David 27 Bangkok 2000.00
4 Alina 29 UK 6500.00
5 Kathrin 34 Bangalore 8500.00
6 Harry 42 China 4500.00
7 Jackson 25 Mizoram 10000.00

带有SELECT语句的子查询将是:

SELECT * 
    FROM EMPLOYEE
    WHERE ID IN (SELECT ID 
    FROM EMPLOYEE 
    WHERE SALARY > 4500);

这将产生以下结果:

ID NAME 年龄 地址 薪水
4 Alina 29 UK 6500.00
5 Kathrin 34 Bangalore 8500.00
7 Jackson 25 Mizoram 10000.00

2.带有INSERT语句的子查询

  • SQL子查询也可以与Insert语句一起使用。在insert语句中, 从子查询返回的数据用于插入到另一个表中。
  • 在子查询中, 可以使用任何字符, 日期函数来修改所选数据。

句法:

INSERT INTO table_name (column1, column2, column3....) 
SELECT *
FROM table_name
WHERE VALUE OPERATOR

考虑一个与EMPLOYEE类似的表EMPLOYEE_BKP。

现在, 使用以下语法将完整的EMPLOYEE表复制到EMPLOYEE_BKP表中。

INSERT INTO EMPLOYEE_BKP
   SELECT * FROM EMPLOYEE 
   WHERE ID IN (SELECT ID 
   FROM EMPLOYEE);

3.带有UPDATE语句的子查询

SQL的子查询可以与Update语句一起使用。当子查询与Update语句一起使用时, 可以更新表中的单列或多列。

句法

UPDATE table
SET column_name = new_value
WHERE VALUE OPERATOR
   (SELECT COLUMN_NAME
   FROM TABLE_NAME
   WHERE condition);

假设我们有一个EMPLOYEE_BKP表, 它是EMPLOYEE表的备份。给定的示例对AGE大于或等于29的所有雇员在EMPLOYEE表中将SALARY更新.25倍。

UPDATE EMPLOYEE
   SET SALARY = SALARY * 0.25
   WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP
      WHERE AGE >= 29);

这将影响三行, 最后, EMPLOYEE表将具有以下记录。

ID NAME 年龄 地址 薪水
1 John 20 US 2000.00
2 Stephan 26 Dubai 1500.00
3 David 27 Bangkok 2000.00
4 Alina 29 UK 1625.00
5 Kathrin 34 Bangalore 2125.00
6 Harry 42 China 1125.00
7 Jackson 25 Mizoram 10000.00

4.带有DELETE语句的子查询

SQL的子查询可以与Delete语句一起使用, 就像上面提到的任何其他语句一样。

句法

DELETE FROM TABLE_NAME
WHERE VALUE OPERATOR
   (SELECT COLUMN_NAME
   FROM TABLE_NAME
   WHERE condition);

假设我们有一个EMPLOYEE_BKP表, 它是EMPLOYEE表的备份。给定的示例从AGE大于或等于29的所有EMPLOYEE中删除EMPLOYEE表中的记录。

DELETE FROM EMPLOYEE
   WHERE AGE IN (SELECT AGE FROM EMPLOYEE_BKP
      WHERE AGE >= 29 );

这将影响三行, 最后, EMPLOYEE表将具有以下记录。

ID NAME 年龄 地址 薪水
1 John 20 US 2000.00
2 Stephan 26 Dubai 1500.00
3 David 27 Bangkok 2000.00
7 Jackson 25 Mizoram 10000.00
赞(0)
未经允许不得转载:srcmini » DBMS SQL子查询

评论 抢沙发

评论前必须登录!