Anda di halaman 1dari 12

Associando Tabelas no SQL Server

Ol pessoal,

Depois de estar um tempo afastado aqui da nossa coluna do portal da Devmedia SQL MAGAZINE - retorno para apresentar um assunto que muitos programadores e iniciantes em programao SQL abordam em alguns fruns e listas nas quais atuo como moderador.

Primeiramente, vamos passar por conceitos de modelagem de dados, modelos conceituais, relacionais e fsicos e ento apresentarei os tipos de JOIN que so implementados dentro do SQL Server 2000. Salientando tambm que os cdigos (SQL) que aqui sero abordados, foram escritos em ambiente Windows rodando a verso XP Professional e com Servidor SQL Server 2000 Developer Edition.

MODELO RELACIONAL

O modelo relacional se resume diretamente em tabelas e relacionamentos. Uma vez definido o modelo conceitual, ou o modelo E-R, podemos convert-lo, implementando tabelas para armazenar os dados e relacionando-as para garantir integridade e diminuir a redundncia do modelo.

As tabelas tambm so conhecidas como entidades ou mesmo relaes e composta por linhas que tambm podem ser chamadas de registros ou tuplas.

Um registro composto por vrios atributos que so ordenados dentro de cada entidade. Cada atributo est em uma coluna, que conter valores que, uma vez combinados, formaro a informao vale salientar o conceito de dado e informao.

Resumindo, o modelo relacional aquele que est em meio fsico e contempla a realidade de um banco de dados: tabelas e relacionamento.

MODELAGEM DE DADOS

Certa vez, h algum tempo atrs, tive que apresentar um projeto para uma locadora de carros, a qual gostaria de focar em um sistema que resolvesse seus problemas de desorganizao. Eram pilhas e mais pilhas de papis contendo informaes de quem alugou tal veculo, quanto tempo, quilometragem gasta e valor de acordo com a quilometragem gasta. Detalhe, a ficha passava pela aprovao de trs setores antes da liberao do veculo para o locatrio furioso que aguardava na recepo da empresa.

Pensando no foco do problema, considerei o seguinte modelo:

Para a construo desse modelo foram levadas em conta algumas premissas bsicas em relao cardinalidade, como:

H clientes cadastrados que alugam carros e outros no; Um automvel pode ser locado por um ou mais clientes;

No levarei em considerao aqui, a questo de quantidades de automveis de um mesmo tipo. Consideraremos que existe somente um automvel de cada dentro da locadora. (Examine o source, caso faa o download que temos um ndice criado para impedir o cadastro de mais de um automvel com o mesmo nome).

Diante dessa proposta, como foi definido no E-R acima, temos um relacionamento muitos-para-muitos que, obrigatoriamente gera uma terceira tabela que ter a movimentao do relacionamento que dei o nome de locao.

DEFINIDO O MODELO FSICO

Temos ento, cinco tabelas:

1. 2. 3.

Cliente; Automveis; Modelo tabela decodificao; Marca - tabela decodificao; Locao;

Modelo relacional e diagrama do modelo fsico que implementamos no banco de dados.

CARGA NA BASE

J que agora temos nossa base de dados para a locadora, iremos dar carga nas tabelas, cadastrando alguns modelos de automveis, marcas, alguns clientes, alguns automveis e enfim comearemos a cadastrar as locaes, que ser o ponto principal da abordagem de nosso artigo, onde traremos as informaes em consultas utilizando a sintaxe JOIN.

Lembrando que voc poder fazer o download do script SQL utilizando para montar todo esse modelo ao final do artigo.

CONCEITOS DE JOIN

As JOIN ou associao uma operao que lhe permite consultar duas ou mais tabelas para produzir um conjunto de resultados que incorpore registros e colunas de cada tabela. Voc pode associar tabelas em qualquer expresso que seja baseada em qualquer coluna ou combinao de colunas das tabelas envolvidas.

No nosso exemplo, temos uma associao de at trs tabelas:

Automvel o Marca; o Modelo;

...neste caso, podemos, em algum momento, diante da necessidade que surdir, precisar tirar um relatrio do automvel + modelo + marca que temos em nossa locadora, assim, teremos que associar as trs tabelas para buscar as informaes.

Existem trs tipos de associao possveis entre entidades de uma base de dados:

Associaes internas, mais conhecidas como INNER JOIN; Associaes externas, mais conhecidas como LEFT OUTER JOIN ou RIGHT OUTER JOIN; Associaes cruzadas, mais conhecidas como CROSS JOIN;

Em meio as JOINs, voc perceber que usaremos tambm, elementos que so chamados de alias, que encurtam as declaraes, colocando interligao nos nomes das entidades que iro compor nossa consulta ao banco. Por exemplo, podemos fazer uma consulta da seguinte forma:

SELECT COUNT (*) AS numero FROM automovel GO

...onde a sada desse comando ser:

A coluna assume o nome passado como alias da funo agregada COUNT ().

Voc perceber tambm o uso da palavra ON, que indicar que a consulta estar associando as colunas das tabelas relacionadas.

ASSOCIAES INTERNAS INNER JOIN

