Buscar

Aulas 01a10

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

IMPLEMENTAÇÃO DE BANCO DE DADOS
Aula 01 - Modelo Relacional
Sidney Venturi
sidney.filho@estacio.br
Conhecer as principais características de um Sistema de Banco de Dados;
Definir modelo de dados;
Conceituar Relação;
Identificar os componentes do modelo relacional;
Conceituar integridade referencial;
Dados X Informação 
Dados
Informação
fatos em sua forma primária
Conhecimento produzido
2
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Importância dos Banco de Dados
3
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
O que é um banco de dados?
4
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
O que é um banco de dados?
conjunto de dados que se relacionam. 
Propriedades:
coleção lógica e coerente de dados com um significado inerente; 
projetado, construído e populado com dados para um propósito específico; 
possui um conjunto pré-definido de usuários e aplicações;
representa algum aspecto do mundo real - “minimundo” e qualquer alteração efetuada neste minimundo é automaticamente refletida no banco de dados.
5
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
EVOLUÇÃO DOS SISTEMAS
Sistemas Tradicionais
Sistemas de Banco de Dados
Baseados em Arquivos
Baseados em SGBD
6
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Sistemas Tradicionais
7
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Sistemas de Banco de Dados
8
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Benefícios de uso de um SBD
Implementação do Conceito de transação
Controle de Concorrência 
Mecanismo de acesso aos dados
Mecanismo de recuperação (Tolerância a falhas)
Maior Segurança
9
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Evolução dos Bancos de Dados
Bancos de Dados Centralizados
10
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Evolução dos Bancos de Dados
Bancos de Dados Cliente – Servidor 
(com servidor de Banco de Dados)
11
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Evolução dos Bancos de Dados
12
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Evolução dos Bancos de Dados
13
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Evolução dos Bancos de Dados
14
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Estrutura Geral de um Sistema de Banco de Dados
Meta dados
SQL 
Conjunto de valores armazenados pelo Banco de Dados em seus arquivos
Informações referentes ao tipo e organização dos dados do banco
Módulo do SGBD responsável pelo controle do acesso físico aos dados.
Módulo do SGBD responsável por determinar a forma de executar a consulta solicitada pelo usuário, via aplicação. Realiza a interpretação do comando (análise sintática, léxica e semântica) e elabora o plano de execução do comando, estabelecendo a forma de acessar fisicamente os dados.
Linguagem
Estruturada 
de Consultas
15
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Esquema
Esquema é um termo utilizado na área de Banco de Dados com a mesma conotação de modelo (como produto final da atividade de modelagem).
O Esquema de um Banco de Dados é a especificação da estrutura do Banco de Dados.
De um modo geral se utiliza o termo esquema apenas para os modelos referentes ao aspecto estrutural do mundo real.
 
PESSOA
 
CPF
NOME
COD_DEP
 
DEPART
 
COD_DEP
NOME
LOCAL
16
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Instância
É o conjunto de ocorrências dos objetos de dados de um esquema em um dado momento do tempo (Estado do BD num momento do tempo).
 
PESSOA
 
CPF
NOME
COD_DEP
123
A
D-10
456
B
D-10
789
C
D-20
 
DEPART
 
COD_DEP
NOME
LOCAL
D-10
DEPART-10
L1
D-20
DEPART-20
L2
D-30
DEPART-30
L3
ESQUEMA
INSTÂNCIA
17
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Arquitetura 3 Esquemas
DBA
Desenvolvedor
18
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Projeto de Banco de Dados
É o processo de:
 · determinar a organização de um banco de dados, incluindo sua estrutura, conteúdo e aplicações;  
· desenvolver a estrutura de um banco de dados;
 · projetar a estrutura lógica e física de um ou mais bancos de dados com a finalidade de acomodar as informações necessárias aos usuários de uma organização, para um definido conjunto de aplicações.
19
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Projeto de Banco de Dados
Fase 1 – Projeto Conceitual de Banco de Dados: 
 Elaboração de um modelo abstrato do mini mundo – totalmente independente de qualquer tecnologia da informação. 
20
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Projeto de Banco de Dados
Fase 2 – Projeto Lógico de Banco de Dados 
	Elaboração de um modelo implementável durante a qual endereçamos uma classe de tecnologia da informação (Ex: Bancos de Dados Relacionais). 
ELABORAÇÃO DE 
UM MODELO 
IMPLEMENTÁVEL A 
PARTIR DO MODELO 
ABSTRATO 
MODELO
ABSTRATO
TECNOLOGIA
DA INFORMAÇÃO
MODELO
IMPLEMENTÁVEL
CLASSE
21
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Projeto de Banco de Dados
Fase 3 – Projeto Físico de Banco de Dados
Elaboração de um modelo processável, durante a qual endereçamos uma tecnologia da informação específica (Ex: Bancos de Dados Relacional ORACLE versão 11g).
ELABORAÇÃO DE 
UM MODELO 
PROCESSÁVEL A 
PARTIR DO MODELO 
IMPLEMENTÁVEL 
TECNOLOGIA
DA INFORMAÇÃO
MODELO
PROCESSÁVEL
EFETIVA
MODELO
IMPLEMENTÁVEL
22
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Ferramentas de Projeto
23
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Modelo Relacional
Foi proposto por Edgar Codd em 1970
Modelo Dominante nos SGBD Comerciais
Possui uma extensão denominada Objeto Relacional
24
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Componente do Modelo Relacional
Relação = Tabela
25
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Componente do Modelo Relacional
Atributo = Coluna
26
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Componente do Modelo Relacional
Valores dos Atributos = Domínio
Domínio: Conjunto de valores válidos.
Tipo: domínio mais amplo (Data, Alfanumérico, Números...)
27
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Componente do Modelo Relacional
Conjunto de Atributo = Esquema
28
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Componente do Modelo Relacional
Tupla = Linha
3 atributos, 4 Tuplas
29
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Componente do Modelo Relacional
Conjunto de Tuplas = Instância
30
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Componente do Modelo Relacional
Campo = Encontro de Linha e Coluna
Operações => Valor do Campo Nome na segunda Tupla
31
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Componente do Modelo Relacional
Conteúdo do Campo = Valor
32
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Componente do Modelo Relacional
Campos sem Conteúdo = Nulo
33
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Componente do Modelo Relacional
Chave Primaria 
34
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Componente do Modelo Relacional
Chave Primaria = Atributo Único 
Integridade de Chave Primária
35
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Componente do Modelo Relacional
Chave Primaria = Atributo Único 
Não há Integridade de Chave Primária
36
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Componente do Modelo Relacional
Chave Primaria = Atributo Obrigatório
Integridade de Entidade
37
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Componente do Modelo Relacional
Chave Primaria = Atributo Obrigatório
Não há Integridade de Entidade
38
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Componente do Modelo Relacional
Chave Primaria Simples
39
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Componente do Modelo Relacional
Chave Primaria Composta
40
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Componente do Modelo Relacional
Chave Candidata
41
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Componente do Modelo Relacional
Chave Estrangeira
42
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Componente do Modelo Relacional
Chave Estrangeira -> Integridade Referencial
Chave Estrangeira
43
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
IMPLEMENTAÇÃO DE BANCO DE DADOS
Aula 02 - Álgebra Relacional
Conceituar Álgebra Relacional
Conhecer as Operações da Álgebra Relacional
Utilizar Operadores de Conjunto
Escrever expressões utilizando operadores de tabelas
Analisar expressões de Álgebra relacional
Conceitos Envolvidos
a) Relação: representada por uma tabela de duas dimensões (linhas e colunas);
b) Tupla: corresponde a uma linha da relação;
c) Atributo: corresponde às colunas da relação;
d) Chave primária: conjunto de atributos que identificam univocamente cada tupla da relação;
e) Chave estrangeira: atributo de uma relação que é chave primária de outra relação.
45
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Conceitos Envolvidos
46
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Manipulação de Dados
Duas categorias de linguagens
	– formais
		• álgebra relacional e cálculo relacional
	– comerciais (baseadas nas linguagens formais)
		• SQL
Linguagens formais - Características
	– orientadas a conjuntos
	– fechamento
		• resultados de consultas são relações
47
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Álgebra Relacional
Conjunto de operações sobre modelos relacionais de dados. 
As principais operações da álgebra relacional são:
Seleção
Projeção
Produto Cartesiano
Junção
Operações de Conjunto : (União, Interseção, Diferença)
Divisão 
48
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Seleção
A operação Seleção é utilizada para selecionar um subconjunto de tuplas de uma relação, sendo que estas tuplas devem satisfazer uma condição de seleção. 
49
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Seleção
A forma geral de uma operação Seleção é:
 <condição de seleção> ( <nome da relação> )
