Como usar uma junção de igualdade no SQL
O mais comum juntar-se que utiliza o SQL ONDE Filtro cláusula é a junção de igualdade. A equi-join é participar de uma base com um ONDE cláusula que contém uma condição que especifica que o valor em uma coluna na primeira tabela deve ser igual ao valor de uma coluna correspondente na segunda tabela. A aplicação de uma junção de igualdade com as tabelas de exemplo traz um resultado mais significativo:
SELECT * FROM EMPREGADOS, COMPENSATIONWHERE EMPLOYEE.EmpID = COMPENSATION.Employ -
Esta consulta produz os seguintes resultados:
EmpID FName LName Cidade Empregar Telefone Salário Bonus ----- ------ ----- ---- ----- ------ ------ ----- 1 Whitey Ford Laranja 555-1001 1 33000 100002 Don Larson Newark 555-3221 2 18000 20003 Sal Maglie Nutley 555-6905 3 24000 50004 Bob Turley Passaic 555-8908 4 22000 7000
Nesta tabela resultado, os salários e bônus sobre o direito aplicável aos funcionários nomeados no lado esquerdo. A tabela ainda tem alguma redundância porque o EmpID duplica a coluna Empregar coluna. Você pode corrigir esse problema, reformulando ligeiramente a consulta, como este:
EMPREGADO SELECT *, COMPENSATION.Salary, COMPENSATION.BonusFROM FUNCIONÁRIO, COMPENSATIONWHERE EMPLOYEE.EmpID = COMPENSATION.Employ. -
Esta consulta produz a tabela de resultados seguinte:
EmpID FName LName Cidade Salário Telefone Bonus ----- ----- ----- ---- ----- ------ ----- 1 Laranja Whitey Ford 555-1001 33000 100002 Don Larson Newark 555-3221 18000 20003 Sal Maglie Nutley 555-6905 24000 50004 Bob Turley Passaic 555-8908 22000 7000
Esta tabela diz o que você quer saber, mas não sobrecarregá-lo com quaisquer dados irrelevantes. A consulta é um pouco tedioso para escrever, no entanto. Para evitar ambigüidade, você pode qualificar os nomes das colunas com os nomes das tabelas de onde vieram. Digitando os nomes de tabela repetidamente fornece um bom exercício para os dedos, mas não tem outro mérito.
Você pode reduzir a quantidade de digitação usando apelidos (ou nomes de correlação). A aliás é um nome curto que representa um nome de tabela. Se você usar aliases em reformulação da consulta anterior, ele sai como este:
SELECIONAR E. *, C.Salary, C.BonusFROM EMPREGADOS E, COMPENSAÇÃO CWHERE E.EmpID = C.Employ -
Neste exemplo, E é o alias para o empregado, e C é o alias para a compensação. O alias é local para a declaração que está. Depois de declarar um alias (na A PARTIR DE cláusula), você deve usá-lo em toda a declaração. Você não pode usar tanto o alias e a forma longa do nome da tabela na mesma declaração.
Mesmo se você pode misturar a forma longa de nomes de tabela com aliases, você não iria querer, porque isso cria grande confusão. Considere o seguinte exemplo:
SELECIONAR T1.C, T2.CFROM T1 T2, T2 T1WHERE T1.C> T2.C -
Neste exemplo, o alias para T1 é T2, eo alias para T2 é T1. Evidentemente, isso não é uma seleção inteligente de apelidos, mas não é proibido pelas regras. Se você misturar aliases com nomes de tabelas de formato longo, você não pode dizer qual tabela é qual.
O exemplo anterior com pseudónimos é equivalente à que se segue SELECIONAR declaração sem aliases:
T2.C SELECT, T1.CFROM T1, T2WHERE T2.C> T1.C -
SQL permite-lhe juntar-se mais de duas tabelas. O número máximo varia de uma aplicação para outra. A sintaxe é análogo ao caso- de duas tabelas aqui está o que parece:
SELECIONAR E. *, C.Salary, C.Bonus, Y.TotalSalesFROM EMPREGADOS E, COMPENSAÇÃO C, ytd_sales YWHERE E.EmpID = C.EmployAND C.Employ = Y.EmpNo -
Esta declaração executa uma junção de igualdade em três mesas, puxando dados de filas de cada uma correspondendo a produzir uma tabela resultado que mostra nomes dos vendedores, a quantidade de vendas que eles são responsáveis por, e sua remuneração. O gerente de vendas pode ver rapidamente se a compensação está em linha com a produção.
Armazenar vendas year-to-date de um vendedor em uma tabela separada ytd_sales garante melhor desempenho do computador e confiabilidade dos dados do que manter os dados na tabela EMPREGADOS. Os dados na tabela EMPLOYEE é relativamente estática. nome, endereço e número de telefone de uma pessoa não mudam com muita frequência. Em contraste, as vendas year-to-date mudar frequentemente (que espero).
Como a tabela ytd_sales tem menos colunas do que a tabela EMPREGADOS, você pode ser capaz de atualizá-lo mais rapidamente. Se, no decurso de atualizar os totais de vendas, você não tocar a tabela EMPREGADOS, você diminui o risco de, acidentalmente, modificando informações funcionário que deve permanecer o mesmo.