1 - SQL Avancado - Parte 1

Embed Size (px)

Citation preview

  • 7/30/2019 1 - SQL Avancado - Parte 1

    1/41

    2008.2

    SQL Avanado

    Revisando SQL...

    Renata [email protected]

  • 7/30/2019 1 - SQL Avancado - Parte 1

    2/41

    2008.2

    Objetivos

    Revisando a sintaxe SQL SELECT, UPDATE, INSERT, DELETE

    Manipulando expresses Funes matemticas, etc

    Condies de Pesquisa Funes de Agregao e Agrupamento

    Juno de tabelas

    Subconsultas e tabelas temporrias

  • 7/30/2019 1 - SQL Avancado - Parte 1

    3/41

    2008.2

    Structured Query Language (SQL)

    Linguagem no procedural que requer dousurio qual dado necessrio semespecificar como obt-lo

    Poupa tempo de programao, mas exigetreino para se dominar

    Suporte cliente-servidor

    Controle de Acesso

  • 7/30/2019 1 - SQL Avancado - Parte 1

    4/41

    2008.2

    Structured Query Language (SQL)

    Integridade dos Dados Independncia de fabricante: est

    incorporada em quase todos os SGBDs em

    seu padro ANSI, com extensesproprietrias de cada fabricante

  • 7/30/2019 1 - SQL Avancado - Parte 1

    5/41

    2008.2

    SELECT Consultando Dados

    Sintaxe Bsica

    SELECT lista_de_colunasFROM lista_de_tabelasWHERE condies

  • 7/30/2019 1 - SQL Avancado - Parte 1

    6/41

    2008.2

    SELECT Consultando Dados

    Clusulas Adicionais INTO: especifica uma nova tabela que conter o

    resultado da consulta

    ORDER BY: classifica o resultado da consulta

    GROUP BY: agrupa as linhas das consultas combase nos valores de uma ou mais colunas

    HAVING: especifica as condies usadas para

    filtrar agrupamento de dados no resultado daconsulta. S deve ser usado com o GROUP BY

  • 7/30/2019 1 - SQL Avancado - Parte 1

    7/41

    2008.2

    Consultas Simples

    Exemplo 1: exibir todos os dados de todos osclientes

    Exemplo 2: exibir cdigo, nome e telefone detodos os clientes

    SELECT * FROMcliente

    SELECT codigo, nome, foneFROMcliente

  • 7/30/2019 1 - SQL Avancado - Parte 1

    8/41

    2008.2

    Consultas Simples

    Exemplo 3: exibir cdigo, nome e telefonedos 20 primeiros clientes cadastrados naempresa

    SELECTTOP 20 codigo,nome,foneFROMcliente

    SELECTTOP n [percent] FROM

  • 7/30/2019 1 - SQL Avancado - Parte 1

    9/41

    2008.2

    Consultas Simples

    Exemplo 4: exibir cdigo, nome e preo devenda dos 10% primeiros produtoscadastrados

    SELECTTOP 10 PERCENT codigo,

    nome,preco

    FROMproduto

  • 7/30/2019 1 - SQL Avancado - Parte 1

    10/41

    2008.2

    Consultas Simples

    Exemplo 5: exibir cdigo, nome, telefone euma coluna contendo classificadopara todosos clientes

    SELECT codigo,nome,fone,classificado

    FROMcliente

  • 7/30/2019 1 - SQL Avancado - Parte 1

    11/41

    2008.2

    Consultas Simples

    Exemplo 6: exibir cdigo, nome e uma colunacontendo classificado com o cabealhoClassificaopara todos os clientes

    SELECT codigo,nome,

    classificado Classificao

    FROMcliente

  • 7/30/2019 1 - SQL Avancado - Parte 1

    12/41

    2008.2

    Consultas Simples

    Exemplo 7: exibir nmero, descrio e preode um produto, renomeando a colunanmero para cdigo

    SELECT numero asCodigo,

    descricao, preco

    FROMproduto

  • 7/30/2019 1 - SQL Avancado - Parte 1

    13/41

    2008.2

    Manipulando Expresses

    Um comando SELECT tambm pode retornar comocoluna de resultado um valor calculado.

    Exemplo 8: Exibir cdigo, quantidade em estoque,

    preo da venda e valor total (quantidade * preo davenda) para cada produto

    SELECT codigo, quantEst ASQuantidade, preco,

    quantEst*preco Valor Total

    FROMproduto

  • 7/30/2019 1 - SQL Avancado - Parte 1

    14/41

    2008.2

    Funes Matemticas

    Alm de operadores aritmticos, podemosusar funes matemticas (consulte areferncia do SGBD)

    ROUND (valor, n): arredonda o valor para ncasas decimais

    POWER (valor, p): retorna o valor elevado potncia p

  • 7/30/2019 1 - SQL Avancado - Parte 1

    15/41

    2008.2

    Funes Matemticas

    Exemplo 9: exiba cdigo, preo e valorarredondado do preo de cada produto para1 casa decimal

    SELECT codigo,preco,

    ROUND (preco,1)

    FROMproduto

  • 7/30/2019 1 - SQL Avancado - Parte 1

    16/41

    2008.2

    Funes Matemticas

    Exemplo 10: exiba o preo do produtoelevado a potncia de 3

    SELECT POWER(preco,3)FROMproduto

  • 7/30/2019 1 - SQL Avancado - Parte 1

    17/41

    2008.2

    Funes de Caracteres

    Aplicao: muito teis para manipular dadosdo tipo caractere

    SUBSTRING(expr, inicio, tam): Extrai uma partede uma string desde inicio e com tam caracteres

    LOWER(expr): converte para minsculo

  • 7/30/2019 1 - SQL Avancado - Parte 1

    18/41

    2008.2

    Funes de Caracteres

    Exemplo 11: exiba os 10 primeiros caracteresdo ttulo de um livro em minsculo e seupreo da tabela livros

    SELECT LOWER(SUBSTRING(titulo,1, 10))

    Titulo, preco

    FROMlivros

  • 7/30/2019 1 - SQL Avancado - Parte 1

    19/41

    2008.2

    Funes de Data e Hora

    Aplicao: em colunas do tipo datetime, quearmazenam data e hora DatePart(parte,data): retorna a parte especificada da

    data

    yy O ano hh horas

    qq o trimestre mi minutos

    mm o ms ss segundos

    dd dia do ms ms milisegundos

    Argumento Parte

    2008 2

  • 7/30/2019 1 - SQL Avancado - Parte 1

    20/41

    2008.2

    Funes de Data e Hora

    Exemplo 12: Exiba o nome e ms deaniversrio de todos os funcionrios

    SELECT nome,DatePart (mm,dataNasc)

    FROMfuncionarios

    2008 2

  • 7/30/2019 1 - SQL Avancado - Parte 1

    21/41

    2008.2

    Funes de Data e Hora

    GetDate(): retorna a data e hora atuais Exemplo 13: exiba a data de aniversrio e o dia

    atual para todos os funcionrios

    SELECT dtNasc, GetDate() Dia

    de Hoje

    FROMfuncionarios

    2008 2

  • 7/30/2019 1 - SQL Avancado - Parte 1

    22/41

    2008.2

    Funes de Converso

    Aplicao: converso de um tipo de dado em outroCONVERT (tipo de dado, valor)

    Exemplo 14: Exiba o preo de um produtoconvertido para string apenas no select

    SELECT Convert( char(10), preco)

    FROMproduto

    2008 2

  • 7/30/2019 1 - SQL Avancado - Parte 1

    23/41

    2008.2

    Funes de Converso

    Com valores datetime, convert pode ter umparmetro a mais que especifica o formatoda data a ser usado

    Padro brasileiro: 3 (dd/mm/aa) e 103 (dd/mm/aaaa)

    Padro americano: 1 (mm/dd/aa) e 101 (mm/dd/aaaa)

    2008 2

  • 7/30/2019 1 - SQL Avancado - Parte 1

    24/41

    2008.2

    Funes de Converso

    Exemplo 15: Exiba a data de hoje no formatobrasileiro

    SELECT Convert( char(10),GetDate(), 103)

    2008 2

  • 7/30/2019 1 - SQL Avancado - Parte 1

    25/41

    2008.2

    EXERCCIOS

    Quer enriquecer suas expresses SQL? Pesquise asseguintes funes no SQL Server

    Funes de Caracteres Upper(), Ltrim(), Rtrim(), Space(), Str()

    Funes de Data e Hora DateAdd(), DateDiff(), DateName()

    Traga na prxima aula instrues SELECTdemonstrando o uso destas funes !!

    2008 2

  • 7/30/2019 1 - SQL Avancado - Parte 1

    26/41

    2008.2

    Eliminando Duplicao de Linhas

    Sintaxe:SELECTDISTINCT

    FROM

    Exemplo 16: Exibir cdigo de todos os clientes quej fizeram pedido na empresa

    SELECT DISTINCT cod_clienteFROMclientes

    2008 2

  • 7/30/2019 1 - SQL Avancado - Parte 1

    27/41

    2008.2

    Ordenando Resultados Sintaxe:

    SELECT FROM ORDER BY [ASC] [DESC]

    Exemplo 17: Exibir cdigo, nome e telefone de todos os

    clientes, ordenado pelo nome do cliente de formaascendente

    SELECT cod_cliente, nome, tel

    FROMclientes

    ORDER BY nome

    2008 2

  • 7/30/2019 1 - SQL Avancado - Parte 1

    28/41

    2008.2

    Ordenando Resultados

    Exemplo 18: Exibir nome, cidade e sexo detodos os clientes ordenado por cidade emordem ascendente e sexo em ordemdescendente

    SELECT nome, cidade, sexo

    FROMclientes

    ORDER BY cidade, sexo DESC

    2008 2

  • 7/30/2019 1 - SQL Avancado - Parte 1

    29/41

    2008.2

    Filtrando os Dados Sintaxe:

    SELECT FROM WHERE

    Exemplo 19: Exibir todos os dados dos funcionrios que

    nasceram a partir de 1950

    SELECT *, Convert(varchar, dtNas,103)

    FROMfuncionariosWHEREdtNasc > 31/12/1949

    Qual outra maneira de fazer esta consultausando funes de data na clusula Where ??

    2008 2

  • 7/30/2019 1 - SQL Avancado - Parte 1

    30/41

    2008.2

    Filtrando Dados Usando Intervalo

    Sintaxe:

    SELECT FROM WHERE

    Exemplo 20: Exibir todos os dados de produtos cujoestoque esteja entre 10 e 30 unidades, ordenados pelo

    nome do produto

    SELECT * FROMprodutos

    WHEREestoque_atualBETWEEN 10AND 30

    ORDERBY nome

    2008 2

  • 7/30/2019 1 - SQL Avancado - Parte 1

    31/41

    2008.2

    Filtrando Dados Usando Intervalo

    Exemplo 21: Exibir todos os dados de funcionrios quenasceram na dcada de 60, ordenados pela data denascimento em ordem descendente, e pelo nome dofuncionrio em ordem ascendente.

    SELECT * FROMfuncionarios

    WHEREdataNascBETWEEN 01/01/1960

    AND31/12/1969ORDERBY dataNasc DESC,nome

    2008 2

  • 7/30/2019 1 - SQL Avancado - Parte 1

    32/41

    2008.2

    Filtrando Dados Usando Listas

    Sintaxe:

    SELECT FROM

    WHERE

    Exemplo 22: Exibir todos os dados dos funcionrios que

    residam em Manara ou Bessa, ordenados pelo nome

    SELECT * FROMfuncionarios

    WHEREbairro IN(Manaira, Bessa)ORDERBY nome

    2008 2

  • 7/30/2019 1 - SQL Avancado - Parte 1

    33/41

    2008.2

    Filtrando Dados Usando Listas

    Exemplo 23: Exibir todos os produtos queno sejam do tipo 2 ou 4, ordenados pelotipo em ordem descendente

    SELECT * FROMprodutos

    WHEREtipoNOTIN(2,4)ORDERBY tipo DESC

    2008 2

  • 7/30/2019 1 - SQL Avancado - Parte 1

    34/41

    2008.2

    Filtrando Dados com Valores Nulos

    Sintaxe:SELECT FROM

    WHERE IS[NOT]NULL

    Significado

    Valores no formatados ou desconhecidos

    2008 2

  • 7/30/2019 1 - SQL Avancado - Parte 1

    35/41

    2008.2

    Filtrando Dados com Valores Nulos

    Exemplo 24: Exibir os dados dos funcionrios queno tenham e-mail

    SELECT * FROMfuncionarios

    WHEREemail ISNULL

    Exemplo 25: Exibir dados dos funcionrios cujonmero do telefone seja conhecido

    SELECT * FROMfuncionarios

    WHEREtelefone ISNOTNULL

    2008.2

  • 7/30/2019 1 - SQL Avancado - Parte 1

    36/41

    2008.2

    Filtrando Dados com Valores Nulos

    Voc acha que as linhas com valores NULLsero retornadas de acordo com o SELECTabaixo ??

    SELECT * FROMfuncionariosWHEREestado PB

    NO !!!

    2008.2

  • 7/30/2019 1 - SQL Avancado - Parte 1

    37/41

    2008.2

    Filtrando Dados usando Strings

    Sintaxe:SELECT FROM WHERE LIKE

    Significado: Casamento de Padro: uma string contendo caracteresque podem ser combinados com parte de outra string

    % (porcentagem): seqncia de caracteres_(sublinhado): Combina com um nico caractere

    2008.2

  • 7/30/2019 1 - SQL Avancado - Parte 1

    38/41

    2008.2

    Filtrando Dados usando Strings

    Outras combinaes:

    [] (colchetes): combina uma faixa de caracteres ^ (circunflexo): significa negao

    Como encontrar todos os nomes que comeam com A ou B? Usar LIKE[AB]%

    Como encontrar todos os nomes que comeam com as letrasde A at E? Usar LIKE[A-E]%

    E todos os nomes que no iniciam com V? Usar LIKE[^V]%

    2008.2

  • 7/30/2019 1 - SQL Avancado - Parte 1

    39/41

    008

    Funes Agregadas

    COUNT(): conta o nmero de valores de uma

    coluna SUM(): soma os valores de uma coluna de dados

    numricos AVG(): calcula a mdia de uma coluna de dados

    numricos MAX(): determina o maior valor de uma coluna MIN() : determina o menor valor de uma coluna

    2008.2

  • 7/30/2019 1 - SQL Avancado - Parte 1

    40/41

    Funes Agregadas

    Obs.: A clusula DISTINCT pode ser usada como parte do

    argumento para eliminar linhas repetidas antes da aplicaoda funo

    Exemplo 26: Exibir a quantidade de produtos vendidos com

    preo maior que R$ 10,00SELECT COUNT (DISTINCT cod_p)

    FROMprodutos

    WHEREpreco > 10

    2008.2

  • 7/30/2019 1 - SQL Avancado - Parte 1

    41/41

    Para Pesquisar!! Clusula COMPUTE

    Sintaxe:

    SELECT FROM ORDER BY

    COMPUTE BY

    Para que serve? Gerar totalizadores que aparecem como colunas adicionais resumo no

    final do conjunto resultado

    O que devo fazer ?? Trazer 3 exemplos prticos desta clusula