SQL Linguagem Table Joins Uma Obrigação

SQL Linguagem Table Joins Uma Obrigação


Todas as consultas até este ponto têm sido úteis com a exceção de uma grande limitação – ou seja, você tem selecionado apenas uma tabela por vez com sua instrução SELECT.

É hora de apresentá-lo a uma das características mais benéficas da SQL & sistemas de banco de dados relacionais – o “Join”. Simplificando, o “Join” torna os sistemas de banco de dados relacionais “relacionais”.

As junções permitem que você vincule dados de duas ou mais tabelas em uma única consulta – de uma única instrução SELECT.

Um “Join” pode ser reconhecido em uma instrução SQL SELECT se tiver mais de uma tabela após a palavra-chave FROM.

Por exemplo:

SELECT "list-of-columns"

FROM table1,table2

WHERE "search-condition(s)"

Joins podem ser explicados mais facilmente demonstrando o que aconteceria se você trabalhasse com apenas uma tabela e não tivesse a habilidade de usar “joins”.

Este banco de dados de tabela única também é algumas vezes chamado de “flat table”. Vamos dizer que você tem um banco de dados de uma tabela que é usado para manter o controle de todos os seus clientes e o que eles compram de sua loja:

id first last address city state zip date item price

Toda vez que uma nova linha é inserida na tabela, todas as colunas serão atualizadas, resultando em “dados redundantes” desnecessários.

Por exemplo, cada vez que Wolfgang Schultz compra algo, as seguintes linhas serão inseridas na tabela:

id first last address city state zip date item price
10982 Wolfgang Schultz 300 N. 1st Ave Yuma AZ 85002 032299 snowboard 45.00
10982 Wolfgang Schultz 300 N. 1st Ave Yuma AZ 85002 082899 snow shovel 35.00
10982 Wolfgang Schultz 300 N. 1st Ave Yuma AZ 85002 091199 gloves 15.00
10982 Wolfgang Schultz 300 N. 1st Ave Yuma AZ 85002 100999 lantern 35.00
10982 Wolfgang Schultz 300 N. 1st Ave Yuma AZ 85002 022900 tent 85.00

Uma base de dados ideal teria duas tabelas:

  1. Uma para controlar os seus clientes
  2. E o outro para controlar o que eles compram:

Tabela “Customer_info”:

customer_number firstname lastname address city state zip

Tabela “Purchases”:

customer_number date item price

Agora, sempre que uma compra é feita de um cliente recorrente, a 2ª tabela “Compras” só precisa ser atualizada! Acabamos de eliminar dados redundantes inúteis, ou seja, acabámos de normalizar esta base de dados!

Observe como cada uma das tabelas tem uma coluna “cusomer_number” comum. Esta coluna, que contém o número de cliente único, será usada para juntar as duas tabelas.

Usando as duas novas tabelas, digamos que você gostaria de selecionar o nome do cliente e os itens que ele comprou. Aqui está um exemplo de uma declaração de junção para conseguir isto:

SELECT customer_info.firstname, customer_info.lastname, purchases.item

FROM customer_info, purchases

WHERE customer_info.customer_number = purchases.customer_number;

Este “Join” em particular é conhecido como “Inner Join” ou “Equijoin”. Este é o tipo mais comum de “Join” que você verá ou usará.

Observe que cada uma das colunas é sempre precedida do nome da tabela e de um ponto final. Isso nem sempre é necessário, no entanto, é uma boa prática para que você não confunda quais colums vão com quais tabelas.

É necessário se os nomes das colunas de nomes forem os mesmos entre as duas tabelas. Eu recomendo preceder todas as suas colunas com os nomes das tabelas ao usar joins.

Nota: A sintaxe descrita acima funcionará com a maioria dos sistemas de banco de dados – incluindo o que está neste tutorial. No entanto, no caso de isto não funcionar com o seu, por favor verifique a documentação específica da sua base de dados.

Embora o acima provavelmente funcione, aqui está a especificação de sintaxe ANSI SQL-92 para uma união interna usando a instrução precedente acima que você pode querer tentar:

SELECT customer_info.firstname, customer_info.lastname, purchases.item

FROM customer_info INNER JOIN purchases

ON customer_info.customer_number = purchases.customer_number;

Outro exemplo:

SELECT employee_info.employeeid, employee_info.lastname, employee_sales.comission

FROM employee_info, employee_sales

WHERE employee_info.employeeid = employee_sales.employeeid;

Essa instrução selecionará o employeeid, o sobrenome (da tabela employee_info) e o valor de comissão (da tabela employee_sales) para todas as linhas onde o employeeid na tabela employee_info corresponde ao employeeid na tabela employee_sales.

0 comentários :

Postar um comentário