As associaes internas ou INNER JOIN combinam tabelas comparando valores em colunas que sejam comuns a ambas as tabelas. O SQL Server retorna somente registros que correspondem s condies da associao, ou seja, caso algum dos campos associados de uma tabela qualquer que esteja vinculada na consulta no tiver dados para o campo em comparao, sua consulta no retornar dados satisfatrios, pois estas linhas que faltam faro com que alguns registros no apaream no resultset.

Dentro do nosso exemplo que estamos estudando, j temos algumas tabelas que se encontram associadas, como marca e modelo referenciada dentro automvel utilizando os recursos de bancos de dados para manter integridade: PK e FK...sendo assim, temos campos em comum nas tabelas, o que ento nos possibilita associar associ-las.

J temos algumas marcas, modelos e automveis cadastrados, sendo assim, podemos fazer a seguinte consulta:

Consulta com associaes internas (INNER JOIN).

Explicando o cdigo:

Iniciamos o SELECT os campos que queremos retornar nas consulta. Antes do nome de cada campo, colocamos um alias para determinar em qual tabela o consulta buscar os valores deste campo. Como colocamos a.auto_nome e no FROM temos a indicao automvel AS a, indicamos para o analisador de consultas que o campo auto_nome est na tabela automvel, sendo assim, automvel.auto_nome o mesmo que a.auto_nome, e assim acontece com os outros campos

ON usado para determinar ou igualar os campos em comum das tabelas relacionadas, lembrando que quando voc for implementar relacionamentos, sempre preserve o mesmo trabalhando com nmeros, pois o banco de dados ou mesmo um sistema computacional trabalha melhor com nmeros inteiros que com qualquer outra coisa, tornando sua consulta mais rpida e satisfatria.

Terminamos a consulta com uma declarao de ordenao, ORDER BY, ordenando os resultados por a.auto_nome (nome dos automveis na tabela automvel) de forma ascendente.

RECOMENDAES

Caso voc trabalhe com views, talvez possa ser interessante mascar o nome dos campos para que o seu estagirio no faa nenhuma bobagem, quando voc sair para tomar um caf.

Faamos a mesma consulta, s que agora mascarando o nome dos campos, usando alias, aplicando-os de outra maneira:

Mascarando a complexidade da consulta podendo us-la em uma view.

ASSOCIAES EXTERNAS LEFT OUTER JOIN ou RIGHT OUTER JOIN

As associaes externas esquerda ou direita combinam registros de duas tabelas que correspondem condio de associao, alm de quaisquer registros no-correspondentes da tabela esquerda ou direita, conforme especificado na clusula JOIN. Os registros que no correspondem condio de associao exibem NULL (Nulo) no conjunto de resultados. Voc tambm pode usar associaes externas completas para exibir todos os registros das tabelas associadas, independentemente de as tabelas terem ou no valores correspondentes ou relacionados.

Use associaes externas direita ou esquerda quando precisar de uma lista de dados completa, que armazenada em uma das tabelas associadas, alm das informaes que correspondem condio de associao.

Geralmente usamos para saber quase dados ainda no foram associados em tabelas relacionadas ou adjacentes. No Nosso caso, podemos buscar informaes de carros que ainda no foram locados ou clientes que ainda no locaram nenhum carro.

1-) CARROS QUE AINDA NO FORAM LOCADOS:

Levantamento com associaes externas (RIGHT OUTER JOIN).

Examinando bem o resultset retornado pela consulta, veja que muitos campos retornam o valor NULL, pois ainda no houve locaes de carro para tal cliente e tambm, o cliente ainda no locou carros. O resultado de RIGHT OUTER JOIN sempre de relevncia tabela da direta dentro da consulta.

Assim acontece com LEFT OUTER JOIN, o resultado ser o mesmo se inverter as posies das tabelas na consulta, pois, esta declarao d relevncia tabela da esquerda.

ASSOCIAES CRUZADAS CROSS JOIN

As associaes cruzadas (CROSS JOIN) exibem todas as combinaes de todos os registros nas tabelas associadas. Uma coluna em comum no se faz necessria nesse tipo de associao.

Enquanto as associaes cruzadas so raramente usadas em bancos de dados normalizados, voc pode us-la para prover testes e gerar conjunto de associaes de dados. Essas consultas no tm bom desempenho e podem trazer problemas quando utilizadas em um ambiente de produo.

EXEMPLO DE CROSS JOIN

Vamos ento, a partir do conceito de CROSS JOIN visualizar quais as possibilidades de locao de automveis temos de acordo com clientes e automveis cadastrados. Lembre-se que, no preciso ter um relacionamento entre as tabelas ou mesmo uma coluna em comum.

Escrevendo a consulta:

CROSS JOIN gera uma combinao dos resultados todos-com-todos.

Por fim, podemos ento fazer uma consulta tabela locacao associando as tabela automovel e cliente para saber quais locaes j fizemos.

Bem, falamos ento sobre JOINs e espero que tenham gostado. No prximo artigo falaremos sobre STORED PROCEDURES dentro do SQL Server e no Mysql. Um abrao especial a todos!

Anda mungkin juga menyukai