Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Cerrito

Algumas dicas para Consultas no MySQL

Recommended Posts

Pessoal estive dando uma olhada na net e achei esse material interessante espero que possa ajudar nosso crescimento...

abraços a todos

 

Marcio

 

Algumas dicas para Consultas no MySQL

 

Algumas funções são importantes de serem conhecidas por um programador iniciante que queira usar o MySQL como servidor de banco de dados. É algo simples, mas que vai facilitar a vida dos iniciantes e colocá-los no caminho para pegar mais experiência com o MySQL.

 

Considere a seguinte Tabela Pessoal com os valores abaixo:

 

Código Nome Time

01 Fabricio Corinthians

02 Felipe São Paulo

03 Gustavo Corinthians

04 Daniel Palmeiras

05 Leonardo Palmeiras

 

DISTINCT: retorna apenas uma linha de dados para todo o grupo de linhas que tenha o mesmo valor.

 

Exemplo:

SELECT DISTINCT time FROM pessoal;

Corinthians (estava duas vezes só que só retornou uma única linha)

São Paulo

Palmeiras

 

ALL: Retorna todos os dados, oposto de DISTINCT.

 

Exemplo:

SELECT ALL time FROM pessoal;

Corinthians

São Paulo

Corinthians

Palmeiras

Palmeiras

 

WHERE: Dá uma condição para os dados serem buscados.

 

Exemplo:

SELECT nome FROM pessoal WHERE time = 'São Paulo';

Felipe

 

ORDER BY: Retorna os comandos em ordem ascendente (ASC) ou descendente (DESC). O padrão é ascendente.

 

Exemplo:

SELECT nome FROM pessoal ORDER BY nome DESC;

Leonardo

Gustavo

Felipe

Fabrício

Daniel

 

LIMIT [início,] linhas: Retorna o número de linhas especificado. Se o valor início for fornecido, aquelas linhas são puladas antes do dado ser retornado. A primeira linha é 0.

 

Exemplo:

SELECT * FROM pessoal LIMIT 3,1;

04 Daniel Palmeiras

 

 

FUNÇÕES:

 

1. ABS: Valor absoluto do número, ou seja, só considera a parte numérica não se importando com o sinal positivo ou negativo do mesmo.

Exemplo: ABS(-145) retorna 145

 

2. BIN: Binário de número decimal

Exemplo: BIN(8) retorna 1000

 

3. CURDATE() / CURRENTDATE(): Data atual na forma YYYY/MM/DD

Exemplo: CURDATE() retorna 2002/04/04

 

4. CURTIME() / CURRENTTIME(): Hora atual na forma HH:MM:SS

Exemplo: CURTIME() retorna 13:02:43

 

5. DATABASE: Nome do banco de dados atual

Exemplo: DATABASE() retorna bdteste

 

6. DAYOFMONTH: Dia do mês para a data dada, na faixa de 1 a 31

Exemplo: DAYOFMONTH('2004-04-04') retorna 04

 

7. DAYNAME: Dia da semana para a data dada

Exemplo: DAYNAME('2004-04-04') retorna Sunday

 

8. DAYOFWEEK: Dia da semana em número para a data dada, na faixa de 1 a 7, onde o 1 é domingo.

Exemplo: DAYOFWEEK('2004-04-04') retorna 1

 

9. DAYOFYEAR: Dia do ano para a data dada, na faixa de 1 até 366

Exemplo: DAYOFYEAR('2004-04-04') retorna 95.

 

10. FORMAT(NÚMERO, DECIMAIS): Formata o número nitidamente com o número de decimais dado.

Exemplo: FORMAT(5543.00245,2) retorna 5.543.002,45

 

11. LIKE: faz uma busca sofisticada por uma substring dentro de uma string informada. Temos, dentro da função LIKE, os seguintes caracteres especiais utilizados em substrings:

 

% - Busca zero ou mais caracteres;

_ - Busca somente um caractere.

 

 

Exemplo 1:

SELECT nome From pessoal Where nome like ‘F%’;

Fabricio

Felipe

 

O caracter ‘%’ na consulta acima indica que estamos procurando nomes que possuem a incial F.

 

Exemplo 2:

SELECT nome From pessoal Where nome like ‘_a%’;

Daniel

