Subconsulta em registros de tabela única:
Crie uma tabela chamada 'animais' nos dados do banco de dados.'Adicione o seguinte registro de animais diferentes com propriedades diferentes, conforme exibido. Busque este registro usando a consulta SELECT da seguinte maneira:
>> SELECIONE * DOS dados.animais;
Exemplo 01:
Vamos recuperar os registros limitados desta tabela usando as subconsultas. Usando a consulta abaixo, sabemos que a subconsulta será executada primeiro e sua saída será usada na consulta principal como entrada. Uma subconsulta é simplesmente buscar a idade em que o preço do animal é 2500. A idade de um animal cujo preço é 2500 é 4 na tabela. A consulta principal irá selecionar todos os registros da tabela onde a idade é maior que 4, e o resultado é dado abaixo.
>> SELECIONE * DOS dados.animais WHERE Idade> (SELECIONE Idade DOS dados.animais ONDE Preço = '2500');
Exemplo 02:
Vamos usar a mesma tabela em diferentes situações. Neste exemplo, usaremos alguma função em vez da cláusula WHERE na subconsulta. Estivemos tomando a média de todos os preços dados para animais. O preço médio será 3189. A consulta principal irá selecionar todos os registros de animais com um preço superior a 3189. Você obterá o resultado abaixo.
>> SELECIONE * DOS dados.animais ONDE Preço> (SELECIONE AVG (Preço) DOS dados.animais);
Exemplo 03:
Vamos usar a cláusula IN na consulta SELECT principal. Em primeiro lugar, a subconsulta buscará preços superiores a 2500. Depois disso, a consulta principal irá selecionar todos os registros da tabela 'animais' onde o preço se encontra no resultado da subconsulta.
>> SELECIONE * DOS dados.animais ONDE Preço EM (SELECIONE Preço DE dados.animais ONDE Preço> 2500);
Exemplo 04:
Temos usado a subconsulta para buscar o nome do animal cujo preço é 7000. Como esse animal é uma vaca, é por isso que o nome 'vaca' será retornado para a consulta principal. Na consulta principal, todos os registros serão recuperados da tabela onde o nome do animal é 'vaca.'Como temos apenas dois registros para' vaca 'animal, é por isso que temos a saída abaixo.
>> SELECIONE * DOS dados.animais WHERE Nome = (SELECIONE o nome DOS dados.animais ONDE Preço = '7000');
Subconsulta em vários registros de tabela:
Assuma as duas tabelas abaixo, 'aluno' e 'professor', em seu banco de dados. Vamos tentar alguns exemplos de subconsultas usando essas duas tabelas.
>> SELECIONE * DOS dados.aluna;>> SELECIONE * DOS dados.professor;
Exemplo 01:
Iremos buscar dados de uma tabela usando a subconsulta e usá-los como entrada para a consulta principal. Isso significa que essas duas tabelas podem se relacionar de alguma maneira. No exemplo abaixo, usamos a subconsulta para buscar o nome do aluno na tabela 'aluno' onde o nome do professor é 'Samina.'Esta consulta irá retornar' Samina 'para a tabela de consulta principal' professor.'A consulta principal irá então selecionar todos os registros relacionados ao nome do professor' Samina.'Como temos dois registros para este nome, portanto, temos este resultado.
>> SELECIONE * DOS dados.professor WHERE TeachName = (SELECIONE TeachName FROM dados.aluno ONDE TeachName = 'Samina');
Exemplo 02:
Para elaborar a subconsulta no caso de tabelas diferentes, tente este exemplo. Temos uma subconsulta que busca o nome do professor da tabela aluno. O nome deve ter 'i' em qualquer posição em seu valor. Isso significa que todos os nomes na coluna TeachName tendo 'i' em seu valor serão selecionados e retornados para a consulta principal. A consulta principal irá selecionar todos os registros da tabela 'professor' onde o nome do professor está na saída retornada pela subconsulta. Como a subconsulta retornou 4 nomes de professores, por isso teremos um registro de todos esses nomes que residem na tabela 'professor.'
>> SELECIONE * DOS dados.professor WHERE TeachName IN (SELECIONE TeachName FROM dados.aluno ONDE TeachName LIKE '% i%');
Exemplo 03:
Considere as duas tabelas abaixo, 'pedido' e 'pedido1'.
>> SELECIONE * DOS dados.pedido;>> SELECIONE * DOS dados.pedido1;
Vamos tentar uma cláusula ANY neste exemplo para elaborar uma subconsulta. A subconsulta irá selecionar o 'id' da tabela 'pedido1', onde a coluna 'Status' tem um valor de 'Não pago.'O' id 'pode ser mais de 1. Isso significa que mais de 1 valor seria retornado para a consulta principal para obter os resultados de 'ordem' da tabela. Neste caso, qualquer 'id' pode ser usado. Temos o resultado abaixo para esta consulta.
>> SELECIONE Item, Vendas, ID DE dados.pedido WHERE id = ANY (SELECT id FROM data.pedido1 ONDE Status = 'Não pago');
Exemplo 04:
Suponha que você tenha os dados abaixo na tabela 'pedido1' antes de aplicar qualquer consulta.
>> SELECIONE * DOS dados.pedido1;
Vamos aplicar a consulta dentro de uma consulta para excluir alguns registros da tabela 'pedido1'. Em primeiro lugar, a subconsulta irá selecionar o valor 'Status' da tabela 'pedido' onde o item é 'Livro.'A subconsulta retorna' Pago 'como o valor. Agora, a consulta principal excluirá as linhas da tabela 'pedido1' onde o valor da coluna 'Status' é 'Pago.'
>> DELETE FROM data.order1 WHERE Status = (SELECT Status FROM data.pedido ONDE item = 'Livro');
Após a verificação, temos agora os registros abaixo permaneceram na tabela 'pedido1' após a execução da consulta.
>> SELECIONE * DOS dados.pedido1;
Conclusão:
Você trabalhou de forma eficiente com muitas subconsultas em todos os exemplos acima. Esperamos que tudo esteja claro e limpo agora.