17.12.2019 Views

BD1 - SQL-Consultando Dados

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Linguagem SQL

Consultando Dados

SQL - Consultando Dados

17/12/2019 1


Banco de Dados ContPedido

SQL - Consultando Dados 17/12/2019

2


O Comando SELECT

• O comando SELECT permite consultar dados em uma ou mais

tabelas e retorna um conjunto de linhas e colunas, de acordo com

as cláusulas especificadas.

A B C D E

1 2 3 4 5

6 7 8 9 10

11 12 13 14 15

16 17 18 19 20

21 22 23 24 25

26 27 28 29 30

31 32 33 34 35

Tabela inicial

SELECT

A C E

6 8 10

16 18 20

21 23 25

31 33 35

Tabela resultante

SQL - Consultando Dados 17/12/2019

3


O Comando SELECT

• O comando SELECT contém seis cláusulas:

SELECT

FROM

WHERE

GROUP BY

HAVING

ORDER BY

Indica as colunas que serão exibidas.

Indica a(s) tabela(s) de onde vem os dados.

Restringe a seleção de linhas da tabela com

base em uma expressão condicional.

Agrupa as linhas selecionadas com base em

um ou mais atributos.

Restringe a seleção de linhas agrupadas com

base em uma expressão condicional.

Ordena as linhas selecionadas com base em

um ou mais atributos.

SQL - Consultando Dados 17/12/2019

4


Consulta Simples

Sintaxe:

SELECT * FROM <tabela>

Exemplo 1: Exibir todos os dados de todos os clientes.

SELECT * FROM cliente

Exemplo 2: Exibir todos os dados de todos os produtos.

SELECT * FROM produto

SQL - Consultando Dados 17/12/2019

5


Selecionando Colunas

Sintaxe:

SELECT <lista de colunas>

FROM <tabela>

Exemplo 1: Exibir código, nome e telefone de todos os clientes.

SELECT idcliente, nome, fone FROM cliente

Exemplo 2: Exibir código, data e valor do frete de todos os pedidos.

SELECT idpedido, datapedid, frete FROM pedido

SQL - Consultando Dados 17/12/2019

6


Alterando o Título das Colunas

Sintaxe:

SELECT <coluna> [AS] <alias>

FROM <tabela>

Exemplo 1: Exibir o código com o título “Produto” e o preço de

venda com o título “Preço de venda” de todos os produtos.

SELECT idproduto AS [Produto],

venda AS [Preço de venda]

FROM produto

Exemplo 2: Exibir o nome com o título “Função” e o valor da

gratificação com o título “Gratificação” de todas as funções.

SELECT nome AS Função, gratific AS Gratificação

FROM função

SQL - Consultando Dados 17/12/2019

7


Eliminando Duplicação de Linhas

Sintaxe:

SELECT DISTINCT <lista de colunas>

FROM <tabela>

Exemplo 1: Exibir o código de todos os clientes que já fizeram

pedido na empresa.

SELECT DISTINCT idcliente

FROM pedido

Exemplo 2: Exibir o bairro e o código da cidade de todos os

funcionários da empresa.

SELECT DISTINCT bairro, idreside

FROM funcionario

SQL - Consultando Dados 17/12/2019

8


Exibindo Colunas Calculadas

Sintaxe:

SELECT <lista de colunas, expressão numérica>

FROM <tabela>

Exemplo 1: Exibir código, quantidade em estoque, preço de venda e

(quantidade X preço de venda) para cada produto.

SELECT idproduto, quantest, venda,

quantest*venda [Valor]

FROM produto

Exemplo 2: Exibir código, nome, salário e o salário com 32% de

aumento para todos os funcionários.

SELECT idfuncionario, nome, salario, salario*1.32

FROM funcionario

SQL - Consultando Dados 17/12/2019

9


Exibindo Strings

Sintaxe:

SELECT <lista de colunas, string>

FROM <tabela>

Exemplo 1: Exibir código, nome e uma coluna contendo

“classificado” para todos os clientes.

SELECT idcliente, nome, 'classificado' [Resultado]

FROM cliente

Exemplo 2: Exibir código, nome e uma coluna contendo “num.ref”

com o título “Referência” para todos os produtos.

