Vodafone inicia produção própria de electricidade Google Chrome 0.3.154.0

“Cábula” do MySQL

Criado por: Pedro Pinto em 4 de Outubro de 2008 Deixar um comentário

Encontrei um artigo bastante interessante sobre mysql publicado no site http://www.php5.com.br/ e decidi partilhar convosco.

Este artigo visa ajudar aos programadores a fazer as suas tarefas mais facilmente e ajudar a diminuir o tempo de desenvolvimento.Alguns termos encontram-se em brasileiro “a gente” entende-se bem :). Vamos la começar.

A função IN e NOT IN

Usamos IN para fazer consultas quando precisamos que seja retornado todos os registros onde em um determinado campos contenha um dos valores que serão passados no IN.

Usamos NOT IN quando queremos retornar tudo menos os resultados passados no NOT IN

Uso em String:

SELECT sigla, nome, população
FROM cidades
WHERE
Sigla IN(‘PR’, ‘SP’, ‘MG’);
//NOT IN
Sigla NOT IN(‘PR’, ‘SP’, ‘MG’);

Uso numérico:

SELECT nome, email, idade
FROM curriculos
WHERE
idade IN (18, 19, 20)
//NOT IN
idade NOT IN (15, 16, 17)

As funções IF e CASE WHEN

Usamos a função IF no MySQL com a mesma finalidade do que qualquer linguagem de programação, só que na maioria das vezes é mais fácil jogar essa verificação para o banco de dados do que para a linguagem de programação.

Sintaxe:

IF(condição, caso verdadeiro, caso contrário)

SELECT nome, email, IF(sexo =”M”, “Masculino”, “Feminino”)
FROM currículos

A função CASE WHEN:

Usamos a função CASE WHEN no MySQL com a mesma finalidade do que usamos em qualquer çinguagem de programação, so que na maioria da vezes é mais fácil jogar essa verificação para o banco de dados do que para a linguagem de programação.

Sintaxe:
CASE campo
WHEN “valor1” THEN “Novo valor”

Controle de fluxo

SELECT nome, setor
CASE mes_nascimento
WHEN 01 THEN “Janeiro”
WHEN 02 THEN “Fevereiro”
WHEN 03 THEN “Março”
WHEN 04 THEN “Abril”
WHEN 05 THEN “Maio”
WHEN 06 THEN “Junho”
WHEN 07 THEN “Julho”
WHEN 08 THEN “Agosto”
WHEN 09 THEN “Setembro”
WHEN 10 THEN “Outubro”
WHEN 11 THEN “Novembro”
ELSE “Dezembro” END AS mes_nascimento
FROM funcionários

Condições livres

SELECT
CASE
WHEN continente = “América” THEN “Continente americano”
WHEN pais = “Brasil” THEN “Continente sul americano”
WHEN continente = “Mexico” THEN “Continente norte americano”
WHEN estado = “Paraná” THEN “Região Sul”
WHEN estado = “São Paulo” THEN “Região Sudeste”

Funções matemáticas

Trigonometria
pi() = 3.14.15.93
radians(180) = 3.1415926535898
sin(radians(60)) = 0.866025
sqrt(3)/2 = 0.86602540
degrees(asin(sqrt(3)/2)) = 60

Logaritmo e potência

log(2) = 0.693147
exp(1) = 2.718282
power(2,5) = 32.000000
log10(100) = 2.000000
mod(13,7) = 6
13%7 = 6
abs(-42) = 42
sign(0) = 0

Arredondamento

ceiling(2.5) = 3
floor(2.5) = 2
round(2.5) = 2
round(2.51) = 3
truncate(2.5,0) = 2

celing para cima
floor para baixo
round para o inteiro mais próximo
truncate elimina casas decimais

Obs: todas as funções de arredondamento também funcionam para números negativos

Funções de string

concat – concatema strings; pode receber 1-n parâmetros
substring – pega partes de uma string baseado na posição
substring_index – pega partes da string baseado nos delimitadores
instr – encontra strings em outras strigns
replace – modifica strings em outras strings
length – calcula o tamanho da string
like – compara strings utilizando wildcards

substring_index(“diegohellas@hotmail.com”, “@”, 1) = diegohellas
substring_index(“orders.mysql.com”, “.”, -2) = mysql.com
reverse(“orders.mysql.com”) = moc.lqsym.sredro
upper(“mysql”) = MYSQL
lower(“MySQL”) = mysql
rpad(“Diego”, 10, “.”) = diego…..
char(77,121,83,81,76) = MySQL
left(“Diego Felipe Hellas”, 3) = Die
mid(“Diego Felipe Hellas Moreira Alves”, 13,6) = Hellas
rught(‘Diego Hellas“, 6) = Hellas
trim(“Q”, from “QQQQMySQL ABQQQ”) = MySQL AB

Funções de tempo e de data

NOW() e intervalos

SELECT NOW() – irá retornar a data e hora atual do servidor MySQL no formato
aaaa-mm-dd hh:mm:ss

SELECT NOW() + INTERVAL 2DAY – irá retornar a data e hoira do servidor, só que com uma diferença de 2 dias para frente(ex: hoje é 2006-10-07 ele irá retornar 2006-10-09), essa diferença pode ser negativa também, e o intervalo pode ser horas, minutos, segundos, dias, semanas, meses, anos, etc;

Formatando datas com o DATE_FORMAT()

