bancos de dados i sql server – aula prática guilherme amorim juliana xavier walter galvão

55
Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

Upload: internet

Post on 19-Apr-2015

126 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

Bancos de Dados I

SQL Server – Aula Prática

Guilherme AmorimJuliana XavierWalter Galvão

Page 2: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 2

SQL Server SGBD Relacional Versões mais recentes: 6.5, 7.0 e 2000 Transact-SQL

SQL ANSI-92 + comandos adicionais Compatibilidade

6.5 e 7.0 não compatíveis em vários aspectos 2000 e 7.0 compatíveis

Page 3: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 3

Segurança Login e senha. Independência de usuário proprietário

Objetos de nomes iguais podem coexistir no mesmo BD, contanto que sejam proprietários diferentes

O proprietário (usuário criador) gerencia completamente o objeto

Mudança de senha exec sp_password ‘senha antiga’, ‘senha nova’

Page 4: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 4

Bancos de Dados BD’s de Sistema

Master, model, msdb, tempdb, distribution. BD’s de Usuário

BD’s de exemplo Northwind Pubs

BD’s de aplicações Bd1

Page 5: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 5

Objetos do BD Nomenclatura completa de 4 partes

Servidor.banco.proprietário.nome_objeto Opcionais: servidor e banco

Servidor atual e bd atual Semi-obrigatório: Proprietário Obrigatório: Nome_objeto No CIN-UFPE, sempre usar proprietário.objeto!

Page 6: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 6

Query Analyzer - linha de comando Query Analyzer

Ferramenta primária para uso em BD1 Por linha de comando – via isqlw.exe

Digite isqlw.exe /? para ver os parâmetros. Parâmetros case sensitive - isqlw –U é diferente de

isqlw –u. Útil para enviar um script inteiro para o servidor.

Batch files com chamadas a isqlw.exe

Page 7: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 7

Outras Ferramentas Cliente Utilitários gráficos

Enterprise Manager Bastante completo, permite gerência completa de vários bd’s. Não disponível para a disciplina de BD1

Transact-SQL Help Helpsql.hlp

SQL Profiler “Escuta” do lado do servidor

DTS

Page 8: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 8

SQL Server no CIN-UFPE Servidor

Máquina CIN03 - SQL Server 2000. Utilitários cliente

Caminho: P:\MSSQL7\BINN Menu Iniciar

Logins bd1e1,bd1e2,...,bd1e25 Senha: “bd1” Banco de dados: Bd1

Caminho para scripts de exemplo: http://www.cin.ufpe.br/~if559

Page 9: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 9

Exercício – rodando um script

1. Executar exemplo1.sql através do isqlw.exeP:\mssql7\binn\isqlw –SCIN03 –Ubd1e1 -Pbd1e1

–dNorthwind –iexemplo1.sql –osaida.txt

2. Preparar batch file para executar exemplo1.sql.

3. Executar batch file.

Page 10: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 10

Criação de Tabelas Pessoa.sql, Turma.sql

Ajustar valor de @usuario Rodar script

Observar Campos

Tipos de dados Constraints

Not null, Primary Keys, Unique, Default Operadores específicos

Identity

Page 11: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 11

Criação de Tabelas Aluno.sql

Constraints Foreign Key

Cuidados com FK’s Remover as FK's que referenciam a tabela a ser

removida antes de remover a tabela

Page 12: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 12

Manutenção de Scripts Exercício

Gerar batch file com script para recriação das 3 tabelas: pessoa, turma e aluno.

Usar isqlw.exe. Criar script para remover as tabelas ou FK’s na

ordem correta.

Page 13: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

Bancos de Dados I

Inserindo Registros

Fábio Ávila <[email protected]>Ávila Sistemas Ltda.Grupo Recife de TI

Page 14: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 14

Query Analyzer Conexão

Várias janelas Editor de Texto Syntax-Highlighting Executando comandos

F5, CTRL+E ou botão Play Execução parcial

Resultados Formato planilha/texto puro

Page 15: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 15

Verificando objetos do BD Sp_help

Verifica estrutura de objetos do banco Útil para testar existência de objetos e consultar sua

estrutura. Mostra FK’s com dependência para esta tabela

Exercício com isqlw Executar sp_help para as tabelas aluno, pessoa e

turma.

Page 16: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 16

Inserindo registros INSERT tabela(lista_de_campos)VALUES(lista_de_valores)

