Upload
daniel-tadeu
View
119
Download
0
Embed Size (px)
Citation preview
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
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%'
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 ...
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.
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.
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
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
);
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);
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);
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
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
);
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);
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);
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
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 ???
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
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;
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
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;
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'
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;
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';
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;
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;
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;
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;
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.
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
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
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>]