View
126
Download
0
Category
Preview:
Citation preview
Bancos de Dados I
SQL Server – Aula Prática
Guilherme AmorimJuliana XavierWalter 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
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’
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
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!
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
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
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
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.
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
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
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.
Bancos de Dados I
Inserindo Registros
Fábio Ávila <farp@cin.ufpe.br>Ávila Sistemas Ltda.Grupo Recife de TI
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
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.
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).
SQL Server - Aula Prática 17
Inserindo registrosINSERT bd1en.pessoa(CPF,nome,endereco,telefone,email)VALUES(12345678901,'Zé Mané','Rua do Pombal, 20',0812224422,'zemane@nothing.com')
SELECT @@IDENTITY
SQL Server - Aula Prática 18
Inserindo Registros Pode-se inserir registros resultantes de um
SELECTINSERT tabela(lista_de_campos)SELECT ...
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?
Bancos de Dados I
Consultas a uma Tabela
Fábio Ávila <farp@cin.ufpe.br>Ávila Sistemas Ltda.Grupo Recife de TI
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 (/* */)
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
SQL Server - Aula Prática 23
Especificando CamposSELECT 2SELECT "CIN"SELECT 2+4SELECT "CIN" + "-UFPE"SELECT user_name()SELECTconvert(varchar(10),getdate(),103)
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
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
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
SQL Server - Aula Prática 27
WHERE SimplesUse NorthwindSELECT employeeid, name = firstname + ' ' + lastname, titleFROM dbo.employeesWHERE employeeid = 5
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]%'
SQL Server - Aula Prática 29
Faixa de valoresUse NorthwindSELECT productname, unitpriceFROM dbo.productsWHERE unitprice BETWEEN 10 AND 20
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
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
SQL Server - Aula Prática 32
Ordenando DadosUse NorthwindSELECTproductid,productname,
categoryid, unitpriceFROM dbo.productsORDER BY categoryid ASC, unitprice DESC
SQL Server - Aula Prática 33
Eliminando valores duplicadosUse NorthwindSELECT DISTINCTcountry
FROM dbo.suppliersORDER BY country
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
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
Bancos de Dados I
Consultas de duas ou mais tabelas
Fábio Ávila <fabio@avilasistemas.com.br>Ávila Sistemas Ltda.Grupo Recife de TI
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.
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
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'
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'
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).
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.
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
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
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
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
Bancos de Dados I
Agrupamento de Dados
Fábio Ávila <farp@cin.ufpe.br>Ávila Sistemas Ltda.Grupo Recife de TI
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
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
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.
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
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
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
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
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
Recommended