+2

Introdução ao MySQL

criado por João Prado Maia em 09/12/2000 4:37pm
<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&ccedil;os
de cada artigo (n&uacute;mero de item) de cada negociante. Supondo que
cada negociante tem um pre&ccedil;o fixo por artigo, ent&atilde;o (item,
negociante) &eacute; uma chave prim&aacute;ria aos registros. <br>
Voc&ecirc; pode criar a tabela de exemplo como: </p>
<p class=\"mysql\">CREATE TABLE shop (<br>
&nbsp;&nbsp;article INT(4) UNSIGNED ZEROFILL DEFAULT \'0000\' NOT NULL,<br>
&nbsp;&nbsp;dealer CHAR(20) DEFAULT \'\' NOT NULL,<br>
&nbsp;&nbsp;price DOUBLE(16,2) DEFAULT \'0.00\' NOT NULL,<br>
&nbsp;&nbsp;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&atilde;o: </p>
<p class=\"mysql\">SELECT * FROM shop</p>
<p class=\"mysql\">+---------+--------+-------+<br>
| article | dealer | price |<br>
+---------+--------+-------+<br>
| 0001 &nbsp;&nbsp;&nbsp;| A &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 3.45 &nbsp;|<br>
| 0001 &nbsp;&nbsp;&nbsp;| B &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 3.99&nbsp;
|<br>
| 0002 &nbsp;&nbsp;&nbsp;| A &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 10.99 |<br>
| 0003 &nbsp;&nbsp;&nbsp;| B &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 1.45&nbsp;
|<br>
| 0003 &nbsp;&nbsp;&nbsp;| C &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 1.69&nbsp;
|<br>
| 0003 &nbsp;&nbsp;&nbsp;| D &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 1.25&nbsp;
|<br>
| 0004 &nbsp;&nbsp;&nbsp;| D &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 19.95 |<br>
+---------+--------+-------+</p>
<p><br>
O valor m&aacute;ximo de uma coluna</p>
<p>&quot;Qual &eacute; o artigo que tem o pre&ccedil;o mais alto?&quot;</p>
<p class=\"mysql\">SELECT MAX(article) AS article FROM shop</p>
<p class=\"mysql\">+---------+<br>
| article |<br>
+---------+<br>
| 4 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+---------+</p>
<p><br>
A fila da coluna com o n&uacute;mero m&aacute;ximo </p>
<p>&quot;Encontre o n&uacute;mero do negociantes, e avalie quem tem o artigo
mais caro.&quot;</p>
<p>No ANSI SQL isto &eacute; 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&atilde;o faz uma sub-sele&ccedil;&atilde;o) somente
faz isto em dois passos: <br>
1. Obtem o valor m&aacute;ximo e avalia a tabela com uma declara&ccedil;&atilde;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&ccedil;&atilde;o est&aacute; em classificar todas filas decrescentes
por pre&ccedil;o e unicamente obter uma fila usando o MySQL cl&aacute;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&aacute; v&aacute;rios artigos caros, a solu&ccedil;&atilde;o
de LIMIT mostra unicamente um deles.</p>
<p><br>
M&aacute;ximo da coluna: por grupo e por valores</p>
<p>&quot;Qual &eacute; o pre&ccedil;o mais alto por artigo?&quot;</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 &nbsp;&nbsp;&nbsp;| 3.99&nbsp; |<br>
| 0002 &nbsp;&nbsp;&nbsp;| 10.99 |<br>
| 0003 &nbsp;&nbsp;&nbsp;| 1.69&nbsp; |<br>
| 0004 &nbsp;&nbsp;&nbsp;| 19.95 |<br>
+---------+-------+</p>
<p><br>
As filas com grupos de campos de valor m&aacute;ximo</p>
<p>&quot;Para cada artigo, encontre o(s) negociante(s) com o pre&ccedil;o
mais caro.&quot; </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 &eacute; melhor ser feito em v&aacute;rios passos: <br>
1. Obtenha a lista de artigo e pre&ccedil;o m&aacute;ximo. <br>
2. Para cada artigo obtenha as filas correspondentes que t&ecirc;m o pre&ccedil;o
m&aacute;ximo armazenado. </p>
<p>Isto pode ser facilmente feito com uma tabela tempor&aacute;ria: </p>
<p class=\"mysql\">CREATE TEMPORARY TABLE tmp (<br>
&nbsp;&nbsp;article INT(4) UNSIGNED ZEROFILL DEFAULT \'0000\' NOT NULL,
<br>
&nbsp;&nbsp;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&ecirc; usar uma tabela TEMPOR&Aacute;RIA, voc&ecirc; deve tamb&eacute;m
fechar o &quot;tmp&quot; tabela. <br>
&quot;Isto pode ser feito com uma pergunta &uacute;nica?&quot;<br>
Sim, mas pode usar um truque ineficiente que &eacute; chamado de &quot;MAX-CONCAT
trick&quot;: </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 &nbsp;&nbsp;&nbsp;| B &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 3.99&nbsp;&nbsp;|<br>
| 0002 &nbsp;&nbsp;&nbsp;| A &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 10.99 |<br>
| 0003 &nbsp;&nbsp;&nbsp;| C &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 1.69&nbsp;
|<br>
| 0004 &nbsp;&nbsp;&nbsp;| D &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 19.95 |<br>
+---------+--------+-------+</p>

Comentários:

Mostrando 1 - 10 de 10 comentários
Prezado Amigo,

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
15/01/2010 11:47am (~14 anos atrás)

Onde eu encontro pra download o mysql??
09/07/2006 4:22pm (~18 anos atrás)

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 (~18 anos atrás)

francirrenio disse:
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...
03/12/2005 5:41am (~18 anos atrás)

GILSON SOARES disse:
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.
31/08/2005 9:25am (~18 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
27/10/2004 2:05pm (~19 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
15/08/2004 8:31am (~19 anos atrás)

Tulio disse:
Belo Tutorial! Parabêns.
05/03/2004 9:06am (~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
15/09/2002 2:19pm (~21 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)