Sunteți pe pagina 1din 17

22/4/2014

INNER, CROSS, LEFT, RIGTH E FULL JOINS

Buscar

post favorito

comentrios

INNER, CROSS, LEFT, RIGTH E


FULL JOINS
Veja como juntar tabelas em SQL. O artigo mostra os
diversos tipos de juno com exemplos simples e de fcil
absoro

Gostei (4)

Curtir

(0)

As junes entre duas ou mais tabelas podem ser realizadas atravs de:
a.

Cross join

b.

Inner join

http://www.devmedia.com.br/inner-cross-left-rigth-e-full-joins/21016

1/17

22/4/2014

INNER, CROSS, LEFT, RIGTH E FULL JOINS

c.

Left outer join

d.

Right outer join

e.

Outer Full join

As questes so duas:
i.
ii.

O que so cada uma dessas junes (joins)?


Como usar?

Para definir e exemplificar as junes acima citadas considere o modelo da figura 1


abaixo:

Figura 1

Podemos notar pelo modelo que pode existir no banco de dados funcionrios sem
cargos e cargos sem funcionrios. Para exemplificar melhor, observe o contedo das
tabelas na figura 2 abaixo:

http://www.devmedia.com.br/inner-cross-left-rigth-e-full-joins/21016

2/17

22/4/2014

INNER, CROSS, LEFT, RIGTH E FULL JOINS

Figura 2

Assim, fazemos:

CROSS JOIN
Quando queremos juntar duas ou mais tabelas por cruzamento. Ou seja, para cada
linha da tabela FUNCIONARIO queremos todos os CARGOS ou vice-versa.

http://www.devmedia.com.br/inner-cross-left-rigth-e-full-joins/21016

3/17

22/4/2014

INNER, CROSS, LEFT, RIGTH E FULL JOINS

Figura 3

INNER JOIN
Quando queremos juntar duas ou mais tabelas por coincidncia. Para cada linha da
tabela FUNCINARIO queremos o CARGO correspondente que internamente (INNER), em
seus valores de atributos, coincidam. No caso de FUNIONRIO e CARGO os atributos
internos coincidentes so codigoCargo na tabela CARGO e codigoCargo na tabela
FUNCIONARIO. Veja tambm a Figura 1 e a Figura 2, l voc notar que codigoCargo
chave primria da tabela CARGO e chave estrangeira na tabela FUNCIONARIO. Para
efetivarmos a juno das duas tabelas se far necessrio ligar (ON) as duas tabelas por
seus atributos internos (INNER) coincidentes.

http://www.devmedia.com.br/inner-cross-left-rigth-e-full-joins/21016

4/17

22/4/2014

INNER, CROSS, LEFT, RIGTH E FULL JOINS

Figura 4

LEFT OUTER JOIN

Observando a tabela FUNCIONARIO notamos que o funcionrio Tadeu no possui cargo


associado a ele. Se desejarmos listar todos os funcionrios com seus respectivos
cargos, incluindo os funcionrios sem cargos, a exemplo de Tadeu, poderamos
usar todo o poder da juno INNER JOIN adicionando ainda
OUTER(EXTERNOS/OUTROS) Funcionrios que no fazem parte do INNER JOIN,
justamente queles sem cargos, como Tadeu. Podemos conseguir esse feito com a
juno FUNCIONARIO/CARGO atravs da declarao FUNCIONARIO OUTER LEFT
JOIN CARGO, que promove a juno interna (INNER) de todos os funcionrios a
cargos e lista ainda outros (EXTERNOS/OUTER) no associados.

http://www.devmedia.com.br/inner-cross-left-rigth-e-full-joins/21016

5/17

22/4/2014

INNER, CROSS, LEFT, RIGTH E FULL JOINS

Figura 5

Uma observao importante que a ordem da ligao (ON) no faz diferena, ou seja:
ON (F.codCargo = C.codCargo) exatamente igual a ON (C.codCargo = F.codCargo)

RIGHT OUTER JOIN


Observando a tabela CARGO notamos que o cargo GERENTE, com cdigo C3, no
referenciado/associado por/a nenhum funcionrio na tabela FUNCIONARIO. Se
desejarmos listar todos os CARGOS e seus respectivos FUNCIONARIOS, incluindo os
CARGOS sem FUNCIONRIOS, poderamos usar a juno RIGTH OUTER JOIN. Veja o
exemplo da figura 6.

http://www.devmedia.com.br/inner-cross-left-rigth-e-full-joins/21016

6/17

22/4/2014

INNER, CROSS, LEFT, RIGTH E FULL JOINS

Figura 6

Uma observao importante que a ordem da ligao (ON) no faz diferena, ou seja:
ON (F.codCargo = C.codCargo) exatamente igual a ON (C.codCargo = F.codCargo)

OUTER FULL JOIN


Aqui juntamos o poder das junes (JOIN) internas(INNER), a listagem de todas as
outras linhas no associadas, tanto do lado direito (RIGHT) da juno como do lado
ESQUEDO (LEFT). Veja o exemplo abaixo:

