Subconsultas SQL

Observação: Desejamos fornecer o conteúdo da Ajuda mais recente no seu idioma da forma mais rápida possível. Esta página foi traduzida de forma automatizada e pode conter imprecisões ou erros gramaticais. Nosso objetivo é que este conteúdo seja útil para você. As informações foram úteis? Dê sua opinião no final desta página. Aqui está o artigo em inglês para facilitar a referência.

Uma subconsulta é uma instrução SELECT aninhada dentro de um SELECT, SELECT... PARA INSERIR... INTO, DELETE ou UPDATE ou em outra subconsulta.

Sintaxe

Você pode usar três formas de sintaxe para criar uma subconsulta:

comparação [QUALQUER | TODOS OS | Alguns] (sqlstatement)

expressão [NÃO] EM (sqlstatement)

[NÃO] EXISTS (sqlstatement)

Uma subconsulta tem estas partes:

Parte

Descrição

comparação

Um expressão e um operador de comparação que compara a expressão com os resultados da subconsulta.

expressão

Uma expressão para o qual o conjunto de resultados da subconsulta é pesquisado.

instruçãosql

Uma instrução SELECT, seguindo o mesmo formato e regras como qualquer outra instrução SELECT. Ele deve estar entre parênteses.


Comentários

Você pode usar uma subconsulta em vez de uma expressão na lista de campos de uma instrução SELECT ou em um onde ou cláusula HAVING. Em uma subconsulta, use uma instrução SELECT para fornecer um conjunto de um ou mais valores específicos para avaliar em WHERE ou HAVING expressão cláusula.

Use o predicado ANY ou SOME, que são sinônimos, para recuperar registros da consulta principal que satisfazem à comparação com todos os registros recuperados na subconsulta. O exemplo a seguir retorna todos os produtos cujo preço unitário é maior do que de qualquer produto vendido com desconto de 25% ou mais:

SELECT * FROM Products WHERE UnitPrice > ANY (SELECT UnitPrice FROM OrderDetails WHERE Discount >= .25);

Use o predicado ALL para recuperar somente aqueles registros na consulta principal que satisfazem à comparação com todos os registros recuperados na subconsulta. Se você alterou ANY para ALL no exemplo anterior, a consulta retornará somente os produtos cujo preço unitário é maior do que todos os produtos vendidos com desconto de 25% ou mais. Isso é muito mais restritivo.

Use o predicado IN para recuperar somente aqueles registros na consulta principal para os quais algum registro da subconsulta contém um valor igual. O exemplo a seguir retorna todos os produtos com um desconto de 25% ou mais:

SELECT * FROM Products WHERE ProductID IN (SELECT ProductID FROM OrderDetails WHERE Discount >= .25);

Por outro lado, você pode usar NOT IN para recuperar somente os registros da consulta principal para os quais nenhum registro da subconsulta contém um valor igual.

Use o predicado EXISTS (com o opcional não palavra reservada) em comparações verdadeiro/falso para determinar se a subconsulta retornará todos os registros.

Você também pode usar aliases de nome de tabela em uma subconsulta para se referir a tabelas listadas em uma cláusula FROM externa à subconsulta. O exemplo a seguir retorna os nomes dos funcionários cujo salário é igual a ou maior que o salário médio de todos os funcionários tendo o mesmo cargo. A tabela Employees recebe o alias "T1":

SELECT LastName, FirstName, Title, Salary FROM Employees AS T1 WHERE Salary >= (SELECT Avg(Salary) FROM Employees WHERE T1.Title = Employees.Title) Order by Title;

No exemplo anterior, a como palavra reservada é opcional.

Algumas subconsultas são permitidas em consultas de tabela de referência cruzada — especificamente, como predicados (aqueles na cláusula WHERE). Subconsultas como saída (aquelas na lista SELECT) não são permitidas em consultas de tabela de referência cruzada.



Expanda suas habilidades no Office
Explore o treinamento
Obtenha novos recursos primeiro
Ingressar no Office Insider

Essas informações foram úteis?

Obrigado por seus comentários!

Agradecemos pelos seus comentários! Parece que pode ser útil conectar você a um de nossos agentes de suporte do Office.

×