SQL
Structured Query Language é uma linguagem declarativa padrão para manipular bancos de dados relacionais. Ela é fundamentada em conceitos da Teoria de Conjuntos/álgebra relacional e elementos práticos que se desviam da teoria pura para atender às necessidades de bancos de dados reais.
JOIN Operation
É a operação para juntar dados de duas tabelas. Por default ocorre o produto cartesiano (cross join) durante a junção, exemplo: SELECT * FROM A JOIN B.
Observação: Para LEFT, RIGHT e FULL (ou seja, tirando INNER) JOINS é opcional adicionar a palavra OUTER (externo, que não é inner). Exemplo: LEFT OUTER JOIN.
Considere as tabelas abaixo:
| id | nome | departamento_id |
|---|---|---|
| 11 | Marcio | 1 |
| 12 | Carlos | 2 |
| 13 | Miguel | 3 |
| 14 | Carol | 4 |
| 15 | Sebastian | null |
| 16 | Rodrigo Dias | 6 |
| Tabela funcionários. |
| id | nome |
|---|---|
| 1 | RH |
| 2 | TI |
| 3 | Vendas |
| 4 | Desenvolvimento |
| 5 | Marketing |
| Tabela departamentos. |
INNER JOIN
Só retorna as linhas que possuem correspondência exata entre f.departamento_id = d.id, a intersection entre as duas tabelas.
SELECT f.nome AS nome_func,d.nome AS nome_dep
FROM funcionarios AS f
INNER JOIN departamentos AS d ON f.departamento_id = d.id;| nome_func | nome_dep |
|---|---|
| Marcio | RH |
| Carlos | TI |
| Miguel | Vendas |
| Carol | Desenvolvimento |
LEFT/RIGHT JOIN
Listar todos os funcionários (no caso do left join e o funcionários na esquerda do join), independente de terem ou não um departamento correspondente. O right
SELECT f.nome AS nome_func,d.nome AS nome_dep
FROM funcionarios AS f
LEFT JOIN departamentos AS d ON f.departamento_id = d.id;| nome_func | nome_dep |
|---|---|
| Marcio | RH |
| Carlos | TI |
| Miguel | Vendas |
| Carol | Desenvolvimento |
| Sebastian | null |
| Rodrigo Dias | null |
FULL JOIN
Junta as linhas que têm correspondência e, para as que não têm, preenche o lado oposto com NULL.
SELECT f.nome AS nome_func,d.nome AS nome_dep
FROM funcionarios AS f
FULL JOIN departamentos AS d ON f.departamento_id = d.id;| nome_func | nome_dep |
|---|---|
| Marcio | RH |
| Carlos | TI |
| Miguel | Vendas |
| Carol | Desenvolvimento |
| Sebastian | null |
| Rodrigo Dias | null |
| null | Marketing |