Comandos SQL pt2

30
 Comandos SQL SELECT  Parte 2 Operador LIKE Subconsultas Funções Agregadas

Transcript of Comandos SQL pt2

Page 1: Comandos SQL pt2

5/16/2018 Comandos SQL pt2 - slidepdf.com

http://slidepdf.com/reader/full/comandos-sql-pt2 1/30

 

Comandos SQL

SELECT–

Parte 2 

Operador LIKESubconsultasFunções Agregadas

Page 2: Comandos SQL pt2

5/16/2018 Comandos SQL pt2 - slidepdf.com

http://slidepdf.com/reader/full/comandos-sql-pt2 2/30

 

Comparação de substrings

O operador LIKE permite a comparaçãocom partes de uma string

Recuperar os empregados que moram noendereço iniciado pelo número 9.

SELECT *

FROM Empregado

WHERE ender LIKE '9%'

Page 3: Comandos SQL pt2

5/16/2018 Comandos SQL pt2 - slidepdf.com

http://slidepdf.com/reader/full/comandos-sql-pt2 3/30

 

Operador LIKE

Cujo quinto caracter seja ‘F’ 

SELECT *

FROM Empregado

WHERE ender LIKE '____F%‘ 

SELECT *

FROM Empregado

WHERE ender LIKE '%Houston%'

731 Fondren,Houston,TX 638 Voss,Houston,TX 450 Stone, Houston,TX ...

Page 4: Comandos SQL pt2

5/16/2018 Comandos SQL pt2 - slidepdf.com

http://slidepdf.com/reader/full/comandos-sql-pt2 4/30

 

Consultas aninhadas

Algumas consultas requerem a existência devalores do BD que devem ser recuperados paradepois serem usados na condição de

comparação.

Estas consultas são escritas através de

consultas aninhadas, ou seja, uma consultacompleta é especificada na cláusula WHEREde uma consulta mais externa.

Page 5: Comandos SQL pt2

5/16/2018 Comandos SQL pt2 - slidepdf.com

http://slidepdf.com/reader/full/comandos-sql-pt2 5/30

 

Subconsultas

IN, EXISTS, ALL, ANY

Subconsultas correlacionadas

Subconsultas em cláusulas FROM Uma subconsulta pode aparecer na cláusula FROM, agindo tal

qual sua saída tivesse sido criada como uma tabela temporáriapela duração do comando SELECT. Observe que a subconsultadeve estar entre parênteses, e que um aliás deve ser fornecidopara esta subconsulta.

Page 6: Comandos SQL pt2

5/16/2018 Comandos SQL pt2 - slidepdf.com

http://slidepdf.com/reader/full/comandos-sql-pt2 6/30

 

O operador IN

Compara um valor v a um conjunto de valores Ve calcula verdadeiro se v é um dos elementosde V. Caso contrário, calcula falso.

Deve comparar elementos compatíveis

Page 7: Comandos SQL pt2

5/16/2018 Comandos SQL pt2 - slidepdf.com

http://slidepdf.com/reader/full/comandos-sql-pt2 7/30

Relacione o nome do cliente que fez a

milésima locação (idloc=1000).

SELECT nomecli

FROM Cliente

WHERE idcli in (

SELECT idcli

FROM Locacao

WHERE idct =1000

);

 

Page 8: Comandos SQL pt2

5/16/2018 Comandos SQL pt2 - slidepdf.com

http://slidepdf.com/reader/full/comandos-sql-pt2 8/30

Nomes dos empregados que

não têm dependentes

 nominic, nomefim (Empreg) - nominic, nomefim (Empreg numat=numemp Depen)

SELECT nominic, nomefim 

FROM Empregado

 WHERE numat not IN (

SELECT numemp

FROM Dependente); 

 

Page 9: Comandos SQL pt2

5/16/2018 Comandos SQL pt2 - slidepdf.com

http://slidepdf.com/reader/full/comandos-sql-pt2 9/30

Conjuntos explícitos

SELECT DISTINCT numemp

FROM TrabalhaEm 

 WHERE nproj IN (1,2,3);

 

Page 10: Comandos SQL pt2

5/16/2018 Comandos SQL pt2 - slidepdf.com

http://slidepdf.com/reader/full/comandos-sql-pt2 10/30

EXISTS

Usada para saber se o resultado da consultaaninhada correlata é vazia

Se EXISTS retornar verdadeiro - não vazia

Se EXISTS retornar falso - vazia

 

Page 11: Comandos SQL pt2

5/16/2018 Comandos SQL pt2 - slidepdf.com