Onde: 
A letra grega  é utilizada para representar a operação de seleção; 
<condição de seleção> é uma expressão booleana aplicada sobre os atributos da relação ; 
<nome da relação> é o nome da relação sobre a qual será aplicada a operação Seleção.
50
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Seleção
Dada a relação dos empregados da empresa selecionar aqueles que trabalham no departamento 10:
51
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Seleção
A expressão que atende ao pedido é:
	 id_Depto = 10 (Empregado)
52
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Seleção
Dada a relação dos empregados da empresa selecionar aqueles que trabalham no departamento 10 e que ganhem salario > 1500.
:
53
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Seleção
A expressão que atende ao pedido é:
	 id_Depto = 10 E Salario > 1500 (Empregado)
54
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Projeção
A operação Projeção seleciona um conjunto determinado de colunas de uma relação. 
55
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Projeção
A forma geral de uma operação Projeção é:
 <lista de atributos> (<nome da relação>)
 Onde:
A letra grega  é utilizada para representar a operação de seleção
<lista de atributos> representa a lista de atributos que o usuário deseja selecionar e 
<nome da relação> representa a relação sobre a qual a operação projeção será aplicada.
56
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Projeção
Dada a relação de empregados da empresa, projetar as colunas ID, NOME E SALARIO:
57
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Projeção
A expressão que atende ao pedido é:
 Id, Nome, Salario (Empregado)
58
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Sequencialidade de Operações 
A Projeção e a Seleção podem ser combinadas, de forma que apenas algumas linhas e algumas colunas retornem na operação. 
59
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Sequencialidade de Operações 
A forma geral da operação Projeção :
<lista de atributos> (<condição de seleção> (<nome da relação>))
 Onde
  representa a operação de projeção
 <lista de atributos> representa a lista de atributos que o usuário deseja selecionar
  representa a operação de seleção
 <condição de seleção> é a condição que a linha deve atender para ser selecionada e 
  <nome da relação> é o nome da relação sobre a qual será aplicada a operação de Seleção e Projeção
60
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Sequencialidade de Operações 
Dada a relação de empregados da empresa, projetar as colunas ID, NOME E SALARIO PARA OS EMPREGADOS DO DEPARTAMENTO 10:
61
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Sequencialidade de Operações 
A expressão que atende ao pedido é:
 Id,Nome, Salario ( Id_Depto = 10 (Empregado))
Realizada em Dois Passos
62
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Sequencialidade de Operações 
A expressão que atende ao pedido é:
 Id,Nome, Salario ( Id_Depto = 10 (Empregado))
Passos 1 - Seleção
63
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Sequencialidade de Operações 
A expressão que atende ao pedido é:
 Id,Nome, Salario ( Id_Depto = 10 (Empregado))
Passos 2 - Projeção
64
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Sequencialidade de Operações 
Sempre na ordem Seleção -> Projeção?
 Id_Depto = 10 ( Id,Nome, Salario (Empregado))
65
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Sequencialidade de Operações 
 Id_Depto = 10 ( Id,Nome, Salario (Empregado))
 Projeção não tem todas as colunas utilizadas na seleção
66
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Produto Cartesiano
O produto cartesiano é uma operação binária que combina todas as tuplas de duas tabelas. 
 
67
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Produto Cartesiano
A forma geral do Produto Cartesiano é:
A X B
 Onde:
X representa a operação de produto cartesiano
A e B representam as relações sobre as quais a operação será aplicada.
68
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Produto Cartesiano - Exemplo
Departamento X Região
A operação irá justapor as colunas e combinar todas as linhas.
69
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Produto 
Cartesiano
70
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Junção
Atua de forma similar à operação produto cartesiano, porém, a tabela resultante conterá apenas as combinações das tuplas que se relacionam de acordo com uma determinada condição de junção. 
71
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Junção
A forma geral de uma operação Seleção é:
R ⋈ <condição de junção> S
Onde: 
⋈ representa a operação de junção; 
<condição de junção> é uma expressão relacional, normalmente utilizando o operador =, que determina qual coluna da tabela R deve ser comparada com qual coluna da tabela S ( normalmente PK e FK); 
R e S representam as relações sobre as quais a operação será aplicada.
72
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Junção - Exemplo
Departamento ⋈ Id_Regiao = Id Região
73
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Junção - Exemplo
Departamento ⋈ Id_Regiao = Id Região
A operação irá justapor as colunas e combinar as linhas que se relacionam.
74
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Junção 
Exemplo
75
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Operações de Conjunto
Operações
União
Interseção
Diferença
Redundância de Tuplas
Compatibilidade quanto a união
76
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Redundância de Tupla
77
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Compatibilidade quanto a União
É preciso que os tipos das colunas coincidam.
78
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
União
O resultado desta operação entre duas relações consiste no conjunto de todas as linhas das duas relações . 
 
79
 LINGUAGEM
SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
União
A forma geral da União é:
A U B
 Onde:
U representa a operação de União
A e B representam as relações sobre as quais a operação será aplicada.
A operação de União é Comutativa -> A U B = B U A
80
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
União - Exemplo
Empregado U Acionista
81
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
União - Exemplo
Empregado U Acionista
82
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Interseção
O resultado desta operação entre duas relações consiste no conjunto de todas as linhas que existem em comum nas duas relações . 
 
83
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Interseção 
A forma geral da Interseção é:
A ∩ B
 Onde:
∩ representa a operação de Interseção
A e B representam as relações sobre as quais a operação será aplicada.
A operação de Interseção é Comutativa -> A ∩ B = B ∩ A
84
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Interseção - Exemplo
Empregado ∩ Acionista
85
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Interseção - Exemplo
Empregado ∩ Acionista
86
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Diferença
O resultado desta operação entre duas relações consiste no conjunto de todas as linhas que existem em uma tabela e não existem na outra 
 
 
87
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Diferença 
A forma geral da Diferença é:
A - B
 Onde:
- representa a operação de Interseção
A e B representam as relações sobre as quais a operação será aplicada.
A Diferença não é Comutativa -> A - B <> B - A
88
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Diferença - Exemplo
Empregado – Acionista ou Acionista – Empregado
89
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Diferença - Exemplo
–
Empregado – Acionista ou Acionista – Empregado
90
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Operações de Conjunto em consultas - 1
–
T1 =  Id,Nome ( Id_Depto = 10 (Empregado))
91
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Operações de Conjunto em consultas - 1
–
T1 =  Id,Nome ( Id_Depto = 10 (Empregado))
92
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Operações de Conjunto em consultas - 2
–
T2 =  Id,Nome ( Salario >= 1500 (Empregado))
93
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Operações de Conjunto em consultas - 2
–
T2 =  Id,Nome ( Salario >= 1500 (Empregado))
94
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Operações de Conjunto em consultas - 3
–
T1 U T2 
95
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Divisão
É uma operação adicional que produz como resultado a projeção de todos os elementos da primeira relação que se relacionam com todos os elementos da segunda relação. 
É utilizada para consultas do tipo todos os eleitores que participaram de todas as votações, os sócios que pagaram todas as mensalidades e outras do mesmo tipo. 
 
96
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Divisão 
A forma geral da Diferença é:
A / B
 Onde:
/ representa a operação de Interseção
A e B representam as relações sobre as quais a operação será aplicada.
97
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Divisão - Exemplo
ID dos Funcionários que Trabalham em todos os Projetos
98
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Divisão - Exemplo
ID dos Funcionários que Trabalham em todos os Projetos
99
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Divisão – Exemplo – Passo 1
–
T1 =  Id_Proj (Projeto)
100
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Divisão – Exemplo – Passo 2
–
Funcionario_Projeto / T1
101
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
IMPLEMENTAÇÃO DE BANCO DE DADOS
Aula 03 - SQL Parte 1
 
