Você está na página 1de 14

Tecnologias e Linguagens para Banco de Dados II

Aula 2 4327 - Criando consultas bsicas Comando SELECT Filtrando dados

Comando SELECT
Elementos do comando SELECT Selecionando colunas de uma tabela Usando ALIAS Selecionando linhas especficas

Identificando elementos do comando SELECT


SELECT lista_colunas || * FROM tabelaA, tabelaB, ..., tabelaN [WHERE condicao] [GROUP BY expressao] [HAVING condicao] [ORDER BY expressao [ASC||DESC]]

Desvantagens do uso do SELECT *


Seleciona todas as colunas de uma tabela, independente da necessidade. Em um ambiente cliente/servidor a tabela que retorna todas as colunas fica desatualizada com dados bloqueados. O SQL Server pode ter perda de performance por causa de consultas SELECT * O comando SELECT * se sobrepe ao uso de ndices e pode prejudicar a performance da consulta. No recomendvel incluir SELECT * na documentao
4

Identificando elementos do comando SELECT


Result Set = Resultado da Consulta WHERE
Define as linhas a serem exibidas na consulta Expresso pode resultar em Verdadeiro, Falso ou Desconhecido;

GROUP BY
Agrupa os resultados com base nas colunas indicadas

HAVING
Filtro adicional
5

Exemplo1: SELECT *
Obtendo todas as colunas de HumanResources.Employee onde o EmployeeID menor que 10.
USE AdventureWorks; GO SELECT * FROM HumanResources.Employee WHERE EmployeeID < 10; GO
6

Exemplo2: SELECT ...


Obtendo o ProductID, Name, o ProductNumber e Color a partir de Production.Product
USE AdventureWorks; GO SELECT ProductID, Name, ProductNumber, Color FROM Production.Product; GO
7

Exemplo3: SELECT...WHERE...
Seleciona o SalesPersonID, o TerritoryID, SalesQuota e ModifiedDate de Sales.SalesPerson onde a ModifiedDate menor que 2003-01-01. 2003- 01USE AdventureWorks; GO SELECT SalesPersonID, TerritoryID, SalesQuota, ModifiedDate FROM Sales.SalesPerson WHERE ModifiedDate < '2003-01-01' '2003- 01GO
8

Usando ALIAS
ALIAS = Apelido Especificar um ALIAS permite chamar as tabelas pelo apelido ao invs de usar os nomes, nem sempre simples. Ao efetuar junes (JOIN) usamos multiplas tabelas, o que pode causar confuso.

Exemplo1: ALIAS
Selecione da tabela A o EmployeeID, o NationalIDNumber, eo Title de HumanResources.Employee como A onde o MaritalStatus igual a M (merried = casado);
USE AdventureWorks; GO SELECT A.EmployeeID, A.NationalIDNumber, A.Title FROM HumanResources.Employee AS A WHERE MaritalStatus = 'M'; GO
10

Exemplo2: ALIAS
Selecione: Na tabela P ProductID e Name e na tabela O UnitPrice e DueDate de Purchasing.PurchaseOrderDetail como O e Production.Product como P onde da tabela P o ProductID igual a o ProductID da tabela O. O.
USE AdventureWorks; GO SELECT P.ProductID, P.Name, O.UnitPrice, O.DueDate FROM Purchasing.PurchaseOrderDetail AS O, Production.Product AS P WHERE P.ProductID = O.ProductID; GO
11

Exemplo3: ALIAS
Selecione da tabela E EmployeeID, AddressID e da tabela A AddressLine1 de HumanResources.EmployeeAddress como E e Person.Address como A onde da tabela E o AddressID seja igual a o AddressID da tabela A
USE AdventureWorks; GO SELECT E.EmployeeID, E.AddressID, A.AddressLine1 FROM HumanResources.EmployeeAddress AS E, Person.Address AS A WHERE E.AddressID = A.AddressID; GO
12

Selecionando linhas especficas


O Comando WHERE permite selecionar linhas especficas: Sintaxe:
WHERE <condicao>

Normalmente no usa-se todas as linhas de uma tabela; usaCondicionar as linhas a serem usadas permite:
Poupar recursos de Entrda/Sada Melhorar o trfego na rede Reduz o tempo de processamento do SQL Server

Recomenda-se usar campos indexados para agilizar a Recomendabusca de dados.


13

Exempo1: WHERE (N = Y)
Selecione o NationalIDNumber e o Title de AdventureWorks.HumanResources.Employee onde EmployeeID = 5
SELECT NationalIDNumber, Title FROM AdventureWorks.HumanResources.Employee WHERE EmployeeID = 5; GO

14

Exemplo2: WHERE (N < Y)


Selecione o FirstName, MiddleName, LastName e EmailAddress de AdventureWorks.Person.Contact onde ContactID < 50
SELECT FirstName, MiddleName, LastName, EmailAddress FROM AdventureWorks.Person.Contact WHERE ContactID < 50; GO
15