http://slidepdf.com/reader/full/comandos-sql-pt2 11/30

Subconsultas - EXISTS

EXISTS R se R não é vazio

Relacione os nomes dos clientes que estão em atraso na devoluçãodas fitas que locaram.

SELECT nomecli

FROM Cliente

WHERE EXISTS (

SELECT *

FROM Locacao

WHERE idcli=Cliente.idcli (correlação entre as tabelas) 

AND dtdevolprev < SYS_DATE()

AND dtdevolreal IS NULL

);

 

Page 12: Comandos SQL pt2

5/16/2018 Comandos SQL pt2 - slidepdf.com

http://slidepdf.com/reader/full/comandos-sql-pt2 12/30

Nomes dos empregados que têm

pelo menos um dependente

 nominic, nomefim (Empreg numat=numemp Depen)

SELECT nominic, nomefim 

FROM Empregado e

 WHERE EXISTS (

SELECT *

FROM Dependente d 

 WHERE e.numat=d.numemp);

 

Page 13: Comandos SQL pt2

5/16/2018 Comandos SQL pt2 - slidepdf.com

http://slidepdf.com/reader/full/comandos-sql-pt2 13/30

Nomes dos empregados que

não têm dependentes

 nominic, nomefim (Empreg) - nominic, nomefim (Empreg numat=numemp Depen)

SELECT nominic, nomefim 

FROM Empregado e

 WHERE NOT EXISTS (

SELECT *

FROM Dependente d 

 WHERE e.numat= d.numemp); 

 

Page 14: Comandos SQL pt2

5/16/2018 Comandos SQL pt2 - slidepdf.com

http://slidepdf.com/reader/full/comandos-sql-pt2 14/30

Subconsultas  – ALL

 s > ALL R se s é maior do que todos os elementos em R

Encontrar nomes dos clientes com data de admissão máxima SELECT nomecli

FROM ClienteWHERE dtadm >= ALL (

SELECT dtadm (correspondência nos elementos)

FROM Cliente);

s<>ALL R equivale a s NOT IN R

 

Page 15: Comandos SQL pt2

5/16/2018 Comandos SQL pt2 - slidepdf.com

http://slidepdf.com/reader/full/comandos-sql-pt2 15/30

Nome dos empregados cujo salárioé maior do que o salário de todos

os empregados do departamento 5SELECT nominic, nomint, nomefim

FROM Empregado

WHERE salario > ALL (SELECT salario

FROM Empregado

WHERE ndepto = 5); E o maior salário da empresa ???

 

Page 16: Comandos SQL pt2

5/16/2018 Comandos SQL pt2 - slidepdf.com

http://slidepdf.com/reader/full/comandos-sql-pt2 16/30

Subconsultas  – ANY

s > ANY R se s é maior que algum correspondente em R

Encontrar nomes dos empregados cuja data de nascimento é

posterior a algum empregado do departamento 5SELECT nominic, nomint, nomefimFROM EmpregadoWHERE dtnasc > ANY (

SELECT dtnascFROM Empregado

WHERE ndepto = 5); s=ANY R equivale a s IN R

 

Page 17: Comandos SQL pt2

5/16/2018 Comandos SQL pt2 - slidepdf.com

http://slidepdf.com/reader/full/comandos-sql-pt2 17/30

Operador de comparação

Between

SELECT nominic,salario,ndepto

FROM EmpregadoWHERE (

SALARIO BETWEEN 30000 AND

40000) and ndepto = 5;

 

Page 18: Comandos SQL pt2

5/16/2018 Comandos SQL pt2 - slidepdf.com

http://slidepdf.com/reader/full/comandos-sql-pt2 18/30

Funções Agregadas

SQL possui as seguintes funções agregadas: SUM, COUNT,

MIN,MAX e AVG

COUNT

Conta o número de tuplas resultante da consulta. SUM, MIN, MAX e AVG

aplicadas sobre um conjunto de valores

 

Page 19: Comandos SQL pt2

5/16/2018 Comandos SQL pt2 - slidepdf.com

http://slidepdf.com/reader/full/comandos-sql-pt2 19/30

Considerando todos os

empregados, selecionar a soma de

todos os salários, o maior e menor

salários e a média dos salários

SELECT SUM(salario),

MAX(salario),

MIN(salario),

AVG(salario)

FROM Empregado;

 

Page 20: Comandos SQL pt2

5/16/2018 Comandos SQL pt2 - slidepdf.com

http://slidepdf.com/reader/full/comandos-sql-pt2 20/30