Conhecer a Linguagem SQL
Instalar e Configurar um SGBD.
Criar Tabelas.
Manipular Dados
Todos o exemplos mostrados em nossas aulas serão feitos no Oracle 10G Express
Recomendo que instalem o Oracle na Máquina de vocês e acompanhem a aula
Link para download do Oracle:
Download Oracle
http://www.oracle.com/technetwork/database/express-edition/database10gxe-459378.html
103
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Download Oracle
104
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Download Oracle
105
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Download Oracle
106
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Instalação Oracle
107
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Instalação Oracle
108
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Instalação Oracle
109
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Instalação Oracle
110
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Instalação Oracle
111
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Instalação Oracle
112
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Instalação Oracle
113
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Instalação Oracle
114
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Instalação Oracle
115
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Instalação Oracle
116
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Testando o Oracle
117
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Testando o Oracle
118
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Testando o Oracle
119
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Criando Usuário – Via Comando
120
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Criando Usuário – Via Comando
121
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Criando Usuário – Via Comando
122
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Criando Usuário – Via Comando
Digite o comando: GRANT CONNECT, RESOURCE TO AULABD
DEPOIS CLIQUE EM EXECUTAR
MENSAGEM DE CONFIRMAÇÃO
123
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Criando Usuário – Via Interface
124
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Criando Usuário – Via Interface
125
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Criando Usuário – Via Interface
126
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Criando Usuário – Via Interface
127
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Criando Usuário – Via Interface
128
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Desconectando de System
129
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Testando o Oracle
FAÇA UM NOVO LOGIN COM O USUARIO CRIADO
NOME USUÁRIO: AULABD
SENHA : SENHA
130
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Testando o Oracle
131
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Testando o Oracle
132
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Linguagem SQL
 SQL quer dizer Structured Query Language e é o padrão mundial de acesso às bases de dados relacionais.
