INNER JOIN Expressão INNER JOIN

INNER JOIN (junção interna) é uma Operação JOIN que permite especificar uma cláusula de junção explícita.

Sintaxe ExpressãoTabela [ INNER ] JOIN ExpressãoTabela { ON ExpressãoBooleana }

A cláusula de junção pode ser especificada utilizando ON com uma expressão booleana.

Cláusula ONparte da expressão INNER JOIN O escopo das expressões na cláusula ON inclui as tabelas correntes, e as tabelas nos blocos de consulta externos ao SELECT corrente. No exemplo a seguir, a cláusula ON faz referência às tabelas correntes: SELECT * FROM SAMP.EMPREGADOS INNER JOIN SAMP.EQUIPES ON EMPREGADOS.SALÁRIO < EQUIPES.SALÁRIO;

A cláusula ON pode fazer referência a tabelas que não estão sendo juntadas, e não é obrigada a fazer referência a nenhuma das tabelas sendo juntadas (embora tipicamente o faça).

-- Junção das tabelas ATIV_EMP e EMPREGADOS -- selecionar todas as colunas da tabela ATIV_EMP e -- adicionar o sobrenome do empregado (ÚLTIMO_NOME) da tabela -- EMPREGADOS a todas as linhas do resultado SELECT SAMP.ATIV_EMP.*, ÚLTIMO_NOME FROM SAMP.ATIV_EMP JOIN SAMP.EMPREGADO ON ATIV_EMP.NUM_EMP = EMPREGADOS.NUM_EMP; -- Juntar as tabelas EMPREGADOS e DEPARTAMENTOS, -- selecionar o número do empregado (NUM_EMP), -- o sobrenome do empregado (ÚLTIMO_NOME), -- o número do departamento (DEP_TRAB na tabela EMPREGADOS e -- NUM_DEP na tabela DEPARTAMENTOS) -- e o nome do departamento (NOME_DEP) -- de todos os empregados nascidos (DATA_NASC) antes de 1930. SELECT NUM_EMP, ÚLTIMO_NOME, DEP_TRAB, NOME_DEP FROM SAMP.EMPREGADOS JOIN SAMP.DEPARTAMENTOS ON DEP_TRAB = NUM_DEP AND YEAR(DATA_NASC) < 1930; -- Outro exemplo de "gerar" novos valores de dado, -- utilizando uma consulta que seleciona da cláusula VALUES -- (que é uma forma alternativa de FULLSELECT). SELECT * FROM (VALUES (3, 4), (1, 5), (2, 6)) AS TABELA1_VALORES(C1, C2) JOIN (VALUES (3, 2), (1, 2),(0, 3)) AS TABELA2_VALORES(C1, C2) ON TABELA1_VALORES.C1 = TABELA2_VALORES.C1; O que resulta em: C1 |C2 |C1 |2 ----------------------------------------------- 3 |4 |3 |2 1 |5 |1 |2 -- Listar todos os departamentos, juntamente com o -- número do empregado e o último nome do gerente SELECT NUM_DEP, NOME_DEP, NUM_EMP, ÚLTIMO_NOME FROM DEPARTAMENTOS INNER JOIN EMPREGADOS ON NUM_GER = NUM_EMP; -- Listar todos os números do empregado e último nome, juntamente -- com o número do empregado e último nome de seus gerentes SELECT E.NUM_EMP, E.ÚLTIMO_NOME, M.NUM_EMP, M.ÚLTIMO_NOME FROM EMPREGADOS E INNER JOIN DEPARTAMENTOS INNER JOIN EMPREGADOS M ON NUM_GER = M.NUM_EMP ON E.DEP_TRAB = NUM_DEP;