JOINS BÁSICOS

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (3)  (0)

Se destina a todos que tem dificuldade no assunto, uma forma simples e legal do funcionamento do join

BOM PESSOAL,

 

UM ASSUNTO QUE MUITOS TEM DUVIDAS, QUANDO ESTÃO NO INICO DA APRENDIZAGEM DA LIGUAGEM DO SQL, SÃO NADA MAIS NADA MENOS QUE OS JOINS.

EU DIGO ISSO POR EXPERIENCIA PRÓPRIA, (E OLHA QUE EU NEM TENHO TANTA EXPERIÊNCIA ASSIM), POIS A ALGUMAS SEMANAS ATRAZ EU ESTAVA NAVEGANDO NA INTERNET, EM BUSCA DA SINTAXE DOS JOINS SEJA INNER, LEFT, RIGTH OU CROSS.

EU ESTAVA QUERENDO ENTENDER MELHOR ESTE ASSUNTO, ACHEI UM BOCADO DE MATERIAS E ARTIGOS DEDICADOS A ESSE ASSUNTO, POREM COM A MINHA

FALTA DE EXPERIENCIA JÁ CITADA ACIMA NÃO ENTENDIA MUITO BEM OS TERMOS MAIS "TECNICOS" QUE ERAM EXPLICADOS, ESTOU ESCREVENDO ARTIGOS FOCADO EM PESSOAS COMO EU, COM POUCA EXPERIENCIA E MUITA VONTADE DE APRENDIZAGEM

PARA SER HONESTO ESSE É O PRIMEIRO ARTIGO QUE EU ESTOU ESCREVENDO PARA PUBLICAR (ESPERO QUE DE TUDO CERTO), PORTANTO SE EU CITAR ALGO QUE NÃO FOR DO ENTENDIMENTO DOS LEITORES, FAVOR ME ENVIAR E-MAILS PARA CAIO_PAPAI@HOTMAIL.COM.

ASSIM EU VOU LAPIDANDO OS ARTIGO, A MIM MESMO E A FORMA DE PUBLICA-LOS E ESCREVE-LOS.

POIS BEM...CHEGA DE CONVERSA FIADA E VAMOS FAZER OS JOINS.

 

TEREMOS UM BANCO DE DADOS (ISSO NÃO É NOVIDADE PARA NINGUEM), O QUAL IREMOS TRABALHAR COM APENAS DUAS TABELAS, DE INICIO A TABELA CARGO E FUNCIONÁRIO.

POREM PARA QUE TODOS TENHAM UM BOM ENTENDIMENTO SOBRE O ARTIGO, É DESEJAVEL TER CONHEÇIMENTO EM CHAVES PRIMARIAS, ESTRANGEIRAS, E CONSTRAINTS, VOU DAR UM BREVE RESUMO SOBRE AMBOS ASSUNTOS.

