You are on page 1of 50

Fundamentos de Banco de Dados

2013/1
Aula 18
Prof. Pablo Ariel do Prado Lpez

Fundamentos de Banco de Dados - 2013/1

18/06/2013

Agenda
Trabalho
Avanando em SQL
Funes Internas do SQL Server

Data
Numricas
Converso
Texto

Exerccios

Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
AVG (Average)
Retorna a mdia dos valores em um grupo. Os
valores nulos so ignorados.

Sintaxe
AVG (expresso )
Exemplo
SELECT AVG(Quantidade) as Mdia FROM ItemVenda
WHERE DataVenda BETWEEN datainicial AND datafinal

Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
BETWEEN (Entre)
Especifica um intervalo para teste
Sintaxe
test_expression [ NOT ] BETWEEN
begin_expression AND end_expression

Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
BETWEEN retornar TRUE se:
test_expression for maior ou igual ao valor
de begin_expression e menor ou igual ao valor
de end_expression.

NOT BETWEEN retornar TRUE se:


test_expression for menor que o valor
de begin_expression ou maior que o valor
de end_expression.
Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
O exemplo a seguir identifica produtos
em um banco de dados com 35 ou
menos unidades em estoque.

SELECT CodProduto, NomeProduto


FROM Produtos WHERE Estoque
BETWEEN '0' AND '35'
Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
CASE
Avalia uma lista de condies e retorna uma das
vrias expresses de resultados possveis.
CASE tem dois formatos:
Simples: compara uma expresso com um conjunto de
expresses simples para determinar o resultado.
Pesquisada: avalia um conjunto de expresses booleanas
para determinar o resultado.

Os dois formatos aceitam um argumento ELSE


opcional.
Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
Sintaxe:
Simples
CASE input_expression
WHEN when_expression THEN result_expression [...n ]
[ ELSE else_result_expression ]
END

Pesquisada
CASE
WHEN Boolean_expression THEN result_expression [...n ]
[ ELSE else_result_expression ]
END

Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
Exemplo Case Simples:
SELECT CodProduto, Categoria =
CASE Linha
WHEN P' THEN Praia'
WHEN 'M' THEN 'Montanha'
WHEN S' THEN Serra'
WHEN O' THEN 'Outras'
ELSE Linha no encontrada' END, Name
FROM Produtos
ORDER BY CodProduto
Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
Exemplo Case Pesquisada:
SELECT CodProduto, Nome, PrecoUnitario, Estoque =
CASE
WHEN Qtd= 0 THEN No disponvel'
WHEN Qtd < 50 THEN Menos de 50 peas'
WHEN Qtd >= 50 and Qtd < 250 THEN Menos de 250 peas'
WHEN Qtd >= 250 and Qtd < 1000 THEN Menos de 1000 peas'

ELSE Acima de 1000' END

FROM Produtos
ORDER BY CodProduto

Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
CAST e CONVERT
Converte
explicitamente
uma
expresso de um tipo de dados em
outro. CAST uma variante sinttica
de CONVERT.

Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
Sintaxe
CAST ( expression AS data_type [ (length ) ])
CONVERT ( data_type [ ( length ) ] ,expression
[ ,style ] )

Exemplos:
SELECT DataVenda, CONVERT(nvarchar(10),
DataVenda, 101) FROM ItemVenda
SELECT CAST(10.6496 AS int)
Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
COUNT
Retorna o nmero de itens de um grupo.

Sintaxe
COUNT ( { expression | * } )
O exemplo a seguir conta os itens descontinuados de
uma tabela .
SELECT COUNT(CodProduto) AS "Descontinuado"
FROM Produtos WHERE Status = I

Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
DATEADD
Retorna um novo valor datetime com base na
incluso de um intervalo data especificada.

Sintaxe
DATEADD (datepart ,number,date )
O exemplo a seguir adiciona dois meses aos valores
DataVenda na tabela Vendas.
SELECT DATEADD(month, 2, DataVenda) AS DataVenda
FROM Vendas
Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
DATEDIFF
Retorna o nmero de limites de data e hora
atravessados entre duas datas especificadas.

