Você está aqui: MySQL ::: Dicas & Truques ::: Joins (Junções) |
Como usar a junção INNER JOIN (ou CROSS JOIN) para agrupar dados de duas ou mais tabelas no MySQLQuantidade de visualizações: 11797 vezes |
A junção INNER JOIN (que pode ser substituída por CROSS JOIN) do MySQL é usada quando queremos agrupar dados de duas ou mais tabelas nas quais deverá haver, no mínimo, uma correspondência (match) nos campos das tabelas envolvidas. Vamos ver um exemplo? Considere duas tabelas: jogadores e times. Um jogador pode jogar em nenhum (zero) ou um time e um time pode conter zero ou mais jogadores. Aqui a cardinalidade é de 1 x N. Comece criando a tabela de times: Comando DDL CREATE TABLE para a tabela times: CREATE TABLE times( id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, nome VARCHAR(45) NOT NULL, PRIMARY KEY(id) ) ENGINE = InnoDB; Vá em frente e insira alguns times nesta tabela. Vamos agora criar a tabela de jogadores: Comando DDL CREATE TABLE para a tabela jogadores: CREATE TABLE jogadores( id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, nome VARCHAR(45) NOT NULL, id_time INTEGER UNSIGNED, PRIMARY KEY(id), CONSTRAINT fk_jogadores_times FOREIGN KEY fk_jogadores_times(id_time) REFERENCES times(id) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB; Note que o campo id_time da tabela jogador aceita NULL, ou seja, como é possível haver jogadores sem times, devemos ser capazes de cadastrar os jogadores e só mais adiante definir o time a qual ele pertencerá. Veja: INSERT INTO jogadores VALUES(NULL, 'JORGINHO', NULL); Vá em frente e cadastre alguns jogadores (sem relacioná-los com algum time). Finalizado alguns cadastros de jogadores e times, use a instrução UPDATE para relacionar alguns jogadores com seus respectivos times (deixe alguns jogadores sem time). Veja um exemplo: UPDATE jogadores SET id_time = 3 WHERE id = 2; E aqui vem a real utilidade da junção INNER JOIN. Nossa tarefa é listar o id, nome do jogador e nome do time a qual ele pertence. Mas, devemos incluir na listagem apenas os jogadores que estejam relacionados a algum time, ou seja, jogadores sem time não devem entrar na lista. Veja: SELECT j.id, j.nome, t.nome FROM jogadores j INNER JOIN times t ON j.id_time = t.id; id jogador time 2 JORGINHO CRUZEIRO 4 MÁRCIO COSTA FLAMENGO Note que o conjunto de dados retornados inclui apenas os jogadores cujo valor do campo id_time tenha um valor correspondente na chave primária (id) da tabela times. |
![]() |
Veja mais Dicas e truques de MySQL |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |