Buscar

IMP BD VenturyAula 07

Prévia do material em texto

IMPLEMENTAÇÃO DE BANCO DE DADOS
Aula 7- Sql Parte 5
Conteúdo Programático desta aula
Aprender os como construir subconsulta
Conhecer os operadores de conjunto
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Modelo de Dados
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO
Um comando SELECT pode fazer uma consulta que traz dados de duas ou mais tabelas. Esse é um processo chamado de junção [join]. As tabelas têm uma coluna em comum que é usado para fazer as junções.
 Sintaxe da Junção 
Sintaxe ANSI
Sintaxe tradicional (não ANSI)
Tipos Junção:
Junção Cruzada ou Irrestrita (Produto Cartesiano)
Junção Interior
Junção Exterior
Auto-Junção
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO CRUZADA
RETORNANDO TODAS AS COLUNAS DAS DUAS TABELAS E COMBINANDO TODAS AS LINHAS
SELECT * FROM EMPREGADO CROSS JOIN DEPARTAMENTO, 
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO INTERIOR – SINTAXE TRADICIONAL
Projetando Colunas
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO INTERIOR – SINTAXE ANSI
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO EXTERIOR - ANSI
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO EXTERIOR - TRADICIONAL
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
AUTO JUNÇÃO
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
AUTO JUNÇÃO
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
AUTO JUNÇÃO
SELECT G.ID, G.ULT_NOME, G.CARGO 
FROM EMPREGADO G , EMPREGADO S 
WHERE G.ID = S.ID_GERENTE (+) AND S.ID IS NULL
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA
Subconsulta é uma consulta dentro de um outro comando SQL que pode ser:
 
CREATE TABLE
CREATE VIEW
SELECT
INSERT
DELETE 
UPDATE
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA
Regras para Construção de Subconsultas
 
A consulta interna tem que estar entre parênteses e sempre a mais interna é executada primeiro.
Admite o aninhamento de n consultas internas ou em conjunto com operadores AND e OR
Retorna uma ou várias linhas ou colunas
Usualmente é usada na cláusula WHERE dos comandos SELECT, DELETE e UPDATE
Pode ser usada na cláusula FROM do comando SELECT .
Pode referenciar colunas da consulta mais externa
Não pode conter a cláusula ORDER BY
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA
Operador
Descrição
=
Igual a
<> 
Diferente
> 
Maior que
< 
Menor que
>=
Maior ou igual
<=
Menor ou igual
Operadores de Comparação em Subconsultas Simples
Os operadores abaixo podem ser usados em condições de comparação com subconsultas simples, pois manipulam o retorno de apenas uma linha de comparação com a consulta principal.
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA
EMPREGADOS DO 
DEPARTAMENTO DE VENDAS
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA
SELECT *
FROM EMPREGADO 
WHERE ID_DEPTO = 20 
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA
ESTE COMANDO PRODUZ O RESULTADO 20 QUE É UTILIZADO NO COMANDO EXTERNO 
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA
EMPREGADOS QUE GANHAM MAIS QUE O SALARIO MEDIO DA EMPRESA 
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA
SELECT * 
FROM EMPREGADO
WHERE SALARIO > ( SELECT AVG (SALARIO) 
 FROM EMPREGADO)
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA - MULTILINHAS
EMPREGADOS QUE GANHAM SALARIO DIFERENTE DOS VENDEDORES 
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA - MULTILINHAS
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA - MULTILNHAS
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA - MULTILINHAS
Operador
Descrição
IN
Igual a qualquer elemento de
NOT IN
Diferente que qualquer elemento de
> ALL
maior que todos os elementos da lista
< ALL
menor que todos
<> ALL
diferente de todos (o mesmo que NOT IN)
= ANY
igual a algum dos elementos da lista (o mesmo que IN)
> ANY
maior que algum dos elementos da lista
< ANY
menor que algum dos elementos
<> ANY
diferente de algum dos elementos da lista (falso se igual a todos)
OPERADORES DE COMPARAÇÃO EM SUBCONSULTAS MULTI-LINHAS
Existe um conjunto de operadores que podem ser utilizados em subconsultas que retornam mais de uma linhas, este operadores são
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA - MULTILNHAS
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA - MULTILINHAS
EMPREGADOS QUE GANHAM SALARIO MAIORES QUE TODOS OS VENDEDORES 
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA - MULTILINHAS
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA - MULTILINHAS
SELECT *
FROM EMPREGADO
WHERE SALARIO > ALL ( SELECT SALARIO 
 FROM EMPREGADO 
 WHERE UPPER(CARGO) = 'VENDEDOR')
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA - MULTILINHAS
EMPREGADOS QUE GANHAM SALARIO MAIORES QUE TODOS OS VENDEDORES 
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA - MULTILINHAS
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA - MULTILINHAS
SELECT *
FROM EMPREGADO
WHERE SALARIO > ANY ( SELECT SALARIO 
 FROM EMPREGADO 
 WHERE UPPER(CARGO) = 'VENDEDOR')
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA - SELECT
SELECT ID, ULT_NOME, SALARIO , 
 (SELECT AVG(SALARIO) FROM EMPREGADO) AS "SALARIO MEDIO"