A lista de campos é opcional, mas é sempre bom incluir.

Para os valores, quando for texto, colocar entre aspas. Quando for data, colocar no formato 'mm/dd/yyyy hh:nn'. Para números decimais, (xy.wz).

Page 17: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 17

Inserindo registrosINSERT bd1en.pessoa(CPF,nome,endereco,telefone,email)VALUES(12345678901,'Zé Mané','Rua do Pombal, 20',0812224422,'[email protected]')

SELECT @@IDENTITY

Page 18: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 18

Inserindo Registros Pode-se inserir registros resultantes de um

SELECTINSERT tabela(lista_de_campos)SELECT ...

Page 19: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 19

Exercício1. Responda, para cada tabela criada: qual o número

mínimo de campos para os quais devem ser informados valores em uma inserção de dados?

2. Inserir 1 registro em cada uma das tabelas: turma, pessoa e aluno, informando todos os campos exceto os IDENTITY. Usar Query Analyzer.

3. Inserir 1 registro em cada uma das tabelas informando apenas os campos obrigatórios. Usar Query Analyzer.

4. IDENTITY e PRIMARY KEY são sinônimos?

Page 20: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

Bancos de Dados I

Consultas a uma Tabela

Fábio Ávila <[email protected]>Ávila Sistemas Ltda.Grupo Recife de TI

Page 21: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 21

Consultando dados Mais prático usar isql/w ou Query Analyzer. Comando SELECT do SQL Transact-SQL traz melhorias ao SQL ANSI-92 também

no SELECT Pode-se (e deve-se) quebrar em várias linhas Execução do texto selecionado Comentários

In-line (--) Delimitado (/* */)

Page 22: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 22

Cláusulas do SELECT SELECT <lista_de_campos> FROM tabela1 [,tabela2,tabela3...] <tipo> JOIN <tabelax> ON <criterio_associacao>

Informa critérios de junção de tabelas WHERE <condição_booleana>

Especifica critérios para filtragem de dados GROUP BY <lista_de_campos>

Agrupamento de dados. ORDER BY <lista_de_campos [ASC/DESC]>

Altera a ordem dos registros

Page 23: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 23

Especificando CamposSELECT 2SELECT "CIN"SELECT 2+4SELECT "CIN" + "-UFPE"SELECT user_name()SELECTconvert(varchar(10),getdate(),103)

Page 24: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 24

Especificando Campos Apelidos de campoSELECT "CIN" + "-UFPE" as Centro

,Universidade = "UFPE"

Expressões como campos Podem estar presentes na lista de campos, no

ORDER BY ou no GROUP BY

Page 25: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 25

Cláusula WHERE Operadores

OR, AND, NOT >, <, >=, <=, =, <> | (bitwise OR), & (bitwise AND), ^ (bitwise XOR) LIKE IN EXISTS BETWEEN

Uso de parênteses

Page 26: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 26

Cláusula WHERE Cuidados com NULL e NOT NULL

Operador IS NULL NULL = NULL é falso! NULL não é igual a nada. Configurações SET para comportamento com NULL

Comparando com constantes Inteiro – pode colocar entre parênteses String – entre aspas simples ou duplas Data – entre aspas, no formato "mm/dd/yyyy hh:nn:ss"

Ano pode conter 2 dígitos

Page 27: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 27

WHERE SimplesUse NorthwindSELECT employeeid, name = firstname + ' ' + lastname, titleFROM dbo.employeesWHERE employeeid = 5

Page 28: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 28

Usando LikeUse NorthwindSELECT companynameFROM dbo.customersWHERE companyname LIKE '%Restaurant%' OR companyname LIKE '_en' OR companyname LIKE '[CK]%' OR companyname LIKE '[S-V]%' OR companyname LIKE 'M[^c]%'

Page 29: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 29

Faixa de valoresUse NorthwindSELECT productname, unitpriceFROM dbo.productsWHERE unitprice BETWEEN 10 AND 20

Page 30: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 30

Lista de valoresUse NorthwindSELECTcompanyname,country

FROM dbo.suppliersWHERE country IN ('Japan','Italy')

Pode ser outro SELECT retornando 1 campo

Page 31: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 31

Valores desconhecidos Usar IS NULL depois do campo NOT IS NULL = IS NOT NULLUse NorthwindSELECTcompanyname,fax

FROM dbo.suppliersWHERE fax IS NULL