Média dos salários dos

empregados do Departamentode PesquisaSELECT AVG(e.salario)

FROM Empregado e, Departamento dWHERE e.ndepto = d.numdep and

d.nomedep = 'pesquisa'

 

Page 21: Comandos SQL pt2

5/16/2018 Comandos SQL pt2 - slidepdf.com

http://slidepdf.com/reader/full/comandos-sql-pt2 21/30

Número de empregados da

empresa

SELECT COUNT(*)FROM Empregado;

 

Page 22: Comandos SQL pt2

5/16/2018 Comandos SQL pt2 - slidepdf.com

http://slidepdf.com/reader/full/comandos-sql-pt2 22/30

Número de empregados do

Departamento de Pesquisa

SELECT COUNT(*)FROM Empregado, Departamento

WHERE numdep = ndepto and

nomedep = 'pesquisa';

 

Page 23: Comandos SQL pt2

5/16/2018 Comandos SQL pt2 - slidepdf.com

http://slidepdf.com/reader/full/comandos-sql-pt2 23/30

Número de diferentes salários

da empresa

SELECT COUNT(DISTINCT salario)

FROM Empregado;

 

Page 24: Comandos SQL pt2

5/16/2018 Comandos SQL pt2 - slidepdf.com

http://slidepdf.com/reader/full/comandos-sql-pt2 24/30

Agrupamento

Em alguns casos necessitamos aplicar a funçãoagregada em subgrupos de linhas.

Condensa em uma única linha todas as linhasselecionadas que compartilham os mesmosvalores para as colunas agrupadas.

Consulta: Selecionar a média salarial e o númerode empregados para cada departamento

SELECT ndepto, COUNT(*),AVG(salario)

FROM EmpregadoGROUP BY ndepto;

 

Page 25: Comandos SQL pt2

5/16/2018 Comandos SQL pt2 - slidepdf.com

http://slidepdf.com/reader/full/comandos-sql-pt2 25/30

Para cada projeto o seu número, oseu nome e a quantidade de

empregados que trabalham noprojeto

SELECT numproj, nomeproj, COUNT(*)

FROM TrabalhaEm, Projeto

WHERE nproj = numproj

GROUP BY numproj, nomeproj;

 

Page 26: Comandos SQL pt2

5/16/2018 Comandos SQL pt2 - slidepdf.com

http://slidepdf.com/reader/full/comandos-sql-pt2 26/30

Empregados que possuem mais

de 2 dependentes

SELECT *

FROM Empregado eWHERE (SELECT COUNT(*)

FROM Dependente d

WHERE e.numat = d.numemp)> 2;

 

Page 27: Comandos SQL pt2

5/16/2018 Comandos SQL pt2 - slidepdf.com

http://slidepdf.com/reader/full/comandos-sql-pt2 27/30

Para cada projeto com mais de 2

empregados, buscar o número do

projeto, o nome do projeto e o

número de empregados que

trabalham nele SELECT numproj, nomeproj,COUNT(*)

FROM Projeto, TrabalhaEm WHERE numproj = nproj GROUP BY numproj, nomeproj HAVING COUNT(*) > 2;

WHERE filtra individualmente as linhas antes da aplicação do GROUPBY .

HAVING filtra os grupos de linhas criados pelo GROUP BY. 

Page 28: Comandos SQL pt2

5/16/2018 Comandos SQL pt2 - slidepdf.com

http://slidepdf.com/reader/full/comandos-sql-pt2 28/30

Nome dos empregados em

ordem alfabética SELECT nominic, nomint, nomefim

FROM Empregado

ORDER BY nominic, nomint, nomefim

Ou

ORDER BY 1, 2, 3 

 

Page 29: Comandos SQL pt2

5/16/2018 Comandos SQL pt2 - slidepdf.com

http://slidepdf.com/reader/full/comandos-sql-pt2 29/30

Número do projeto em ordem

decrescente e o número decada empregado que trabalhano projeto em ordem crescente

SELECT nproj, numemp

FROM TrabalhaEm

ORDER BY nproj DESC, numemp ASC

 

Page 30: Comandos SQL pt2

5/16/2018 Comandos SQL pt2 - slidepdf.com

http://slidepdf.com/reader/full/comandos-sql-pt2 30/30

Sintaxe do comando SELECT

SELECT <lista de campos>

FROM <lista de tabelas>

[WHERE <condição>] [GROUP BY <campos que definem o grupo>

[HAVING <condição sobre a função degrupo>] ]

[ORDER BY <campos do resultado daconsulta>]