Introdução ao MySQL
<p><br>
<font color=\"#003366\" class=\"negrito\">Exemplos de perguntas comuns</font></p>
<p>Aqui segue exemplos de como resolver alguns dos problemas mais comuns
do MySQL. Algum dos exemplos usam a tabela de compras, coloque os preços
de cada artigo (número de item) de cada negociante. Supondo que
cada negociante tem um preço fixo por artigo, então (item,
negociante) é uma chave primária aos registros. <br>
Você pode criar a tabela de exemplo como: </p>
<p class=\"mysql\">CREATE TABLE shop (<br>
article INT(4) UNSIGNED ZEROFILL DEFAULT \'0000\' NOT NULL,<br>
dealer CHAR(20) DEFAULT \'\' NOT NULL,<br>
price DOUBLE(16,2) DEFAULT \'0.00\' NOT NULL,<br>
PRIMARY KEY(article, dealer)<br>
);</p>
<p class=\"mysql\">INSERT INTO shop VALUES<br>
(1,\'A\',3.45),(1,\'B\',3.99),(2,\'A\',10.99),(3,\'B\',1.45),(3,\'C\',1.69),<br>
(3,\'D\',1.25),(4,\'D\',19.95);</p>
<p>Assim os dados de exemplo estarão: </p>
<p class=\"mysql\">SELECT * FROM shop</p>
<p class=\"mysql\">+---------+--------+-------+<br>
| article | dealer | price |<br>
+---------+--------+-------+<br>
| 0001 | A | 3.45 |<br>
| 0001 | B | 3.99
|<br>
| 0002 | A | 10.99 |<br>
| 0003 | B | 1.45
|<br>
| 0003 | C | 1.69
|<br>
| 0003 | D | 1.25
|<br>
| 0004 | D | 19.95 |<br>
+---------+--------+-------+</p>
<p><br>
O valor máximo de uma coluna</p>
<p>"Qual é o artigo que tem o preço mais alto?"</p>
<p class=\"mysql\">SELECT MAX(article) AS article FROM shop</p>
<p class=\"mysql\">+---------+<br>
| article |<br>
+---------+<br>
| 4 |<br>
+---------+</p>
<p><br>
A fila da coluna com o número máximo </p>
<p>"Encontre o número do negociantes, e avalie quem tem o artigo
mais caro."</p>
<p>No ANSI SQL isto é facilmente feito com um sub-query: </p>
<p class=\"mysql\">SELECT article, dealer, price<br>
FROM shop<br>
WHERE price=(SELECT MAX(price) FROM shop)</p>
<p>No MySQL (ainda não faz uma sub-seleção) somente
faz isto em dois passos: <br>
1. Obtem o valor máximo e avalia a tabela com uma declaração
SELECT. <br>
2. Usando este valor compila a pergunta real: </p>
<p class=\"mysql\">SELECT article, dealer, price<br>
FROM shop<br>
WHERE price=19.95</p>
<p>Outra solução está em classificar todas filas decrescentes
por preço e unicamente obter uma fila usando o MySQL cláusula
de LIMIT: </p>
<p class=\"mysql\">SELECT article, dealer, price<br>
FROM shop<br>
ORDER BY price DESC<br>
LIMIT 1</p>
<p>Note: Se há vários artigos caros, a solução
de LIMIT mostra unicamente um deles.</p>
<p><br>
Máximo da coluna: por grupo e por valores</p>
<p>"Qual é o preço mais alto por artigo?"</p>
<p class=\"mysql\">SELECT article, MAX(price) AS price<br>
FROM shop<br>
GROUP BY article</p>
<p class=\"mysql\">+---------+-------+<br>
| article | price |<br>
+---------+-------+<br>
| 0001 | 3.99 |<br>
| 0002 | 10.99 |<br>
| 0003 | 1.69 |<br>
| 0004 | 19.95 |<br>
+---------+-------+</p>
<p><br>
As filas com grupos de campos de valor máximo</p>
<p>"Para cada artigo, encontre o(s) negociante(s) com o preço
mais caro." </p>
<p>No ANSI SQL, pode fazer isto com um sub-query: </p>
<p></p>
<p class=\"mysql\">SELECT article, dealer, price<br>
FROM shop s1<br>
WHERE price=(SELECT MAX(s2.price)<br>
FROM shop s2<br>
WHERE s1.article = s2.article)</p>
<p>No MySQL é melhor ser feito em vários passos: <br>
1. Obtenha a lista de artigo e preço máximo. <br>
2. Para cada artigo obtenha as filas correspondentes que têm o preço
máximo armazenado. </p>
<p>Isto pode ser facilmente feito com uma tabela temporária: </p>
<p class=\"mysql\">CREATE TEMPORARY TABLE tmp (<br>
article INT(4) UNSIGNED ZEROFILL DEFAULT \'0000\' NOT NULL,
<br>
price DOUBLE(16,2) DEFAULT \'0.00\' NOT NULL<br>
);</p>
<p class=\"mysql\">LOCK TABLES article read;</p>
<p class=\"mysql\">INSERT INTO tmp SELECT article, MAX(price) FROM shop GROUP
BY article;</p>
<p class=\"mysql\">SELECT article, dealer, price FROM shop, tmp</p>
<p class=\"mysql\">WHERE shop.article=tmp.article AND shop.price=tmp.price;</p>
<p class=\"mysql\">UNLOCK TABLES;</p>
<p class=\"mysql\">DROP TABLE tmp;</p>
<p>Se você usar uma tabela TEMPORÁRIA, você deve também
fechar o "tmp" tabela. <br>
"Isto pode ser feito com uma pergunta única?"<br>
Sim, mas pode usar um truque ineficiente que é chamado de "MAX-CONCAT
trick": </p>
<p class=\"mysql\">SELECT article,<br>
SUBSTRING( MAX( CONCAT(LPAD(price,6,\'0\'),dealer) ), 7) AS dealer,<br>
0.00+LEFT( MAX( CONCAT(LPAD(price,6,\'0\'),dealer) ), 6) AS price<br>
FROM shop<br>
GROUP BY article;</p>
<p class=\"mysql\">+---------+--------+-------+<br>
| article | dealer | price |<br>
+---------+--------+-------+<br>
| 0001 | B | 3.99 |<br>
| 0002 | A | 10.99 |<br>
| 0003 | C | 1.69
|<br>
| 0004 | D | 19.95 |<br>
+---------+--------+-------+</p>
<font color=\"#003366\" class=\"negrito\">Exemplos de perguntas comuns</font></p>
<p>Aqui segue exemplos de como resolver alguns dos problemas mais comuns
do MySQL. Algum dos exemplos usam a tabela de compras, coloque os preços
de cada artigo (número de item) de cada negociante. Supondo que
cada negociante tem um preço fixo por artigo, então (item,
negociante) é uma chave primária aos registros. <br>
Você pode criar a tabela de exemplo como: </p>
<p class=\"mysql\">CREATE TABLE shop (<br>
article INT(4) UNSIGNED ZEROFILL DEFAULT \'0000\' NOT NULL,<br>
dealer CHAR(20) DEFAULT \'\' NOT NULL,<br>
price DOUBLE(16,2) DEFAULT \'0.00\' NOT NULL,<br>
PRIMARY KEY(article, dealer)<br>
);</p>
<p class=\"mysql\">INSERT INTO shop VALUES<br>
(1,\'A\',3.45),(1,\'B\',3.99),(2,\'A\',10.99),(3,\'B\',1.45),(3,\'C\',1.69),<br>
(3,\'D\',1.25),(4,\'D\',19.95);</p>
<p>Assim os dados de exemplo estarão: </p>
<p class=\"mysql\">SELECT * FROM shop</p>
<p class=\"mysql\">+---------+--------+-------+<br>
| article | dealer | price |<br>
+---------+--------+-------+<br>
| 0001 | A | 3.45 |<br>
| 0001 | B | 3.99
|<br>
| 0002 | A | 10.99 |<br>
| 0003 | B | 1.45
|<br>
| 0003 | C | 1.69
|<br>
| 0003 | D | 1.25
|<br>
| 0004 | D | 19.95 |<br>
+---------+--------+-------+</p>
<p><br>
O valor máximo de uma coluna</p>
<p>"Qual é o artigo que tem o preço mais alto?"</p>
<p class=\"mysql\">SELECT MAX(article) AS article FROM shop</p>
<p class=\"mysql\">+---------+<br>
| article |<br>
+---------+<br>
| 4 |<br>
+---------+</p>
<p><br>
A fila da coluna com o número máximo </p>
<p>"Encontre o número do negociantes, e avalie quem tem o artigo
mais caro."</p>
<p>No ANSI SQL isto é facilmente feito com um sub-query: </p>
<p class=\"mysql\">SELECT article, dealer, price<br>
FROM shop<br>
WHERE price=(SELECT MAX(price) FROM shop)</p>
<p>No MySQL (ainda não faz uma sub-seleção) somente
faz isto em dois passos: <br>
1. Obtem o valor máximo e avalia a tabela com uma declaração
SELECT. <br>
2. Usando este valor compila a pergunta real: </p>
<p class=\"mysql\">SELECT article, dealer, price<br>
FROM shop<br>
WHERE price=19.95</p>
<p>Outra solução está em classificar todas filas decrescentes
por preço e unicamente obter uma fila usando o MySQL cláusula
de LIMIT: </p>
<p class=\"mysql\">SELECT article, dealer, price<br>
FROM shop<br>
ORDER BY price DESC<br>
LIMIT 1</p>
<p>Note: Se há vários artigos caros, a solução
de LIMIT mostra unicamente um deles.</p>
<p><br>
Máximo da coluna: por grupo e por valores</p>
<p>"Qual é o preço mais alto por artigo?"</p>
<p class=\"mysql\">SELECT article, MAX(price) AS price<br>
FROM shop<br>
GROUP BY article</p>
<p class=\"mysql\">+---------+-------+<br>
| article | price |<br>
+---------+-------+<br>
| 0001 | 3.99 |<br>
| 0002 | 10.99 |<br>
| 0003 | 1.69 |<br>
| 0004 | 19.95 |<br>
+---------+-------+</p>
<p><br>
As filas com grupos de campos de valor máximo</p>
<p>"Para cada artigo, encontre o(s) negociante(s) com o preço
mais caro." </p>
<p>No ANSI SQL, pode fazer isto com um sub-query: </p>
<p></p>
<p class=\"mysql\">SELECT article, dealer, price<br>
FROM shop s1<br>
WHERE price=(SELECT MAX(s2.price)<br>
FROM shop s2<br>
WHERE s1.article = s2.article)</p>
<p>No MySQL é melhor ser feito em vários passos: <br>
1. Obtenha a lista de artigo e preço máximo. <br>
2. Para cada artigo obtenha as filas correspondentes que têm o preço
máximo armazenado. </p>
<p>Isto pode ser facilmente feito com uma tabela temporária: </p>
<p class=\"mysql\">CREATE TEMPORARY TABLE tmp (<br>
article INT(4) UNSIGNED ZEROFILL DEFAULT \'0000\' NOT NULL,
<br>
price DOUBLE(16,2) DEFAULT \'0.00\' NOT NULL<br>
);</p>
<p class=\"mysql\">LOCK TABLES article read;</p>
<p class=\"mysql\">INSERT INTO tmp SELECT article, MAX(price) FROM shop GROUP
BY article;</p>
<p class=\"mysql\">SELECT article, dealer, price FROM shop, tmp</p>
<p class=\"mysql\">WHERE shop.article=tmp.article AND shop.price=tmp.price;</p>
<p class=\"mysql\">UNLOCK TABLES;</p>
<p class=\"mysql\">DROP TABLE tmp;</p>
<p>Se você usar uma tabela TEMPORÁRIA, você deve também
fechar o "tmp" tabela. <br>
"Isto pode ser feito com uma pergunta única?"<br>
Sim, mas pode usar um truque ineficiente que é chamado de "MAX-CONCAT
trick": </p>
<p class=\"mysql\">SELECT article,<br>
SUBSTRING( MAX( CONCAT(LPAD(price,6,\'0\'),dealer) ), 7) AS dealer,<br>
0.00+LEFT( MAX( CONCAT(LPAD(price,6,\'0\'),dealer) ), 6) AS price<br>
FROM shop<br>
GROUP BY article;</p>
<p class=\"mysql\">+---------+--------+-------+<br>
| article | dealer | price |<br>
+---------+--------+-------+<br>
| 0001 | B | 3.99 |<br>
| 0002 | A | 10.99 |<br>
| 0003 | C | 1.69
|<br>
| 0004 | D | 19.95 |<br>
+---------+--------+-------+</p>
Instalei o MySQL na minha máquina, dizem que o usuário é 'root' e a senha é '' (em branco), mas não estou conseguindo acessar o MySQL, depois instalei o Vertrigo Serv, e nele também encontro dificuldades para usar o PHP my Admin. como resolvo este problema?
02/06/2006 7:56am
(~18 anos atrás)
Instalei tudo, apache, PhP e o mysql, a luz do mysql (versao 3.23.51) está verde, digamos que tudo certo, mas como posso testar pra ver se funciona?
26/01/2006 10:13am
(~19 anos atrás)
Caro amigo, me de uma juda.
Tenho uma tabela de cadastro de alunos e tem alguns alunos duplicados.
Gostaria de saber como ver os cadastros duplicados de matricula.
Valeu...
Tenho uma tabela de cadastro de alunos e tem alguns alunos duplicados.
Gostaria de saber como ver os cadastros duplicados de matricula.
Valeu...
03/12/2005 5:41am
(~19 anos atrás)
AMIGOS EU NAO ESTOU CONSEGUINDO AUTENTICAR NO MYSQL ESTOU USANDO APACHE 1.3.29 EO PHP 5.0.4
GOSTARIA QUE VOCE ME AJUDEM A SABER QUANDO ESTOU CONECTADO AO MYSQL.
GOSTARIA QUE VOCE ME AJUDEM A SABER QUANDO ESTOU CONECTADO AO MYSQL.
31/08/2005 9:25am
(~19 anos atrás)
Criei um BD no MySql e inseri alguns registros onde alguns caracteres são especiais, principalmente acentos, só que estou utilizando o dreamweaver para visualizar os dados, e esse acentos nao aparecem no lugar vem outros caracteres (sujeira)o que tenho q fazer
Grato
Grato
27/10/2004 2:05pm
(~20 anos atrás)
Olá João, gostaria de uma ajuda sua, se possível, estou desenvolvendo uma pagina em php, para consulta de procedimentos médicos em um bd mysql, o processo seria o seguinte, tenho uma tabela com 3 campos: contrato, mes, procedimento, queria adicionar um campo senha na tabela, que pegasse os dados do campo contrato, assim o usuario entraria com o login contrato e senha tmb os dados do contrato, só que tenho que fazer todos os meses, e mais uma dúvida, para que a nova inserção dos meses posteriores fosse feita uma inserção na tabela.
Um abraço, agradço a atenção
Kerensky
Um abraço, agradço a atenção
Kerensky
15/08/2004 8:31am
(~20 anos atrás)
Olá estou iniciando na area de programação, gostaria de saber se este artigo é valido para MySql fo Windows??
Estou com dificuldades...
poderia me ajudar...
Obrigado
Estou com dificuldades...
poderia me ajudar...
Obrigado
15/09/2002 2:19pm
(~22 anos atrás)
veja, estive lendo seu artigo aqui colocado, mas me surgiu uma dúvida.
Quando vc falar em ordem crescente DESC, mas como fazer com a ordem decrescente?
O que eu gostaria de saber se na busca SELECT eu posso fazer com que os ids mais velhos fiquem embaixo e os mais novos em cima, tipo assim:
id: 05
id: 04
id: 03
id: 02
id: 01
Como eu aplicaria este processo de busca?
Tem como me dar este help?
Abraços.
betezek@betezek.com.br
fernando