Page 32: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 32

Ordenando DadosUse NorthwindSELECTproductid,productname,

categoryid, unitpriceFROM dbo.productsORDER BY categoryid ASC, unitprice DESC

Page 33: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 33

Eliminando valores duplicadosUse NorthwindSELECT DISTINCTcountry

FROM dbo.suppliersORDER BY country

Page 34: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 34

Exemplo de SELECT de 1 TabelaUse NorthwindSELECTconvert(varchar(10),productid) + " – " +

productname as 'Nome Produto', UnitsInStock as 'Em estoque', ReorderLevel as 'Nível Crítico', Diferenca = (ReorderLevel - UnitsInStock)FROM dbo.productsWHERE UnitsInStock < ReorderlevelORDER BY (ReorderLevel - UnitsInStock) DESC

Page 35: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 35

Exercícios Dica: use sp_help para ver a estrutura de cada tabela1. Retorne os nomes dos produtos que começam com as letras

a, d, de m a z, ordenados por nome.2. Retorne os nomes dos fornecedores que estão sem

homepage informada na tabela (nulos).3. Mostre a lista de países dos clientes da empresa (tabela

Customers), sem repetições.4. Mostre os nomes dos clientes que não fizeram pedidos. Dica:

use IN. Os pedidos estão na tabela Orders. Soluções estarão disponíveis em http://www.cin.ufpe.br/~farp/bd1

Page 36: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

Bancos de Dados I

Consultas de duas ou mais tabelas

Fábio Ávila <[email protected]>Ávila Sistemas Ltda.Grupo Recife de TI

Page 37: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 37

Consultas em 2 ou mais tabelas No SQL Server: cláusulas JOIN. Podem ser INNER ou OUTER. Importante uso de apelidos de tabelas. Normalmente os JOINs unem FK's com PK's.

Page 38: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 38

Sintaxe Parcial do JOIN SELECT <lista_de_campos> FROM tabela1 [,tabela2,tabela3...] <tipo> JOIN <tabelax> ON

<criterio_associacao> Pode existir mais de um JOIN no comando

Page 39: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 39

Exemplo com duas tabelasUse NorthwindSELECT cs.companyname,cs.customerid,

os.orderdateFROM dbo.customers csJOIN dbo.orders os ON os.customerid = cs.customeridWhere os.orderdate between '01/01/1997' and '03/1/1997'

Page 40: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 40

Exemplo com mais de duas tabelasUse NorthwindSELECT cliente = cs.companyname,

empregado = em.firstname + ' ' + em.lastname, 'Data Pedido' = os.orderdate, Via = sh.companynameFROM dbo.customers csJOIN dbo.orders os ON os.customerid = cs.customeridJOIN dbo.employees em ON em.employeeid = os.employeeidJOIN dbo.shippers sh ON sh.shipperId = os.shipViaWhere os.orderdate between '01/01/1997' and '03/1/1997'

Page 41: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 41

OUTER JOIN Pode ser RIGHT, LEFT ou FULL

RIGHT e LEFT são equivalentes, só muda a direção. FULL mostra das duas tabelas Aplicações clássicas

Mostrar lista dos clientes que não têm pedidos no Sistema Mostrar lista dos empregados com os respectivos pedidos

realizados (mostrar TODOS os empregados, mesmo os que não efetuaram pedidos).

Page 42: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 42

Exemplo de OUTER JOINUse NorthwindSELECT cs.companyname,

cs.customerid, os.orderdateFROM dbo.customers csLEFT JOIN dbo.orders os ON os.customerid = cs.customeridWhere os.orderdate between '01/01/1997' and '03/1/1997'

or orderdate is nullOrder by os.orderdate

Mostra todos os clientes com respectivas datas de pedido. Dois deles (FISSA e Paris Spécialités) não fizeram pedidos.

Page 43: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 43

CROSS JOIN Basta não especificar o critério de associação Produto cartesiano de registrosSELECT te.TerritoryDescription, re.RegionDescriptionFROM territories teCROSS JOIN region re

SELECT te.TerritoryDescription, re.RegionDescriptionFROM territories te,region re

Page 44: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 44

UNION Usado para juntar resultados de diferentes

SELECTs

SELECT name = (em.firstname + ' ' + em.lastname), em.city,em.postalcodeFROM employees emUNIONSELECT cs.companyname,cs.city,cs.postalcodeFROM customers cs