A Linguagem SQL é dividida nas seguintes partes:
DDL - Create, Alter, Drop, Rename, Truncate: Permitem a criação e definição de objetos como tabelas, views e outros objetos no BD.
DRL -Select: É o comando mais comum do SQL. Utilizado amplamente para recuperação dos dados de uma base. (mexe no Esquema)
DML - Insert, Delete, Update: Comandos de manipulação dos dados. Usados nas aplicações que mantém a base de informações com inserções, atualizações e deleções de dados. (mexe na Instância)
DCL - Grant, Revoke: São utilizados para atribuir ou remover direitos de acesso (controle) a objetos do banco de dados e suas estruturas.
133
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
DDL – CRIAÇÃO DE TABELAS
Elementos que Compõem uma Tabela
A tabela é a forma básica de armazenamento de informações em um sistema gerenciador de banco de dados relacional e por isso deve conter um conjunto de elementos, alguns opcionais, na sua composição e que são:
Nome
Colunas
Tipos de Dados
Restrições (Constraints)
134
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO
DE DADOS
TIPOS DE DADOS
Cada coluna de uma tabela, tem que ter um tipo de dado definido e único, obedecendo a lista de tipos definidos pelo RDBMS. No Oracle existe uma diversidade bastante grande de tipos e alguns são descritos na tabela abaixo:
DDL – CRIAÇÃO DE TABELAS
135
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
A estrutura básica do comando é de criação de tabela é:
CREATE TABLE nome_da_tabela
 (nome_col1 tipo_col1 [restri_col1] [,
 nome_col2 tipo_col2 [ restri_col2 ] [,
 nome_col3 tipo_col3 [restri_col3] 
 ]]... [, restri_tab1 [,restri_tab2] );
DDL – CRIAÇÃO DE TABELAS
136
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
DDL – CRIAÇÃO DE TABELAS
137
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Exemplos:
CREATE TABLE DEPARTAMENTO
( ID NUMBER(7) PRIMARY KEY,
NOME VARCHAR2(40) NOT NULL)
CREATE TABLE EMPREGADO
( ID NUMBER(7) PRIMARY KEY,
 ULT_NOME VARCHAR2(20) NOT NULL,
PRIM_NOME VARCHAR2(20) NOT NULL,
CARGO VARCHAR2(30),
SALARIO NUMBER(7,2),
DT_ADMISSAO DATE,
CPF CHAR(11) UNIQUE,
ID_DEPTO NUMBER(7) REFERENCES DEPARTAMENTO(ID),
ID_GERENTE NUMBER(7) REFERENCES EMPREGADO(ID))
DDL – CRIAÇÃO DE TABELAS
FK
FK da própria tabela: AUTORRELACIONAMENTO
138
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
DDL – CRIAÇÃO DE TABELAS
139
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
DDL – CRIAÇÃO DE TABELAS
140
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
DML
Comando Insert
O comando INSERT insere linhas em uma tabela. A forma mais simples do comando INSERT insere somente uma linha , dados os valores conforme a sintaxe abaixo:
insert into 	<nome_tabela> (coluna1, coluna2, ..., colunan)
	values (valor1, valor2, ..., valorn);
141
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
INSERT SEM REFERENCIAR COLUNAS
INSERT INTO DEPARTAMENTO VALUES ( 10, ‘Financeiro’)
142
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
INSERT REFERECIANDO COLUNAS
INSERT INTO DEPARTAMENTO (ID,NOME) 
 VALUES ( 20, ‘Vendas’)
143
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Conferindo Inserção
SELECT * FROM DEPARTAMENTO
144
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Comando Update
Para alterarmos dados já existentes em nossas tabelas utilizaremos o comando UPDATE.
Veja a sintaxe do comando abaixo:
UPDATE [schema. ] nome_tabela 
SET coluna1 = expressão I subquery [, colunan = ... ]
WHERE condição
DML
145
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SELECT * FROM DEPARTAMENTO
UPDATE
SOMAR 100 AO ID DOS DEPARTAMENTOS
146
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
UPDATE DEPARTAMENTO
SET ID = ID + 100
Clique executar
UPDATE
147
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
CONFERINDO UPDATE
ALTEROU OS ID DOS DEPARTAMENTOS
SELECT * FROM DEPARTAMENTO
148
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
UPDATE COM CONDIÇÃO
UPDATE DEPARTAMENTO
SET ID = ID + 1000
WHERE ID = 110
149
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
CONFERINDO UPDATE
ALTEROU O ID DE 110 PARA 1110
SELECT * FROM DEPARTAMENTO
150
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
DML
Comando Delete
 Para excluirmos linhas em uma tabela utilizamos o comando DELETE.
Veja a sintaxe do comando abaixo:
DELETE [FROM] [schema.]nome_tabela
WHERE condição
151
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
DELETE
APAGAR A LINHA DO DEPARTAMENTO DE ID 120
DESMARCAR COMMIT AUTOMATICO
152
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
DELETE
DELETE DEPARTAMENTO
COMMIT DESMARCADO
SEM FROM, NO ORACLE FROM É OPCIONAL
APAGOU AS 2 LINHAS????
153
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
DELETE
SELECT * FROM DEPARTAMENTO
DELETE SEM WHERE APAGA TODAS AS LINHAS
E AGORA?
154
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
DELETE
ROLLBACK
COMMIT DESMARCADO
CANCELA A TRANSAÇÃO
155
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
DELETE
VOLTARAM AS LINHAS
SELECT * FROM DEPARTAMENTO
156
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
DELETE COM WHERE
DELETE FROM DEPARTAMENTO
WHERE ID = 120
COMMIT DESMARCADO
AGORA COM FROM E WHERE
SO A LINHA DE ID 120 APAGADA
COMO TORNAR A ALTERAÇÃO DEFINITIVA?
157
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
DELETE
COMMIT
FECHOU A TRANSAÇÃO
IMPORTANTE
DEPOIS DO COMMIT NÃO ADIANTA DAR ROLLBACK
158
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
CONFERINDO DELETE
LINHA DE ID 120 FOI APAGADA
SELECT * FROM DEPARTAMENTO
159
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
ELIMANDO TABELAS
Para excluirmos uma tabela existente devemos usar o comando DROP 
TABLE. A sua forma geral é: 
 
DROP TABLE <nome_tabela>;
 
onde: 
 
<nome_tabela> dever ser substituído pelo nome da tabela a ser excluída. 
Não aceita ROLL BACK no Oracle
160
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
ELIMANDO TABELAS
DROP TABLE EMPREGADO
161
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
IMPLEMENTAÇÃO DE BANCO DE DADOS
Aula 04 - SQL Parte 2
Conhecer o comando Select
Executar um script no Oracle.
Recuperar dados de uma tabela.
Rodando Script
163
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Rodando Script
164
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Rodando Script
Digitar @ e arrastar o script para a janela.
165
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Rodando Script
166
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Rodando Script
167
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Modelo de Dados
168
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Criando modelo
CREATE TABLE DEPARTAMENTO
( ID NUMBER(7) PRIMARY KEY, NOME VARCHAR2(40) NOT NULL)
INSERT INTO DEPARTAMENTO VALUES ( 10, 'Financeiro');
INSERT INTO DEPARTAMENTO VALUES ( 20, 'Vendas');
INSERT INTO DEPARTAMENTO VALUES ( 30, 'Administrativo');
COMMIT;
CREATE TABLE EMPREGADO
( ID NUMBER(7) PRIMARY KEY, ULT_NOME VARCHAR2(20) NOT NULL, PRIM_NOME VARCHAR2(20) NOT NULL,
CARGO VARCHAR2(30), SALARIO NUMBER(7,2), DT_ADMISSAO DATE, CPF CHAR(11) UNIQUE,
ID_DEPTO NUMBER(7) REFERENCES DEPARTAMENTO(ID), ID_GERENTE NUMBER(7) REFERENCES EMPREGADO(ID)); 
INSERT INTO EMPREGADO VALUES( 1, 'Velasquez', 'Carmen','Presidente',25000, '08/04/2008','12345678901',30,null);
INSERT INTO EMPREGADO VALUES( 2, 'Neves', 'Lauro', 'Diretor de Vendas',19500, '07/03/2009','23456789012',20, 1);
INSERT INTO EMPREGADO VALUES( 3, 'Nogueira', 'Mário','Diretor Financeiro', 18000, '07/04/2010','34567890123',10,1);
INSERT INTO EMPREGADO VALUES( 4, 'Queiroz', 'Mark','Gerente de Vendas',8000, '07/11/2010','12345432123',20,2);
INSERT INTO EMPREGADO VALUES( 5, 'Rodrigues', 'Alberto', 'Vendedor',4000, '10/1/2008', '87965432123', 20, 4);
INSERT INTO EMPREGADO VALUES( 6, 'Ugarte', 'Marlene', 'Vendedor', 3500,'23/11/2009', '87654345678',20,4);
COMMIT;
CREATE TABLE CLIENTE
( ID NUMBER(7) PRIMARY KEY, NOME VARCHAR2(40) NOT NULL, VENDEDOR NUMBER(7) REFERENCES EMPREGADO(ID));
INSERT INTO CLIENTE VALUES ( 110, 'Ponto Quente',5);
INSERT INTO CLIENTE VALUES ( 120, 'Casa Supimpa',6);
INSERT INTO CLIENTE VALUES ( 130, 'Coisas e Tralhas',5);
INSERT INTO CLIENTE VALUES ( 140, 'Casa Desconto',null);
COMMIT;
169
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
CONSULTANDO TABELAS
Comando Select
É o comando SQL para recuperação dos dados de uma ou mais tabelas. Pode referenciar todas ou parte das colunas de uma ou mais tabelas, além de poder restringir as linhas que serão recuperadas.
Como é orientado a conjuntos, um único comando pode retornar nenhuma ou várias linhas de uma combinação de tabelas desde que satisfaçam às restrições impostas. 
170
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
CONSULTANDO TABELAS
Os componentes básicos do comando são:
A Cláusula SELECT
Lista as colunas que serão recuperadas
Se utilizarmos o artifício do * (asterisco) na cláusula SELECT, estaremos
definindo que todas as colunas serão recuperadas.
A Cláusula FROM
Define a tabela que será recuperada
SELECT nome-col1, nome_col2, nome coln
 FROM nome_da_ tabela;
OU
SELECT *
 FROM nome_da_tabela ;
171
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
CONSULTANDO TABELAS
172
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
CONSULTANDO TABELAS
173
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
ESCREVENDO EXPRESSÕES
174
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
ESCREVENDO EXPRESSÕES
175
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
ALIAS
176
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
UTILIZANDO WHERE
Gerando Restrições nas consultas
Ao selecionar os dados para visualização ou outra necessidade podemos, além de ordená-los, restringir o meu espectro de visualização utilizando a cláusula WHERE.
A cláusula Where estabelece uma condição que a linha deverá obdecer para que faça parte do conjunto resposta da consulta. No caso apenas retornam as linhas cujo deste da condição de como resposta verdadeiro. 
Veja o exemplo abaixo onde desejamos que retornem apenas a linhas dos empregados com ID > 3:
SELECT * 
FROM EMPREGADO
WHERE ID > 3
177
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
UTILIZANDO WHERE
178
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
UTILIZANDO WHERE – CASE SENSITIVE
SELECT * FROM EMPREGADO
SELECIONAR O EMPREGADO DE NOME Ugarte
179
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
UTILIZANDO WHERE – CASE SENSITIVE
SELECT prim_nome,cargo
FROM c_empr 
WHERE ult_nome = ' UGARTE'
180
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
UTILIZANDO WHERE – CASE SENSITIVE
SELECT prim_nome,cargo
FROM c_empr 
WHERE ult_nome = ' Ugarte'
181
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
UTILIZANDO WHERE – DATAS
SELECT * FROM EMPREGADO
SELECIONAR O EMPREGADO CONTRATADO EM 07/04/10
182
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
UTILIZANDO WHERE – DATA
SELECT ULT_NOME, DT_ADMISSAO
FROM EMPREGADO
WHERE DT_ADMISSAO = '7/4/2010';
183
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
UTILIZANDO WHERE – DATA
SELECT ULT_NOME, DT_ADMISSAO
FROM EMPREGADO WHERE DT_ADMISSAO = '7/ABR/2010'
ou
SELECT ULT_NOME, DT_ADMISSAO
FROM EMPREGADO WHERE DT_ADMISSAO = '7/ABRIL/2010'
184
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES LOGICOS
SELECT * FROM EMPREGADO
SELECIONAR OS EMPREGADOS CONTRATADOS DEPOIS DE 2008 E QUE GANHEM MAIS DE 10000
185
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES LOGICOS
186
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES LOGICOS
SELECT * FROM EMPREGADO
SELECIONAR OS EMPREGADOS CONTRATADOS DEPOIS DE 2008 OU QUE GANHEM MAIS DE 10000
187
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES LOGICOS
DATA MAIOR QUE 1/1/2009
SELECT * FROM EMPREGADO 
WHERE DT_ADMISSAO > ‘1/1/2009’ OR SALARIO > 10000
USO OR LIGANDO DUAS CONDIÇÕES 
SALARIO MAIOR QUE 10000
BASTA UMA SER VERDADEIRA
188
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES RELACIONAIS - IN
189
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES RELACIONAIS - IN
190
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES RELACIONAIS – NOT IN
191
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES RELACIONAIS – BETWEEN
192
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES RELACIONAIS – BETWEEN
193
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES RELACIONAIS – NOT BETWEEN
194
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES RELACIONAIS – BETWEEN
195
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES RELACIONAIS – BETWEEN
196
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES RELACIONAIS – LIKE
197
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES RELACIONAIS – LIKE
198
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES RELACIONAIS – LIKE
199
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES RELACIONAIS – LIKE
200
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES RELACIONAIS – LIKE
201
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES RELACIONAIS – LIKE
202
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES RELACIONAIS – LIKE
203
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES RELACIONAIS – LIKE
nome com 5 letras: ‘_____’ (5 underlines)
204
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES RELACIONAIS – LIKE
205
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES RELACIONAIS – LIKE
206
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES RELACIONAIS – NOT LIKE
SELECT * 
FROM EMPREGADO 
WHERE DT_ADMISSAO NOT LIKE ' %/04/%'
NÃO FORAM CONTRATADOS NO MÊS 4
207
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES RELACIONAIS – IS NULL
208
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES RELACIONAIS – IS NULL
209
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES RELACIONAIS – IS NOT NULL
210
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
IMPLEMENTAÇÃO DE BANCO DE DADOS
Aula 05- Sql Parte 3
Aprender a ordenar o resultado de uma consulta
Aprender funções de grupo
Recuperar dados agregados de uma tabela
Rodando Script
212
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
CONSULTANDO TABELAS
Os componentes básicos do comando são:
A Cláusula SELECT
Lista as colunas que serão recuperadas
Se utilizarmos o artifício do * (asterisco) na cláusula SELECT, estaremos definindo que todas as colunas serão recuperadas.
A Cláusula FROM
Define a tabela que será recuperada
SELECT nome-col1, nome_col2, nome coln
FROM nome_da_ tabela;
OU
SELECT *
FROM nome_da_tabela ;
213
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
CONSULTANDO TABELAS
214
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
ESCREVENDO EXPRESSÕES
215
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
ALIAS
216
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
UTILIZANDO WHERE
217
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
UTILIZANDO WHERE – CASE SENSITIVE
SELECT prim_nome,cargo
FROM c_empr 
WHERE ult_nome = ' Ugarte'
218
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
UTILIZANDO WHERE – DATA
SELECT ULT_NOME, DT_ADMISSAO
FROM EMPREGADO
WHERE DT_ADMISSAO = '7/ABR/2010'
ou
SELECT ULT_NOME, DT_ADMISSAO
FROM EMPREGADO
WHERE DT_ADMISSAO = '7/ABRIL/2010'
219
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES LOGICOS
220
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES RELACIONAIS - IN
221
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES RELACIONAIS – BETWEEN
222
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES RELACIONAIS – LIKE
223
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES RELACIONAIS – IS NULL
224
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Modelo de Dados
225
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
ORDENANDO RESULTADOS
Para permitir a ordenação o SQL nos fornece a clausula ORDER BY.
SELECT { * | nome da coluna [, nome da coluna ...]}
FROM nome da tabela
WHERE condição {AND | OR} condição
ORDER BY nome da coluna [ ASC | DESC ]
 [, nome da coluna [ ASC | DESC] ... ]
Onde: 
	ASC ordena as linhas de forma ascendente; default.
	DESC ordena as linhas de forma descendente.
226
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
ORDENANDO RESULTADOS
227
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
ORDENANDO RESULTADOS
228
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
ORDENANDO RESULTADOS
229
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
ORDENANDO RESULTADOS
230
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
ORDENAÇÃO MULTIPLA
231
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
ORDENAÇÃO
MULTIPLA
232
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
ORDENAÇÃO PELA POSIÇÃO
233
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
ORDENAÇÃO PELA POSIÇÃO
234
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
ELIMINANDO DUPLICADOS
235
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
ELIMINANDO DUPLICADOS
236
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
FUNÇÕES DE GRUPO
Funções de grupo operam sobre conjuntos de linhas. Elas retornam resultados baseados sobre um grupo de linhas, antes que um resultado por linha tenha retornado como uma função de linha única. 
Como padrão todas as linhas de um tabela são trilhadas como um grupo. 
A clausula GROUP BY da declaração do SELECT é usada para agrupar as linhas em menores grupos.
237
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
FUNÇÕES DE GRUPO
AVG (x)
Retorna o valor médio da coluna x.
Exemplo: AVG (salario)
Ignora os valores nulos.
MAX (x)
Retorna o valor máximo da coluna x.
Exemplo: MAX (salario)
Ignora os valores nulos.
MIN (x)
Retorna o valor mínimo da coluna x.
Exemplo: MIN (salario)
Ignora os valores nulos.
238
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
FUNÇÕES DE GRUPO
SUM (x)
Retorna a soma da coluna x.
Exemplo: SUM (salario)
Ignora os valores nulos.
COUNT (x)
Retorna o número de valores não nulos da coluna x.
Exemplo: COUNT (perc_comissao)
COUNT (* )
Retorna o número de linhas de uma tabela.
Exemplo: COUNT (*)
Considera os valores nulos.
239
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
FUNÇÕES DE GRUPO
240
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
FUNÇÕES DE GRUPO
241
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
FUNÇÕES DE GRUPO
242
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
FUNÇÕES DE GRUPO
243
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
FUNÇÕES DE GRUPO
244
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
FUNÇÕES DE GRUPO
245
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
FUNÇÕES DE GRUPO - DISTINCT
LISTAR A QUANTIDADE DE CARGOS E DE ID_DEPTOS
DIFERENTES
246
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
FUNÇÕES DE GRUPO - DISTINCT
247
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
CRIANDO GRUPOS
Outro recurso do comando SELECT é a possibilidade de agruparmos nossos dados, utilizando a cláusula GROUP BY.
Sintaxe:
SELECT nome da coluna [ , nome da coluna]
FROM nome da tabela
WHERE condição
GROUP BY expressão
 onde
expressão especifica as colunas cujos valores determinam a base para o grupo de linhas; 
GROUP BY produz uma linha sumarizada para cada grupo de linhas selecionado. 
248
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
CRIANDO GRUPOS
249
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
CRIANDO GRUPOS
250
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
CRIANDO GRUPOS
251
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
GRUPOS EM GRUPOS
LISTAR A QUANTIDADE DE EMPREGADOS, SALARIO MEDIO E 
SOMA DOS SALARIOS DOS EMPREGADOS DE CADA DEPARTAMENTO E DENTRO DO DEPARTAMENTO PARA CADA CARGO 
252
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
GRUPOS EM GRUPOS
253
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
CRIANDO GRUPOS - WHERE
254
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
CRIANDO GRUPOS - WHERE
255
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
FILTRANDO GRUPOS - HAVING
256
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
FILTRANDO GRUPOS - HAVING
257
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
FILTRANDO GRUPOS - HAVING
258
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
IMPLEMENTAÇÃO DE BANCO DE DADOS
Aula 06- Sql Parte 4
Aprender os comandos de junção
Conhecer as diferentes sintaxes de junção
260
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
261
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
INNER JOIN Syntax
SELECT Ped.PedID, Cli.CliName, 
Env.EnvName FROM ((Ped
INNER JOIN Cli 
ON Ped.CliID = Cli.CliID)
INNER JOIN Env 
ON Ped.EnvID = Env.EnvID);
LEFT JOIN Syntax
SELECT col_name(s)
FROM T1 LEFT JOIN T2 ON
T1.col_name = T2.coL_name;
RIGHT JOIN Syntax
SELECT col_name(s)
FROM T1
RIGHT JOIN T2 ON 
T1.col_name = T2.col_name;
FULL OUTER JOIN Syntax
SELECT col_name(s)
FROM T1
FULL OUTER JOIN T2 ON 
T1.col_name = T2.colname;
SELECT col_name(s)
FROM T1
INNER JOIN T2 ON 
T1.col_name = T2.col_name;
262
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Modelo de Dados
263
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Configurando Oracle
264
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
264
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
265
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO CRUZADA
Uma junção cruzada [cross join] de tabelas, também chamada junção irrestrita de duas tabelas gera um resultado formado por todas as combinações possíveis de uma linha da primeira tabela com uma linha da segunda. Não existe uma condição de junção. Esse resultado é chamado produto cartesiano das duas tabelas. 
Na sintaxe ANSI, junções cruzadas são indicadas com CROSS JOIN, por exemplo: 
select *
from empregado cross join departamento; 
Na sintaxe Tradicional: 
select *
from empregado , departamento;
266
 A tabela Empregado possui 6 linhas e a tabela Departamento 3 linhas , o resultado final será 18 linhas que é 6 * 3 = 18 linhas, formadas por todas as combinações possíveis de empregado e departamento. 
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO CRUZADA
267
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO CRUZADA
268
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
RETORNANDO TODAS AS COLUNAS DAS DUAS TABELAS E COMBINANDO TODAS AS LINHAS
SELECT * FROM EMPREGADO CROSS JOIN DEPARTAMENTO, 
JUNÇÃO CRUZADA
269
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO CRUZADA
270
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO INTERIOR
Esse tipo de junção conecta as duas tabelas e retorna apenas as linhas que satisfazem a condição de junção. 
Na sintaxe ANSI, junções interiores são indicadas com INNER JOIN: 
select <colunas>
from tabela1 INNER JOIN tabela2 ON <condição de junção>; 
Na sintaxe Tradicional: 
select <colunas>
from tabela1 ,tabela2 
Where <condição de junção>; 
271
Uma junção interior é chamada de equijoin quando as colunas são comparadas usando o =, e as duas colunas aparecem no resultado, mostrando dados redundantes, já que elas têm o mesmo valor. 
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Dados do Empregado e do Departamento onde esta alocado
JUNÇÃO INTERIOR
272
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO INTERIOR – SINTAXE TRADICIONAL
273
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO INTERIOR – SINTAXE TRADICIONAL
274
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SELECT * 
FROM EMPREGADO , DEPARTAMENTO
WHERE ID_DEPTO = DEPARTAMENTO.ID
JUNÇÃO INTERIOR – SINTAXE TRADICIONAL
275
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO INTERIOR – SINTAXE TRADICIONAL
276
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO INTERIOR – SINTAXE TRADICIONAL
277
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Projetando Colunas
JUNÇÃO INTERIOR – SINTAXE TRADICIONAL
278
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO INTERIOR – SINTAXE ANSI
279
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO INTERIOR COM MAIS DE DUAS TABELAS
JUNÇÃO INTERIOR – SINTAXE ANSI
280
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO INTERIOR COM MAIS DE DUAS TABELAS
JUNÇÃO INTERIOR
– SINTAXE ANSI
281
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO INTERIOR – SINTAXE TRADICIONAL
JUNÇÃO INTERIOR COM MAIS DE DUAS TABELAS
282
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO INTERIOR – FILTRANDO RESULTADO
SINTAXE ANSI
283
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO INTERIOR – FILTRANDO RESULTADO
SINTAXE TRADICIONAL
REPARE AND LIGANDO 
FILTRAGEM E JUNÇÃO
284
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO INTERIOR – FILTRANDO RESULTADO
QUERO JUNÇÃO PARA EMPREGADOS COM SALARIO < 10000 OU ID < 3
285
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO INTERIOR – FILTRANDO RESULTADO
QUERO JUNÇÃO PARA EMPREGADOS COM SALARIO < 10000 OU ID < 3
Erro por falta dos parêntesis. Gera produto cartesiano.
286
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO INTERIOR – FILTRANDO RESULTADO
Parêntesis
287
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO EXTERIOR (início da explicação)
288
Uma junção exterior [outer join] mostra todas as linhas de uma tabela, mesmo quando elas não satisfazem a condição de junção. 
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
289
JUNÇÃO INTERIOR – Quero os dados não relacionados. Próx. slide
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO EXTERIOR - ANSI
290
Agora retornaram os dados não relacionados.
(Todos os dados da tabela à ESQUERDA :EMPREGADO)
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO EXTERIOR - ANSI
291
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO EXTERIOR - ANSI
292
Agora a tabela LEFT é CLIENTE
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO EXTERIOR - TRADICIONAL
293
(+) – Operador de ALTER JOIN do ORACLE.
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO EXTERIOR - TRADICIONAL
294
O resultado não é pela ordem, mas por onde foi colocado o (+) [acrescenta linhas à tabela ‘marcada’]
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO EXTERIOR – ANSI – FULL JOIN
295
Funciona como LEFT e Right Join
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO EXTERIOR - TRADICIONAL
NA SINTAXE TRADICIONAL DO ORACLE 
NÃO EXISTE FULL JOIN
SELECT C.ID, C.NOME, E.ID, E.ULT_NOME,E.CARGO 
FROM CLIENTE C , EMPREGADO E 
WHERE C.VENDEDOR (+) = E.ID (+)
296
 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 
297
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO EXTERIOR
PROJETANDO TODAS AS COLUNAS DE CLIENTE
298
CLIENTE à ESQUERDA e EMPREGADO à DIREITA.
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
AUTO JUNÇÃO
299
Uma auto-junção [self join] é uma junção da tabela com ela mesma. Na tabela Empregado, por exemplo, cada empregado  está subordinado a outro. A coluna 'id_gerente' indica o código do gerente do empregado. 
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
AUTO JUNÇÃO
300
Precisa citar a mesma tabela 2 vezes mas isso gera erro. Então coloca-se ALIAS.
S- subordinado, G - Gerente
FK PK
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
AUTO JUNÇÃO
301
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
QUERO SABER O EMPREGADO QUE NÃO TEM GERENTE
302
AUTO JUNÇÃO
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
AUTO JUNÇÃO
SELECT G.ID, G.ULT_NOME, G.CARGO, 
 S.ID, S.ULT_NOME, S.CARGO 
FROM EMPREGADO G RIGHT JOIN EMPREGADO S 
 ON S.ID_GERENTE = G.ID
NOTE QUE O EMPREGADO DE ID 1 NÃO TEM GERENTE
303
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SELECTS.ID, S.ULT_NOME, S.CARGO 
FROM EMPREGADO G RIGHT JOIN EMPREGADO S ON 
S.ID_GERENTE = G.ID
WHERE G.ID IS NULL
304
AUTO JUNÇÃO
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
QUERO SABER O EMPREGADO QUE NÃO TEM GERENTE,
NÃO PRECISA RESOLVER POR OUTER JOIN
305
AUTO JUNÇÃO
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SELECT ID, ULT_NOME, CARGO
FROM EMPREGADO 
WHERE ID_GERENTE IS NULL
306
AUTO JUNÇÃO
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
QUERO SABER OS EMPREGADOS QUE NÃO SÃO GERENTES
307
AUTO JUNÇÃO
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SELECT G.ID, G.ULT_NOME, G.CARGO, 
 S.ID, S.ULT_NOME, S.CARGO 
FROM EMPREGADO G LEFT JOIN EMPREGADO S 
 ON S.ID_GERENTE = G.ID
DADOS DOS 
SUBORDINADOS NULOS
308
QUERO SABER OS EMPREGADOS QUE NÃO SÃO GERENTES
AUTO JUNÇÃO
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SELECT G.ID, G.ULT_NOME, G.CARGO 
FROM EMPREGADO G LEFT JOIN EMPREGADO S 
 ON S.ID_GERENTE = G.ID
WHERE S.ID IS NULL
309
QUERO SABER OS EMPREGADOS QUE NÃO SÃO GERENTES
AUTO JUNÇÃO
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SELECT G.ID, G.ULT_NOME, G.CARGO 
FROM EMPREGADO G , EMPREGADO S 
WHERE G.ID = S.ID_GERENTE (+) AND S.ID IS NULL
310
AUTO JUNÇÃO
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
IMPLEMENTAÇÃO DE BANCO DE DADOS
Aula 07- Sql Parte 5
Aprender os como construir subconsulta
Conhecer os operadores de conjunto
Modelo de Dados
312
 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
313
 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, 
314
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO INTERIOR – SINTAXE TRADICIONAL
Projetando Colunas
315
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO INTERIOR – SINTAXE ANSI
316
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO EXTERIOR - ANSI
317
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO EXTERIOR - TRADICIONAL
318
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
AUTO JUNÇÃO
319
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
AUTO JUNÇÃO
320
 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
321
 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
322
 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 (só em consulta externa)
323
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
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.
324
SUBCONSULTA
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
EMPREGADOS DO 
DEPARTAMENTO DE VENDAS
325
SUBCONSULTA
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
326
SUBCONSULTA
EMPREGADOS DO 
DEPARTAMENTO DE VENDAS
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SELECT *
FROM EMPREGADO 
WHERE ID_DEPTO = 20 
327
SUBCONSULTA
EMPREGADOS DO 
DEPARTAMENTO DE VENDAS
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
ESTE COMANDO PRODUZ O RESULTADO 20 QUE É UTILIZADO NO COMANDO EXTERNO 
328
SUBCONSULTA
IMPORTANTE: Parêntesis () .
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
EMPREGADOS QUE GANHAM MAIS QUE O SALÁRIO MÉDIO DA EMPRESA 
329
SUBCONSULTA
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
330
SUBCONSULTA
SALÁRIO MÉDIO DA EMPRESA 
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SELECT * 
FROM EMPREGADO
WHERE SALARIO > ( SELECT AVG (SALARIO) 
 FROM EMPREGADO)
331
SUBCONSULTA
EMPREGADOS QUE GANHAM MAIS QUE O SALÁRIO MÉDIO DA EMPRESA 
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA - MULTILINHAS
EMPREGADOS QUE GANHAM SALÁRIO DIFERENTE DOS VENDEDORES 
332
Uma subconsulta multilinhas é aquela que pode retornar à consulta principal mais que uma linha de dados para efeito de substituição. Isto, por conseguinte, implica numa construção ligeiramente diferente a nível de operadores, pois estes têm que ser capazes de manipular um conjunto (lista) com mais de um elemento.
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA - MULTILINHAS
333
SALÁRIO DOS VENDEDORES 
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA - MULTILNHAS
334
EMPREGADOS QUE GANHAM SALÁRIO DIFERENTE DOS VENDEDORES 
 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
335
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA - MULTILNHAS
336
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA - MULTILINHAS
EMPREGADOS QUE GANHAM SALARIO MAIORES QUE TODOS OS VENDEDORES 
337
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA - MULTILINHAS
338
SALARIO DOS VENDEDORES 
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA - MULTILINHAS
SELECT *
FROM EMPREGADO
WHERE SALARIO > ALL ( SELECT SALARIO 
 FROM EMPREGADO 
 WHERE UPPER(CARGO) = 'VENDEDOR')
339
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA - MULTILINHAS
EMPREGADOS QUE GANHAM SALARIO MAIORES QUE ALGUM VENDEDOR 
340
Ou seja, maior do que o VENDEDOR que ganha menos
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA - MULTILINHAS
341
SALARIO DOS VENDEDORES
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA - MULTILINHAS
SELECT *
FROM EMPREGADO
WHERE SALARIO > ANY ( SELECT SALARIO 
 FROM EMPREGADO 
 WHERE UPPER(CARGO) = 'VENDEDOR')
342
EMPREGADOS QUE GANHAM SALARIO MAIORES QUE ALGUM 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)
343
 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