CHAVE PRIMARIA (PRIMARY KEY) É O CAMPO DA TABELA QUE IRÁ SE COMUNICAR COM AS OUTRAS TABELAS, TAMBEM TEM A FUNÇÃO (NÃO ORBIGATORIAMENTE) DE SER O IDENTIFICADOR DA TABELA, POREM PARA QUE ESSA CHAVE PRIMARIA SE COMUNIQUE COM ALGUEM (NO CASO OUTRA TABELA) É NESSESÁRIO QUE A TABELA A QUAL ELA FOR SE COMUNICAR, TIVER UMA CHAVE ESTRANGUEIRA (COMO O PROPRIO NOME DIZ, QUE VEM DE FORA.

POR EXEMPLO NAS NOSSAS TABELAS VAI HAVER A CHAVE PRIMARIA COD_CARGO QUE É O IDENTIFICADOR DA TABELA DE CARGO.

JÁ NA TABELA DE FUNCIONÁRIO TEREMOS O CODIGO DO CARGO COMO CHAVE ESTRANGEIRA.

QUAL A IDEIA DISSO ?

BOM SIMPLESMENTE AO INVES DE NA TABELA DE FUNCIONARIO INCLUIRMOS TODOS OS DADOS DO CARGO, IREMOS REFERENCIAR O NUMERO DE IDENTIFICAÇÃO

DA TABELA DE CARGO.

AS CONSTRAINTS SÃO AS INSTRUÇÕES(COMANDO) QUE DAMOS PARA DECLARAR O TIPO DE CHAVE, CHECAGENS E ETC.

A SINTAXE É:

 

CONSTRAINT PK -> PARA PRIMARY KEY, FK -> PARA FOREIGN KEY, UQ -> UNIQUE E CH -> CHECK (NOMENCLATURAS PADRÕES PARA ORGANIZAR)

 

CONSTRANT PK_NOME_DA_CHAVE TIPO (NO LUGAR DO TIPO COLOCAR, PRIMARY KEY PARA CHAVES PRIMARIAS, FK PARA CHAVES ESTRANGEIRAS,

UNIQUE PARA CAMPOS UNICOS E CHECK PARA CAMPOS OS QUAIS HAVERAM A CHECAGEM).

 

CONSTRAINT PK_NOME_DA_CHAVE PRIMARY KEY (NOME DO CAMPO QUE É A CHAVE PRIMARIA).

 

EM CASOS DE FOREIGN KEY A HISTORIA MUDA UM POUCO LOGO APOS O FOREING KEY DEVE SER COLOCADO O REFERENCES E O NOME DA TABELA

DE ONDE VEM O CAMPO E O NOME DO CAMPO ENTRE PARENTESES, DEVERÁ FICAR ASSIM.

 

CONSTRAINT NOME_DO_CAMPO FOREING KEY (NOME_DO_CAMPO) REFERENCES NOME_DA_TABELA (NOME_DO_CAMPO)

 

BOM AGORA MÃO NA MASSA:

 

-- CRIANDO UM BANCO DE DADOS TESTE E A TABELA DE CARGO

 

CREATE DATABASE LOJA

GO

USE LOJA

GO

CREATE TABLE CARGO

(

COD_CARGO INT NOT NULL,

NOME_CARGO VARCHAR(50) NOT NULL,

CONSTRAINT PK_CARGO PRIMARY KEY (COD_CARGO),

CONSTRAINT UQ_CARGO UNIQUE   (NOME_CARGO)

)

 

-- INSERINDO VALORES NA TABELA DE CARGO

 

INSERT INTO CARGO VALUES (1,'PRESIDENTE')

INSERT INTO CARGO VALUES (2,'GERENTE')

INSERT INTO CARGO VALUES (3,'SUPERVISOR')

INSERT INTO CARGO VALUES (4,'REVISOR')

INSERT INTO CARGO VALUES (5,'REDATOR')

 

--CRIANDO A TABELA DE FUNCIONARIO

 

CREATE TABLE FUNCIONARIO

(

COD_FUNC          INT NOT NULL,

COD_CARGO         INT NOT NULL,

NOME_FUNC         VARCHAR(50) NOT NULL,

SALARIO_FUNC      DECIMAL(10,2) NOT NULL,

RG_FUNC                 VARCHAR(15) NOT NULL,

CONSTRAINT PK_FUNC PRIMARY KEY (COD_FUNC),

CONSTRAINT FK_FUNC FOREIGN KEY (COD_CARGO) REFERENCES CARGO(COD_CARGO),

CONSTRAINT CH_FUNC CHECK (SALARIO_FUNC >0),

CONSTRAINT UQ_FUNC UNIQUE (RG_FUNC)

)

 

-- INSERINDO VALORES NA TABELA DE FUNCIONARIO

INSERT INTO FUNCIONARIO VALUES (1,5,'LUIZ',3000.00,'27.291.905')

INSERT INTO FUNCIONARIO VALUES (2,5,'ANTONIO',3000.00,'15.299.805')

INSERT INTO FUNCIONARIO VALUES (3,3,'DONIZETE',2800.00,'23.251.785')

INSERT INTO FUNCIONARIO VALUES (4,3,'GABRIELA',4700.00,'63.265.965')

INSERT INTO FUNCIONARIO VALUES (5,2,'EMILIO',5000.00,'22.251.955')

INSERT INTO FUNCIONARIO VALUES (6,1,'CAROLINA',9000.00,'32.331.335')

 

APÓS INSERIDOS OS VALORES VAMOS AO INNER JOIN.

IMAGINE QUE VOCÊ QUEIRA UMA LISTAGEM NA QUAL VOCÊ PRECISA DAS

INFORMAÇÕES DE TODOS OS FUNCIONARIOS E SEUS DEVIDOS CARGOS, POREM EU QUE SEJA EXIBIDO OCODIGO DO CARGO, E SIM EU QUERO A DESCRIÇÃO DO CARGO.

COMO FAZER ISSO, SENDO QUE ESTÃO EM TABELAS DIFERENTES ? NÃO SABE ?

BOM A RESPOSTA É MAIS QUE CLARA, É O INNER JOIN QUE FAZ ESSA PONTE ENTRE OS CAMPOS COLOQUEI O COMANDO O QUAL EXECUTA ESSA LISTAGEM.

 

SELECT CARGO.NOME_CARGO,

         FUNCIONARIO.NOME_FUNC

FROM FUNCIONARIO

INNER JOIN CARGO

ON FUNCIONARIO.COD_CARGO = CARGO.COD_CARGO

 

A PRIMEIRA PARTE PRA MIM É A MAIS FACIL CONSISTE EM SELECIONAR OS CAMPOS DESEJADOS DE UMA DETERMINADA TABELA,

 

SELECT CARGO.NOME_CARGO,

         FUNCIONARIO.NOME_FUNC

 

ANTES DO CAMPO SELECIONADO, NOTE QUE VEM O NOME DA TABELA, O MOTIVO DO NOME DA TABELA VIR NA FRENTE DO CAMPO, É DEVIDO AO  FROM E O INNER JOIN COM OUTRAS TABELAS, VIR ABAIXO DA INSTRUÇÃO, OU SEJA COLOCAMOS OS NOMES DAS TABELAS PARA O NOSSO CONTROLE E PARA A IDEINTIFICAÇÃO DO SQL TAMBEM.

POIS SE TIRARMOS O NOME DA TABELA, O SQL NÃO SABERIA DE ONDE TIRAR TAIS INFORMAÇÕES.

 

 

A SEGUNDA PARTE TAMBEM NÃO É DAS MAIS DIFICEIS, ELA INFORMA QUAIS TABELAS VAMOS UNIR

 

FROM FUNCIONARIO

INNER JOIN CARGO

 

ESTAMOS FALANDO QUE OS DADOS DE PESQUISA A CIMA ESTÃO VINDO DA TABELA DE FUNCIONARIO COM A UNIÃO DA TABELA DE CARGO.

 

 

E A ULTIMA PARTE (DO NOSSO EXEMPLO) SÃO OS DADOS DE COMPARAÇÃO

 

ON FUNCIONARIO.COD_CARGO = CARGO.COD_CARGO

 

OU SEJA ESTAMOS FALANDO QUE A UNIÃO É FEITA QUANDO NA TABELA DE FUNCIONARIO EXITE UM FUNCIONARIO COM UM CARGO NA TABELA DE CARGO (UNIAO FEITAS PELAS CHAVES PRIMARIAS E SECUNDARIAS), SE OUVER UM FUNCIONARIO COM UM COD_CARGO QUE ESTEJA NA TABELA DE CARGO ASSIM ELE TRARA AS INFORMAÇÕES DESEJADAS, ASSIM ELE SEMPRE TRARA OS CAMPOS QUE

ESTÃO EM IGUALDADE.

EX DO RETORNO DESSE SELECT : (REDATOR,LUIZ).

 

A SINTAXE DO LEFT JOIN É IGUAL A DO INNER JOIN POREM A LOGICA MUDA UM POUCO.

COMO EU FALEI NO INNER JOIN, ELE TRAZ OS CAMPOS QUE ESTÃO EM IGUALDADE, JÁ O LEFT JOIN TRAZ OS QUE ESTÃO EM IGUALDADES E OS QUE NÃO

ESTÃO EM IGUALDADE AO MESMO TEMPO, PARA FAZER O TESTE CADASTRE MAIS UM CARGO POREM NÃO CADASTRE NENHUM FUNCIONARIO PARA ESTE CARGO.

APOS FEITO ISSO COPIE O COMANDO DO INNER JOIN, APAGUE O INNER JOIN E ESCREVA O LEFT JOIN E EXECUTE O SELECT.

VOCÊ PODE NOTAR QUE ELE TRARÁ O NOVO CARGO QUE VOCÊ CADATROU POREM COM O NOME DE FUNCIONARIO NULO, OU SEJA SEMPRE QUE FALARMOS EM LEFT JOIN ESTAREMOS TRABALHANDO COM OS DADOS QUE PODEM OU NÃO ESTAR EM UMA TABELA.

 

VALE RELEMBRAR QUE PARA TODA PRIMARY KEY EXISTIRÁ UMA FOREING KEY

 

BOM PESSOAL, COM ISSO ENCERRO ESSE ARTIGO, ESPERO QUE TENHA AJUDADO ALGUEM.

 

COMO TINHA TIDO, QUALQUER DUVIDA, OPNIÃO, RECOMENDAÇÃO, COLABORAÇÃO E CRITICAS É SÓ ENVIAR UM E-MAIL PARA

 

CAIO_PAPAI@HOTMAIL.COM

 

ABRAÇO A TODOS

 

 

CAIO A. PAPAI

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?