Fabricio

 

O caracter ‘_’ na consulta acima indica que estamos procurando nomes nos quais a letra A é a segunda letra do nome.

 

Exemplo 3:

SELECT nome From pessoal Where nome like ‘%o’;

Fabrício

Gustavo

Leonardo

 

A consulta acima buscou nomes em que a última letra é o caractere ‘O’.

 

 

12. A função Left retorna os primeiros caracteres à esquerda de uma string.

 

Sintaxe: LEFT(string,tamanho)

 

Exemplo: SELECT LEFT(nome,3) from pessoal

Fab

Fel

Gus

Dan

Leo

 

Esta consulta retornará os 3 primeiros caracteres à esquerda dos registros da coluna nome.

 

13. A função Right retorna os últimos caracteres à direita de uma string.

 

Sintaxe: RIGHT(string1,tamanho)

 

Exemplo:

SELECT RIGHT(nome,4) From pessoal;

icio

lipe

tavo

niel

ardo

 

 

Artigo escrito por Adriana Ferreira

http://www.sqlmagazine.com.br/

 

 

Pessoal incrementando o arquivo da Adriana vamos ver mais alguns exemplos...

 

digamos que queremos trazer como resultado da nossa pesquisa apenas os nomes que contenham 05 letras...

para isso é simples...

usamos o curinga "_" que significa qualquer caracter...

seria algo assim:

 

mysql> SELECT * FROM clientes WHERE nomes LIKE"_____";

 

note que usamos cinco vezes o coringa "_" para retornar todos dados da coluna nome que contenham apenas 05 caracteres...

 

Bom e se quisessemos listar todos os nomes que tenham "w" no nome...

tambem é simples usamos o "%" da seguinte maneira:

 

mysql> SELECT * FROM clientes WHERE nomes LIKE"%w%";

 

Encontrando nomes finalizados com "os" por exemplo

 

mysql> SELECT * FROM clientes WHERE nomes LIKE "os%";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Encontrando nomes finalizados com "os" por exemplomysql> SELECT * FROM clientes WHERE nomes LIKE "os%";

Não seria ao contrário?
SELECT * FROM clientes WHERE nomes LIKE "%os";
Artigo legal para iniciantes (tipo eu), gostei bastante, um resumo legal das funções básicas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenho uma colaboração a fazer ao tópico do cerrito. Usando a função INNER JOIN em três tabelas.

 

Digamos que temos três tabelas a saber: Cliente, Profissão e TipoDeTelefones.

 

Na primeira tabela temos o cadastro completo de todos os clientes. Sendo que temos um campo para profissão com múltipla escolhas e três campos TipoDeFone com múltiplas escolhas. E ainda! As tabelas profissão e TipoDeTelefones armazenam nome que possam alimentar esses campos especiais da tabela clientes. Será q fui claro?

 

Vamos continuar...

 

Tabela Cliente

> Cod - int

> Nome - varchar

> DataDeNasc - date

> Profissao - int

> NumTelefone1 - int

> TipoDeFone1 - int

> NumTelefone2 - int

> TipoDeFone2 - int

> NumTelefone3 - int

> TipoDeFone3 - int

 

Tabela Profissao

> Cod - int

> Profissao - varchar

 

Tabela TipoDeTelefones

> Cod - int

> Tipo - varchar

 

OK!

 

Digamos que temos um formulário para cadastrarmos os clientes e nos campos, que discuto, são do tipo select. Os valores e label devem ser $cod e $profissao para campo profissão e $cod e $tipo para os campos de tipos de telefones.

 

Se alguém não entendeu levante o braço... :D

 

OK!

 

Quando o formulário é executado nesses campos especiais aparecem os registros vindos da tabela Profissão e TipoDeTelefones. E após inserir desejamos recuperar estes valores numa página de detalhes/visualização de clientes.

 

OK!

 

Agora quando montamos a instrução SQL é óbvio que pensamos assim: mysql_query('select * from cliente where cod = codigo')

 

E montamos a página para visualizar os dados, mas tem o seguinte. Na tabela clientes os campos profissão e tipos de telefones armazenam apenas o código do profissão ou tipodetelefone vindo dos campos select. Lembra do parâmetro value que leva o código?

 