Exemplo3: WHERE (N = Y)
Selecione ProductID, ProductNumber de AdventureWorks.Production.Product onde Name = Blade (Lmina).
SELECT ProductID, ProductNumber FROM AdventureWorks.Production.Product WHERE Name = 'Blade'; GO

16

Filtrando Dados
Operadores de comparao Comparaes com String Operadores lgicos Intervalo de valores Selecionando valores de uma lista Condies para identificar uma lista ou um intervalo de valores

Operadores de Comparao
Operador = > < >= <= <> != !< !> Descrio Igual a Maior que Menor que Maior ou igual a Menor ou igual a Diferente de Diferente de No menor No maior
Operadores de comparao so usados para comparar duas expresses. Podem ser usados em todas expresses, exceto aquelas com os tipos de dados:
Text NText Image

Os operadores !=, !< e !> no esto inclusos no padro ANSI SQL-92 SQL18

Filtro com operadores de comparao ( = )


Seleciona o ProductID e o Name a partir de Production.Product onde Class seja igual a H
USE AdventureWorks; GO SELECT ProductID, Name FROM Production.Product WHERE Class = 'H'; GO
19

Filtro com operadores de comparao ( >= )


Seleciona o Name, o ProductNumber, Color, StandardCost de Production.Product onde o StandardCost maior ou igual a 500.
USE AdventureWorks; GO SELECT Name, ProductNumber, Color, StandardCost FROM Production.Product WHERE StandardCost >= 500; GO

20

Filtro com operadores de comparao ( <> )


Seleciona o EmployeeID, o NationalIDNumber, o ContactID e o ManagerID de HumanResources.Employee onde ManagerID seja diferente de 16.
USE AdventureWorks; GO SELECT EmployeeID, NationalIDNumber, ContactID, ManagerID FROM HumanResources.Employee WHERE ManagerID <> 16; GO
21

Comparaes com String


Caracteres curinga podem ser usados para tornar a comparao mais flexvel. Sintaxe:
expressao [NOT] LIKE comparacao [caractere] caractere]

expressao
Expresso do tipo string vlida;

comparacao
Expresso do tipo string valida;

caractere
Caractere curinga colocado em qualquer posio de uma cadeia de caracteres para dar a impresso que ele faz parte da expresso. 22

Caracteres Curinga
CARACTERE CURINGA % _ (underline) [] [^] DESCRIO Substitui qualquer string com um ou mais caracteres. Substitui qualquer caractere. Substitui um caracter por um caractere CONTIDO em um intervalo de caracteres especfico. Substitui qualquer caracter por um caractere NO CONTIDO em um intervalo especifico.
23

Exemplo: LIKE Ch%


Seleciona ProductID e Name de Production.Product onde Name comea com as letras Ch
USE AdventureWorks; GO SELECT ProductID, Name FROM Production.Product WHERE Name LIKE 'Ch%'; GO
24

Exemplo: LIKE Di_k


Seleciona ContactID, FirstName, LastName de Person.Contact onde FirstName igual a Di no comeo, tem um caractere no meio e termina com k.
USE AdventureWorks; GO SELECT ContactID, FirstName, LastName, Phone FROM Person.Contact WHERE FirstName LIKE 'Di_k'; GO

25