344
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA - HAVING
DEPARTAMENTOS COM MEDIA SALARIAL MAIOR QUE MEDIA SALARIAL DA EMPRESA
345
 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)
346
DEPARTAMENTOS COM MEDIA SALARIAL MAIOR QUE MEDIA SALARIAL DA EMPRESA
 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
347
 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
348
ID, ULT_NOME, SALARIO E ID_DEPTO DO EMPREGADO E 
MEDIA SALARIAL DE SEU DEPARTAMENTO
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA - CORRELATA
As subconsultas que foram vistas até agora nos exemplos podem ser avaliadas uma vez só e depois substituídas no corpo da consulta principal. Já uma subconsulta correlata [correlated subquery] depende dos valores da consulta principal onde ela está alinhada, por isso deve ser avaliada uma vez para cada linha do resultado externo. Por exemplo, desejamos saber quais empregados ganham mais que a média salarial de seu departamento. A consulta abaixo nos dá este resultado:
 SELECT * FROM  EMPREGADO E 
 WHERE  SALARIO  > (SELECT AVG(SALARIO)
                        FROM EMPREGADO I
                    WHERE ID_DEPTO = E.ID_DEPTO)
349
Essa é uma subconsulta correlata porque ela faz referência a uma tabela da consulta mais externa. A subconsulta é avaliada repetidas vezes, uma para cada linha da retornada pela consulta externa. 
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA - CORRELATA
EMPREGADOS QUE GANHAM MAIS QUE A MEDIA SALARIAL DE SEU DEPARTAMENTO
350
 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)