http://www.devmedia.com.br/inner-cross-left-rigth-e-full-joins/21016

7/17

22/4/2014

INNER, CROSS, LEFT, RIGTH E FULL JOINS

Figura 7

Uma observao importante que a ordem da ligao (ON) no faz diferena, ou seja:
ON (F.codCargo = C.codCargo) exatamente igual a ON (C.codCargo = F.codCargo).

Simples assim!
Abaixo segue o SCRIPT SQL de criao das tabelas, seus relacionamentos, seu
povoamento e dos exemplos utilizados. Todos os exemplos deste artigo foram testados
no SGBDR MS-SQL Server 2008 Express.

SCRIPT DE TESTES EM TRANSACT-SQL ( SQL SERVER )

------------------------------------------------------ OS SCRIPTS ABAIXO FORAM DESENVOLVIDOS E TESTADOS


-- NO SGBD SQL SERVER 2008 EXPRESS
-- por Wellyngton Luiz Cruz Moreira
----------------------------------------------------http://www.devmedia.com.br/inner-cross-left-rigth-e-full-joins/21016

8/17

22/4/2014

INNER, CROSS, LEFT, RIGTH E FULL JOINS

-- Criando um dataBase para testes


CREATE DATABASE dbTESTE_JOINS
GO

-- Usando o DataBase para criar as tabelas e povo-las


USE dbTESTE_JOINS
GO

-- Criando a tabela Cago


CREATE TABLE CARGO
(
CodCargo char(2)

NOT NULL,

NomeCargo varchar(50) NULL,


ValorCargo money

NULL,

PRIMARY KEY(CodCargo)
)

GO

-- Criando a tabela Funcionario


http://www.devmedia.com.br/inner-cross-left-rigth-e-full-joins/21016

9/17

22/4/2014

INNER, CROSS, LEFT, RIGTH E FULL JOINS

CREATE TABLE FUNCIONARIO


(
Matricula int,
NomeFuncionario varchar(50) NOT NULL,
CodCargo char(2)

NULL,

PRIMARY KEY(Matricula),
FOREIGN KEY (CodCargo) REFERENCES CARGO (CodCargo)
)

GO

-- Povoando a tabela CARGO


INSERT CARGO (CodCargo, NomeCargo, ValorCargo) VALUES (''''''''C1'''''''',
''''''''CAIXA''''''''

, 800.00)

INSERT CARGO (CodCargo, NomeCargo, ValorCargo) VALUES (''''''''C2'''''''',


''''''''VENDEDOR'''''''', 1200.00)
INSERT CARGO (CodCargo, NomeCargo, ValorCargo) VALUES (''''''''C3'''''''',
''''''''GERENTE'''''''' , 2400.00)

GO

-- Povoando a tabela FUNCIONARIO

http://www.devmedia.com.br/inner-cross-left-rigth-e-full-joins/21016

10/17

22/4/2014

INNER, CROSS, LEFT, RIGTH E FULL JOINS

INSERT FUNCIONARIO (Matricula, NomeFuncionario, CodCargo) VALUES (100,


''''''''JOO''''''''

, ''''''''C1'''''''')

INSERT FUNCIONARIO (Matricula, NomeFuncionario, CodCargo) VALUES (110,


''''''''MARIA'''''''' , ''''''''C2'''''''')
INSERT FUNCIONARIO (Matricula, NomeFuncionario, CodCargo) VALUES (120,
''''''''CARLOS'''''''' , ''''''''C1'''''''')
INSERT FUNCIONARIO (Matricula, NomeFuncionario, CodCargo) VALUES (130,
''''''''TADEU'''''''' , NULL)

GO

-----------------------------------------

LOGIN
-- EXEMPLOS DE JOIN ABORDADOS NO ARTIGO
-----------------------------------------

-- Seleo Simples ( Todos os Cargos e Todos os Funcionario ) - Veja Figura 2


SELECT * FROM CARGO

AS C --> Apelidamos a tabelas Cargo de C neste artigo

SELECT * FROM FUNCIONARIO AS F --> Apelidamos funcionrio de F neste artigo

GO

-- CROSS JOIN ( Juno Cruzada ) - Veja Figura 3


SELECT F.NomeFuncionario
http://www.devmedia.com.br/inner-cross-left-rigth-e-full-joins/21016

11/17

22/4/2014

INNER, CROSS, LEFT, RIGTH E FULL JOINS

,C.NomeCargo
FROM
CROSS JOIN

CARGO

AS C

FUNCIONARIO AS F

-- INNER JOIN ( Juno Interna ) - Veja Figura 4


SELECT F.NomeFuncionario
,C.NomeCargo
FROM
INNER JOIN

CARGO

AS C

FUNCIONARIO AS F ON (F.CodCargo = C.CodCargo)

-- LEFT OUTER JOIN ou simplesmente LEFT JOIN ( Juno Externa Esquerda ) - Veja
Figura 5
SELECT F.nomeFuncionario
,C.nomeCargo
FROM

FUNCIONARIO AS F

LEFT OUTER JOIN CARGO

AS C ON ( C.codCargo = F.codCargo )

