Ciências da computação dia 111

MySQL JOIN --- Banco de dados

JOIN

CROSS JOIN

SELECT * FROM table JOIN table2;

INNER JOIN

O comando ON mostra sempre a relação entre a PK e FK.

obs: se quisermos, antes do comando JOIN podemos colocar o INNER.

EquiJOIN

SELECT * FROM table JOIN table2 ON (table.campo = table2.campo);

Você também pode utilizar múltiplas relações usando os operadores lógicos:

SELECT * FROM table JOIN table2 ON (table.campo = table2.campo) AND (table.campo2 = table2.campo2);

Natural JOIN

SELECT * FROM table NATURAL JOIN table2;

Tenha cuidado ao usar esse comando, certifique-se de que as colunas que possuem o mesmo nome são as que fazem de fato a relação entre elas.

Outer JOIN

assim como no INNER, podemos colocar ou não a palavra OUTER antes dos comandos JOIN.

LEFT OUTER JOIN

SELECT * FROM table(tabela da esquerda) LEFT OUTER JOIN table2 ON (table.campo = table2.campo);

RIGHT OUTER JOIN

SELECT * FROM table LEFT OUTER JOIN table2(tabela da direita) ON (table.campo = table2.campo);

FULL OUTER JOIN

/* Como deveria ser */
SELECT * FROM table FULL OUTER JOIN table2 ON (table.campo = table2.campo);

/* Como podemos fazer */

SELECT * 
  FROM table 
  LEFT OUTER JOIN table2 ON (table.campo = table2.campo)
  UNION
SELECT * 
  FROM table 
  RIGHT OUTER JOIN table2 ON (table.campo = table2.campo);

O comando UNION aqui, age como na teoria de conjuntos, unindo os dados de ambos os selects/tabelas.

Aliases

Podemos, para ficar mais simples, reduzir o tamanho dos nomes das tabelas ou das colunas usando um alias. Para isso no select coloque na frente do nome o comando as e o alias que você quer dar, ou simplesmente coloque o nome do alias logo na frente, sem o comando as.

SELECT T.campo FROM table as T;
SELECT T.campo FROM table T;

OBS

O tipo da FK precisa ser igual ao da PK que ela referencia, mas não precisam ter a mesma disponibilidade para NULL, ou seja um pode ser NOT NULL e o outro NULLABLE.