351
EMPREGADOS QUE GANHAM MAIS QUE A MEDIA SALARIAL DE SEU DEPARTAMENTO
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA – TESTE EXISTENCIA
352
Um teste de existência é uma condição que envolve a palavra EXISTS e uma subconsulta. A condição é verdadeira se a subconsulta retorna alguma linha e é falsa se ela retorna zero linha. Por exemplo, para saber quais os departamentos que possuem funcionários cujo cargo é igual a ‘Vendedor’ execute o seguinte comando:  
SELECT * FROM  DEPARTAMENTO E
WHERE  EXISTS  (SELECT * FROM EMPREGADO I   
                              WHERE E.ID = I.ID_DEPTO 
		 AND UPPER(I.CARGO) = 'VENDEDOR')
O resultado da subconsulta não importa, pois está apenas sendo testada a existência de um resultado. Nesse caso, a lista de colunas é sempre um asterisco (*). 
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SUBCONSULTA – TESTE EXISTENCIA
DEPARTAMENTOS QUE POSSUEM VENDEDORES
353
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SELECT * 
FROM DEPARTAMENTO E
WHERE EXISTS (SELECT * 
 FROM EMPREGADO I
 WHERE E.ID = I.ID_DEPTO AND UPPER(I.CARGO) = 'VENDEDOR')