SELECT idproduto, nome, 'num.ref.' [Referência]

FROM produto

SQL - Consultando Dados 17/12/2019

10


Ordenando os Resultados

Sintaxe:

SELECT <lista de colunas>

FROM <tabela>

ORDER BY <coluna> [ASC] [DESC]

Exemplo 1: Exibir código, nome, contato e cargo de todos os clientes,

ordenados pelo cargo em ordem ascendente.

SELECT idcliente, nome, contato, cargo

FROM cliente

ORDER BY cargo

SQL - Consultando Dados 17/12/2019

11


Ordenando os Resultados

Exemplo 2: Exibir código, nome, estado civil e data de nascimento de

todos os funcionários, ordenados pela data de nascimento em

ordem descendente.

SELECT idfuncionario, nome, estcivil, datanasc

FROM funcionario

ORDER BY datanasc DESC

Exemplo 3: Exibir código, nome, preço de custo, preço de venda e a

diferença entre esses dois preços para todos os produtos, ordenados

pela diferença em ordem descendente.

SELECT idproduto, nome, custo, venda,

venda-custo [diferença]

FROM produto

ORDER BY diferença DESC

SQL - Consultando Dados 17/12/2019

12


Ordenando os Resultados

Exemplo 4: Exibir código, nome e tipo de todos os produtos,

ordenados pelo tipo em ordem ascendente e pelo nome em ordem

descendente.

SELECT idproduto, nome, idtipo

FROM produto

ORDER BY idtipo, nome DESC

Exemplo 5: Exibir código, nome, cidade onde reside, sexo e salário

de todos os funcionários, ordenados por cidade e sexo em ordem

ascendente e por salário em ordem descendente.

SELECT idfuncionario,nome,idreside,sexo,salário

FROM funcionario

ORDER BY idreside, sexo, salario DESC

SQL - Consultando Dados 17/12/2019

13


Filtrando Linhas de Uma Tabela

• A filtragem deve ser feita utilizando-se a cláusula WHERE.

• A cláusula WHERE filtra as linhas com base em uma condição que

deve ser especificada.

• A condição é representada por uma ou mais expressões

condicionais , separadas pelos operadores lógicos and, or e not.

• O formato de cada expressão condicional é:

<coluna> <operador> <valor>

• Podem ser utilizados diversos operadores para compor as

expressões condicionais utilizadas.

SQL - Consultando Dados 17/12/2019

14


Filtrando Linhas de Uma Tabela

OPERADORES DE COMPARAÇÃO

quantidade = 20

= Igual nome = ‘Paulo’

datanasc = ‘22/02/2011’

< Menor que preço < 20.00

<= Menor ou igual estoque <= 50

> Maior que dataadm > ‘22/02/2011’

>= Maior ou igual credito >= 10000.00

<> ou != Diferente nome <> ‘Paulo’

SQL - Consultando Dados 17/12/2019

15


Filtrando Linhas de Uma Tabela

IN

NOT IN

OPERADORES DE INCLUSÃO

Dentro do

conjunto

Fora do

conjunto

bairro IN (‘Tambaú’, ‘Bessa’)

setor NOT IN (‘COM’,’MKT’,’ALM’)

BETWEEN

NOT

BETWEEN

OPERADORES DE INTERVALO

Dentro do

intervalo

Fora do

intervalo

preço BETWEEN 30.00 and 150.00

quant NOT BETWEEN 10 and 200

SQL - Consultando Dados 17/12/2019

16


Filtrando Linhas de Uma Tabela

IS NULL

IS NOT NULL

OPERADORES DE NULO

O valor é

nulo

O valor

não é nulo

telefone IS NULL

fax is NOT NULL

OPERADORES DE COMPARAÇÃO DE STRINGS

LIKE Igual nome LIKE ‘Ma%’

NOT LIKE Diferente nome NOT LIKE ‘A_r%’

% Substitui um conjunto de caracteres

_

Substitui um único caractere

SQL - Consultando Dados 17/12/2019

17


Filtrando Linhas de Uma Tabela

‘A%’

‘%Silva’

‘%Silva%’

‘A%Silva’

‘A_S’

‘[ABC]%’

‘%[MS]’

OPERADORES DE COMPARAÇÃO DE STRINGS