FROM EMPREGADO
WHERE SALARIO < (SELECT AVG(SALARIO) FROM EMPREGADO)
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA - SELECT
SELECT ID, ULT_NOME, SALARIO , 
 (SELECT SALARIO FROM EMPREGADO 
 WHERE UPPER(CARGO) = 'VENDEDOR') AS "SALARIO VENDEDORES"
FROM EMPREGADO
WHERE SALARIO >ALL (SELECT SALARIO FROM EMPREGADO 
 WHERE UPPER(CARGO) = 'VENDEDOR')
NO SELECT A SUBCONSULTA SOMENTE PODE RETORNAR UMA LINHA
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA - HAVING
DEPARTAMENTOS COM MEDIA SALARIAL MAIOR QUE MEDIA SALARIAL DA EMPRESA
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA - HAVING
SELECT ID_DEPTO, AVG(SALARIO) 
FROM EMPREGADO
GROUP BY ID_DEPTO
HAVING AVG(SALARIO) > ( SELECT AVG(SALARIO) FROM EMPREGADO)
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA - FROM
ID, ULT_NOME, SALARIO E ID_DEPTO DO EMPREGADO E 
MEDIA SALARIAL DE SEU DEPARTAMENTO
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA – FROM
SELECT E.ID, E.ULT_NOME, E.SALARIO, E.ID_DEPTO, RD.MEDIA
FROM EMPREGADO E INNER JOIN 
 (SELECT ID_DEPTO, AVG(SALARIO) AS MEDIA 
 FROM EMPREGADO GROUP BY ID_DEPTO) RD
 ON E.ID_DEPTO = RD.ID_DEPTO
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA - CORRELATA
EMPREGADOS QUE GANHAM MAIS QUE A MEDIA SALARIAL DE SEU DEPARTAMENTO
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA - CORRELATA
SELECT ID, ULT_NOME, SALARIO, ID_DEPTO 
FROM EMPREGADO E
WHERE SALARIO > (SELECT AVG(SALARIO) 
 FROM EMPREGADO I
 WHERE I.ID_DEPTO = E.ID_DEPTO)
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA – TESTE EXISTENCIA
DEPARTAMENTOS QUE POSSUEM VENDEDORES
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA – TESTE EXISTENCIA
SELECT * 
FROM DEPARTAMENTO E
WHERE EXISTS (SELECT * 
 FROM EMPREGADO I
 WHERE E.ID = I.ID_DEPTO AND UPPER(I.CARGO) = 'VENDEDOR')
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES DE CONJUNTO
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES DE CONJUNTO
Trabalhando comConjuntos
Muitas vezes necessitamos que nossas consultas incluam, em uma mesma coluna, dados de mais de uma tabela. Para isto utilizamos os operadores de conjuntos UNION, UNION ALL, INTERSECT e MINUS.
Regras para Utilização dos Operadores de Conjuntos
Os comandos SELECT participantes têm que ter o mesmo número de colunas,
As colunas correspondentes têm que ser do mesmo tipo de dado,
Linhas duplicadas são automaticamente descartadas, exceto com UNION ALL,
Os nomes das colunas resultantes são os da primeira consulta,
ALIAS de colunas só tem efeito se utilizados na primeira consulta,
A cláusula ORDER BY só pode ser utilizada ao final do comando,
Os operadores de conjuntos podem ser utilizados em subconsultas
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES DE CONJUNTO - UNION
Resulta na combinação de todas as linhas de duas ou mais tabelas participantes do UNION, eliminando as linhas duplicadas resultantes.
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES DE CONJUNTO - UNION
20
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES DE CONJUNTO - UNION
SELECT ID FROM EMPREGADO WHERE ID_DEPTO IN (10,20)
UNION 
SELECT ID FROM EMPREGADO WHERE UPPER(CARGO) = 'VENDEDOR'
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO EXTERIOR - TRADICIONAL
RESULTADO EQUIVALENTE AO FULL JOIN MAS O COMANDO NÃO É DE FULL JOIN
SELECT C.ID, C.NOME, E.ID, E.ULT_NOME,E.CARGO 
FROM CLIENTE C , EMPREGADO E 
WHERE C.VENDEDOR (+) = E.ID 
UNION OPERADOR DE CONJUNTO
SELECT C.ID, C.NOME, E.ID, E.ULT_NOME,E.CARGO 
FROM CLIENTE C , EMPREGADO E 
WHERE C.VENDEDOR = E.ID (+)
COMANDO EQUIVALENTE À LEFT 
COMANDO EQUIVALENTE À RIGHT 
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES DE CONJUNTO – UNION ALL
Resulta na combinação de todas as linhas de duas ou mais tabelas participantes do UNION, mantendo todas as linhas duplicadas.
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES DE CONJUNTO – UNION ALL
SELECT ID FROM EMPREGADO WHERE ID_DEPTO IN (10,20)
UNION ALL
SELECT ID FROM EMPREGADO WHERE UPPER(CARGO) = 'VENDEDOR'
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES DE CONJUNTO – INTERSECT
Resulta na interseção entre todas as linhas de duas ou mais tabelas participantes do INTERSECT, ou seja, apenas as linhas comuns entre ela
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES DE CONJUNTO - INTERSECT
20 E
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES DE CONJUNTO – INTERSECT
SELECT ID FROM EMPREGADO WHERE ID_DEPTO IN (10,20)
INTERSECT 
SELECT ID FROM EMPREGADO WHERE UPPER(CARGO) = 'VENDEDOR'
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES DE CONJUNTO - MINUS
Resulta nas linhas existentes na primeira tabela, mas que não existem na segunda
. 
As linhas comuns também não são resultantes. 
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES DE CONJUNTO - MINUS
20 E QUE NÃO SÃO VENDEDORES
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES DE CONJUNTO – MINUS
SELECT ID FROM EMPREGADO WHERE ID_DEPTO IN (10,20)
MINUS 
SELECT ID FROM EMPREGADO WHERE UPPER(CARGO) = 'VENDEDOR'
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES DE CONJUNTO – ORDENAÇÃO
SELECT ID FROM EMPREGADO WHERE ID_DEPTO IN (10,20)
UNION ALL
SELECT ID FROM EMPREGADO WHERE UPPER(CARGO) = VENDEDOR'
ORDER BY ID DESC
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Próxima Aula
Aprender a criar Visões, Indices e Sequences
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS

Outros materiais