sexta-feira, 29 de julho de 2016

Select Where

Olá!

Ao realizar uma pesquisa no banco de dados (DB) esperamos um resultado de acordo com a nossa necessidade, e para que isso ocorra é necessário filtrar campos e dados que serão selecionados do DB.

Com o comando Where, podemos filtrar os registros de uma tabela para que a seleção dos dados respeite a necessidade do analista. Ou seja, por exemplo em uma tabela de pessoas podemos selecionar apenas os registros que iniciam com a letra "A", ou aqueles que estão com idade entre 25 até 30 anos.


  • A sintaxe básica do Select com Where:

SQLTradução Livre
SELECT campo(s)
FROM tabela
WHERE campo Operador Valor
SELECIONE campo(s)
DA tabela
QUANDO campo Condição

  • A condição é composta de um operador lógico, e de um valor.
Os operadores lógicos, são:
Operador LógicoDescrição
=Igualdade
<>Diferente
>Maior que
<Menor que
>=Maior que ou igual
<=Menor que ou igual
BETWEENEntre (considerando também os valores dos extremos)
LIKEPesquisa de string semelhante
INEntre valores específicos

O valor é um dado que pode ser fixo, ou de uma variável, ou de outro campo da tabela, enfim, é um valor que tem como o propósito de ser um filtro para os registros que estão sendo selecionados.


  • Exemplos

Tabela utilizada nos exemplos:
PESSOA
CD_PESSOANOMESOBRENOMEIDADE
1FelipeBarbosa23
2AnaVieira20
3JoãoSantos19
4AlineSilva21
5MairaDantas25

1) Pesquisar todos os dados da tabela, SQL sem Where
SELECT NOME
  FROM PESSOA;

2) Pesquisar os nomes que possuam a idade igual 23 
SELECT NOME
  FROM PESSOA
 WHERE IDADE = 23

Resultado:
Felipe

3) Pesquisar os nomes que possuam a idade diferente de 19
SELECT NOME
  FROM PESSOA
 WHERE IDADE <> 19

Resultado:
Felipe
Ana
Aline
Maira

4) Pesquisar os nomes que possuam a idade maior que 23
SELECT NOME
  FROM PESSOA
 WHERE IDADE > 23

Resultado:
Maira

5) Pesquisar os nomes que possuam a idade menor que 20
SELECT NOME
  FROM PESSOA
 WHERE IDADE < 20

Resultado:
João

6) Pesquisar os nomes que possuam a idade maior ou igual a 23
SELECT NOME
  FROM PESSOA
 WHERE IDADE >= 23

Resultado:
Felipe
Maira

7) Pesquisar os nomes que possuam a idade menor ou igual a 20
SELECT NOME
  FROM PESSOA
 WHERE IDADE <= 20

Resultado:
Ana
João

8) Pesquisar os nomes que possuam a idade entre 21 até 25
SELECT NOME
  FROM PESSOA
 WHERE IDADE BETWEEN 21 AND 25

Resultado:
Felipe
Aline
Maira

9) Pesquisar os nomes que possuam a idade igual a 19, 21 e 23
SELECT NOME
  FROM PESSOA
 WHERE IDADE IN (19, 21, 23)

Resultado:
Felipe
João
Aline

Os exemplo com a utilização do LIKE está neste post: Select Like.

Então, com o uso do Where os dados que são selecionados na base podem ser filtrados por diferentes tipos de condições.

No próximo post veja os argumentos AND e OR que incrementam o comando Where.

FELIPE BARBOSA FERREIRA
Consultar a relação de Termos e Abreviaturas acesse aqui.
Até o próximo post!

sábado, 9 de julho de 2016

Select DISTINCT

Olá!

É possível armazenar dados iguais na mesma coluna de uma tabela, mas por outro lado as vezes é necessário realizar uma consulta que não retorne estes dados iguais. E para que não seja retornado registros duplicados na resposta, o SQL possui o comando Distinct.

Veja abaixo a tabela de exemplo.
A coluna NOME possui dois registros com o nome Ana, e dois com o nome Aline.

PESSOA
CD_PESSOANOMESOBRENOMEIDADE
1FelipeBarbosa23
2AnaVieira20
3JoãoSantos19
4AlineSilva21
5MairaDantas25
6AnaHavana19
7AlineFerreira22

Se ao consultar os nomes cadastrados na tabela PESSOA, com o seguinte SQL:
          SELECT NOME
             FROM PESSOA
           WHERE CD_PESSOA > 0
      ORDER BY NOME

Resposta da execução do SQL:
resposta_da_consulta
Aline
Aline
Ana
Ana
Felipe
João
Maira

Repare que os nomes Ana e Aline estão aparecendo de forma duplicada. Deste modo, o SQL retorna registros com valores iguais.

Para realizar uma consulta que elimine os dados duplicados na resposta é necessário utilizar o comando DISTINCT no Select. Veja o exemplo de Select com Distinct:

           SELECT DISTINCT NOME
             FROM PESSOA
           WHERE CD_PESSOA > 0
      ORDER BY NOME