Exemplo: LIKE 2[0-3]7 2[0Selecione EmployeeID, FirstName e JobTitle de HumanResources.vEmployee onde IDEmployee comea com 2, tem os nmeros entre 0, 1, 2 e 3, e termina com 7.
USE AdventureWorks; GO SELECT EmployeeID, FirstName, JobTitle FROM HumanResources.vEmployee WHERE EmployeeID LIKE '2[0-3]7'; '2[0GO
26

Exemplo: LIKE Da[^n]%


Selecione o ContactID, o FirstName e o Phone a partir de Person.Contact onde o FirstName comea com Da no tem n e termina com qualquer string.
USE AdventureWorks; GO SELECT ContactID, FirstName, Phone FROM Person.Contact WHERE FirstName LIKE 'Da[^n]%'; GO

27

Operadores AND, OR e NOT


Expresses booleanas retornam TRUE, FALSE ou UNKNOWN (Desconhecido). Parnteses ajudam a manipular as comparaes Sintaxe:
SELECT <colunas> FROM <tabelas> WHERE [NOT] expressao AND||OR [NOT] expressao

NOT
Retorna V se expressao = F; Retorna F se expressao = V; Retorna D se expressao = D.
28

Operadores AND, OR e NOT


OR expressao1 expressao2 V V F F D V F D D V F V F V D D F D resultado V V V F V V D D D V V F F D V F D D AND expressao1 expressao2 V F V F V D D F D resultado V F F F D D F F D
29

Exemplo: AND
Selecione ContactID, EmailAddress de AdventureWorks.Person.Contact onde FirstName igual a Alexa e LastName igual a Watson.
SELECT ContactID, EmailAddress FROM AdventureWorks.Person.Contact WHERE FirstName= 'Alexa' AND LastName='Watson'; GO
30

10

Exemplo: OR
Seleciona AddressID, AddressLine1, City de AdventureWorks.Person.Address onde City igual a Bothell ou igual a Seatle.
SELECT AddressID, AddressLine1, City FROM AdventureWorks.Person.Address WHERE City = 'Bothell' OR City = 'Seatle'; GO

31

Exemplo: NOT
Selecione CustomerID, FirstName, LastName, EmailAddress e City de AdventureWorks.Sales.vIndividualCustomer onde City no igual a Ballard.
SELECT CustomerID, FirstName, LastName, EmailAddress, City FROM AdventureWorks.Sales.vIndividualCustomer WHERE NOT City = 'Ballard'; GO
32

Consultando um intervalo de valores BETWEEN


Sintaxe: expressao_teste [NOT] BETWEEN inicio AND fim inicio: Qualquer expresso SQL Server 2005 vlida; fim: Qualquer expresso SQL Server 2005 vlida; expressao_teste: Expresso a ser testada no intervalo

definido entre a expresso de inicio e de fim. NOT: Indica quando o resultado negatvo.

do intervalo a ser consultado.

Obs: A condio NOT precede o uso de ndices e prejudica o desempenho da consulta. AND: Funciona como um elo entre o valor inicial e o final

Obs: expressao_teste, inicio e fim devem ter mesmo tipo de dado. expressao_teste,
33

11

Exemplo1: BETWEEN
Seleciona SalesPersonID, TerritoryID, SalesQuota e Bonus de AdventureWorks.Sales.SalesPerson onde o Bonus est entre 2000 e 5000 inclusive. inclusive.
SELECT SalesPersonID, TerritoryID, SalesQuota, Bonus FROM AdventureWorks.Sales.SalesPerson WHERE Bonus BETWEEN 2000 AND 5000; GO
34

Exemplo2: BETWEEN
Selecione ContactID, FirstName, LastName e EmailAddress de AdventureWorks.Person.Contact onde ContactID esteja entre 500 e 550 inclusive
SELECT ContactID, FirstName, LastName, EmailAddress FROM AdventureWorks.Person.Contact WHERE ContactID BETWEEN 500 AND 550; GO
35

Consultando uma lista de valores IN


Sintaxe:
expressao_teste [NOT] IN(subconsulta||exp1, exp2, ..., IN(subconsulta||exp1, exp2, expN) expN)

expressao_teste: Qualquer expresso SQL Server 2005 vlida. subconsulta: Consulta que gera uma lista de resultados exp1, exp2, ..., expN: Lista de expresses ou valores a exp1, exp2, serem testados. A expressao_teste, subconsulta e/ou lista de expressao_teste, expresses (exp1, ..., expN) devem ser todas do (exp1, expN) mesmo tipo de dado. 36 Obs: Recomenda-se evitar a condio NOT Recomenda-

12

Exemplo1: com OR
Seleciona ProductID, Name, ProductNumber e Color de AdventureWorks.Production.Product onde Color igual a Black, ou Color igual a Silver ou Color igual a Red.
SELECT ProductID, Name, ProductNumber, Color FROM AdventureWorks.Production.Product WHERE ((Color = 'Black') OR (Color = 'Silver') OR (Color = 'Red')); 'Silver 37 GO

Exemplo1: com IN
Seleciona ProdutoID, Name, ProductNumber e Color de AdventureWorks.Production.Product onde Color igual a Black, Silver ou Red.
SELECT ProductID, Name, ProductNumber, Color FROM AdventureWorks.Production.Product WHERE Color IN ('Black', 'Silve', 'Red'); 38 GO

Exemplo2: com OR
Selecione o AddressID, AddressLine1 e City de AdventureWorks.Person.Address onde City seja igual a Seatle ou Cidade seja igual a Bothell
SELECT AddressID, AddressLine1, City FROM AdventureWorks.Person.Address WHERE ((City = 'Seatle') OR (City = 'Bothell')); GO
39

13

Exemplo2: com IN Selecione o AddressID, o AddressLine1 e City de AdventureWorks.Person.Address onde City seja igual a Seatle ou Bothell
SELECT AddressID, AddressLine1, City FROM AdventureWorks.Person.Address WHERE City IN ('Seatle', 'Bothell'); GO

40

Exemplo3: com OR
Seleciona ContactID, FirstName e EmailAddress de AdventureWorks.Person.Contact onde ContactID seja igual a 508 ou ContactID seja igual a 4700 ou ContacID seja igual a 9228 ou ContactID seja igual a 6045 ou ContactID seja igual a 19943
SELECT ContactID, FirstName, EmailAddress FROM AdventureWorks.Person.Contact WHERE ((ContactID = 508) OR (ContactID = 4700) OR (ContactID = 9228) OR (ContactID = 6045) OR (ContactID = 19943)); GO 41

Exemplo3: com IN
Seleciona ContactID, FirstName e EmailAddress de AdventureWorks.Person.Contact onde ContactID seja igual a 508, 4700, 9228, 6045 ou 19943
SELECT ContactID, FirstName, EmailAddress FROM AdventureWorks.Person.Contact WHERE ContactID IN (508, 4700, 9228, 6045, 19943); GO
42

14