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.

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;
Conceitos relacionados
Intera????o com o sistema de depend??ncias
Instru????es CREATE
Instru????es DROP
Instru????es RENAME
Instru????es SET
Refer??ncias relacionadas
Instru????o ALTER TABLE
CALL (PROCEDIMENTO)
Cl??usula CONSTRAINT
Instru????o DECLARE GLOBAL TEMPORARY TABLE
Instru????o DELETE
Cl??usula FOR UPDATE
Cl??usula FROM
Cl??usula GROUP BY
Cl??usula HAVING
Instru????o INSERT
Opera????o JOIN
LEFT OUTER JOIN
Instru????o LOCK TABLE
Cl??usula ORDER BY
Consulta
RIGHT OUTER JOIN
SubconsultaEscalar
Express??oSele????o
Instru????o SELECT
Express??oTabela
SubconsultaTabela
Instru????o UPDATE
VALUES Express??o
Cl??usula WHERE
Cl??usula WHERE CURRENT OF