354
SUBCONSULTA – TESTE EXISTENCIA
DEPARTAMENTOS QUE POSSUEM VENDEDORES
 LINGUAGEM
SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES DE CONJUNTO
355
Há também o UNION ALL
No Oracle. Em outros é EXCEPT.
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES DE CONJUNTO
Trabalhando com Conjuntos
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
356
 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.
357
 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'
358
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
JUNÇÃO EXTERIOR - TRADICIONAL
RESULTADO EQUIVALENTE A FULL JOIN MAS O COMANDO NÃO É DE FULL JOIN
COMANDO EQUIVALENTE A LEFT 
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 A RIGHT 
359
 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.
360
SELECT ID FROM EMPREGADO WHERE ID_DEPTO IN (10,20)
UNION ALL
SELECT ID FROM EMPREGADO WHERE UPPER(CARGO) = 'VENDEDOR'
5 e 6 se repetem. Diferente do UNION, onde repetições são eliminadas.
 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 elas.
361
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
OPERADORES DE CONJUNTO - INTERSECT
20 E
362
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. 
363
 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'
364
 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
365
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
IMPLEMENTAÇÃO DE BANCO DE DADOS
Aula 08 - Sql Parte 6
Aprender a criar Visões, Indices e Sequences
Modelo de Dados
367
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
VISÕES (VIEWS)
Materializam o Esquema Externo de um banco de dados.
 
é uma consulta previamente definida e que fica armazenada no dicionário de dados, podendo ser acessada de forma similar a uma tabela.
 
Quando a visão é referenciada em um comando de SELECT suas linhas e colunas são determinadas dinamicamente, ou seja a consulta é executada e o resultado apresentado para o usuário, atuando como um verdadeira tabela virtual.
 
Uma visão pode permitir, com restrições que os dados da tabela sejam manipulados em comando de INSERT, UPDATE e DELETE, porém, não armazena estes dados.
368
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
369
VISÕES
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
VISÕES - CRIAÇÃO
CRIAR UMA VISÃO COM O ID, PRIMEIRO NOME,
 ULTIMO NOME E CARGO DO EMPREGADO
370
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
CREATE VIEW EMP_RESUMO AS
SELECT ID, PRIM_NOME, ULT_NOME, CARGO 
FROM EMPREGADO
371
VISÕES - CRIAÇÃO
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
VISÕES - CONSULTA
SELECT * FROM EMP_RESUMO
372
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
VISÕES - TIPOS
Existem basicamente dois tipos de Views:
 
Simples : composto por apenas um SELECT, utiliza apenas uma tabela, suas colunas são formadas por colunas da tabela original, sem cálculos ou funções
Complexas: aquelas onde há um join entre tabelas
373
• Com uma VIEW simples será possível executarmos comandos INSERT, UPDATE e DELETE (além do SELECT).
• A manipulação dos dados através de uma VIEW não desabilita as constraints das tabelas as quais os mesmos se referem.
• Cada coluna definida para VIEWs deve ter um nome de coluna válido.
• Caso seja uma fórmula, deve possuir um alias.
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
VISÕES – MANIPULANDO DADOS
INSERT INTO EMP_RESUMO 
VALUES ( 10, ‘ALBERTO’,’RODRIGUES’, ‘ALMOXARIFE’)
374
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
375
VISÕES – MANIPULANDO DADOS
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Vamos agora criar uma visão complexa, desejamos criar um visão com o id, nome completo e cargo do empregado e nome do departamento onde ele trabalha
376
VISÕES - TIPOS
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
CREATE VIEW EMP_DEP 
AS
SELECT E.ID , E.PRIM_NOME|| ' ' ||E.ULT_NOME AS "NOME EMPREGADO" , 
 E.CARGO , D.NOME AS "NOME DEPARTAMENTO"
FROM EMPREGADO E INNER JOIN DEPARTAMENTO D ON E.ID_DEPTO = D.ID
377
VISÕES - TIPOS
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SELECT * FROM EMP_DEP
USUARIO PENSA QUE É UMA TABELA
378
VISÕES - TIPOS
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
INSERT INTO EMP_DEP 
VALUES ( 15, ‘SIDNEY’,’VENTURI’, ‘DIRETOR’)
379
VISÕES - TIPOS
Não é permitido SELECT, INSERT ou DELETE em VISÕES COMPLEXAS.
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
VISÕES - WITH READ ONLY
380
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
VISÕES - CONSULTA
INSERT INTO EMP_RESUMO 
VALUES ( 15, ‘SIDNEY’,’VENTURI’, ‘DIRETOR’)
381
Não é permitido SELECT, INSERT ou DELETE em VISÕES COM READ ONLY.
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
VISÕES - ELIMINANDO
382
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
VISÕES - ELIMINANDO
DROP VIEW EMP_DEP
383
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SEQUENCES
384
O Oracle possui internamente uma máquina geradora de números seqüenciais que pode perfeitamente ser usado para produzir números únicos, consecutivos e incrementados conforme determinado. A esses números chamamos de Sequences e são muito utilizados para fazer o papel de Chaves Primárias em tabelas onde não existe uma coluna mais apropriada, ou qualquer outra aplicação que haja necessidade de números únicos.
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
385
SEQUENCES
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
CREATE SEQUENCE ID_CLI_SEQ
	INCREMENT BY 3
	START WITH 10
	MAXVALUE 1000
