Quando você tem tabelas que a resposta de uma consulta pode estar relacionada em outra tabela, muitas vezes para exibirmos de maneira simplificada precisamos fazer esses tipos de consultas um pouco mais complexas .
Então vamos ver de forma mais simples para pegar o jeito de uma vez por todas. Lembrando que se você não possuir um banco de dados, nesse caso o MySQL instalado, você pode testar essas consultas online com uma das ferramentas apresentadas nesse artigo: Conheça 7 Serviços OnLine para Executar seus Comandos SQL
Uma cláusula JOIN é usada para combinar linhas de duas ou mais tabelas, com base em uma coluna relacionada entre elas.
Aqui estão os diferentes tipos de JOINs no SQL:
Para explicar como funciona essas consultas vamos usar esse banco de dados examples_joins.sql . Se quiser importar a tabela use esse comando:
-u
informa o usuário;-p
informa que precisa inserir senha;mysql -u NOME_DO_USUÁRIO -p
CREATE DATABASE examples_joins;
exit
ou quit
, rode o comando abaixo para importar a base:
Lembrando que o arquivo precisa estar no mesmo diretório que você fará a importação.
mysql -u NOME_DO_USUÁRIO -p NOME_DA_BASE < examples_joins.sql
USE examples_joins;
para mudar/definir a base para uso. E rode um SHOW TABLES
para verificar as tabelas. Veja as imagens abaixo:
-D
informa a base de dados;mysql -u NOME_DO_USUÁRIO -p -D examples_joins
SELECT * FROM NOME_DE_ALGUMA_TABELA
:SELECT * FROM clientes;
SELECT * FROM notebooks;
SELECT * FROM vendas;
Retorna registros que possuem valores correspondentes nas duas tabelas.
SELECT * FROM vendas AS v INNER JOIN clientes AS c ON (v.id_cliente = c.id);
AS
cria uma alias(apelido v) para a tabela vendas e outros para a tabela clientes(apelido c)Alternativamente você poderia fazer esse INNER JOIN sem usar a cláusula AS
para aliases, assim:
SELECT * FROM vendas v INNER JOIN clientes c ON (v.id_cliente = c.id);
Eu prefiro usar o
AS
pra não acabar me confundindo mais tarde. =)
Retorna todos os registros da tabela esquerda e os registros correspondentes da tabela direita.
SELECT * FROM vendas AS v LEFT JOIN clientes AS c ON (v.id_cliente = c.id);
ou
SELECT * FROM vendas v LEFT JOIN clientes c ON (v.id_cliente = c.id);
Retorna todos os registros da tabela da direita e os registros correspondentes da tabela da esquerda.
SELECT * FROM vendas AS v RIGHT JOIN clientes AS c ON (v.id_cliente = c.id);
ou
SELECT * FROM vendas v RIGHT JOIN clientes c ON (v.id_cliente = c.id);
Podemos tiras nossas conclusões a partir dessa essa imagem abaixo e notar as difereças de cada um dos tipos de consultas.
DICAS EXTRAS: Se quiser exportar a base de dados, caso você faça alguma alteração, rode o comando:
mysqldump -h HOST -u NOME_DO_USUÁRIO -p NOME_DA_BASE > examples_joins.sql
E na importação, se tiver problemas com codifição(uso de letras com acentos por exemplo), importe assim:
mysql -h HOST -u NOME_DO_USUÁRIO -p --default_character_set utf8 NOME_DA_BASE < examples_joins.sql