|
2019-05-17
SELECT * FROM products WHERE product_id NOT IN ( SELECT DISTINCT product_id FROM order_items ); -- 或者 SELECT * FROM employees WHERE salary > ( SELECT AVG(salary) FROM employees );
SELECT * FROM clients WHERE client_id NOT IN ( SELECT DISTINCT client_id FROM invoices ); -- 可以改写为 SELECT * FROM clients c LEFT JOIN invoices i USING (client_id) WHERE i .client_id IS NULL
SELECT * FROM invoices WHERE invoice_total > ( SELECT MAX(invoice_total) FROM invoices WHERE client_id = 3 ); -- 可以改写成 SELECT * FROM invoices WHERE invoice_total > ALL ( SELECT invoice_total FROM invoices WHERE client_id = 3 );
SELECT * FROM clients WHERE client_id IN ( SELECT client_id FROM invoices GROUP BY client_id HAVING COUNT(*) >= 2 ) -- 可以改写成 SELECT * FROM clients WHERE client_id = ANY ( SELECT client_id FROM invoices GROUP BY client_id HAVING COUNT(*) >= 2 )
SELECT * FROM employees e WHERE salary > ( SELECT AVG(salary) FROM employees WHERE office_id = e.office_id )
SELECT * FROM clients c WHERE EXISTS ( SELECT client_id FROM invoices WHERE client_id = c.client_id )SELECT 子句中的子查询
invoice_id, invoice_total, (SELECT AVG(invoice_total) FROM invoices) AS invoice_average, invoice_total - (SELECT invoice_average) AS difference FROM invoices如果在同一 SELECT 语句中使用新产生的列,必须再次使用 SELECT。
SELECT client_id, name, (SELECT SUM(invoice_total) FROM invoices WHERE client_id = c.client_id) AS total_sales, (SELECT AVG(invoice_total) FROM invoices) AS average, (SELECT total_sales - average) AS difference FROM clients c
SELECT * FROM ( SELECT client_id, name, (SELECT SUM(invoice_total) FROM invoices WHERE client_id = c.client_id) AS total_sales, (SELECT AVG(invoice_total) FROM invoices) AS average, (SELECT total_sales - average) AS difference FROM clients c ) AS sales_summary;
编辑:航网科技 来源:腾讯云 本文版权归原作者所有 转载请注明出处
微信扫一扫咨询客服
全国免费服务热线
0755-36300002