Sintaxe:
DATE_FORMAT(campo, ‘formato desejado’)

Especificador Descrição
%M Nome do mês (January..December)
%W Nome do dia da semana (Sunday..Saturday)
%D Dia do mês com o sufixo em Inglês (1st, 2nd, 3rd, etc.)
%Y Ano, numérico, com 4 dígitos
%y Ano, numérico, com 2 dígitos
%a Nome do dia da semana abreviado (Sun..Sat)
%d Dia do mês, numérico (00..31)
%e Dia do mês, numérico (0..31)
%m Mês, numérico (01..12)
%c Mês, numérico (1..12)
%b Nome do mês, abreviado (Jan..Dec)
%j Dia do ano (001..366)
%H Hora (00..23)
%k Hora (0..23)
%h Hora (01..12)
%I Hora (01..12)
%l Hora (1..12)
%i Minutos, numérico (00..59)
%r Horário, 12 horas (hh:mm:ss [AP]M)
%T Horário, 24 horas (hh:mm:ss)
%S Segundos (00..59)
%s Segundos (00..59)
%p AM ou PM
%w Dia da semana (0=Domingo..6=Sábado)
%U Semana (00..53), onde Domingo é o primeiro dia da semana
%u Semana (00..53), onde Segunda é o primeiro dia da semana
%% Caractere `%’.

Exemplos de utilização:

Lembrando sempre que o MySQL armazena as datas no formato aaaa-mm-dd

Para seleccionar a data no formato que usamos, ou de nossa necessidade:

SELECT nome, DATE_FORMAT(data_nascimento, ‘%d/%m/%Y’) AS data
FROM funcionários

Esse exemplo agora é muito útil, eu sempre uso quando eu tenho um formulário que tem um campo de data e essa data temque ser pesquisada no MySQL, com ela eu evito de ficar transformando a data de dd/mm/aaaa para aaaa-mm-dd

SELECT nome, departamento FROM funcionários
WHERE DATE_FORMAT(data_nascimento, ‘%d/%m/%Y’) = ‘22/11/1986’
Função DATEDIFF

Ela calcula a diferença em dias entre duas datas

SELECT DATEDIFF(’2006-12-31′, ‘2006-01-01′) = 364


Arquivado na categoria: Truques & Dicas

9 comentários a ““Cábula” do MySQL”

  1. José Fonseca diz:

    Ai está um resumo interessante.

    Já agora, para quem quer aprender SQL pode também experimentar os tutoriais interactivos de http://sqlzoo.net/

    Um abraço

  2. rsl diz:

    Offtopic

    Alguém sabe o que se passa com as actualizações do Kaspersky Internet Security? É que desde ontem que dá erro ao tentar actuallizar. Diz “erro ao ligar ao servidor”
    Obrigado

  3. Casca diz:

    Bem…
    Excelente resumo…
    Por akaso vai ajudar BASTANTE!

    Obrigado!
    NC

  4. Nastase diz:

    Apesar de trabalhar (pouco) com Sql e (infelizmente muito pouco) com MySql, há aqui comandos que desconhecida e que me irão com certeza ser muito úteis. Mais um grande trabalho do PplWare! Parabéns malta.

    ———————————————
    http://www.revolucaodigital.net

  5. Miguel Guerra diz:

    Um artigo muito bom!

    Escrevo strings de SQL todos os dias no meu trabalho e, há aqui funções que eu desconhecia!

    Excelente compilação dos comandos mais úteis!

  6. Fausto diz:

    Muito bom! Resume funções que não são muito conhecidas, mas que são úteis no dia-a-dia.

  7. Sergio BR. diz:

    Obrigado pelo artigo, vai dar muito jeito.

  8. Luís Santos diz:

    Boas,

    também podem usar subselects com o IN e NOT IN.

    Por exmeplo:

    SELECT *
    FROM EMPREGADOS
    WHERE NUM_EMPREGADO IN (SELECT NUM_EMPREGADO
    FROM DEPARTAMENTOS
    WHERE DEPARTAMENTO = ‘CONTABILIDADE’)

    Aqui temos que garantir que o SELECT interno só traz uma coluna para satisfazer a condição WHERE NUM_EMPREGADO IN …. , pois de contrário não faria sentido.

    Na verdade não importa de que forma preenchemos os valores para a condição IN, importa é que o resultado seja um valor, ou lista de valores, que verifiquem as propriedades do campo (numérico de 15 posições, alfanumérico de 10, etc…).

  9. Luís Santos diz:

    Uma condição que dá jeito para gerar amostras de dados, ou para outros cenários mais específicos, é a que nos devolve apenas um número fixo de registos:

    SELECT *
    FROM TABELA
    FETCH FIRST 10 ROWS ONLY

Deixe o seu comentário

Aviso: Todo e qualquer texto publicado na internet através deste sistema não reflete, necessariamente, a opinião deste weblog ou do(s) seu(s) autor(es). Os comentários publicados através deste sistema são de exclusiva e integral responsabilidade e autoria dos leitores que dele fizerem uso. O autor deste weblog reserva-se, desde já, o direito de excluir comentários e textos que julgar ofensivos, difamatórios, caluniosos, preconceituosos ou de alguma forma prejudiciais a terceiros. Textos de caráter promocional ou inseridos no sistema sem a devida identificação de seu autor (nome completo e endereço válido de email) também poderão ser excluídos.