Sintaxe
DATEDIFF ( datepart , startdate , enddate )

Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
O exemplo a seguir determina o nmero de dias que
foram necessrios para enviar os pedidos feitos por
uma empresa cujo Cliente Transportadora do Sul'.
SELECT
CodPedido,
DATEDIFF(d,
DataPedido,
DataEnvio) AS DiasEnvio
FROM Pedidos
WHERE NomeCliente = 'Transportadora do Sul'

Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
DATENAME
Retorna uma cadeia de caracteres que representa a
datepart especificada da data determinada.

Sintaxe
DATENAME ( datepart , date )
O exemplo a seguir extrai o nome do ms da data
retornada pela data do pedido GETDATE.
SELECT
DATENAME(month,
DataPedido)
AS
Nome_Mes FROM Pedidos
Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
DATEPART
Retorna um inteiro representando o datepart
especificado da data em particular.

Sintaxe
DATEPART ( datepart , date )
O resultado do exemplo a seguir pressupe que o
ms atual junho.
SELECT DATEPART(month, DataPedido) AS Mes FROM
Pedidos
Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
A tabela a seguir lista as opes para as funes de data e as abreviaes
reconhecidas pelo Microsoft SQL Server
Datepart

Abreviaes

year

yy, yyyy

quarter

qq, q

month

mm, m

dayofyear

dy, y

day

dd, d

week

wk, ww

hour

hh

minute

mi, n

second

ss, s

millisecond

ms
Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
GETDATE
Retorna a data e a hora atuais do sistema
no formato interno padro para
valores datetime.
Sintaxe
GETDATE ( )
Exemplo
SELECT GETDATE ( )
Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
O exemplo a seguir usa GETDATE para
fornecer informaes para uma coluna de
data.
CREATE TABLE MeusPedidos
(CodPedido int IDENTITY(100, 1) PRIMARY KEY,
NomeCliente varchar(50),
DataPedido datetime)

Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
INSERT
INTO MeusPedidos
(NomeCliente, DataPedido)
VALUES
('A. Datum Corporation', GETDATE());

Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
IN
Determina se um determinado valor
corresponde a qualquer valor em uma
subconsulta ou uma lista.
teste_expressao [ NOT ] IN ( subquery |
expressao [ ,...n ] )

Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
Valor de retorno
Se o valor de teste_expressao for igual a qualquer valor
retornado por subquery ou igual a qualquer expressao da lista
separada por vrgulas, o valor de retorno ser TRUE.
Caso contrrio, o valor de retorno ser FALSE.
O uso de NOT IN nega o valor retornado.
O exemplo a seguir seleciona todos os clientes de uma tabela
que sejam do Brasil, da Argentina e da Venezuela.
SELECT * FROM Clientes WHERE Pais IN ('Brasil', 'Argentina',
'Venezuela')
Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
IS [NOT] NULL
Determina se uma determinada expresso NULL ou no.

Sintaxe
expressao IS [ NOT ] NULL
Se o valor de expressao for NULL, IS NULL retornar TRUE;
caso contrrio, retornar FALSE.
Se o valor de expressao for NULL, IS NOT NULL retornar
FALSE; caso contrrio, retornar TRUE.
Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
SELECT column_name FROM table_name
WHERE column_name IS NOT NULL
Para determinar se uma expresso NULL,
use IS NULL ou IS NOT NULL em vez de
operadores de comparao, como = ou !=.
Os operadores de comparao retornaro
UNKNOWN se um ou ambos os argumentos
forem NULL.
Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
ISNULL
Substitui NULL pelo valor de substituio
especificado.

Sintaxe
ISNULL ( check_expression , replacement_value )

Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
SELECT AVG(ISNULL(Preco, 50)) FROM Produtos

SELECT Nome, Localizacao,


ISNULL(QtdMax, 0.00) AS
Quantidade' FROM Estoque

Fundamentos de Banco de Dados - 2013/1

QtdMin,
'Mxima

18/06/2013

Avanando em SQL
ISNUMERIC
Determina se uma expresso um tipo
numrico vlido.

