In SQL è possibile inserire una query SQL all'interno di un'altra query nota come subquery. In una sottoquery, il risultato della query esterna dipende dal set di risultati della sottoquery interna. Per esempio:
SELECT * FROM customers WHERE age = ( SELECT MIN(age) FROM customers );
SELECT customer_id, name FROM customers WHERE customer_id IN ( SELECT customer_id FROM orders );
In alcuni casi, possiamo ottenere lo stesso set di risultato utilizzando una sottoquery e la clausola JOIN
. Per esempio il set di risultati di questa query:
SELECT DISTINCT customers.customer_id, customers.name FROM customers INNER JOIN orders ON (customers.customer_id = orders.customer_id) ORDER BY customers.customer_id;
sarà lo stesso di questa query:
SELECT customer_id, name FROM customers WHERE customer_id IN ( SELECT customer_id FROM orders );
JOIN
invece di una sottoquery, perché la velocità di esecuzione di JOIN
è più veloce ed ottimizzata di una sottoquery.