550 likes | 694 Views
Bancos de Dados I. SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão. 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
E N D
Bancos de Dados I SQL Server – Aula Prática Guilherme Amorim Juliana Xavier Walter Galvão
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
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
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
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
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
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
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
Exercício – rodando um script • Executar exemplo1.sql através do isqlw.exe P:\mssql7\binn\isqlw –SCIN03 –Ubd1e1 -Pbd1e1–dNorthwind –iexemplo1.sql –osaida.txt • Preparar batch file para executar exemplo1.sql. • Executar batch file. SQL Server - Aula Prática
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
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
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. SQL Server - Aula Prática
Bancos de Dados I Inserindo Registros Fábio Ávila <farp@cin.ufpe.br>Ávila Sistemas Ltda.Grupo Recife de TI
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
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
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
Inserindo registros INSERT 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
Inserindo Registros • Pode-se inserir registros resultantes de um SELECT INSERT tabela (lista_de_campos) SELECT ... SQL Server - Aula Prática
Exercício • 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? • Inserir 1 registro em cada uma das tabelas: turma, pessoa e aluno, informando todos os campos exceto os IDENTITY. Usar Query Analyzer. • Inserir 1 registro em cada uma das tabelas informando apenas os campos obrigatórios. Usar Query Analyzer. • IDENTITY e PRIMARY KEY são sinônimos? SQL Server - Aula Prática
Bancos de Dados I Consultas a uma Tabela Fábio Ávila <farp@cin.ufpe.br>Ávila Sistemas Ltda.Grupo Recife de TI
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
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
Especificando Campos SELECT 2 SELECT "CIN" SELECT 2+4 SELECT "CIN" + "-UFPE" SELECT user_name() SELECTconvert(varchar(10),getdate(),103) SQL Server - Aula Prática
Especificando Campos • Apelidos de campo SELECT "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
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
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
WHERE Simples Use Northwind SELECT employeeid, name = firstname + ' ' + lastname, title FROM dbo.employees WHERE employeeid = 5 SQL Server - Aula Prática
Usando Like Use Northwind SELECT companyname FROM dbo.customers WHERE 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
Faixa de valores Use Northwind SELECT productname, unitprice FROM dbo.products WHERE unitprice BETWEEN 10 AND 20 SQL Server - Aula Prática
Lista de valores Use Northwind SELECT companyname, country FROM dbo.suppliers WHERE country IN ('Japan','Italy') • Pode ser outro SELECT retornando 1 campo SQL Server - Aula Prática
Valores desconhecidos • Usar IS NULL depois do campo • NOT IS NULL = IS NOT NULL Use Northwind SELECT companyname, fax FROM dbo.suppliers WHERE fax IS NULL SQL Server - Aula Prática
Ordenando Dados Use Northwind SELECT productid, productname, categoryid, unitprice FROM dbo.products ORDER BY categoryid ASC, unitprice DESC SQL Server - Aula Prática
Eliminando valores duplicados Use Northwind SELECT DISTINCT country FROM dbo.suppliers ORDER BY country SQL Server - Aula Prática
Exemplo de SELECT de 1 Tabela Use Northwind SELECT convert(varchar(10),productid) + " – " + productname as 'Nome Produto', UnitsInStock as 'Em estoque', ReorderLevel as 'Nível Crítico', Diferenca = (ReorderLevel - UnitsInStock) FROM dbo.products WHERE UnitsInStock < Reorderlevel ORDER BY (ReorderLevel - UnitsInStock) DESC SQL Server - Aula Prática
Exercícios • Dica: use sp_help para ver a estrutura de cada tabela • Retorne os nomes dos produtos que começam com as letras a, d, de m a z, ordenados por nome. • Retorne os nomes dos fornecedores que estão sem homepage informada na tabela (nulos). • Mostre a lista de países dos clientes da empresa (tabela Customers), sem repetições. • 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 SQL Server - Aula Prática
Bancos de Dados I Consultas de duas ou mais tabelas Fábio Ávila <fabio@avilasistemas.com.br>Ávila Sistemas Ltda.Grupo Recife de TI
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
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
Exemplo com duas tabelas Use Northwind SELECT cs.companyname, cs.customerid, os.orderdate FROM dbo.customers cs JOIN dbo.orders os ON os.customerid = cs.customerid Where os.orderdate between '01/01/1997' and '03/1/1997' SQL Server - Aula Prática
Exemplo com mais de duas tabelas Use Northwind SELECT cliente = cs.companyname, empregado = em.firstname + ' ' + em.lastname, 'Data Pedido' = os.orderdate, Via = sh.companyname FROM dbo.customers cs JOIN dbo.orders os ON os.customerid = cs.customerid JOIN dbo.employees em ON em.employeeid = os.employeeid JOIN dbo.shippers sh ON sh.shipperId = os.shipVia Where os.orderdate between '01/01/1997' and '03/1/1997' SQL Server - Aula Prática
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
Exemplo de OUTER JOIN Use Northwind SELECT cs.companyname, cs.customerid, os.orderdate FROM dbo.customers cs LEFT JOIN dbo.orders os ON os.customerid = cs.customerid Where os.orderdate between '01/01/1997' and '03/1/1997' or orderdate is null Order 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
CROSS JOIN • Basta não especificar o critério de associação • Produto cartesiano de registros SELECT te.TerritoryDescription, re.RegionDescription FROM territories te CROSS JOIN region re SELECT te.TerritoryDescription, re.RegionDescription FROM territories te,region re SQL Server - Aula Prática
UNION • Usado para juntar resultados de diferentes SELECTs SELECT name = (em.firstname + ' ' + em.lastname), em.city,em.postalcode FROM employees em UNION SELECT cs.companyname,cs.city,cs.postalcode FROM customers cs SQL Server - Aula Prática
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
Exercícios • Listar os nomes de empregados que fizeram pedidos no mês de Janeiro/1997, sem repetições de nome. • Listar os nomes das empresas clientes atendidas por Nancy Davolio, sem repetições. • Mostrar os nomes e telefones de clientes e empregados. • Soluções estarão disponíveis em http://www.cin.ufpe.br/~farp/bd1 SQL Server - Aula Prática
Bancos de Dados I Agrupamento de Dados Fábio Ávila <farp@cin.ufpe.br>Ávila Sistemas Ltda.Grupo Recife de TI
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
Agrupamento de Dados • Sem GROUP BY SELECT COUNT(*) FROM orders SELECT COUNT(orderdate) FROM orders SELECT MAX(orderdate) FROM orders SELECT SUM(freight) FROM orders SQL Server - Aula Prática
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