Sintaxe
ISNUMERIC ( expression )

Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
ISNUMERIC retorna 1 quando a expresso de
entrada avaliada como um tipo de dados
numrico vlido; caso contrrio, retorna 0. Os
tipos de dados numricos vlidos incluem o
seguinte:
int

numeric

bigint

money

smallint

smallmoney

tinyint

float

decimal

real
Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
O exemplo a seguir usa ISNUMERIC para
retornar todos os cdigos postais que no so
valores numricos.
SELECT Cidade, CEP
FROM Endereco
WHERE ISNUMERIC(CEP)<> 1

Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
LEN (Length)
Retorna o nmero de caracteres (em vez
de o nmero de bytes) da expresso de
cadeia de caracteres especificada,
excluindo espaos em branco direita.
Sintaxe
LEN (string_expression )
Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
O exemplo a seguir retorna os nomes de
empresa listados na tabela Empresa e o
nmero de caracteres do nome.

SELECT Nome, LEN(Nome) AS Tamanho


FROM Empresas

Fundamentos de Banco de Dados - 2013/1

18/06/2013

Exerccios
LIKE
Determina se uma cadeia de caracteres em particular coincide
com um padro especificado.
Um padro pode incluir caracteres normais e caracteres
curinga. Os caracteres normais devem ser exatamente iguais
aos caracteres especificados na cadeia de caracteres.
Os caracteres curinga, no entanto, podem coincidir com
fragmentos arbitrrios da cadeia de caracteres.
O uso de caracteres curinga torna o operador LIKE mais
flexvel do que usar os operadores de comparao de cadeias
de caracteres = e !=.
Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
Sintaxe
Expressao[ NOT ] LIKE padrao (curinga)
Caractere curinga

Descrio

Qualquer cadeia de zero ou WHERE titulo LIKE


mais caracteres.
'%computador%' localiza
todos os ttulos de livros
com a palavra 'computador'
em qualquer lugar no ttulo
do livro.

_ (sublinhado)

Qualquer caractere nico.

Fundamentos de Banco de Dados - 2013/1

Exemplo

WHERE Nome LIKE '_uca'


localiza todos os nomes de
quatro letras que terminam
com uca, como Juca ou
Cuca ou Luca.
18/06/2013

Avanando em SQL
O exemplo a seguir localiza todos os nmeros de telefone
iniciados com 9 na tabela Clientes.
SELECT Nome, Endereco, Telefone
FROM Clientes
WHERE (Telefone LIKE '9%')
ORDER BY Nome
Se estiver comparando uma cadeia de caracteres exata (sem
caracteres curinga), voc deve usar = ou != em vez de LIKE.
No possvel consultar o tipo de dados Image usando o
operador LIKE.
Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
MAX

Retorna o valor mximo na expresso.


Sintaxe
MAX (expressao)
O exemplo a seguir usa MAX para determinar
o item de preo mais alto na tabela Produtos.
SELECT MAX(PrecoUnitario) AS MaiorPreco"
FROM Produtos
Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
MIN

Retorna o valor mnimo na expresso.


Sintaxe
MIN (expressao)
O exemplo a seguir usa MIN para determinar
o item de preo mais baixo na tabela
Produtos.
SELECT MIN(PrecoUnitario) AS MenorPreco"
FROM Produtos
Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
SUBSTRING
Retorna parte de uma expresso de caracteres,
binrios, texto ou imagem.

Sintaxe
SUBSTRING ( expression, start, length )
O exemplo a seguir retorna a inicial do nome de cada
programador na tabela Programadores.
SELECT * FROM Programadores WHERE SUBSTRING
(Nome,1,1) = F
Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
SUM
Retorna a soma de todos os valores, ou somente dos valores
DISTINCT, na expresso. SUM pode ser usado exclusivamente
com colunas numricas. Os valores nulos so ignorados.

