mysql

PHP + MySQL + jQuery,Tutoriais

Trabalhando com o banco de dados MySQL (Intermediário)

19 mar , 2014  

Vamos dar continuidade aos tutoriais de MySQL, hoje vamos falar sobre algumas operações muito utilizadas em banco de dados MySQL, INNER JOIN, LEFT JOIN, RIGHT JOIN, GROUP BY, HAVING, UNION e Aliases.

Como já mostramos pra vocês algumas operações básicas do MySQL, segue todos os links para visualização:

1 – MySQL – Básico (Criação e utilização no PHP)
2 – MySQL – Intermediário (INNER JOIN, LEFT JOIN, RIGHT JOIN, GROUP BY, HAVING, UNION e Aliases)
3 – MySQL – Avançado (Relacionamentos de tabelas)
4 – MySQL – Backup (Realizar backup do banco de dados)
5 – MySQL – Segurança (Métodos de manter a segurança de informação)

Já vou publicar o dicionário de dados do banco que vamos utilizar como exemplo:

6

Agora podemos iniciar:

INNER JOIN

A cláusula INNER JOIN permite usar uma comparação de valores entre colunas provenientes de tabelas associadas.

<?php 
    $comando = "SELECT * FROM `cliente` INNER JOIN `cidade` on `cliente`.`cidade` = `cidade`.`id` WHERE `cidade`.`nome` = 'Joinville'";
    mysql_query($comando , $conexao);
?>

LEFT JOIN

A cláusula LEFT JOIN ou LEFT OUTER JOIN retorna todos os dados relacionados e também não relacionados encontrados na tabela à esquerda da cláusula JOIN. Caso não tenha algum dado relacionado entre as tabelas à esquerda e a direira do JOIN, os resultados nulos vem à direita da tabela.

<?php 
    $comando = "SELECT * FROM `cliente` LEFT JOIN `cidade` on `cliente`.`cidade` = `cidade`.`id`";
    mysql_query($comando , $conexao);
?>

RIGHT JOIN

A cláusula RIGHT JOIN ou RIGHT OUTER JOIN retorna todos os dados relacionados e também não relacionados encontrados na tabela à direita da cláusula JOIN. Caso não tenha algum dado relacionado entre as tabelas à esquerda e à direira do JOIN, os resultados nulos vem à direita da tabela.

<?php 
    $comando = "SELECT * FROM `cliente` RIGHT JOIN `cidade` on `cliente`.`cidade` = `cidade`.`id`";
    mysql_query($comando , $conexao);
?>

GROUP BY

GROUP BY, como o nome já fica subentendido, é para agrupar dados, produzindo sumários. O interessante do GROUP BY é utilizar as funções SUM, COUNT, AVG, etc..

Vamos descobrir a maior e a menor quantidade de venda um determinado cliente realizou:

<?php 
    $comando = "SELECT max(`quantidade`), min(`quantidade`), `cliente` FROM `vendas` GROUP BY `cliente`";
    mysql_query($comando , $conexao);
?>

HAVING

Outro ponto interessante é falar do HAVING, que estabelece condições para o GROUP BY, muito parecido com o WHERE para o FROM.

Vamos descobrir o nome dos clientes com idade maior ou igual a 18 anos:

<?php 
    $comando = "SELECT `nome` FROM `cliente` GROUP BY `idade` HAVING `idade` >= '18'";
    mysql_query($comando , $conexao);
?>

UNION

Como o nome diz, serve para juntar várias consultas sql:

<?php 
    $comando = "(SELECT * FROM `produtos` WHERE `id_categoria` = '2' AND ativo_produtos = 'sim') UNION	(SELECT * FROM `produtos` WHERE `id_categoria` = '5' AND ativo_produtos = 'sim')";
    mysql_query($comando , $conexao);
?>

Aliases

Para dar nomes mais legíveis para as colunas e tabelas de um banco de dados.

Segue exemplo básico:

<?php 
    $comando = "SELECT `nome` as Nome_do_Cliente FROM `cliente`";
    mysql_query($comando , $conexao);
?>

E agora um exemplo um pouco mais complicado:

<?php 
    $comando = "SELECT Cli.nome as Nome_do_Cliente, Cid.nome as Nome_da_Cidade FROM `cliente` as Cli INNER JOIN `cidade` AS Cid on Cli.`cidade` = Cid.`id` WHERE Cid.`nome` = 'Joinville'";
    mysql_query($comando , $conexao);
?>

Espero que esse tutorial tenha sido importante para o seu aprendizado e estou a disposição para ler seus recados abaixo, com críticas e sugestões.

Estamos aqui para discutir sobre desenvolvimento web!

Abraço

Adicional: Atualizado dia 17/11/2014:

Utilizando mais de um INNER JOIN em uma seleção

<?php 
    $comando = "SELECT * FROM `cliente` INNER JOIN `cidade` ON (cliente.id_cidade_cliente = cidade.id_cidade) INNER JOIN `estado` ON (estado.id_estado = cidade.id_estado_cidade) WHERE cliente.nome_cliente = 'Rodrigo'";
    mysql_query($comando , $conexao);
?>

, , , , , , ,


Comments are closed.