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:

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);
?>
group by, having, inner join, left join, MySQL, right join, select, union