MIC PERNAMBUCO SEGUNDA FASE / S2B Banco de Dados Turma: Manhã / FIR Recife-PE www.micpernambuco.com.br Condições de pesquisa NOT atrasam a recuperação de dados Condições de pesquisa LIKE atrasam a recuperação de dados Correspondências exatas ou intervalos aceleram a recuperação de dados A cláusula ORDER BY atrasa a recuperação de dados Usando aliases para nomes de tabelas Combinando dados de várias tabelas Combinando vários conjuntos de resultados Exemplo 1 (sem nome de alias) USE joindb SELECT buyer_name, sales.buyer_id, qty FROM buyers INNER JOIN sales ON buyers.buyer_id = sales.buyer_id GO Exemplo 2 (com nome de alias) USE joindb SELECT buyer_name, s.buyer_id, qty FROM buyers AS b INNER JOIN sales AS s ON b.buyer_id = s.buyer_id GO Introdução às associações Usando associações internas Usando associações externas Usando associações cruzadas Associando mais de duas tabelas Associando uma tabela a si mesma Selecionar colunas específicas a partir de várias tabelas A palavra-chave JOIN especifica quais tabelas serão associadas e como associá-las A palavra-chave ON especifica as colunas que as tabelas têm em comum Consultar duas ou mais tabelas para produzir um conjunto de resultados Usar chaves primárias e externas como condições de associação Usar colunas comuns às tabelas especificadas para associar tabelas USE joindb SELECT buyer_name, sales.buyer_id, qty FROM buyers INNER JOIN sales Exemplo 1 ON buyers.buyer_id = sales.buyer_id GO sales buyers buyer_name buyer_id prod_id buyer_id Adam Barr Sean Chai Eva Corets 1 2 3 Erin O’Melia 4 Resultado buyer_name buyer_id qty Adam Barr 1 15 Adam Barr 1 5 Erin O’Melia 4 37 Eva Corets 3 11 Erin O’Melia 4 1003 qty 1 1 4 3 2 3 1 5 15 5 37 11 4 2 1003 USE joindb SELECT buyer_name, sales.buyer_id, qty FROM buyers Exemplo 1 LEFT OUTER JOIN sales ON buyers.buyer_id = sales.buyer_id GO buyers sales buyer_id buyer_id prod_id qty Adam Barr 1 1 2 15 Sean Chai 2 1 3 5 Eva Corets 3 4 1 37 Erin O’Melia 4 3 5 11 4 2 1003 buyer_name Resultado buyer_name buyer_id qty Adam Barr 1 15 Adam Barr 1 5 Erin O’Melia 4 37 Eva Corets 3 11 Erin O’Melia 4 1003 NULL NULL Sean Chai USE joindb SELECT buyer_name, qty FROM buyers CROSS JOIN sales GO buyers buyer_id buyer_name 1 Adam Barr Exemplo 1 sales buyer_id prod_id Resultado qty buyer_name qty 1 2 15 Adam Barr 15 2 Sean Chai 1 3 5 Adam Barr 5 3 Eva Corets 4 1 37 Adam Barr 37 4 Erin O’Melia 3 5 11 Adam Barr 11 4 2 1003 Adam Barr 1003 Sean Chai Sean Chai 15 5 Sean Chai 37 Sean Chai 11 Sean Chai Eva Corets ... 1003 15 ... USE joindb SELECT buyer_name, prod_name, qty FROM buyers INNER JOIN sales ON buyers.buyer_id = sales.buyer_id INNER JOIN produce ON sales.prod_id = produce.prod_id GO buyers sales buyer_id prod_id qty buyer_id buyer_name 1 2 15 1 Adam Barr 1 3 5 2 Sean Chai 3 1 37 3 Eva Corets 4 5 11 4 Erin O’Melia 2 2 1003 Resultado buyer_name prod_name qty Erin O’Melia Apples 37 Adam Barr Pears 15 Erin O’Melia Pears 1003 Adam Barr Oranges 5 Eva Corets Peaches 11 Exemplo 1 produce prod_id prod_name 1 Apples 2 Pears 3 Oranges 4 Bananas 5 Peaches USE joindb SELECT a.buyer_id AS buyer1, a.prod_id ,b.buyer_id AS buyer2 FROM sales AS a INNER JOIN sales AS b ON a.prod_id = b.prod_id WHERE a.buyer_id > b.buyer_id GO sales a sales b buyer_id prod_id 1 1 4 3 2 3 1 4 Exemplo 3 5 2 qty buyer_id prod_id 15 5 37 11 1 1 4 3 2 3 1 1003 4 Resultado buyer1 prod_id buyer2 4 2 1 5 2 qty 15 5 37 11 1003 VIEWS Focalizar Focalizar somente em dados importantes ou apropriados Limitar o acesso a dados confidenciais Mascarar os dados para os usuários a complexidade do banco de dados Ocultar estruturas complexas de banco de dados Simplificar consultas complexas, incluindo consultas distribuídas para dados heterogêneos Simplificar o gerenciamento de permissões de usuários Melhorar o desempenho Organizar dados para serem exportados para outros aplicativos VIEWS Employees EmployeeID LastName Firstname Title 1 2 3 Davolio Fuller Leverling Nancy Andrew Janet ~~~ ~~~ ~~~ USE Northwind GO CREATE VIEW dbo.EmployeeView AS SELECT LastName, Firstname FROM Employees EmployeeView Lastname Firstname Davolio Fuller Leverling Nancy Andrew Janet View de usuário VIEWS Orders OrderID CustomerID RequiredDate ShippedDate 10663 BONAP 1997-09-24 ~~~ 1997-10-03 10827 BONAP 1998-01-26 ~~~ 1998-02-06 10427 PICCO 1997-02-24 ~~~ 1997-03-03 10451 QUICK 1997-03-05 ~~~ 1997-03-12 10515 QUICK 1997-05-07 ~~~ 1997-05-23 Customers CustomerID CompanyName BONAP PICCO QUICK USE Northwind GO CREATE VIEW dbo.ShipStatusView AS SELECT OrderID, ShippedDate, ContactName FROM Customers c INNER JOIN Orders o ON c.CustomerID = O.CustomerID WHERE RequiredDate < ShippedDate ContactName Bon app' Laurence Lebihan Piccolo und mehr Georg Pipps QUICK-Stop Horst Kloss ShipStatusView OrderID ShippedDate 10264 10271 10280 ContactName 1996-08-23 1996-08-21 Maria Larsson 1996-08-30 1996-08-29 Art Braunschweiger 1996-09-12 1996-09-11 Christina Berglund VIEWS Alterando views USE Northwind GO ALTER VIEW dbo.EmployeeView AS SELECT LastName, FirstName, Extension FROM Employees Descartando views DROP VIEW dbo.ShipStatusView PROCEDIMENTOS ARMAZENADOS (STORED PROCEDURES) Compartilham a lógica do aplicativo Protegem os detalhes das tabelas do banco de dados Fornecem mecanismos de segurança Melhoram o desempenho Reduzem o tráfego de rede PROCEDIMENTOS ARMAZENADOS (STORED PROCEDURES) USE Locadora GO CREATE PROC dbo.FilmesNaoDevolvidos AS SELECT * FROM dbo.Pedidos WHERE DataDeEntregaPrevista < GETDATE() AND DataDeEntregaEfetiva IS Null GO EXEC FilmesNaoDevolvidos PROCEDIMENTOS ARMAZENADOS (STORED PROCEDURES) USE Northwind GO ALTER PROC dbo.OverdueOrders AS SELECT CONVERT(char(8), RequiredDate, 1) RequiredDate, CONVERT(char(8), OrderDate, 1) OrderDate, OrderID, CustomerID, EmployeeID FROM Orders WHERE RequiredDate < GETDATE() AND ShippedDate IS Null ORDER BY RequiredDate GO PROCEDIMENTOS ARMAZENADOS (STORED PROCEDURES) CREATE PROCEDURE dbo.[Locacao de Filmes] @DataInicio DateTime, @DataEntrega DateTime AS IF @DataInicio IS NULL OR @DataEntrega IS NULL BEGIN RAISERROR(‘Valores NULL não são permitidos', 14, 1) RETURN END SELECT PED.DataEntregaPrevista, PRE.Subtotal, FROM PEDIDOS PED INNER JOIN PRECO PRE ON PED.IDPedido = PRE.IDPedido WHERE PED.DataEntregaPrevista BETWEEN @DataInicio AND @DataEntrega GO PROCEDIMENTOS ARMAZENADOS (STORED PROCEDURES) Passando valores por nome de parâmetro EXEC AdicionarCliente @ClienteID = 154, @NomeCliente = 'Maria Anders', @NomeEmpresa = 'Alfreds Futterkiste', @Cargo = 'Sales Representative', @Endereco = 'Obere Str. 57', @Cidade = 'Berlin', @CodigoPostal = '12209', @Pais = 'Germany', @Telefone = '030-0074321' Passando valores por posição EXEC AdicionarCliente 154, 'Maria Anders', 'Alfreds Futterkiste', 'Sales Representative', 'Obere Str. 57', 'Berlin', NULL, '12209', 'Germany', '030-0074321' PROCEDIMENTOS ARMAZENADOS (STORED PROCEDURES) Criando o procedimento armazenado Executando o procedimento armazenado Resultados do procedimento armazenado CREATE PROCEDURE dbo.Multiplicador @n1 smallint, @n2 smallint, @resultado smallint OUTPUT AS SET @resultado = @n1 * @n2 GO DECLARE @resposta smallint EXECUTE Multiplicador 5,6, @resposta OUTPUT SELECT ‘O resultado é:', @resposta O resultado é: 30