Trabalhando com o banco de dados MySQL (Intermediário) » idCodex
Como já mostramos pra vocês algumas operações básicas do MySQL, segue todos os links para visualização:
Utilizando mais de um INNER JOIN em uma seleção
Já vou publicar o dicionário de dados do banco que vamos utilizar como exemplo:
Agora podemos iniciar:
A cláusula INNER JOIN permite usar uma comparação de valores entre colunas provenientes de tabelas associadas.
$comando = "SELECT * FROM `cliente` INNER JOIN `cidade` on `cliente`.`cidade` = `cidade`.`id` WHERE `cidade`.`nome` = 'Joinville'";
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.
$comando = "SELECT * FROM `cliente` LEFT JOIN `cidade` on `cliente`.`cidade` = `cidade`.`id`";
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.
$comando = "SELECT * FROM `cliente` RIGHT JOIN `cidade` on `cliente`.`cidade` = `cidade`.`id`";
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:
$comando = "SELECT max(`quantidade`), min(`quantidade`), `cliente` FROM `vendas` GROUP BY `cliente`";
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:
$comando = "SELECT `nome` FROM `cliente` GROUP BY `idade` HAVING `idade` >= '18'";
Como o nome diz, serve para juntar várias consultas sql:
$comando = "(SELECT * FROM `produtos` WHERE `id_categoria` = '2' AND ativo_produtos = 'sim') UNION	(SELECT * FROM `produtos` WHERE `id_categoria` = '5' AND ativo_produtos = 'sim')";
Para dar nomes mais legíveis para as colunas e tabelas de um banco de dados.
$comando = "SELECT `nome` as Nome_do_Cliente FROM `cliente`";
E agora um exemplo um pouco mais complicado:
$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'";
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!
Adicional: Atualizado dia 17/11/2014:
$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'";