Page 45: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 45

Sub-Consultas Consiste em introduzir em determinados pontos da

consulta uma outra consulta entre parênteses Técnica poderosa e sofisticada

Sub-consulta como um campo Só pode retornar um campo e um valor

Sub-consulta após o FROM ou JOIN Importante uso de apelidos

Sub-consulta no WHERE Só pode retornar um campo e um valor

Page 46: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 46

Exercícios1. Listar os nomes de empregados que fizeram pedidos

no mês de Janeiro/1997, sem repetições de nome.2. Listar os nomes das empresas clientes atendidas por

Nancy Davolio, sem repetições.3. Mostrar os nomes e telefones de clientes e

empregados. Soluções estarão disponíveis em http://www.cin.ufpe.br/~farp/bd1

Page 47: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

Bancos de Dados I

Agrupamento de Dados

Fábio Ávila <[email protected]>Ávila Sistemas Ltda.Grupo Recife de TI

Page 48: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 48

Agrupamento de Dados Pode conter a cláusula GROUP BY e HAVING Funções de agrupamento

AVG, COUNT, MAX, MIN, SUM, STDEV, STDEVP, VAR, VARP

Page 49: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 49

Agrupamento de Dados Sem GROUP BYSELECT COUNT(*)FROM orders

SELECT COUNT(orderdate)FROM orders

SELECT MAX(orderdate)FROM orders

SELECT SUM(freight)FROM orders

Page 50: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 50

Agrupamento de Dados Regras do GROUP BY

Um item da lista de campos do SELECT pode ser um campo de tabela, uma expressão ou uma aplicação de função de agrupamento.

Todo campo ou expressão contido na lista de campos do SELECT que não for aplicação de uma função de agrupamento deve estar na lista de campos do GROUP BY

A inversa não é verdadeira – os campos do GROUP BY não necessariamente precisam estar contidos na lista de campos

Para filtrar registros baseado no resultado de uma função de agrupamento, usar HAVING.

Page 51: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 51

Exemplo de GROUP BY Total de quantidade pedida de cada produto

SELECT pr.productname, Count(od.quantity) as QuantidadeTotalFROM products prJOIN [order details] od ON od.productid = pr.productidGROUP BY productnameORDER BY count(od.quantity) desc

Page 52: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 52

Exemplo de GROUP BY Contagem de pedidos feitos por empregado

SELECT empregado = (em.firstname + ' ' + em.lastname),

Count(os.orderid) as PedidosFROM orders osJOIN employees em ON em.employeeid = os.employeeidGROUP BY em.firstname + ' ' + em.lastnameORDER BY Pedidos Desc

Page 53: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 53

HAVING Filtro sobre resultado de função de agrupamento

SELECT empregado = (em.firstname + ' ' + em.lastname),

Count(os.orderid) as PedidosFROM orders osJOIN employees em ON em.employeeid = os.employeeidGROUP BY em.firstname + ' ' + em.lastnameHAVING Count(os.orderid) > 50ORDER BY Pedidos Desc

Page 54: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 54

TOP Útil para listar os primeiros n valores de uma consulta.

Pode listar os primeiros n% registros. Faz sentido em conjunto com ORDER BY. Pode listar também os empates na última colocação

WITH TIES Específico do SQL Server.

SELECT TOP 10 (...)SELECT TOP 10 PERCENT (...)SELECT TOP 10 WITH TIES

Page 55: Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão

SQL Server - Aula Prática 55

Exercícios1. Mostre a menor e maior datas de pedidos realizados.2. Mostrar quantos produtos existem em cada categoria. Mostrar o nome da

categoria (tabelas Products e Categories).3. Listar a quantidade de pedidos feitos por cada cliente entre Janeiro/97 e

Junho/97. Mostrar o nome da empresa cliente.4. Listar a venda total realizada por empregado no mês de Abril/1997.5. Listar o nome e a soma dos valores de pedidos feitos para cada produto no

mês de Março/1998. Mostrar apenas os 10 maiores.6. Listar os 5 fornecedores que mais foram acionados no ano de 1997, por

total de vendas. Mostrar o nome do fornecedor e o total da venda.7. Listar o total de vendas realizadas mês a mês. Mostrar o mês/ano e o total

de vendas realizadas naquele mês/ano. Soluções estarão disponíveis em http://www.cin.ufpe.br/~farp/bd1