String iniciando por ‘A’.

String terminando por ‘Silva’.

String contendo ‘Silva’ em qualquer posição.

String iniciando por ‘A’ e terminando por ‘Silva’.

String com três caracteres, iniciando por ‘A’ e

terminando por ‘S’.

String iniciando por ‘A’, ‘B’ ou ‘C’.

String terminando por ‘M’ ou ‘S’.

SQL - Consultando Dados 17/12/2019

18


Filtrando Linhas de Uma Tabela

OPERADORES DE COMPARAÇÃO DE STRINGS

‘[A-G]%’

String iniciando por um caractere entre

‘A’ e ‘G’.

‘[0-9]%’ String iniciando por um número.

‘[a-Z]%’

‘[0-9]%[a-Z]’

‘A[FJP]S%’

‘[a-Z][a-Z][0-9]%’

String iniciando por uma letra.

String iniciando por um número e

terminando por uma letra.

String iniciando por ‘A’, seguido por ‘F’, ‘J’,

ou ‘P’ e terminando por ‘S’.

String contendo uma letra na primeira

posição, outra letra na segunda e um

número na terceira.

SQL - Consultando Dados 17/12/2019

19


Filtrando Linhas de Uma Tabela

OPERADORES DE COMPARAÇÃO DE STRINGS

‘A[B-F][G-M]%’

‘A%[0-9]’

‘A[C-G]%[0-9]’

String iniciando por ‘A’, contendo

qualquer caractere entre ‘B’ e ‘F’ na

segunda posição e entre ‘G’ e ‘M’ na

terceira.

String iniciando por ‘A’ e terminando

por um um número.

String iniciando por ‘A’, com o segundo

caractere entre ‘C’ e ‘G’ e terminando

por um número.

‘%@%%’ ESCAPE ‘@’ String contendo o caractere ‘%’.

‘%+_%’ ESCAPE ‘+’

String contendo o caractere ‘_’.

SQL - Consultando Dados 17/12/2019

20


Filtrando Linhas de Uma Tabela

AND

OR

Ambas as

condições são

verdadeiras

Uma das

condições é

verdadeira

NOT A condição é falsa

OPERADORES LÓGICOS

valor > 1000.00 and quant <= 25

(valor > 1000.00 and quant <= 25)

or (estmin <10 and tipo IN (2,4,7))

preço > 120.00 or not (quant >=

250)

SQL - Consultando Dados 17/12/2019

21


Filtrando Linhas de Uma Tabela

Sintaxe:

SELECT <lista de colunas>

FROM <tabela>

WHERE <condição>

Exemplo 1: Exibir código, nome, tipo, quantidade em estoque e

preço de venda dos produtos que tenham quantidade em estoque

maior que 20 ou preço de venda inferior a R$ 50,00, ordenados pelo

preço de venda em ordem descendente.

SELECT idproduto, nome, idtipo, quantest, venda

FROM produto

WHERE quantest > 20 OR venda < 50.00

ORDER BY venda DESC

SQL - Consultando Dados 17/12/2019

22


Filtrando Linhas de Uma Tabela

Exemplo 2: Exibir todos os dados dos clientes que são do tipo

pessoa jurídica e que não sejam da cidade de código igual a 14, ou

que são do tipo pessoa física e da cidade de código igual a 14,

ordenando pelo nome em ordem ascendente.

SELECT *

FROM cliente