Resposta:
resposta_da_consulta
Aline
Ana
Felipe
João
Maira
Note que agora a resposta não possui os nomes duplicados. Então, com o uso do comando Distinct é eliminado os registros com valores iguais da execução do Select.

Também pode utilizar o Distinct para uma consulta de dois ou mais campos, entretanto tenha em mente que somente serão eliminadas as linhas duplicadas. Pois, o comando Distinct analisa todos campos que estão na consulta do SQL.

Ou seja, se consultar NOME e SOBRENOME na tabela PESSOA, conforme o SQL:
           SELECT DISTINCT NOME
                        , SOBRENOME
             FROM PESSOA
           WHERE CD_PESSOA > 0
      ORDER BY NOME

A resposta é:
resposta_da_consulta
NOMESOBRENOME
AlineSilva
AlineFerreira
AnaVieira
AnaHavana
FelipeBarbosa
JoãoSantos
MairaDantas
Foi retornado os nomes duplicados, porque os sobrenomes são diferentes. Assim, tornando diferentes os registros da resposta.

Enfim, o comando Distinct elimina os registros com valores iguais da reposta. Tenha em mente que se algum valor das colunas que estão no Select não for igual, o registro da resposta torna-se diferente.

Consultar a relação de Termos e Abreviaturas acesse aqui.
Até o próximo post!

domingo, 3 de julho de 2016

Select ORDER BY

Olá!

Para realizar a ordenação da resposta de uma consulta feita no banco de dados (DB), usamos o comando Order By. Que pode ordenar a resposta de acordo com os valores de uma ou mais colunas, sendo que o ordenamento é feito de forma ascendente (ASC) ou descendente (DESC).

Quando não especificado a forma de ordenação, o SQL tem por padrão na maioria dos bancos de dados definir ASC no Order By.

Veja os exemplos abaixo.

Tabela utilizada para os exemplos:
PESSOA
CD_PESSOANOMESOBRENOMEIDADE
1FelipeBarbosa23
2AnaVieira20
3JoãoSantos19
4AlineSilva21
5MairaDantas25


  • Consulta sem ordenação, retorna os dados conforme estão cadastrados no DB.
SQL:
          SELECT CD_PESSOA
                        , NOME
                        , SOBRENOME
                        , IDADE
             FROM PESSOA
           WHERE CD_PESSOA > 0

Resposta:
resposta_da_consulta
CD_PESSOANOMESOBRENOMEIDADE
1FelipeBarbosa23
2AnaVieira20
3JoãoSantos19
4AlineSilva21
5MairaDantas25

  • Consulta com ordernação pela coluna NOME:
SQL:
          SELECT CD_PESSOA
                        , NOME
                        , SOBRENOME
                        , IDADE
             FROM PESSOA
           WHERE CD_PESSOA > 0
     ORDER BY NOME

Resposta:
resposta_da_consulta
CD_PESSOANOMESOBRENOMEIDADE
4AlineSilva21
2AnaVieira20
1FelipeBarbosa23
3JoãoSantos19
5MairaDantas25
.
Veja que os registros estão ordenados de forma crescente pela coluna NOME.

  • Consulta com ordenação realizada por dois campos da tabela:
SQL:
          SELECT CD_PESSOA
                        , NOME
                        , SOBRENOME
                        , IDADE
             FROM PESSOA
           WHERE CD_PESSOA > 0
    ORDER BY NOME
                        , IDADE
Resposta:
resposta_da_consulta
CD_PESSOANOMESOBRENOMEIDADE
4AlineSilva21
2AnaVieira20
1FelipeBarbosa23
3JoãoSantos19
5MairaDantas25

A resposta é a mesma da ordenação por uma coluna. Pois, primeiro é feito a ordenação da coluna NOME e depois da coluna IDADE. Então, a ordenação por mais de uma coluna é visível para quando em uma ou mais das colunas que estão no ordenamento possui valores iguais.


  • Consulta com ordenação diferentes para os campos.

SQL:
          SELECT CD_PESSOA
                        , NOME
                        , SOBRENOME
                        , IDADE
             FROM PESSOA
           WHERE CD_PESSOA > 0
    ORDER BY NOME ASC
                        , IDADE DESC

Com o SQL acima a ordenação da consulta seria primeiramente pela coluna NOME de forma ascendente, e depois pela coluna IDADE de forma decrescente.

Atenção:
Ao realizar a ordenação por vários campos fique atento, pois quando não especificamos ASC ou DESC o SQL atribui ASC para o campo por padrão. Exemplo:

SQL:
          SELECT CD_PESSOA
                        , NOME
                        , SOBRENOME
                        , IDADE
             FROM PESSOA
           WHERE CD_PESSOA > 0
    ORDER BY CD_PESSOA
                        , NOME
                        , SOBRENOME
                        , IDADE DESC

Neste exemplo somente o campo IDADE será ordenado de forma descendente, os demais campos serão ordenados de forma ascendente.

O comando Order By é ótimo para organizar a resposta de uma consulta ao DB, de acordo com a necessidade de cada um.

Consultar a relação de Termos e Abreviaturas acesse aqui.
Até o próximo post!