Sintaxe de Subquery
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 MariaDB suporta todas as formas de subqueries e operações que o padrão SQL exige, assim como alguns recursos que são especificos do MariaDB. 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 MariaDB 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 MariaDB.
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 MariaDB anteriores a 4.1, a maioria da subqueries podem ser reescritas corretamente usando join e outros métodos. Leia "Rewriting Subqueries for Earlier MariaDB Versions".