WHERE (idtipo = 'J’ AND idcidade <> 14) OR

(idtipo = 'F’ AND idcidade = 14)

ORDER BY nome

SQL - Consultando Dados 17/12/2019

23


Filtrando Linhas Usando Listas

Sintaxe:

SELECT <lista de colunas>

FROM <tabela>

WHERE <coluna> [NOT] IN (<lista de valores>)

Exemplo 1: Exibir todos os dados dos funcionários que residam em

Manaíra, Tambaú ou Bessa, ordenados pelo nome do funcionário

em ordem ascendente.

SELECT *

FROM funcionario

WHERE bairro IN ('Manaíra','Tambaú','Bessa')

ORDER BY nome

SQL - Consultando Dados 17/12/2019

24


Filtrando Linhas Usando Listas

Exemplo 2: Exibir código, data e via de transporte de todos os

pedidos que tenham sido transportados por via aérea ou marítima.

SELECT idpedido, datapedid, via

FROM pedido

WHERE via IN ('A','M')

Exemplo 3: Exibir código, nome e tipo de todos os produtos que não

sejam do tipo 2 ou 4, ordenados pelo tipo em ordem descendente e

pelo nome em ordem ascendente.

SELECT idproduto, nome, idtipo

FROM produto

WHERE idtipo NOT IN (2,4)

ORDER BY idtipo DESC, nome

SQL - Consultando Dados 17/12/2019

25


Filtrando Linhas Usando Intervalos

Sintaxe:

SELECT <lista de colunas>

FROM <tabela>

WHERE <coluna> [NOT] BETWEEN (<intervalo>)

Exemplo 1: Exibir todos os dados dos produtos com quantidade em

estoque entre 10 e 30 unidades, ordenados pelo nome do produto

em ordem ascendente.

SELECT *

FROM produto

WHERE quantest BETWEEN 10 AND 30

ORDER BY nome

SQL - Consultando Dados 17/12/2019

26


Filtrando Linhas Usando Intervalos

Exemplo 2: Exibir todos os dados dos funcionários que nasceram na

década de 60, ordenados pela data de nascimento em ordem

descendente e pelo nome em ordem ascendente.

SELECT *

FROM funcionario

WHERE datanasc BETWEEN '01/01/1960’ AND '31/12/1969'

ORDER BY datanasc DESC, nome

Exemplo 3: Exibir código, cliente e data de todos os pedidos que não

tenham sido realizados entre 1997 e 1999.

SELECT idpedido, idcliente, datapedid

FROM pedido

WHERE DATEPART(YEAR,datapedid) NOT BETWEEN 1997

AND 1999

SQL - Consultando Dados 17/12/2019

27


Filtrando Linhas com Valores Nulos

Sintaxe:

SELECT <lista de colunas>

FROM <tabela>

WHERE <coluna> IS [NOT] NULL

Exemplo 1: Exibir código, nome e email dos funcionários que não

tenham email, ordenando pelo nome em ordem ascendente.

SELECT idfuncionario, nome, email

FROM funcionario

WHERE email IS NULL

ORDER BY nome

SQL - Consultando Dados 17/12/2019

28


Filtrando Dados com Valores Nulos

Exemplo 2: Exibir tipo, código, nome e fax dos clientes que tenham

fax, ordenados pelo tipo e pelo nome

SELECT tipo, idcliente, nome, fax

FROM cliente

WHERE fax IS NOT NULL

ORDER BY tipo, nome

Exemplo 3: Exibir código, nome, email e celular dos funcionários que

não tenham email mas possuam telefone celular, ordenados pelo

nome em ordem ascendente.

SELECT idfuncionario, nome, email, celular

FROM funcionario

WHERE email IS NULL and celular IS NOT NULL

ORDER BY nome

SQL - Consultando Dados 17/12/2019

29


Filtrando Dados Usando Strings

Sintaxe:

SELECT <lista de colunas>

FROM <tabela>

WHERE <coluna> LIKE <string>

Exemplo 1: Exibir o código e o nome de todos os funcionários que

tenham o nome começando por ‘M’, ordenados pelo nome.

SELECT idfuncionario, nome

FROM funcionario

WHERE nome LIKE 'M%'

ORDER BY nome

SQL - Consultando Dados 17/12/2019

30


Filtrando Dados Usando Strings

Exemplo 2: Exibir os dados de todos os funcionários que tenham o

nome terminando por ‘Silva’, ordenados pelo nome.

SELECT *

FROM funcionario

WHERE nome LIKE ‘%Silva'

ORDER BY nome

Exemplo 3: Exibir os dados de todos os funcionários que tenham o

sobrenome ‘Costa’, ordenados pelo nome.

SELECT *

FROM funcionario

WHERE nome LIKE '%Costa%'

ORDER BY nome

SQL - Consultando Dados 17/12/2019

31


Filtrando Dados Usando Strings

Exemplo 4: Exibir os dados de todos os funcionários que tenham o

nome iniciando por ‘Mar’, seguido de um caractere qualquer, a letra

‘a’ e quaisquer caracteres adicionais, ordenados pelo nome.

SELECT *

FROM funcionario

WHERE nome LIKE 'Mar_a%'

ORDER BY nome

Exemplo 5: Exibir os dados dos funcionários que tenham o nome

iniciando por ‘Mar’, seguido de um caractere entre as letras ‘i’ e ‘t’, a

letra ‘a’ e quaisquer caracteres adicionais, ordenados pelo nome.

SELECT *

FROM funcionario

WHERE nome LIKE 'Mar[i-t]a%'

ORDER BY nome

SQL - Consultando Dados 17/12/2019

32


Filtrando Dados Usando Strings

Exemplo 6: Exibir os dados de todos os clientes cujo código não

comece por ‘A’ nem por ‘C’, ordenados pelo nome.

SELECT *

FROM cliente

WHERE idcliente NOT LIKE '[AC]%'

ORDER BY nome

Exemplo 7: Exibir os dados dos funcionários que tenham o nome

iniciando por ‘Maria’ e terminando por ‘Lima’, ordenados pelo nome.

SELECT *

FROM funcionario

WHERE nome LIKE 'Maria%Lima'

ORDER BY nome

SQL - Consultando Dados 17/12/2019

33


Filtrando Dados Usando Strings

Exemplo 8: Exibir os dados de todos os clientes cujo código não

termine por ‘A’ nem por ‘C’, ordenados pelo nome.

SELECT *

FROM cliente

WHERE idcliente NOT LIKE ‘%[AC]'

ORDER BY nome

Exemplo 9: Exibir código, nome e observações de todos os

funcionários que tenham o símbolo de percentual na coluna obs,

ordenados pelo nome.

SELECT idfuncionario, nome, obs

FROM funcionario

WHERE obs LIKE '%/%%' ESCAPE ‘/'

ORDER BY nome

SQL - Consultando Dados 17/12/2019

34


Determinando a Quantidade de Linhas

Sintaxe:

SELECT TOP n [PERCENT] [WITH TIES]

<lista de colunas>

FROM <tabela>

Exemplo 1: Exibir código do pedido, código do produto e quantidade

pedida dos 10 produtos com as maiores quantidades

pedidas em um pedido, ordenados pela quantidade pedida em

ordem descendente.

SELECT TOP 10 idpedido, idproduto, quant

FROM itens

ORDER BY quant DESC

SQL - Consultando Dados 17/12/2019

35


Determinando a Quantidade de Linhas

Exemplo 2: Exibir o código do pedido, o código do produto e a

quantidade pedida dos 10 produtos com as maiores quantidades

pedidas em um pedido. Incluir todos os registros que tenham a

quantidade pedida igual ao último valor exibido.

SELECT TOP 10 WITH TIES idpedido, idproduto, quant

FROM itens

ORDER BY quant DESC

Exemplo 3: Exibir o código e a quantidade pedida, dos 10% produtos

com as maiores quantidades pedidas, ordenando pela quantidade

em ordem descendente.

SELECT TOP 10 PERCENT isproduto, quant

FROM itens

ORDER BY quant DESC

SQL - Consultando Dados 17/12/2019

36


Usando Funções de Agregação

• As funções agregadas:

• Operam na coleta de valores de uma coluna da tabela;

• Produzem um resultado único;

• Não atuam sobre valores nulos.

• A cláusula DISTINCT pode ser usada como parte do argumento

para eliminar linhas repetidas antes de aplicar a função.

SQL - Consultando Dados 17/12/2019

37


Contando os Registros

Sintaxe:

SELECT COUNT(*)

FROM <tabela>

Exemplo 1: Exibir a quantidade de clientes cadastrados.

SELECT COUNT(*) AS [Quantidade]

FROM cliente

Exemplo 2: Exibir a quantidade de pedidos atendidos por via aérea.

SELECT COUNT(*) AS [Quantidade]

FROM pedido

WHERE via = 'A'

SQL - Consultando Dados 17/12/2019

38


Contando os Registros

Exemplo 3: Exibir quantos funcionários tem email.

SELECT COUNT(*) AS [Quantidade]

FROM funcionario

WHERE email IS NOT NULL

SELECT COUNT(email) AS [Quantidade]

FROM funcionario

Exemplo 4: Exibir quantos vendedores já atenderam pedido.

SELECT COUNT(DISTINCT idvendedor) AS [Quantidade]

FROM pedido

SQL - Consultando Dados 17/12/2019

39


Totalizando Colunas

Sintaxe:

SELECT SUM(<coluna>)

FROM <tabela>

Exemplo 1: Exibir a soma de todos os salários da empresa.

SELECT SUM(salario) AS [Total]

FROM funcionario

Exemplo 2: Exibir o valor total em estoque de todos os produtos

(preço de venda X quantidade em estoque).

SELECT SUM(venda*quantest) AS [Total]

FROM produto

SQL - Consultando Dados 17/12/2019

40


Calculando Médias

Sintaxe:

SELECT AVG(<coluna>)

FROM <tabela>

Exemplo 1: Exibir o valor médio de todos os salários da empresa.

SELECT AVG(salario) AS [Valor médio]

FROM funcionario

Exemplo 2: Exibir o preço médio de venda dos produtos que não

sejam dos tipos 1, 3 e 4.

SELECT AVG(venda) AS [Preço médio]

FROM produto

WHERE idtipo NOT IN (1,3,4)

SQL - Consultando Dados 17/12/2019

41


Calculando Valores Máximos

Sintaxe:

SELECT MAX(<coluna>)

FROM <tabela>

Exemplo 1: Exibir o preço do produto mais caro da empresa.

SELECT MAX(venda) AS [Mais caro]

FROM produto

Exemplo 2: Exibir o maior salário pago a uma funcionária.

SELECT MAX(salario) AS [Maior salário]

FROM funcionario

WHERE sexo = 'F'

SQL - Consultando Dados 17/12/2019

42


Calculando Valores Mínimos

Sintaxe:

SELECT MIN(<coluna>)

FROM <tabela>

Exemplo 1: Exibir a data da fatura do primeiro pedido da empresa.

SELECT MIN(datafatura) AS [Data]

FROM pedido

Exemplo 2: Exibir a data de nascimento do funcionário do sexo

masculino mais velho da empresa

SELECT MIN(datanasc) AS [Data]

FROM funcionario

WHERE sexo = 'M'

SQL - Consultando Dados 17/12/2019

43


Agrupando Informações

Sintaxe:

SELECT <lista de colunas>

FROM <tabela>

GROUP BY <coluna>

[HAVING] <condição>

Exemplo 1: Exibir a quantidade de funcionários de cada sexo

existente na empresa.

SELECT sexo, COUNT(*) AS [Quantidade]

FROM funcionario

GROUP BY sexo

SQL - Consultando Dados 17/12/2019

44


Agrupando Informações

Exemplo 2: Exibir a quantidade de funcionários e o valor total de

salários de cada setor da empresa.

SELECT idsetor, COUNT(*) AS [Quantidade],

SUM(salario) AS [Total]

FROM funcionario

GROUP BY idsetor

Exemplo 3: Exibir a quantidade de pedidos realizados em cada mês

de cada ano.

SELECT YEAR(datapedid) [Ano],

MONTH(datapedid) [Mês], COUNT(*)[Quantidade]

FROM pedido

GROUP BY YEAR(datapedid), MONTH(datapedid)

ORDER BY YEAR(datapedid), MONTH(datapedid)

SQL - Consultando Dados 17/12/2019

45


Agrupando Informações

Exemplo 4: Exibir o código do pedido e a quantidade de produtos

dos pedidos que tem mais do que três produtos.

SELECT idpedido, COUNT(produto) AS [Quantidade]

FROM itens

GROUP BY idpedido

HAVING COUNT(idproduto) > 3

Exemplo 5: Exibir a quantidade de pedidos realizados em cada ano,

para os anos que tem mais de 100 pedidos.

SELECT YEAR(datapedid) AS [Ano],

COUNT(idpedido) AS [Quantidade]

FROM pedido

GROUP BY YEAR(datapedid)

HAVING COUNT(idpedido) > 100

SQL - Consultando Dados 17/12/2019

46


Copyright © 2019 Nilton Freire Santos.

Todos os direitos reservados.

SQL - Consultando Dados 17/12/2019 47


Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!