[+/-]
ANY
, IN
, and
SOME
ALL
EXISTS
and NOT EXISTS
FROM
clause
Uma subquery é uma instrução SELECT
dentro
de outra instrução. Por exemplo:
SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);
No exemplo acima, SELECT * FROM t1 ...
é a
consulta principal (ou
instrução principal), e (SELECT
column1 FROM t2)
é a subquery.
Dizemos que a subquery está aninhada na
consulta principal, e de fato é possível aninhar subqueries
dentro de outras subqueries, a uma grande profundidade. uma
subquery deve estar sempres dentro de parenteses.
A partir da versão 4.1. o MySQL suporta todas as formas de subqueries e operações que o padrão SQL exige, assim como alguns recursos que são especificos do MySQL. A principal vantagem das subqueries são:
elas permitem consultas que estão estruturadas assim é possível isolar cada parte de uma instrução,
elas fornecem modos alternativos de realizar operações que, de outra forma, exigiriam joins e unions complexos,
elas são, na opinião de muitas pessoas, legíveis. De
fato, foi a inovação das subqueries que deu às pessoas a
idéia original do nome SQL
``Structured
Query Language''.
Com versões MySQL anteriores era necessário evitar ou contornar as subqueries, mas as pessoas que começam a escrever código agora descobrirão que subqueries são uma parte muito útil do pacote de ferramentas.
Aqui está uma instrução exemplo que mostra o ponto principal sobre a sintaxe de subquery como especificado pelo SQL padrão e suportado no MySQL.
DELETE FROM t1 WHERE s11 > ANY (SELECT COUNT(*) /* no hint */ FROM t2 WHERE NOT EXISTS (SELECT * FROM t3 WHERE ROW(5*t2.s1,77)= (SELECT 50,11*s1 FROM t4 UNION SELECT 50,77 FROM (SELECT * FROM t5) AS t5)));
Para as versões do MySQL anteriores a 4.1, a maioria da subqueries podem ser reescritas com sucesso usando join e outros métodos. See Secção 6.4.2.11, “Rewriting Subqueries for Earlier MySQL Versions”.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.