Sintaxe
SUM (expressao)
O exemplo a seguir consulta o nmero total de unidades em
estoque para todos os produtos descontinuados (inativos) na
tabela Produtos.
SELECT SUM(Quantidade) AS EstoqueDescontinuado FROM
Produtos WHERE Ativo = I'
Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
SQRT (Square Root Raiz Quadrada)
Retorna a raiz quadrada da expresso
determinada.
Sintaxe
SQRT (float_expressao)
O exemplo a seguir retorna a raiz quadrada
das da soma do valor dos pedidos da tabela
Pedidos.
SELECT Valor, SQRT(SUM(Valor)) AS Raiz FROM
Pedidos
Fundamentos de Banco de Dados - 2013/1
18/06/2013

Avanando em SQL
TRIM
Retorna uma expresso de caracteres depois de
remover espaos em branco
Possui as variantes LTRIM e RTRIM

Sintaxe
(L/R)TRIM (expresso)
O exemplo retira os espaos em branco no nome dos
Programadores
SELECT TRIM(Nome) AS Nome FROM Programadores
Fundamentos de Banco de Dados - 2013/1

18/06/2013

Avanando em SQL
USE
Altera o contexto de banco de dados para o banco de dados
do SQL Server especificado.
Utilizada para especificar um arquivo de banco de dados do
SQL Server no qual efetuar a consulta ao usar o SQL Server
Management Studio.

Sintaxe
USE { [database] }
Parmetros
Database O nome do banco de dados para o qual o contexto
do usurio alternado.
Fundamentos de Banco de Dados - 2013/1

18/06/2013

Exerccios
Desenvolva as seguintes consultas:
Mdia
dos
programadores
que
conhecem cada linguagem.
A linguagem mais conhecida entre os
programadores.
A menos conhecida.

Fundamentos de Banco de Dados - 2013/1

18/06/2013

Exerccios
O nmero total de linguagens, que tem
ao menos um programador que a
conhea.
Total de programadores que foram
cadastrados entre hoje e 10 dias atrs.
Soma de programadores de cada
linguagem.

Fundamentos de Banco de Dados - 2013/1

18/06/2013

Exerccios
Inclua uma coluna com a informao de tipo de contratao do
programador, do tipo inteiro que contenha os seguintes valores:
1 Pessoa Fsica
2 Pessoa Jurdica
3 Cooperativa
4 Estagirio
5 Temporrio
Atualize aleatoriamente os programadores com os tipos de 1 a 5.
Selecione a tabela de programadores, substituindo a valor
numrico pelo textual como resultado da consulta.
Converta o campo para que aceite um valor textual, apresentando o
valor do tipo e o texto que se refere.
Fundamentos de Banco de Dados - 2013/1

18/06/2013

Exerccios
Inclua uma coluna salrio para os programadores e
popule com valores.
Apresente a soma dos salrios agrupados por
empresa
Selecione todas as linguagens que tenham no seu
nome a palavra 'nd' (seja no incio, meio ou final).
Selecione todas as linguagens que contenham no
final as letras _ _ _phi.
Selecione todos os programadores que programam
em Java, ASP, Ruby ou C.
Fundamentos de Banco de Dados - 2013/1

18/06/2013

Exerccios
Adicione 10 dias data de cadastro dos registros
de programadores que programam em alguma
linguagem na tabela programadores_linguagem.
Se a coluna no existir, crie-a.
Calcule os dias de cadastro de todos os
programadores e apresente os que j estiverem
cadastrados a mais de 12 dias. Se a coluna no
existir, crie-a.
Apresente a data de cadastro de forma textual no
formato dia/ms/ano.
Fundamentos de Banco de Dados - 2013/1

18/06/2013

Exerccios
Apresente todos as linguagens que a data de
cadastro menor que o dia 20.
Elabore uma consulta que retorne as linguagens que
no possuem programadores, utilizando left ou right
join e a clusula is (not) null.
Retorne o nome de empresa que contenha o maior
nome e o menor.
Inclua uma coluna chamada sobrenome na tabela de
programadores e popule com dados.
A seguir, retorne a inicial do nome e o sobrenome
completo de cada programador.
Fundamentos de Banco de Dados - 2013/1

18/06/2013

Obrigado!

Perguntas?
Dvidas?

Fundamentos de Banco de Dados - 2013/1

18/06/2013

You might also like