Mysql – NATURAL JOIN – Joins mais fáceis

11:34

Esta dica é para facilitar algumas consultas no banco de dados. O Mysql tem suporte ao NATURAL Join o que facilita muito as querys.

Vamos supor que temos 2 tabelas relacionadas, clientes e telefones. O cliente tem a seguinte estrutura:

CREATE TABLE `clients` ( `idClients` int(11) NOT NULL AUTO_INCREMENT, `name` char(150) DEFAULT NULL, PRIMARY KEY (`idClients`))insert into `clients`(`name`) values ('Turbosite');

 

Note que no final inserimos um usuário para nosso teste.

A tabela de telefones ficaria desta forma:

CREATE TABLE `phones` ( `idPhones` int(11) NOT NULL AUTO_INCREMENT, `number` char(20) NOT NULL, `idClients` int(11) NOT NULL, PRIMARY KEY (`idPhones`,`idClients`), KEY `idClients` (`idClients`), CONSTRAINT `phones_ibfk_1` FOREIGN KEY (`idClients`) REFERENCES `clients` (`idClients`))insert into `phones`(`number`,`idClients`) values ('(31) 4003-2322',1);insert into `phones`(`number`,`idClients`) values ('(31) 3261-2168',1);

 

Sem utilizar o NATURAL Join, a consulta para pegar os telefones de um cliente seria da seguinte forma:

SELECT C.`name`,P.`number` FROM clients CINNER JOIN phones PON C.`idClients` = P.`idClients`WHERE C.`idClients` = 1

 

Resultado seria:

namenumber
Turbosite(31) 4003-2322
Turbosite(31) 3261-2168

 

Agora com o Natural JOIN, a consulta seria:

SELECT * FROM clientsNATURAL JOIN phonesWHERE idClients = 1

O resultado da pesquisa:

idClientsnameidPhonesnumber
1Turbosite5(31) 4003-2322
1Turbosite6(31) 3261-2168

 

O Natural JOIN é inteligente o suficiente para não acusar erro por ambiguidade de coluna, como uma faz referência a outra, ele não lista em duplicidade as colunas de referência.
A consulta fica mais limpa, mais fácil de entender e de dar manutenção, caso esta tabela fizesse referência a uma 3ª tabela, era só adicionar uma linha ficando desta forma:

SELECT * FROM clientsNATURAL JOIN phonesNATURAL JOIN tabela3WHERE idClients = 1

 

Vamos deixar aqui um link com uma apresentação de JOINS do MYSQL. É interessante ver e aprender para tomar a melhor decisão no desenvolvimento de seus projetos.

http://w3resource.com/gallery/mysql-joins-slides-presentation