Agora temos que adaptar essa instrução para além de recuperar os dados do cliente e também fazer as combinações com as duas tabelas para pegar o valor correto ao invés do código.

 

Instrução:

select Cod,Nome,DataDeNasc,NumTelefone1,NumTelefone2,NumTelefone3,profissao.Profissao,Tipo1.Descricao as Tel01,Tipo2.Descricao as Tel02,Tipo3.Descricao as Tel03from clienteINNER JOINTipoDeTelefones as Tipo1,TipoDeTelefones as Tipo2,TipoDeTelefones as Tipo3,profissaoWHEREcliente.Cod = $codigoAND cliente.Profissao = profissao.CodAND cliente.TipoDeFone01 = Tipo1.CodAND cliente.TipoDeFone02 = Tipo2.CodAND cliente.TipoDeFone03 = Tipo3.Cod
Pronto! Agora o SQL é executado e onde aparece um código dos campos profissão e dos telefones aparece a descrição vindo dos outros campos através de uma combinação de três tabela pelo INNER JOIN.

 

Um abraço a todos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito bom esse tópico, mas mesmo assim estou com dúvidas.Alguém poderia explicar melhor como funciona o INNER JOIN. Também gostaria de saber se dá para fazer uma consulta a duas tabelas ao mesmo tempo, e mostrar o resultado das duas.Muito grato!

Compartilhar este post


Link para o post
Compartilhar em outros sites

tá pra nascer o cara que vai me explicar direito como funciona o inner join, pra mim ele não passa de um WHERE.

 

Aliás nessa explicação acima acho que não tá certo não, cadê o ON?

 

Sergio R, fazer a consulta em 2 tabelas isso se chama "relacionamento", é muito simples:

 

Digamos que tenho 2 tabelas:

 

TABELA1

cod

nome

 

TABELA2

cod

profissao

 

O campo cod da tabela1 vira chave estrangeira na tabela2, ou seja, são iguais.

 

"SELECT tabela1.nome, tabela2.profissaoFROM tabela1, tabela2WHERE tabela1.cod = tabela2.cod"
vai mostrar o nome do cara e a profissão que ele tem. ^_^

Compartilhar este post


Link para o post
Compartilhar em outros sites

$sql = "SELECT PtsAtd.Nome_UO, PtsAtd.Sigla, PtsAtd.Endereço, PtsAtd.Bairro, PtsAtd.Municipio, PtsAtd.CEP, PtsAtd.UF, PtsAtd.NúmeroTelefone, PtsAtd.Fax, PtsAtd.EmailInstitucional, PtsAtd.Usercode_1, PtsAtd.Usercode_2, PtsAtd.Usercode_3, Responsaveis.Cargo, Responsaveis.Titular, Responsaveis.MatriculaT, Responsaveis.CelularT, Responsaveis.EmailT, Responsaveis.Substituto, Responsaveis.MatriculaS, Responsaveis.CelularS, Responsaveis.EmailS, FROM PtsAtd, Responsaveis WHERE PtsAtd.Codigo_UO = Responsaveis.Codigo_UO LIKE '$nome%'";

 

isso funciona?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá pessoal... sou novo aqui.

 

Estou com um probleminha e preciso de ajuda. POR FAVOR.

 

Tenho essa tabela em um Banco de Dados.

 

=============================

CREATE TABLE `cadpro` (

`id` INTEGER NOT NULL AUTO_INCREMENT,

`nome` VARCHAR( 255 ) NOT NULL ,

`email` VARCHAR( 60 ) NOT NULL ,

`rua` VARCHAR( 255 ) NOT NULL ,

`bairro` VARCHAR( 255 ) NOT NULL ,

`cidade` VARCHAR( 255 ) NOT NULL ,

`estado` VARCHAR( 5 ) NOT NULL ,

`cep` VARCHAR( 30 ) NOT NULL ,

`telfixo` VARCHAR( 15 ) NOT NULL ,

`telmovel` VARCHAR( 15 ) NOT NULL ,

`dia` TINYTEXT NOT NULL,

`mes` TINYTEXT NOT NULL,

PRIMARY KEY (`Id`)

) TYPE=MyISAM;

=============================

 

Pergunto:

 

[como é possível desenvolver algum script que envie mensagem de parabéns a aniversariantes do dia?]

 

 

