|
Na secção anterior, utilizamos IN para ligar a consulta interna e a consulta externa numa instrução subsequente. IN não é a única forma de fazê-lo -- é possível utilizar muitos operadores como >, <, ou =. EXISTS é um operador especial que será abordado nesta secção.
EXISTS simplesmente testa se a consulta interna apresenta qualquer linha. Se apresentar, a consulta externa prossegue. Se não apresentar, a consulta externa não é executada e toda a instrução SQL não apresenta qualquer resultado.
A sintaxe de EXISTS é:
SELECT "nome_coluna1"
FROM "nome_tabela1"
WHERE EXISTS
(SELECT *
FROM "nome_tabela2"
WHERE [condição])
Note que em vez de *, pode selecionar uma ou mais colunas na consulta interna. O efeito será idêntico.
Vamos utilizar as mesmas tabelas como exemplo:
Tabela Store_Information
| store_name |
Sales |
Date |
| Los Angeles |
1500 € |
05-Jan-1999 |
| San Diego |
250 € |
07-Jan-1999 |
| Los Angeles |
300 € |
08-Jan-1999 |
| Boston |
700 € |
08-Jan-1999 |
Tabela Geography
| region_name |
store_name |
| East |
Boston |
| East |
New York |
| West |
Los Angeles |
| West |
San Diego |
e emitimos a seguinte consulta SQL:
SELECT SUM(Sales) FROM Store_Information
WHERE EXISTS
(SELECT * FROM Geography
WHERE region_name = 'West')
Iremos obter o seguinte resultado:
No início, isto pode parecer confuso porque a consulta secundária inclui a condição [region_name = 'West'], embora a consulta tenha somado as lojas de todas as regiões. Após uma inspecção mais atenta, descobrimos que como a consulta secundária apresenta mais de 0 linhas, a condição EXISTS é verdadeira e a condição existente na consulta interna não influencia a forma como a consulta externa é executada.
SQL CASE >>
Copyright © 2013 1keydata.com Todos os direitos reservados.
|