Introdução SQL

Pesquisa avançada

 

            Já vimos muitas formas de pesquisa em tabelas. Agora vamos analisar algumas formas que permitem trabalhar com vários comandos SELECT. Serão criados conjuntos que poderão ser unidos e separados da mesma forma como trabalhamos com os conjuntos na matemática.

 

UNION

            A união entre tabelas cria uma saída com todas as linhas de uma tabela unida com as linhas da outra tabela. Diferentemente da união regular entre tabelas, aqui as linhas não são combinadas às linhas da outra tabela. As linhas da segunda tabela são colocadas em seqüência às linhas da primeira tabela.

            É necessário que haja uma compatibilidade entre as colunas. Na prática, isso quer dizer que as colunas devem ser do mesmo tipo e estar na mesma seqüência para que se possa unir as duas tabelas. Mesmo que o conteúdo das tabelas não seja coerente, a união entre as tabelas autores e músicas é possível porque as colunas têm o mesmo tipo de dado e tamanho.

            É importante que as colunas estejam na mesma seqüência, com o mesmo tipo de dados nos dois SELECTs, do contrário o comando não funcionará. Veja que não é necessário que as colunas tenham o mesmo nome, uma vez que apenas o tipo de dado e o tamanho são comparados e, normalmente, quando é feita essa união, trabalha-se com tabelas diferentes. Veja o exemplo:

 

select codigo_autor, nome_autor from autor

where codigo_autor < 10

union

select codigo_musica, nome_musica from musica

where codigo_musica < 15

 

Código_autor

Nome_Autor

1

Será

2

Ainda é cedo

3

Geração Coca

4

Eduardo e Mônica

5

Amora para sempre

 

Veja que o nome da coluna no resultado da busca ficou com o nome da coluna do primeiro SELECT.

Note também que as linhas estão combinadas, ou seja, aparece o código 1 do autor, e na linha debaixo o código 1 da música. Isso porque em toda união existe a possibilidade de haver o mesmo conteúdo no outro SELECT. A união não permitirá que duas linhas se repitam no resultado da busca. Isso pode parecer muito bom, mas gera um trabalho adicional ao banco de dados, uma vez que terá que ser verificado se há linhas repetidas. Veja uma outra união que, por motivos didáticos, realizaremos na mesma tabela, mas com predicado diferente:

select codigo_autor, nome_autor from autor

where codigo_autor > 10

union

select codigo_autor, nome_autor from autor

where codigo_autor < 15

 

 

UNION ALL

 

            Esta cláusula permite unir as duas ou mais tabelas sem nos preocuparmos com a repetição do conteúdo. Isso leva a um melhor desempenho, pois não será necessário comparar o conteúdo das tabelas. Deve-se, naturalmente, tomar cuidado ao utilizá-lo, uma vez que é possível gerar informação errada. Aconselho a utilizar UNION ALL, apenas quando se trabalha com tabelas distintas, em que os dados não se repetirão. Veja o exemplo:

 

select codigo_autor, nome_autor from autor

where codigo_autor > 10

union ALL

select codigo_autor, nome_autor from autor

where codigo_autor < 15

 

 

            Desta maneira aparecerá todas as linhas da primeira tabela e depois as linhas da segunda tabela. Elas não estão mais combinadas, como no primeiro exemplo.

            A cláusula UNION é utilizada freqüentemente para substituir a cláusula OR no predicado do SELECT. Veja o exemplo:

 

select nome_cd, nome_musica from cd, faixa, musica

where cd.codigo_cd = faixa.codigo_cd and

faixa.codigo_musica = musica.codigo_musica and

cd.codigo_cd = 1

union

select nome_cd, nome_musica from cd, faixa, musica

where cd.codigo_cd = faixa.codigo_cd and

faixa.codigo_musica = musica.codigo_musica and

musica.codigo_musica = 20

 

 

Conclusão: Podemos fazer vários tipos de pesquisas unindo várias tabelas, só há de ver a peformace da instrução para que possa tirar o máximo do seu banco de dados. Até mais.

 

Autor:Rubens Antunes

 

Autor do Livro: Delphi Faça Uma Aplicação Comercial