-- RIGHT OUTER JOIN ou simplesmente RIGHT JOIN ( Juno Externa Direita) - Veja
Figura 6
SELECT F.nomeFuncionario
,C.nomeCargo
FROM

FUNCIONARIO AS F

http://www.devmedia.com.br/inner-cross-left-rigth-e-full-joins/21016

12/17

22/4/2014

INNER, CROSS, LEFT, RIGTH E FULL JOINS

RIGHT OUTER JOIN CARGO

AS C ON ( F.codCargo = C.codCargo )

-- FULL OUTHER JOIN ou simplesmente FULL JOIN (Juno Externa Completa)


SELECT F.nomeFuncionario
,C.nomeCargo
FROM

FUNCIONARIO AS F

FULL OUTER JOIN CARGO

AS C ON ( C.codCargo = F.codCargo )

-- s isso!

Avante e at a prxima.

Wellyngton Luiz Cruz Moreira


wlcmoreira@hotmail.com
http://wlcmoreira.wordpress.com

Wellyngton Luiz Cruz Moreira


Formado pela UNIT (Universidade Tiradentes-SE) em Processamento de Dados (1993), ps-graduado
em Anlise de Sistemas pela Universidade Candido Mendes-RJ (2003). Como professor lecionou nos
cursos de GRADUAO da UNIT/SE, Faculda [...]

http://www.devmedia.com.br/inner-cross-left-rigth-e-full-joins/21016

13/17

22/4/2014

INNER, CROSS, LEFT, RIGTH E FULL JOINS

O que voc achou deste post?


Gostei (4)

(0)

Poste seu comentrio


[autor] Wellyngton Luiz C ruz Moreira
Senhores,
dois adendos:
1 - No ttulo: INNER, C ROSS, LEFT, >>>RIGHT<<< E FULL JOINS.
2 - Nos scripts de insero substituir por:
-- Povoando a tabela C ARGO
INSERT C ARGO (C odC argo, NomeC argo, ValorC argo) VALUES ('C 1', 'C AIXA' , 800.00)
INSERT C ARGO (C odC argo, NomeC argo, ValorC argo) VALUES ('C 2', 'VENDEDOR', 1200.00)
INSERT C ARGO (C odC argo, NomeC argo, ValorC argo) VALUES ('C 3', 'GERENTE' , 2400.00)

GO

-- Povoando a tabela FUNC IONARIO


INSERT FUNC IONARIO (Matricula, NomeFuncionario, C odC argo)
VALUES (100, 'JOO' , 'C 1')
INSERT FUNC IONARIO (Matricula, NomeFuncionario, C odC argo)
VALUES (110, 'MARIA' , 'C 2')
INSERT FUNC IONARIO (Matricula, NomeFuncionario, C odC argo)
VALUES (120, 'C ARLOS' , 'C 1')
INSERT FUNC IONARIO (Matricula, NomeFuncionario, C odC argo)
VALUES (130, 'TADEU' , NULL)

http://www.devmedia.com.br/inner-cross-left-rigth-e-full-joins/21016

14/17

22/4/2014

INNER, CROSS, LEFT, RIGTH E FULL JOINS

GO
[h +1 ano] - Responder

Publicidade

Servios
Inclua um comentrio
Adicionar aos Favoritos
Marcar como lido/assistido
Incluir anotao pessoal

+Banco de
dados
http://www.devmedia.com.br/inner-cross-left-rigth-e-full-joins/21016

15/17

22/4/2014

INNER, CROSS, LEFT, RIGTH E FULL JOINS

Mais posts
Artigo

SQL Triggers: possvel desabilitar uma trigger por usurio?


Pocket Video

Kinovea: Extraindo imagens e vdeos sem programao


Artigo

Assessment: Proposta de Metodologia Simplificada


Artigo

Criando um CRUD em C#
Video aula

SQL Plan Management (SPM) - Curso de Oracle: Otimizao de


desempenho - Aula 30
Video aula

Stored outlines - Curso de Oracle: Otimizao de desempenho Aula 29


Video aula

Modos de operao do otimizador de consultas - Curso de


Oracle: Otimizao de desempenho - Aula 28
Video aula

Planos de execuo de instrues SQL - Curso de Oracle:


Otimizao de desempenho - Aula 27
http://www.devmedia.com.br/inner-cross-left-rigth-e-full-joins/21016

16/17

22/4/2014

INNER, CROSS, LEFT, RIGTH E FULL JOINS

Video aula

Manuteno de ndices - Curso de Oracle: Otimizao de


desempenho - Aula 26
Pocket Video

Importando arquivos CSV: Oracle, SQL Server, MySQL,


PostgreSQL e MongoDB

Listar mais contedo

Anuncie | Loja | Publique | Assine | Fale conosco

DevMedia
Curtir

21.803 pessoas curtiram DevMedia.

Plug-in social do Facebook

Hospedagem web por Porta 80 Web Hosting


Todos os Direitos Reservados a Web-03

http://www.devmedia.com.br/inner-cross-left-rigth-e-full-joins/21016

17/17

S-ar putea să vă placă și