ԭ�ĵ�ַ��http://www.mysqltutorial.org/mysql-subquery/
A MySQL subquery is a query that is nested inside another query such as SELECT, INSERT, UPDATEor DELETE. In addition, a MySQL subquery can be nested inside another subquery.
A MySQL subquery is also called an inner query while the query that contains the subquery is called an outer query.
You can use a subquery anywhere that you use an expression. In addition, you must enclose a subquery in parentheses.
You can use comparison operators e.g., =, >, <, etc., to compare a single value returned by the subquery with the expression in the WHERE clause.
SELECT customerNumber, checkNumber, amount FROM payments WHERE amount = ( SELECT MAX(amount) FROM payments );
In addition to the equality operator, you can use other comparison operators such as greater than (>), less than(<), etc.
SELECT customerNumber, checkNumber, amount FROM payments WHERE amount > ( SELECT AVG(amount) FROM payments );
If a subquery returns more than one value, you can use other operators such as IN or NOT IN operator in the WHERE
clause.
SELECT customername FROM customers WHERE customerNumber NOT IN( SELECT DISTINCT customernumber FROM orders );
When a subquery is used with EXISTS
or NOT EXISTS
operator, a subquery returns a Boolean value of TRUE
or FALSE
. The subquery acts as an existence check.
SELECT customerName FROM customers WHERE EXISTS ( SELECT priceEach * quantityOrdered FROM orderdetails WHERE priceEach * quantityOrdered > 10000 GROUP BY orderNumber )
When you use a subquery in the FROM
clause, the result set returned from a subquery is used as a table. This table is referred to as a derived table or materialized subquery.
SELECT MAX(items), MIN(items), FLOOR(AVG(items)) FROM ( SELECT orderNumber, COUNT(orderNumber) AS items FROM orderdetails GROUP BY orderNumber ) AS lineitems;
In the previous examples, you notice that the subquery is independent. It means you can execute the subquery as a single query. However, a correlated subquery is a subquery that uses the information from the outer query. In other words, a correlated subquery depends on the outer query. A correlated subquery is evaluated once for each row in the outer query.
SELECT productname, buyprice FROM products AS p1 WHERE buyprice > ( SELECT AVG(buyprice) FROM products WHERE productline = p1.productline )