English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Subconsulta SQL

Neste tutorial, você aprenderá como inserir consultas dentro de outras consultas no SQL.

O que é uma consulta aninhada?

Consultas aninhadas, também conhecidas como consultas aninhadas ou subseleções, sãoSELECIONARembutidas em outra consulta SQL. ONDE OU HAVINGConsultas na cláusula. Os dados retornados pela subconsulta são usados pelo statement externo da mesma forma que valores literais.

Subconsultas fornecem um método simples e eficaz para lidar com consultas que dependem dos resultados de outra consulta. Elas são quase idênticas às statements SELECT comuns, mas têm poucas restrições. Os pontos mais importantes são os seguintes:

  • Subconsultas devem sempre aparecer entre parênteses.

  • Subconsultas devem retornar apenas uma coluna. Isso significa que você não pode usar SELECT *,a menos que a tabela referenciada contenha apenas uma coluna. Se o objetivo é uma comparação de linhas, você pode usar subconsultas que retornam várias colunas.

  • Você pode usar operadores que retornam múltiplos valores (por exemploIN OU NOT INoperador) de várias linhas de subconsultas.

  • Subconsultas não podem serUNION. Apenas uma语句 SELECT é permitida.

Subconsultas são mais frequentemente usadas comSELECIONARusados juntamente comINSERIR,ATUALIZAROUEXCLUIRem ou em outra subconsulta.

Subconsulta com语句

A seguinte语句 apenas retorna os pedidos na tabela com um valor de pedido superior a5000 dólares. Além disso, observe que usamos a palavra-chaveDISTINCTOs valores repetidos de cust_id foram removidos do conjunto de resultados.

SELECIONAR * FROM customers
ONDE cust_id IN (SELECT DISTINCT cust_id FROM orders ONDE order_value > 5000);

Dica:Subconsultas podem retornar um único valor, uma única linha, uma única coluna ou uma tabela que contenha uma ou mais linhas e uma ou mais colunas.

Nota:Subconsultas podem ser aninhadas noSELECIONAR,INSERIR,ATUALIZAROUEXCLUIRdoONDEOUHAVINGcláusulas, também podem ser aninhadas em outras subconsultas.

Subconsulta com语句

Subconsultas também podem ser usadas com语句. Este é um exemplo:

INSERIR INTO premium_customers 
SELECIONAR * FROM customers 
ONDE cust_id IN (SELECT DISTINCT cust_id FROM orders ONDE order_value > 5000);

A seguinte语句, usando os dados retornados pela subconsulta, inserirá os registros de clientes de nível avançado na tabela premium_customers. Aqui, os clientes de nível avançado são aqueles que já fizeram um pedido com um valor superior a5000 dólares.

Dica: ConsulteSobreSQL clonar tabelapara entender como usar a语句 INSERT ... SELECT rapidamente para inserir várias linhas de outra tabela na tabela.

Subconsulta com语句

Você ainda pode combinar subconsultas com语句 para atualizar uma coluna ou várias colunas na tabela, conforme exemplo a seguir:

ATUALIZAR orders
ATUALIZAR order_value = order_value + 10
WHERE cust_id IN (SELECT cust_id FROM customers WHERE postal_code = 75016);

WHERE cust_id IN (SELECT cust_id FROM customers WHERE postal_code =10ao aumentar o valor atual do pedido75016dólares, a instrução acima atualizará a tabela de pedidos (orders) onde o código postal é

o valor de pedidos dos clientes da região.

Subconsulta com DELETE

Exemplo
DELETE FROM orders WHERE order_id IN (SELECT order_id FROM order_details WHERE product_id = 5);

a instrução SQL no exemplo acima será executada no contendoproduct_idpara5remover esses pedidos da tabela de pedidos do produto.