386
SEQUENCES
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SEQUENCES - NEXTVAL
387
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SEQUENCES - CURRVAL
388
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
INSERT INTO CLIENTE 
VALUES (ID_CLI_SEQ.NEXTVAL , 'Casa Tombo', 6)
VAI INSERIR 16 NO ID
389
SEQUENCES
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
390
SEQUENCES
LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SEQUENCES - PARTICULARIDADES
A sequence é incrementada independente da transação ter sido efetivada (Commit) ou não (Rollback) o que pode gerar perda de valores. Não utilizar em aplicações que manipulam dados fiscais como emissão de Notas Fiscais. 
 
Da mesma forma que usuários acessam a mesma sequence, estes podem receber valores intercalados, visto que num dado momento a sequence poderá estar atendendo um número para cada um. Dois usuários jamais conseguirão gerar o mesmo número sobre uma mesma sequence.
Os valores que estão no CACHE (memória) são perdidos caso o banco de dados sofra uma interrupção anormal.
391
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SEQUENCES - PARTICULARIDADES
Regras para Utilização de NEXTVAL e CURRVAL
 
NEXTVAL e CURRVAL podem ser usados:
 
Numa cláusula SELECT em tabelas (exceto em Views)
Na cláusula VALUES de um comando INSERT
Na cláusula SET de um comando UPDATE
No SELECT da query principal de uma construção com subqueries
.
392
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SEQUENCES - PARTICULARIDADES
Restrições para Utilização de NEXTVAL e CURRVAL
 
NEXTVAL e CURRVAL não podem ser usados:
 
Dentro de uma lista de colunas de um comando SELECT de uma View
Com as cláusulas ORDER BY, GROUP BY ou HAVING de um comando SELECT
Com operadores de conjuntos UNION, INTERSECT e MINUS
Dentro de uma subconsulta
.
393
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SEQUENCES - ALTERANDO
ALTER SEQUENCE <sequence_name>
	[INCREMENT BY n ]
	[MAXVALUE n I NOMAXVALUE]
	[MINVALUE n I NOMINVALUE]
	...........
Controles sobre Sequences Alteradas
 Serão afetados apenas os números a serem gerados.
Algumas validações serão feitas como um novo valor MAXVALUE, não poderá ser definido se menor que o último número gerado.
A cláusula START WITH, não poderá ser alterada, neste caso, a sequence deverá ser eliminada e recriada.
394
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SEQUENCES - ALTERANDO
Alter Sequence ID_CLI_SEQ
 INCREMENT BY 5
395
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SEQUENCES - ALTERANDO
396
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
SEQUENCES - ELIMANDO
DROP SEQUENCE ID_CLI_SEQ
397
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
INDICES – FUNDAMENTAÇÃO (pág 106 do livro)
398
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
INDICES - FUNDAMENTAÇÃO
399
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
INDICES - PRIMARIO
400
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
INDICES – CLUSTERING
401
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
INDICES - SECUNDÁRIO
402
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
INDICES - SECUNDÁRIO
403
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Índices Cluster X Não Cluster
404
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Índices Cluster X Não Cluster
405
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
406
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
407
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Índices Denso e Não Denso
408
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Índices Denso e Não Denso
409
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
410
Índices Denso e Não Denso
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Índices Multinível
411
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Índices Multinível
412
80
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Índices Bitmap
Um índice bitmap atribui um “mapa de bits” (bitmap) para cada possível valor de um campo chave
 Uma matriz é criada com:
 uma linha para cada linha da tabela e
 uma coluna para cada valor distinto do atributo escolhido
 Cada bit no bitmap corresponde ao cruzamento entre um rowid e um valor do campo chave.
Se o bit está setado (=1), significa que o registro com o rowid correspondente contém o valor do campo chave
413
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Índices Bitmap
414
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Índices Bitmap
Durante o processamento de consultas, o mapa de bits é transferido para a memória
Consultas são transformadas para serem processadas por operações booleanas
Maior eficiência
 Eficiência é ainda maior se a tabela consultada possuir múltiplos índices bitmap
1 para cada coluna acessada
Cada lista de RowIDs é construída indepedentemente, utilizando os índices bitmap de cada coluna
Rotina de merge compara as listas de RowIDs buscando interseções
415
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Índices Bitmap
416
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Índices - Oracle
Tipos de Índices
 
Único - Garante a unicidade do valor. O Índice criado na Primary Key ou Unique Key, é único, porém podemos criar restrições de unicidade em outras colunas da tabela. Criado automaticamente em PK e UK
 
Não_único - Índices criados apenas com o propósito de acelerar a pesquisa, como em Chaves Estrangeiras (Foreing Key), onde a unicidade não é requerida.
 
Uma Coluna - Apenas uma coluna será indexada.
 
Colunas Compostas ou Concatenadas - Até 255 colunas podem ser concatenadas para formar apenas um índice e não necessitam ser adjacentes.
 
Função – É criado em função de um cálculo feito em uma ou mais colunas.
417
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Índices - Oracle
418
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Índices - Oracle
CREATE INDEX IND_VEND ON CLIENTE(VENDEDOR)
419
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Índices - Oracle
420
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Índices – Oracle - DROP
421
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
Índices - Oracle
422
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
IMPLEMENTAÇÃO DE BANCO DE DADOS
Aula 09 - Transações
TRANSAÇÕES
 Uma transação é uma unidade de execução de programa que acessa e, possivelmente, atualiza vários itens de dados. Uma transação, geralmente, é o resultado da execução de um programa de usuário escrito em uma linguagem de manipulação de dados, e é delimitada da forma: 
begin transaction 
.........
end transacion. 
A transação consiste de todas as operações ali executadas, entre o começo e o final da transação. Durante a execução de uma transação o banco de dados pode passar por estados de inconsistência por vários motivos como:
Queda de energia,
Falha física,
Etc..
424
 LINGUAGEM SQL
IMPLEMENTAÇÃO DE BANCO DE DADOS
TRANSAÇÃO
INÍCIO DA 
TRANSAÇÃO
FIM DA 
TRANSAÇÃO
EXECUÇÃO DA TRANSAÇÃO
BANCO DE DADOS EM 
ESTADO CONSISTENTE
BANCO DE DADOS TEMPORARIAMENTE 
EM ESTADO INCONSISTENTE
T1
T2
 TRANSAÇÃO
COMANDO UPDATE
TABELA
TODA TRANSAÇÃO TERMINA
INSUCESSO (ROLLBACK)
SUCESSO (COMMIT)
IMAGEM ANTIGA
NOVA IMAGEM
21 de novembro de 2017
MODELO RELACIONAL
426
Com commit ou rollback.
426
EXEMPLOS DE TRANSAÇÃO
BEGIN_TRANSACTION
UPDATE EMP
SET SAL = SAL * 1.1
WHERE CODEPT = 10
COMMIT
BEGIN_TRANSACTION
UPDATE CONTA
SET SALDO = SALDO - 200
WHERE NRCC = 1000
UPDATE CONTA 
SET SALDO = SALDO + 200
WHERE NRCC = 1002
COMMIT
BEGIN_TRANSACTION
UPDATE EMP
SET SAL = SAL * 1.1
WHERE CODEPT = 10
ROLLBACK
427
PROPRIEDADES DAS TRANSAÇÕES
- ATOMICIDADE
	- CONSISTÊNCIA
		 - ISOLAMENTO
			-DURABILIDADE		
A C I D
20 de novembro de 2017
MODELO RELACIONAL
428
ATOMICIDADE
PROPRIEDADE DO TUDO OU NADA
 NRCC NOME	 CPF SALDO
 1000 J SILVA 123 500,00
 1001 A BARROS 143 500,00
 1002 J SILVA 123 200,00
 1003 S SALES 223 500,00
UPDATE CONTA SET SALDO = SALDO - 200 WHERE NRCC = 1000
300,00
400,00
UPDATE CONTA SET SALDO = SALDO + 200 WHERE NRCC = 1002
200,00
BEGIN_TRANSACTION
COMMIT
20 de novembro de 2017
MODELO RELACIONAL
429
GRAUS DE CONSISTENCIA
GRAU 3 - OUTRAS

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando