📜  SQL |子查询(1)

📅  最后修改于: 2023-12-03 14:47:36.744000             🧑  作者: Mango

SQL子查询

在SQL语言中,子查询是指一个查询语句中嵌套了另一个查询语句。子查询可以嵌套在SELECT、FROM、WHERE、IN、和HAVING语句中。子查询语句必须始终出现在括号中。

SELECT语句中的子查询

SELECT语句中的子查询可以嵌套在SELECT语句中的任何位置。例如,下面的查询语句使用一个子查询从Orders表中检索出价格最高的订单,然后将结果与Customers表的详细信息一起返回:

SELECT CustomerID, CustomerName, OrderAmount
FROM Customers
WHERE CustomerID IN
  (SELECT CustomerID
   FROM Orders
   WHERE OrderAmount =
     (SELECT MAX(OrderAmount)
      FROM Orders))
ORDER BY OrderAmount DESC;
FROM语句中的子查询

FROM语句中的子查询用于检索一部分数据,然后将其与来自其他表的数据一起使用。例如,下面的查询检索出有关雇员薪水的信息,并将其与来自部门表的信息一起使用:

SELECT e.FirstName, e.LastName, e.Salary, d.DepartmentName
FROM Employees AS e
  JOIN (
    SELECT DepartmentID, DepartmentName
    FROM Departments
  ) AS d ON e.DepartmentID = d.DepartmentID
ORDER BY e.LastName, e.FirstName;
WHERE语句中的子查询

WHERE语句中的子查询用于检索仅满足特定条件的数据。例如,下面的查询检索出客户订购的书籍数量超过5本的所有订单:

SELECT OrderID, CustomerID
FROM Orders
WHERE CustomerID IN
  (SELECT CustomerID
   FROM OrderDetails
   GROUP BY CustomerID
   HAVING SUM(Quantity) > 5);

子查询的结果也可以使用运算符进行比较,例如下面的查询检索出订购了3本及以上书籍的客户信息:

SELECT CustomerID, CustomerName
FROM Customers
WHERE CustomerID IN
  (SELECT CustomerID
   FROM OrderDetails
   GROUP BY CustomerID
   HAVING SUM(Quantity) >= 3);
IN语句中的子查询

IN语句中的子查询用于检索与另一个查询结果匹配的数据。例如,下面的查询检索出订购了书籍的客户:

SELECT CustomerID, CustomerName
FROM Customers
WHERE CustomerID IN
  (SELECT CustomerID
   FROM Orders);
HAVING语句中的子查询

HAVING语句中的子查询用于对GROUP BY语句返回的结果进行过滤。例如,下面的查询检索出订单总数大于10的所有客户:

SELECT CustomerID, COUNT(OrderID) as OrderCount
FROM Orders
GROUP BY CustomerID
HAVING COUNT(OrderID) > 10;

以上就是SQL语言中子查询的基本用法,可以根据实际需求灵活运用。