Obrigado

Werber

Werber, tenta isso: link.

Vai ter que adaptar um pouquinho, até mesmo porque essa mensagem que você fala seria enviada por e-mail, ou quando ele entrasse no site/ aplicação, né?

Espero ter ajudado, RodrigoC

Compartilhar este post


Link para o post
Compartilhar em outros sites

oLÁ Galera....

 

Estou com a seguinte situação,

 

TENHO ESSA TABELA (arSantododia)

Dentro dessa tabela tenho os seguintes campos:

 

arCod

arName

arTexto

arDia

arMes

 

Quero fazer um SELECT e que me mostre na pagina somente o que está na data de hj, exemplo: 06/agosto, quero que me mostre tudo o que tem nessa data! e somente nessa data.

 

Poderia me ajudar?

 

Ahh otimo post!

 

Abraço,

 

 

Rodrigo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá galera, tudo certo?

 

Gostei muito do tópico do Cerrito (acho q é isso), mais estou com um problema, acredito que seja bem simples, mais eu não estou conseguindo fazer (deve ser p q não sou muito bom em MySQL http://forum.imasters.com.br/public/style_emoticons/default/grin.gif)...

 

Bem, é o seguinte:

 

Tenho uma tabela de cadastro de dados pessoais, mais ja foral excluidos e inseridos diversos nomes, agora estou precisando fazer uma contagem, preciso saber quantas entradas tem nesta tabela.

 

Como monto essa query?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá galera, tudo certo?

 

Gostei muito do tópico do Cerrito (acho q é isso), mais estou com um problema, acredito que seja bem simples, mais eu não estou conseguindo fazer (deve ser p q não sou muito bom em MySQL http://forum.imasters.com.br/public/style_emoticons/default/grin.gif )...

 

Bem, é o seguinte:

 

Tenho uma tabela de cadastro de dados pessoais, mais ja foral excluidos e inseridos diversos nomes, agora estou precisando fazer uma contagem, preciso saber quantas entradas tem nesta tabela.

 

Como monto essa query?

 

usa

 

select count(nome) from tabela

 

tabela = nome da sua tabela

nome = um campo que vai o nome do cadastrado

 

flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

tá pra nascer o cara que vai me explicar direito como funciona o inner join, pra mim ele não passa de um WHERE.

 

Aliás nessa explicação acima acho que não tá certo não, cadê o ON?

 

Sergio R, fazer a consulta em 2 tabelas isso se chama "relacionamento", é muito simples:

 

Digamos que tenho 2 tabelas:

 

TABELA1

cod

nome

 

TABELA2

cod

profissao

 

O campo cod da tabela1 vira chave estrangeira na tabela2, ou seja, são iguais.

 

"SELECT tabela1.nome, tabela2.profissao
FROM tabela1, tabela2
WHERE tabela1.cod = tabela2.cod"
vai mostrar o nome do cara e a profissão que ele tem. happy.gif

 

 

Meu caro Hunter, boa noite.

 

Também sempre tive esse problema com a diferenciação entre inner e left.

 

Mas agora tá molezinha, olha isso aqui e vê se te ajuda em algo nessa diferença.

 

Vamos ao inner join nesse momento:

 

SELECT T01.CODIGO,

T02.CODIGO

FROM ALUNO T01

INNER JOIN TURMA T02 ON T01.CODIGO = T02.CODIGO

 

O resultado proveniente dessa consulta sempre existirá valores em quais quer colunas que queira observar, nesse caso as colunas T01.CODIGO e T02.CODIGO sempre terão valores,

 

Agora vamos ao left join AGORA:

 

SELECT T01.CODIGO,

T02.CODIGO

FROM ALUNO T01

LEFT JOIN TURMA T02 ON T01.CODIGO = T02.CODIGO

Neste caso, observando a ligação T01.CODIGO = T02.CODIGO, isso nos diz que a coluna T01.CODIGO SEMPRE terá valores e a coluna T02.CODIGO apresentará valores nulos e não nulos.

 

Caso a ligação fosse ao contrário, T02.CODIGO = T01.CODIGO, isso nos diz que a coluna T02.CODIGO SEMPRE terá valores e a coluna T01.CODIGO apresentará valores nulos e não nulos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.