{"id":3834,"date":"2014-11-27T11:34:54","date_gmt":"2014-11-27T13:34:54","guid":{"rendered":"http:\/\/blog.turbosite.com.br\/?p=3834"},"modified":"2014-11-27T11:34:54","modified_gmt":"2014-11-27T13:34:54","slug":"mysql-natural-join-joins-mais-faceis","status":"publish","type":"post","link":"https:\/\/www.turbosite.com.br\/blog\/mysql-natural-join-joins-mais-faceis\/","title":{"rendered":"Mysql &#8211; NATURAL JOIN \u2013 Joins mais f\u00e1ceis"},"content":{"rendered":"<p>Esta dica \u00e9 para facilitar algumas consultas no banco de dados. O Mysql tem suporte ao NATURAL Join o que facilita muito as querys.<\/p>\n<p>Vamos supor que temos 2 tabelas relacionadas, clientes e telefones. O cliente tem a seguinte estrutura:<\/p>\n<pre class=\"lang:mysql decode:true\">CREATE TABLE `clients` (\n  `idClients` int(11) NOT NULL AUTO_INCREMENT,\n  `name` char(150) DEFAULT NULL,\n  PRIMARY KEY (`idClients`)\n)\ninsert  into `clients`(`name`) values ('Turbosite');<\/pre>\n<p>&nbsp;<\/p>\n<p>Note que no final inserimos um usu\u00e1rio para nosso teste.<\/p>\n<p>A tabela de telefones ficaria desta forma:<\/p>\n<pre class=\"lang:php decode:true\">CREATE TABLE `phones` (\n  `idPhones` int(11) NOT NULL AUTO_INCREMENT,\n  `number` char(20) NOT NULL,\n  `idClients` int(11) NOT NULL,\n  PRIMARY KEY (`idPhones`,`idClients`),\n  KEY `idClients` (`idClients`),\n  CONSTRAINT `phones_ibfk_1` FOREIGN KEY (`idClients`) REFERENCES `clients` (`idClients`)\n)\ninsert  into `phones`(`number`,`idClients`) values ('(31) 4003-2322',1);\ninsert  into `phones`(`number`,`idClients`) values ('(31) 3261-2168',1);<\/pre>\n<p>&nbsp;<\/p>\n<p>Sem utilizar o NATURAL Join, a consulta para pegar os telefones de um cliente seria da seguinte forma:<\/p>\n<pre class=\"lang:php decode:true\">SELECT C.`name`,P.`number` FROM clients C\nINNER JOIN phones P\nON C.`idClients` = P.`idClients`\nWHERE C.`idClients` = 1<\/pre>\n<p>&nbsp;<\/p>\n<p>Resultado seria:<\/p>\n<table border=\"1\">\n<tbody>\n<tr>\n<td class=\"medium\" bgcolor=\"silver\">name<\/td>\n<td class=\"medium\" bgcolor=\"silver\">number<\/td>\n<\/tr>\n<tr>\n<td class=\"normal\" valign=\"top\">Turbosite<\/td>\n<td class=\"normal\" valign=\"top\">(31) 4003-2322<\/td>\n<\/tr>\n<tr>\n<td class=\"normal\" valign=\"top\">Turbosite<\/td>\n<td class=\"normal\" valign=\"top\">(31) 3261-2168<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>Agora com o Natural JOIN, a consulta seria:<\/p>\n<pre class=\"lang:mysql decode:true\">SELECT * FROM clients\nNATURAL JOIN phones\nWHERE idClients = 1<\/pre>\n<p>O resultado da pesquisa:<\/p>\n<table border=\"1\">\n<tbody>\n<tr>\n<td class=\"medium\" bgcolor=\"silver\">idClients<\/td>\n<td class=\"medium\" bgcolor=\"silver\">name<\/td>\n<td class=\"medium\" bgcolor=\"silver\">idPhones<\/td>\n<td class=\"medium\" bgcolor=\"silver\">number<\/td>\n<\/tr>\n<tr>\n<td class=\"normal\" valign=\"top\">1<\/td>\n<td class=\"normal\" valign=\"top\">Turbosite<\/td>\n<td class=\"normal\" valign=\"top\">5<\/td>\n<td class=\"normal\" valign=\"top\">(31) 4003-2322<\/td>\n<\/tr>\n<tr>\n<td class=\"normal\" valign=\"top\">1<\/td>\n<td class=\"normal\" valign=\"top\">Turbosite<\/td>\n<td class=\"normal\" valign=\"top\">6<\/td>\n<td class=\"normal\" valign=\"top\">(31) 3261-2168<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>O Natural JOIN \u00e9 inteligente o suficiente para n\u00e3o acusar erro por ambiguidade de coluna, como uma faz refer\u00eancia a outra, ele n\u00e3o lista em duplicidade as colunas de refer\u00eancia.<br \/>\nA consulta fica mais limpa, mais f\u00e1cil de entender e de dar manuten\u00e7\u00e3o, caso esta tabela fizesse refer\u00eancia a uma 3\u00aa tabela, era s\u00f3 adicionar uma linha ficando desta forma:<\/p>\n<pre class=\"lang:php decode:true\">SELECT * FROM clients\nNATURAL JOIN phones\nNATURAL JOIN tabela3\nWHERE idClients = 1<\/pre>\n<p>&nbsp;<\/p>\n<p>Vamos deixar aqui um link com uma apresenta\u00e7\u00e3o de JOINS do MYSQL. \u00c9 interessante ver e aprender para tomar a melhor decis\u00e3o no desenvolvimento de seus projetos.<\/p>\n<p><a href=\"http:\/\/w3resource.com\/gallery\/mysql-joins-slides-presentation\">http:\/\/w3resource.com\/gallery\/mysql-joins-slides-presentation<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Esta dica \u00e9 para facilitar algumas consultas no banco de dados. O Mysql tem suporte ao NATURAL Join o que facilita muito as querys.<\/p>\n","protected":false},"author":1,"featured_media":3837,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,19],"tags":[180,182,366,433,438],"class_list":["post-3834","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dicas","category-mysql","tag-destaque","tag-dica","tag-join","tag-mysql","tag-natural-join"],"_links":{"self":[{"href":"https:\/\/www.turbosite.com.br\/blog\/wp-json\/wp\/v2\/posts\/3834","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.turbosite.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.turbosite.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.turbosite.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.turbosite.com.br\/blog\/wp-json\/wp\/v2\/comments?post=3834"}],"version-history":[{"count":0,"href":"https:\/\/www.turbosite.com.br\/blog\/wp-json\/wp\/v2\/posts\/3834\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.turbosite.com.br\/blog\/wp-json\/wp\/v2\/media\/3837"}],"wp:attachment":[{"href":"https:\/\/www.turbosite.com.br\/blog\/wp-json\/wp\/v2\/media?parent=3834"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.turbosite.com.br\/blog\/wp-json\/wp\/v2\/categories?post=3834"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.turbosite.com.br\/blog\/wp-json\/wp\/v2\/tags?post=3834"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}