Buscar

SLIDES DE AULA

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

*
Banco de Dados I
Danielle Filgueiras
*
*
Banco de Dados
O que é BD ?
Conceitos de BD
Histórico de Banco de Dados
Composição de um Sistema de BD
Linguagens de BD
O que é um SGBD ?
Objetivos do SGBD
Níveis de Abstração de SGBD
Usuários do SGBD
Interfaces do SGBD
Tipos de SGBD
SGBD x SGA
Modelo de Dados
*
*
Banco de Dados
Arquitetura do BD
Níveis de Modelagem
Modelo Entidade – Relacionamento
Extensões do MER
Mapeamento MER x DER
Modelagem com ferramenta CASE
Modelo Relacional
Normalização
Desnormalização
Fragmentação de dados
Scripts
*
*
Referências
Fundamentals of Database System – Elmarsi/Navathe
Introdução a Sistemas de Banco de Dados – C.J.Date
Sistemas de Banco de Dados - Sylberchartz
*
*
O que é BD ?
*
*
O que é BD ?
*
*
Conceitos de Banco de Dados
*
*
Conceitos de Banco de Dados (cont.)
CHU- 1983
Um banco de dados é um conjunto de arquivos relacionados entre si.
DATE - 1985
Um banco de dados é uma coleção de dados operacionais armazenados usados pelos sistemas de aplicação de uma determinada organização.
*
*
Conceitos de Banco de Dados (cont.)
ELMARSI & NAVATHE - 1999
Um banco de dados é uma coleção de dados relacionados, não isolados.
ENGLES
Um banco de dados é uma coleção de dados operacionais usados pelos sistemas aplicativos de uma empresa.
*
*
Conceitos de Bancos de Dados
Um BD representa aspectos do mundo real
Um BD é projetado, construindo e os dados são nele armazenados com algum propósito
Um BD é definido e mantido por uma coleção de programas (SGBD)
Sistema de Bando de Dados = Dados + Programas (SBD = BD + SGBD)
*
*
Conceitos de Banco de Dados (cont.)
Dado X Informação
Informação é um ou mais dados processados, tratados, lapidados
Dado:			 A 4 L 8 L 3 D 5 I 7 E 1 E 8 N
Informação: 		 D A N I E L L E 4 8 8 3 8 7 5
Processamento
Dado
Informação
*
*
Estratégico
Conceitos de Banco de Dados (cont.)
Tipo de Informação
Tático
Operacional
Projeções
Comparações
AD-HOC
Comparações
Resumos
Informações detalhadas
Informações Precisas
Nível de Decisão
*
*
AS = Análise de Dados + Análise de Funções
Conceitos de Banco de Dados (cont.)
Análise de Dados
Uns preferem pela “AD” outros preferem pela 
“AF”, mas todos já concordam: deve-se fazer 
Análise de Dados “AD””
Por onde começar ?
*
*
Conceitos de Banco de Dados (cont.)
Análise de Dados
Ato de Construir modelos conceituais de dados, através de abstrações, a partir do mundo real, buscando simplificação rumo à implementação física
Conceitual
Lógico
Físico
Mundo Real
*
*
Conceitos de Banco de Dados (cont.)
Análise de Sistemas
*
*
Conceitos de Banco de Dados (cont.)
Análise de Dados
Projeto Conceitual:
Objetivo: Definição do problema, não da solução
Dados: eliminação de redundância de dados
Funções: 
Como descrever o problema do cliente ?
*
*
Conceitos de Banco de Dados (cont.)
Análise de Dados
Projeto Lógico:
Dados: O que armazena e qual a estrutura ?
Funções: 
Que informações o sistema deve fornecer ?
Que dados o sistema deve receber e de quem ?
Que transformações os dado devem sofrer para produzir as informações desejadas ?
*
*
Conceitos de Banco de Dados (cont.)
Análise de Dados
Projeto Físico:
Dados: Como e onde armazenar os dados ?
Funções: 
Como apresentar as saídas ?
Como fornecer os dados ao sistema ?
Como e quando executar os processos ?
*
*
Conceitos de Banco de Dados (cont.)
Projeto de Banco de Dados
Projeto Conceitual
Modelagem de dados para descrever o problema, normalmente manual.
Projeto Lógico
Modelagem de dados com ferramenta CASE, não necessariamente precisa ser uma cópia do modelo conceitual. Definição de restrições de integridade.
Projeto Físico
Definição do armazenamento
*
*
Conceitos de Banco de Dados (cont.)
Projeto Conceitual
Declaração de Objetivos (DO)
Lista de Eventos (LE)
Modelo de Entidade relacionamento (MER)
*
*
Conceitos de Banco de Dados (cont.)
Declaração de Objetivos (DO)
Descrever de forma sucinta e objetiva, em uma página, a finalidade do sistema.
Ex: O sistema de Compra e Venda de Mercadorias tem como objetivos automatizar de forma integrada as atividades de:
Compras de mercadorias
Vendas de mercadorias
Controle de estoque
Contabilização
 
*
*
Conceitos de Banco de Dados (cont.)
Lista de Eventos
Descreve todos os eventos que ocorrem, ocorreram ou poderão ocorrer no sistema, classificando-os em três tipos:
Orientados ao fluxo
Temporais
Controle
*
*
Conceitos de Banco de Dados (cont.)
Lista de Eventos
Eventos orientados a fluxo de dados
Cliente envia pedido
Cliente faz pagamento
Cliente devolve mercadoria
Fornecedor envia mercadorias
Fornecedor envia fatura
Departamento de vendas define política de vendas
*
*
Conceitos de Banco de Dados (cont.)
Lista de Eventos
Eventos temporais
O relatório de estatística de vendas deve amanhecer pronto às segundas-feiras 
Os lançamentos contábeis devem estar disponíveis para a Contabilidade no dia 01 de cada mês
*
*
Conceitos de Banco de Dados (cont.)
Lista de Eventos
Eventos de Controle
Ao atingir o ponto de ressuprimento, emitir pedido ao fornecedor
Ao exceder o limite de crédito, bloquear o cliente por excesso
*
*
Conceitos de Banco de Dados (cont.)
Modelo de Entidade-Relacionamento
Entidade: Um objeto do mundo real
Atributo: Característica de uma entidade ou relacionamento
Relacionamento: Associação entre entidades
*
*
Conceitos de Banco de Dados (cont.)
Projeto Lógico
Diagrama de Entidade relacionamento (DER)
Dicionário de Dados (DD)
*
*
Conceitos de Banco de Dados (cont.)
Diagrama de Entidade-Relacionamento
Uma evolução do Modelo de Entidade-Relacionamento
*
*
Conceitos de Banco de Dados (cont.)
Dicionário de Dados
Uma visão organizada por linhas com tabelas e colunas do Diagrama de Entidade-Relacionamento
Tabela Clientes
*
*
Conceitos de Banco de Dados
BD = Dados + Metadados
Um sistema de Banco de Dados contém, além dos dados normais, uma descrição completa desses dados num dicionário de dados (catálogo)
Metadados ou Dicionário de Dados
Abstração, ou seja, deixar o usuário tratar os dados em alto nível, enquanto o SGBD usa o DD para tratar os dados fisicamente (baixo nível)
*
*
Conceitos de Banco de Dados (cont.)
Projeto Físico
Projeto Detalhado de:
Saídas
Arquivos
Entradas
Controles no sistema
 Especificação de Programas
*
*
Histórico do Banco de Dados
*
*
Histórico do Banco de Dados (cont.)
Desenvolvimento de software
Até 1972: Construção Artística de Software (Artesanal)
1972: Programação Estruturada (Dijkstra)
Foco: ao nível de programa
Objetivos:
Melhora a forma
Facilita a leitura e manutenção
Controla a complexidade
Torna a programação mais científica
*
*
Histórico do Banco de Dados (cont.)
Desenvolvimento de software
1976: Projeto Estruturado (Yordon / Constantine, Michael Jackson, Warnier – Orr)
Foco: ao nível de problema
Objetivos:
Modularidade
Padronização do projeto
*
*
Histórico do Banco de Dados (cont.)
Desenvolvimento de software
1977: Análise Estruturada (Chris Ganentine, Tom de Marco)
Foco: ao nível de sistema
Objetivos: 
Desenvolver o modelo lógico
Obter especificação funcional
*
*
Histórico do Banco de Dados (cont.)
Desenvolvimento de software
1979: Análise de Dados
Foco: ao nível de empresa
Objetivos: 
Definir requisitos
Sistema de informação gerencial
Normalização
Modelagem de Dados
*
*
Histórico do Banco de Dados (cont.)
Desenvolvimento de software
Anos 80: Técnicas Automatizadas
Geradores de tela, de programa, de aplicação
LG4, Query Language, CASE
Engenharia da Informação
Anos 90: Orientação a Objeto, Cliente / Servidor
*
*
Histórico de Banco de Dados (cont.)
Arquivos Convencionais
Arquivos convencionais servem
a sistemas específicos (isolados) com pouco ou nenhum compartilhamento com outros sistemas difícil obtenção de informações gerenciais
Técnicas de bancos de dados ressaltam o dado como um recurso importante na empresa, devendo ser: compartilhado, controlado de forma centralizada para se saber quem onde, e com que finalidade, o dado é usado
*
*
Histórico de Banco de Dados (cont.)
Sistemas Isolados
Aplicativos independentes, tanto em relação aos dados quanto as saídas
Cada aplicação cuida apenas de seus arquivos, ignorando possíveis repetições
Possível inconsistência de dados
Programas levam em conta distribuição física dos dados nos arquivos: alteração no lay-out do registro significa alteração nos programas
*
*
Histórico de Banco de Dados (cont.)
Num_conta, nome, endereço, sld_atual, sld_medio, cpf-cgc, dt_nasc
Conta Corrente
Cpf-cgc, nome, endereço, num_atual_cotas, dt_nasc
Fundos de Investimentos
Sistemas Isolados
*
*
Histórico de Banco de Dados (cont.)
Sistemas Integrados
Dados de uma mesma área são armazenados em um mesmo conjunto de arquivos
Um sistema grava saída em arquivo em meio magnético a ser usado como entrada por outro sistema
Alteração no layout de arquivos compartilhado implica alteração em programas de mais de um sistema
*
*
Histórico de Banco de Dados (cont.)
 nome, endereço, cpf-cgc, dt_nasc
Conta Corrente
 num_atual_cotas, dt_nasc
Fundos de Investimentos
Sistemas Integrados
Num_conta, sld_atual, sld_medio, cpd-cgc
*
*
Histórico de Banco de Dados (cont.)
Sistemas que usam SGBD
Integração de dados não apenas por área, mas por toda a Empresa
Dados da empresa compartilhados por todos os sistemas
Sistemas “enxergam” os dados independentemente de sua distribuição pelos arquivos
Programas de aplicação ignoram detalhes de armazenamento/recuperação de dados
Sem redundância de dados não há inconsistência
*
*
Histórico de Banco de Dados (cont.)
 nome, endereço, cpf-cgc, dt_nasc
Conta Corrente
 num_atual_cotas, cpf-cgc
Fundos de Investimentos
 Sistemas que usam SGBD
Num_conta, sld_atual, sld_medio, cpd-cgc
SGBD
*
*
Composição de um Sistema de Banco de Dados
*
*
Composição de um Sistema de Banco de Dados
Dados: em um ou mais arquivos
Metadados: dicionário de dados
Software: SGBD (interface entre usuários e dados)
Hardware: discos
Usuários: DBA, Programadores de Aplicação, Usuários Finais
*
*
Composição de um Sistema de Banco de Dados (cont.)
SGBD
dá suporte ao acesso dos usuários aos dados
esconde do usuário detalhes de armazenamento dos dados
Programador de Aplicação
codifica programas batch ou on-line para manter o DB
*
*
Composição de um Sistema de Banco de Dados (cont.)
DBA - Administrador de BD define:
que dados manter no BD
estrutura que deve ter o BD
estratégias de acesso
que esquema de backup adotar
procedimentos de autorização
como monitorar/sincronizar/reorganizar o BD
*
*
Composição de um Sistema de Banco de Dados (cont.)
Usuário Final
Acessa o BD via:
query language
programas de aplicação
*
*
Linguagens de Bando de Dados
*
*
Linguagens de Bancos de Dados
DDL - Linguagem de definição de dados (create, drop, alter...)
DML - Linguagem de manipulação de dados (insert, delete, update, ...)
DCL - Linguagem de controle de acesso aos dados (grant, revoke, ...)
QL - Linguagem de consulta (select)
*
*
Linguagens de Bancos de Dados (cont.)
SDL - Linguagem de definição de armazenamento
VDL - Linguagem de definição de visões
*
*
DDL
Usada pelo DBA ou por qualquer projetista do BD
Serve para definir os esquemas interno e conceitual quando a arquitetura é de 2 níveis
Define a construção do esquema e a descrição do esquema de armazenamento
*
*
SDL
Usada para especificar o esquema interno
O mapeamento entre os dois esquemas pode ser feito com a SDL ou a DDL
*
*
VDL
Usada para especificar as visões e faz o mapeamento com o esquema conceitual
*
*
DML
Usada para manipular o banco de dados como inserir, apagar e alterar dados
Alto nível ou não procedural
Usada no terminal ou dentro de uma linguagem de programação
Baixo nível ou procedural
Usada dentro de uma linguagem de programação
*
*
O que é um SGBD ?
*
*
O que é um SGBD ? 
Sistema Gerenciador de Banco de Dados
Software que administra o banco de dados e o dicionário de dados, garantindo as restrições de integridade, segurança e consistência do BD.
*
*
O que é um SGBD ? (cont.)
Por que usar SGBD ?
Abstração de dados
Um SGBD permite uma representação conceitual dos dados evitando preocupação com detalhes de armazenamento de dados
Suporte a múltiplas visões de dados
Cada usuário acessa apenas o que lhe é dado direito de acessar
*
*
O que é um SGBD ? (cont.)
Por que usar SGBD ?
Controle de redundância
Sem repetição de dados não há inconsistência
Compartilhamento dos dados
Acesso multi-usuário com controle de concorrência garantido
Segurança contra acesso indevido
Diferentes visões asseguram confidencialidade
*
*
O que é um SGBD ? (cont.)
Por que usar SGBD ?
Múltiplas Interfaces
Acesso via menu, linguagem natural, query language, linguagem de programação
Relacionamentos complexos
Uma entidade pode se relacionar com outras de forma binária, ternária, ...
Restrições de integridade
Armazenadas no BD “enxugam” os programas de aplicação
*
*
O que é um SGBD ? (cont.)
Por que usar SGBD ?
Independência de dados
A definição das estruturas de dados é armazenada fora dos programas de aplicação: alteração de estruturas dispensa recompilação de programas
Recuperação do BD
Feito através de check-points
*
*
Objetivos de um SGBD
Controlar redundância
Restringir o acesso
Armazenamento persistente
Inferência do BD usando regras de dedução
Fornecer múltiplas interfaces
Representação complexa de relacionamentos entre dados
*
*
Objetivos do SGBD (cont.)
Garantir restrições de integridade
Backup e Recuperação
*
*
Objetivos do SGBD (cont.)
Vantagens no uso do SGBD
Garantir padrões
Redução no tempo de desenvolvimento
Flexibilidade
Disponibilidade de informações on-line
*
*
Objetivos do SGBD (cont.)
Desvantagens no uso do SGBD
Alto investimento em hardware, software e treinamento
Modelo geral de definição e processamento de dados
Excesso de segurança, controle de concorrência, recuperação e funções de integridade
*
*
Níveis de abstração de SGBD
*
*
Níveis de abstração de SGBD
Arquitetura de 3 níveis (Visões)
Visões de usuário
Visão total do BD
Visão do armazenamento
...
*
*
Níveis de abstração de SGBD (cont.)
Arquitetura de 3 níveis (Esquemas)
Sub-esquemas
Esquema Conceitual
Esquema Físico
...
*
*
Níveis de abstração de SGBD (cont.)
Arquitetura de 3 níveis (CODASYL - 71)
(Conference on Data System and Language)
Visão
Conceitual
Físico
...
*
*
Níveis de abstração de SGBD (cont.)
Arquitetura de 3 níveis (ANSI/SPARC 75)
(American. Nacional Standart Institute / System Planning and Requirements Commitee)
Externo
Conceitual
Interno
...
*
*
Níveis de abstração de SGBD (cont.)
Nível Externo
Visão de um subconjunto do nível conceitual (visão que um aplicativo tem dos dados)
Visão que cada usuário tem do sistema
Administrador da aplicação: usuário
*
*
Níveis de abstração de SGBD (cont.)
Nível Conceitual
Visão conceitual e global dos dados, representando o mundo real
Consiste de entidades, relacionamentos e atributos
Deve envolver todos os objetos do sistema de informação
Administrador de dados: AD
*
*
Níveis de abstração de SGBD (cont.)
Nível Interno
Visão dos diversos registros armazenados em um banco de dados
Alteração no nível interno (estrutura de armazenamento) não deve afetar o modelo conceitual
Administrador de Banco de Dados: DBA
*
*
Usuários do SGBD
*
*
Usuários do SGBD
Administradores
do BD
Projetistas de BD
usuários finais
Casual
Ingênuos
Sofisticados
Isolados
*
*
Usuários do SGBD (cont.)
Analistas de Sistemas
Programadores
Desenvolvedores de ferramentas
Operadores
Pessoal de manutenção
*
*
Interfaces do SGBD
Interfaces baseadas em menus
Interfaces gráficas
Interfaces baseadas em formulários
Interfaces de linguagem natural
Interfaces para usuários sem experiência
Interfaces para DBA
*
*
Utilitários do SGBD
Carga de arquivos existentes
Backup/Recovery
Reorganização de arquivos
Monitoramento de performance
Software de comunicação
*
*
Tipos de SGBD
Hierárquico 
Rede
Relacional
Objeto-Relacional
Orientado-Objeto
Outros
*
*
Tipos de SGBD: Hierárquico Lógico
Entidades implementadas como segmentos e relacionamentos como ponteiros
Restrições de integridade:
exceto a raiz qual registro deve ter um pai
Operações: get first, get next, ...
*
*
Tipos de SGBD: Hierárquico Físico (cont.)
Dados armazenados usando estruturas embutidas
Usuário vê um conjunto de árvores
Ligações explicitas via ponteiros no nível físico
Navegação através de ponteiros e de responsabilidade do programador
Tem dependência de dados
*
*
Tipos de SGBD: Rede Lógico (cont.)
Entidades como coleções de registros e relacionamentos como ligações pai-filho
Restrições de integridade:
relacionamento m:n não pode ser representado por um único tipo de ligação
Operações: get, find, store, ...
*
*
Tipos de SGBD: Rede Físico (cont.)
Dados organizados através de uma rede de nós e links
Usuário vê um conjunto de grafos
Ligações explicitas via ponteiros no nível físico
Navegação através de ponteiros e de responsabilidade do programador
Tem dependência de dados
*
*
Tipos de SGBD: Relacional Lógico (cont.)
Entidades como tabelas e relacionamentos como colunas em pares de tabelas
Restrições de integridade:
componentes de PK não pode ser nulo
para cada valor de FK em uma tabela deve existir um valor de PK em outra tabela
Operações: seleção, projeção, junção, ...
*
*
Tipos de SGBD: Relacional Físico (cont.)
Dados armazenados de forma tabular
Usuário vê um conjunto de tabelas
Ligações implícitas compartilhando chaves num nível lógico
Navegação automática: otimizadores de consultas
*
*
Tipos de SGBD: Classificação de BD (cont.)
Plan1
		MER		RELACIONAL		REDE		HIERARQUICO
		Entidade		Tabelas		Grafos		Árvores
		Entidade		Linhas		Registro		Segmento
		Relacionamento		Implícito (pares de colunas)		Explícito (ponteiros)		Explícito (ponteiros)
		Atributos		Coluna		Campo		Campo
Plan2
		
Plan3
		
*
*
Tipos de SGBD: Classificação de BD (cont.)
A
B
E
C
D
MER
1
A
3
C
1
4
D
2
2
B
1
5
E
2
3
RELACIONAL
*
*
Tipos de SGBD: Classificação de BD (cont.)
A
B
E
C
D
MER
REDE
A
B
E
C
D
*
*
Tipos de SGBD: Classificação de BD (cont.)
A
B
E
C
D
MER
HIERÁRQUICO
A
B
E
C
D
E
*
*
Tipos de SGBD: SGBD’s Hierárquicos (cont.)
IMS (IBM)
SYSTEM 2000 (SAS)
TDMS (BURROUGHS)
MARS VI (CDC)
RFMS (Univ. Texas)
*
*
Tipos de SGBD: SGBD’s Rede (cont.)
IDS II (Bull)
DMS II (UNISYS)
IDMS ( CULLINAME)
DMS 1100 (UNIVAC)
DBMS-11 (DEC)
TOTAL (CINCON)
ADABAS (Software AG)
*
*
Tipos de SGBD: SGBD’s Relacionais (cont.)
ORACLE
INGRES
DB2
INFORMIX
RDB
PROGRES
SQL SERVER
*
*
SGBD x SGA
*
*
SGBD x SGA
SGBD - software responsável pela definição e manutenção de um BD
SGA - conjunto de rotinas do sistema operacional responsável pelo sistema de arquivos (SA) e respectivos métodos de acesso
SA - arquivos convencionais (sequenciais, indexados, randômicos) e suas operações
*
*
SGBD x SGA
Máquina
Mundo real
MER
SGBDOO
Relacional
Rede
Hierárquica
SGBD Específico
SGA
tempo
*
*
SGBD X SGA
SGBD
SGA
Alto nível
Baixo nível
*
*
Modelo de Dados
*
*
Modelo de Dados
É a principal ferramenta para fornecer abstração de dados
É um conjunto de conceitos que pode ser usado para descriminar a estrutura do banco de dados
Um modelo de dados se compõe de tipos de objetos, relacionamentos entre objetos e restrições de objetos
*
*
Modelo de Dados (Cont.)
As operações básicas fazem parte da maioria dos modelos de dados
Ferramenta usada para descrever a estrutura do BD
O modelo de dados se compõem de:
Estruturas de dados
Operações
Restrições de integridade
*
*
Modelo de Dados (Cont.)
Os modelos de dados se dividem em três níveis: 
Conceitual (alto nível)
Lógico
Físico (baixo nível)
*
*
Modelo de Dados (Cont.)
Conceitual: Descreve dados que estão próximos da forma como muitos usuários vêem os dados, muito próximos do mundo real.
Ex: Modelo Semântico e MER
Lógico: Nível intermediário que descreve dados ao nível de registro bem próximo da implementação física
Ex: Relacional, Rede e Hierárquico
*
*
Modelo de Dados (Cont.)
Físico: Descreve as estruturas de dados ao nível de armazenamento físico dos dados
*
*
Lógico
Físico
Conceitual
Fase de Projeto do BD
Relacional
Rede
Hierárquico
SGBD específico
SGA
Semântico/MER
Modelo de Dados
*
*
Modelo de Dados: conceitual (cont.)
Entidades: representa um objeto do mundo real ou conceito
Atributos: propriedades que descrevem uma entidade
Relacionamentos: interações entre entidades
*
*
Projetos
Funcionários
Cod. Projeto
Nome Projeto
Valor Projeto
Cod. Funcionário
Nome Funcionário
Endereço Funcionário
Projetos têm Funcionários
Modelo de Dados: Conceitual (cont.)
*
*
Modelo de Dados: Lógico (cont.)
São usados na maioria dos DBMS, incluindo os três tipos de modelos usados
Relacional
Rede
hierárquico
Representam dados usando estruturas de registros
São por vezes chamados de modelos de dados baseados em registros
*
*
Modelo de Dados: Físico (cont.)
Descrevem como os dados são armazenados no computador através da representação da informação tal como formato, ordem e acesso aos registros
*
*
Modelo de Dados (cont.)
Esquema: Descrição gráfica ou textual do BD conforme o modelo de dados. Ele é especificado durante o projeto do BD e não é modificado com freqüência. 
Ex: FUNC (mat, nome, sal, dep)
 DEPA (dep, descr)
 DEPE (mat, seq, nomd, sexd)
Diagrama de Esquema: Mostra alguns aspectos do BD
*
*
Modelo de Dados (cont.)
Instância: Descrição de uma abstração do banco de dados. São os dados estão no BD em determinado momento. Pode ser modificado com freqüência. 
*
*
Arquitetura do BD
*
*
Arquitetura do BD
Usaremos a arquitetura de três níveis
O objetivo é separar as aplicações de usuário da parte física do BD
Nível interno: armazenamento físico da estrutura do BD. Usa a modelagem de dados físicos e descreve detalhes de armazenamento e caminhos para BD.
*
*
Arquitetura do BD (cont.)
Nível conceitual: descreve a estrutura de todo o BD para os usuários. Esconde os detalhes as estruturas de armazenamento físico e se concentra na descrição de entidades, tipos de dados, relacionamentos, operações de usuários e restrições. Um modelo de dados de ato nível ou modelo de implementação pode ser usado neste nível
*
*
Arquitetura do BD (cont.)
Nível externo: descreve a parte do BD a um grupo de usuários (visões) e esconde o restante do BD. Um modelo de alto nível ou modelo de implementação é usado neste nível
*
*
Visão externa1
Esquema Interno
...
Esquema Conceitual
Armazenamento do BD
Usuários Finais
Visão externa2
*
*
Arquitetura do BD (cont.)
Mapeamento de Dados
Processo de transformar requisições de usuários feitas no nível externo aos níveis mais internos e retornar uma resposta ao usuário
Divide-se em:
Lógico
Físico
*
*
Arquitetura do BD (cont.)
Independência de Dados
Capacidade de fazer modificações no banco de dados em um dos níveis sem afetar o nível
mais alto
Independência lógica dos dados
Independência física dos dados
*
*
Arquitetura do BD (cont.)
Independência Lógica
Capacidade de modificar o esquema conceitual sem modificar o esquema externo ou programas de aplicação
Independência Física
Capacidade de modificar o esquema interno sem modificar o esquema externo ou programas de aplicação (Reorganização de arquivos)
*
*
Por que modelagem de dados ?
*
*
Por que modelagem de dados ?
Com o crescente uso de SGBD’s em face da necessidade de aplicações cada vez mais complexas, é inevitável esta abordagem
Antes, as aplicações usavam um número muito reduzido de arquivos convencionais
Sistemas antigos (aplicações isoladas) primavam pela repetição de dados em vários arquivos
*
*
Por que modelagem de dados ? (cont.)
Aplicações desenvolvidas com “L4G” dependem de uma rígida administração de dados - cada usuário projeta os dados de seu uso específico sem tomar conhecimento das necessidades dos demais usuários
Principal virtude dos modelos de dados: estabilidade
*
*
Por que modelagem de dados ? (cont.)
Enquanto modela dados o analista concentra-se nesta tarefa “esquecendo” software e SGBD
Os relacionamentos representam a obtenção de respostas a certas necessidades de informação por parte do usuário
*
*
Por que modelagem de dados ? (cont.)
Modelo prévio de dados é um excelente instrumento de documentação do mundo real, em tempo de entrevista
Levanta e documenta a parte mais estável de uma aplicação: os dados
Excelente ferramenta gráfica de projeto conceitual de BD
*
*
MER
*
*
MER
Proposto por Peter S. Chen - 1976
Entidade
Algo sobre que dados são armazenados
Representação abstrata de algo do mundo real
Ex: Aluno, cliente, nota fiscal, ...
Conjunto de entidades
Grupo de entidades com características semelhantes
Ex: Alunos, clientes, notas fiscais, ...
*
*
MER (cont.)
Relacionamento - associação entre entidades
Relacionamento Binário - é um par ordenado (e1, e2), onde e1 e e2 são respectivamente as entidades E1 e E2
*
*
MER (cont.)
Grau de um relacionamento - número de conjuntos de entidades envolvidos no relacionamento
Ex: unário, binário. ternário, ...
*
*
MER (cont.)
Classe ou cardinalidade dos relacionamentos - razão ente as quantidades com que cada conjunto de entidades participa do relacionamento
Ex: Binários - 1:1 	1:n 	m:n
 Ternários - 1:m:n	m:n:p
*
*
MER (cont.)
Funcionários
Projetos
Chefia
Hor_trab
Dt_posse
Dt_aloc
Trabalha
Departamentos
Chefia
Chefia
*
*
MER (cont.)
Atributos
São características de entidades ou de relacionamentos
São funções que levam um ponto do conjunto de entidades ou do relacionamento a um ponto de conjuntos de valores
F M
Funcionários
100
200
Matricula
Sexo
*
*
MER (cont.)
Relacionamento unário ou recursivo ou auto-relacionamento
Pessoas
casa
1
1
Marido
Esposa
Papel da entidade
Produtos
compõe
n
m
É componente
É composto
*
*
MER (cont.)
Itens
Pedidos
Requisições
P_R_I
m
n
p
- Para um item e para um pedido correspondem n requisições
- Para uma requisição e um pedido correspondem m itens
- Para uma requisição e um item correspondem p pedidos
*
*
MER (cont.)
Professores
Disciplinas
Alunos
P_A_D
1
n
m
- Um aluno cursa uma disciplina com um professor
- Um professor ministra uma disciplina para n alunos
- Um professor ministra para um aluno m disciplinas
*
*
MER (cont.)
*
*
MER (cont.) 	
Chave primária
Conjunto de atributos que identificam uma única entidade
Ex: matrícula, cod_produto, cod_cli, CPF, ...
Restrições
Só pode haver uma por entidade
Não pode ser nula
Deve identificar apenas um elemento da entidade
Deve ser a menor possível
Valor não muda ao longo da vida da entidade
*
*
MER (cont.) 	
Chave estrangeira
Conjunto de atributos que fazem associação entre esta entidade e outra que contenha esta chave como primária.
Exemplo: 
Alunos
Disciplinas
Nota
Período
Mat
Nom
Cod
Des
Cursa
Mat
Cod
*
*
Extensões do MER
Chave candidata - conjunto de atributos que podem ser chave primária
Ex: mat, RG, CDD
Chave secundária ou alternada - conjunto de atributos que identificam um grupo de entidades
Ex: sal, sexo, ...
*
*
Extensões do MER
Chave artificial ou surrogate key
Número seqüencial sem qualquer semântica, introduzido para ser chave primária de um conjunto de entidades
Ex: nud, mat, ...
Departamentos
Dependentes
Funcionários
CDD
Nmd
Mat
Nmf
Sexo
RG
Matf
Nud
Nmd
Sal
CoDep
*
*
Extensões do MER
Como escolher a chave primária
Deve ser a menor possível
Valor não muda ao longo da vida da entidade
Não pode ser NULL (nem parcial, nem totalmente)
*
*
MER (cont.)
Entidade Fraca
Sua existência depende de outra
Seus atributos, em geral, são insuficientes para determinar uma chave primária
Funcionários
Dependentes
Depende
1
n
*
*
MER (cont.)	
Cardinalidade dos relacionamentos
Um relacionamento pode ter a cardinalidade alterada com o tempo ou conforme as necessidades de informação por parte do usuário
Ex: Casamento entre pessoas
Atual (1h x 1m) ... 1 : 1
Atual (1h x 1Poligamiam) ... 1 : n
Histórico de todos os casamentos ... M : n
*
*
MER (cont.)
Passos para identificar a cardinalidade
Passo 1: Identificar a cardinalidade entre Cliente Pedido
Passo 2: Identificar a cardinalidade entre Pedido Cliente
Passo 3: Identificar a cardinalidade máxima para cada entidade
*
*
MER (cont.)
Cliente
Pedido
1
n
Passo 1
Cliente
Pedido
n
n
Passo 2
Cliente
Pedido
n
n
Passo 3
n
1
*
*
MER (cont.)
Itens
Lojas
Vende
n
1
Itens
Lojas
Vende
n
m
Loja única
Abertura de novas lojas
 
Cardinalidade dos casamentos
*
*
MER (cont.)
 
Cardinalidade dos relacionamentos
Departamentos
Funcionários
Aloca
1
n
Departamentos
Funcionários
Aloca
m
n
Qual a alocação atual do funcionário ?
Data
Um funcionário pode estar lotado simultaneamente em mais de um departamento: devia haver um atributo tipo percentual de dedicação do funcionário ao departamento
Em quais departamentos esteve ou está lotado o funcionário ?
*
*
MER (cont.)
Análise Sentencial
Substantivos (sujeitos/objetos) - entidades
Verbos (predicados) - relacionamentos
Casas
Pessoas
Mora
Tem
Carros
*
*
MER (cont.)
Análise Sentencial
Adjetivos - atributo de entidades
Advérbios - atributo de relacionamentos
Pessoas
Possui
Carros
Nome
Profissão
Nome
Profissão
Dt_aquisição
José, advogado, possui um volks azul desde 1987
*
*
MER (cont.)
Análise Sentencial
Entidade tem atributos
Ex: nota fiscal tem série, data, número
 carro tem marca, cor, modelo
Atributo de entidade é valor
Ex: o número da nota fiscal é 1234
 a idade da pessoa é 36
*
*
Extensões do MER
*
*
Extensões do MER
Atributos compostos - formados por mais de um atributo
Atributos multivalorados - levam uma entidade a mais de um ponto do conjunto de valores
Clientes
Fones
Endereço
Logradouro
CEP
Apto
Num
Nome
*
*
Extensões do MER (cont.)
Parcialidade / Totalidade
Nem todo funcionário gerencia um departamento (parcial)
Todo departamento é gerenciado por um funcionário (total)
Funcionários
Gerencia
Departamentos
1
1
*
*
Extensões do MER (cont.)
Relacionamentos totais e parciais
Pessoas
Nasce
Cidades
1
1
Mora
Casa
1
1
n
1
Nome
Dt_nasc
Nome
Pop
*
*
Extensões do MER (cont.)
Cardinalidade dos relacionamentos com valores máximo e mínimo de entidades que se associam
Alunos
Cursa
Disciplinas
(1,6)
Nome
Mat
(0,40)
Nota
Período
Cod
Des
*
*
Extensões do MER (cont.)
Generalização x Especialização
*
*
Extensões do MER (cont.)
Generalização/Especialização
As subcategorias (subtipos) herdam os atributos da categoria supertipo.
As subcategorias detém a mesma chave
primária da categoria supertipo
*
*
Extensões do MER (cont.)
Agregação
Médicos
Prescreve
Pacientes
Atende
m
n
Exames
Consultas
Um exame é prescrito por um médico para um paciente
*
*
Extensões do MER (cont.)
Agregação - é uma abstração que:
permite que relacionamentos sejam tratados como entidades de nível mais alto
permite modelar um relacionamento entre uma entidade e um relacionamento (este geralmente m: n)
A agregação origina uma nova entidade
*
*
Mapeamento MER x DER
*
*
Mapeamento MER X DER
Funcionários
Projetos
Mat
Nmd
Cdp
Nmp
Cdp
Dt_aloc
Funcionários
Projetos
Mat
Nmd
Cdp
Nmp
Aloca
Dt_aloca
n
1
Chave primária do lado 1 vai para o lado n
Atributos do relacionamento vão para o lado n
*
*
Mapeamento MER X DER (cont.)
Alunos
Disciplinas
Cda
Nma
Cdd
Nmd
Cdp
Dt_aloc
Alunos
Disciplinas
Cda
Nma
Cdd
Nmd
Cursa
Período
m
n
 Quebra o relacionamento m:n em dois 1:n
 Atributos do relac. ficam na entidade intermediária
 Chaves primárias das entidades fazem parte da chave 
primária da entidade intermediária
Nota
Al-di
Cdd
Cda
*
*
Mapeamento MER X DER (cont.)
Médicos
Hospitais
Cdm
Nmm
Cdm
Nmm
Médicos
Hospitais
Cdm
Nmm
Cdh
Nmh
Gerencia
Dt_posse
1
1
 Atributos do relacionamento vão para a entidade que
tem participação total no relacionamento
 Chave primária da entidade do lado parcial vai para a
entidade que participa totalmente
Cdm
Dt_posse
*
*
Mapeamento MER X DER (cont.)
Funcionários
Mat
Nom
Chefia
Chefe
1
n
Subordinado
Funcionários
Mat
Nom
Matchefe
*
*
Mapeamento MER X DER (cont.)
Peças
Cod
des
Compõe
Componentes
m
n
Compostos
Funcionários
Mat
Nom
Cd-composto
Qtd
Compõe
Cd-componente
Qtd
*
*
Mapeamento MER X DER (cont.)
Funcionários
Mat
Nom
Gerencia
Dt_posse
1
1
Dt_aloc
Departamentos
Aloca
Cursa
Chefia
1
n
Cursos
n
m
n
1
Cdd
Des
Cdct
Nmc
*
*
Mapeamento MER X DER (cont.)
Funcionários
Mat
Nom
Dt_posse
Mat-ger
Departamentos
Cursos
Cdd
Des
Cdct
Nmc
Cursa
Cdct
Mat
Dt_cur
Mat-ch
Chefe
Subordinado
Dt_aloc
Cdd
*
*
Mapeamento MER X DER (cont.)
Modelo Físico
Modelo Lógico
Modelo Conceitual
Mundo
Real
Modelo Relacional .....
DER .....................................
MER......................................
*
*
Mapeamento MER X DER (cont.)
MER - os atributos de uma entidade não devem aparecer em outra
DER - os atributos de uma entidade podem aparecer em outra para estabelecer o relacionamento
*
*
Mapeamento MER X DER (cont.)
A
B
R
1
1
AR
CA
AA
CB
AB
A
B
AR
CA
AA
CB
AB
CB
A
B
R
1
N
AR
CA
AA
CB
AB
A
B
AR
CA
AA
CB
AB
CA
A
B
R
M
N
AR
AA
CB
AB
A
B
CA
AA
CB
AB
CA
AB
AR
CA
CB
*
*
Mapeamento MER X DER (cont.)
Relacionamento M x N se transforma em 2 relacionamentos 1 : n
Funcionários
Departamentos
Lotações
Mat
Cdd
Cdd
Nom
Mat
Nmd
Dat
100	 Ari		100 Adm Jan/98 Ven	Vendas
200	 Ana	100 Ven Mar/99 Pro	Produção
300	 Eva		200 Ven Out/00 Adm	Adminst
 	 		300 Pro Mai/01 
*
*
Mapeamento MER X DER (cont.)
A
C
1
B
1
1
CA
AA
Tipo
A
C
B
CA
AA
Tipo
AC
AB
CA
CA
AB
AC
*
*
Mapeamento MER X DER (cont.)
A
C
M
B
N
CA
AA
CC
AC
R
P
CB
AB
A
C
B
CA
AA
CC
AC
CB
AB
R
AR
CA
CC
CB
AR
*
*
Mapeamento MER X DER (cont.)
A
C
M
B
N
CA
AA
CC
AC
R
P
CB
AB
AR
S
Q
AS
A
C
B
CA
AA
CC
AC
CB
AB
AS
R
CA
CB
AR
S
CA
CC
CB
*
*
Modelagem com ferramenta CASE
*
*
Modelagem com ferramenta CASE
Metodologia IDE1X
Desenvolvida pela US Air Force
Usada por vários órgãos do governo americano
Representa relacionamentos via chaves compartilhadas
Usada por grandes empresas de diversas áreas
*
*
Modelagem com ferramenta CASE (cont.)
Metodologia IDE1X...
Trata chaves como o modelo relacional
A chave primária (PK) do lado 1 vai para o lado N
Relacionamento não identificador (linha cheia): chave estrangeira fará parte da PK no lado N
Relacionamento não identificador (linha pontilhada): chave estrangeira não fará parte da chave primária no lado N
*
*
Modelo Relacional
*
*
Modelo Relacional
Baseia-se na teoria dos conjuntos
Os elos são implícitos
O usuário vê o banco de dados como um conjunto de tabelas
Mat
Nome
Dep
100 Ana Ven
200 Edu Pro
300 Ari Adm
400 Eva |Mar
Funcionários
Nome da tabela
Atributos
Tuplas
Valor de atributo
Domínios
*
*
Modelo Relacional (cont.)
Esquema da relação (tabela): funcionários (mat, nom, dep)
Relação - subconjunto do produto cartesiano dos domínios R  D1 x D2 x ... X Dn
100
200
300
400
Ana
Edu
Eva
Ari
Adm
Mar
Pro
Ven
Nomes
Matrículas
Departamentos
*
*
Modelo Relacional (cont.)
Uma relação pode ser representada sob forma de tabela, onde
cada coluna representa um atributo
cada linha representa uma ocorrência de:
uma entidade
um relacionamento
Linha (tupla) é um conjunto de atributos
*
*
Modelo Relacional (cont.)
Um relação pode ser representada sob forma de tabela onde: ...
Domínio - conjunto de valores do atributo
Grau de uma relação - número de atributos da tupla da relação
Chave primária - um ou mais atributos que identificam uma única linha
Ex: aluna (mat, nom, dt_nasc, sexo)
*
*
Normalização
*
*
Normalização
MER
Modelo Lógico
Arquivos
(Top-Down)
Mundo
Real
Modelo Lógico
Normalização
Arquivos
(Botton-Up)
Mundo
Real
*
*
Normalização (cont.)
Simplificação de relações a fim de que os algoritmos de atualização de dados sejam mais simples e mais claros
Como sub-produto: eliminação da redundância de dados
Resultado das pesquisas de E. F. Codd
*
*
Normalização (cont.)
Dependência Funcional
A matrícula de um funcionário determina funcionalmente o nome bem como o salário do funcionário
Matrícula Nome
Matrícula Salário
Se A determina funcionalmente B, então B depende funcionalmente de A, logo: Nome depende funcionalmente de matrícula
*
*
Normalização (cont.)
Dependência Funcional
Func (mat, nome, sal, CPF)
Mat Nome
Mat Sal
Mat CPF
CPF Sal
CPF Nome
CPF Mat
Mat
CPF
Sal
Nome
*
*
Normalização (cont.)
Dependência Funcional
Tarefa (mat, nom, nu_proj, nm_proj, horas-trab)
Mat, nu_proj horas-trab
Mat nome
Mat
Nm_proj
Horas-trab
Nu_proj
Nom
*
*
Normalização (cont.)
Porque ?
Garante a falta de redundância decorrente das DF
Garante a falta da anomalia de atualização
uma ocorrência de um fato é atualizada, e não todas
Garante a falta da anomalia de retirada
um fato válido é permitido quando a tupla é deletada
*
*
Normalização (cont.)
Existem 6 formas normais
Analisaremos aqui apenas as 4 primeiras formas normais e a forma normal de Boyce-Codd
*
*
Normalização (cont.)
1FN
Força a organização dos dados como estruturas “planas” sem grupos repetidos
Todo componente de toda tupla é um valor atômico
Exemplo: Carros(Chassi, nome, cor, ano, cod_marca, descrição_marca)
Grupo 1: Dados sobre o carro
Grupo 2: Dados sobre a marca
Solução
Carros(chassi,nome,cor,ano)
Marcas(cod_marca,descrição_marca)
*
*
Normalização (cont.)
2FN
Todos os atributos não chave devem depender de toda a chave
Exemplo: Projeto (Matricula, nome, cod_projeto, nome_projeto, horas_trabalhadas)
Matricula nome
Cod_projeto nome_projeto
Matricula, cod_projeto horas_trabalhadas
Solução
Projeto(Cod_projeto,nome_projeto)
Funcionário(Matricula, nome)
Proj_func(Matricula, cod_proj, horas_trabalhadas)
*
Normalização (cont.)
3FN
Não permite dependencia circular
Ex: Teatro(cod,nome,peça)
Solução
Teatro(cod,nome)
 Cliente(cod,
nome, logradouro, CEP)
Solução
Cliente(cod,nome,logradouro)
CEPs(numero, CEP)
*
*
Normalização (cont.)
4FN
Reconhece e separa atributos multivalorados constituindo uma chave primária composta
Exemplo: Cliente(codigo, nome, telefones)
Telefones pode ser fixo, fax, celular, residencial, comercial, etc.
Solução
Cliente(codigo,nome)
Telefones(numero,telefone)
*
*
Normalização (cont.)
FNBC
Elimina redundâncias e anomalias de atualização e retirada
Exemplo: Venda(Cod_produto, valor_unitário, quantidade, valor_total)
Valor total é calculado a partir do valor unitário * a quantidade
Solução
Venda(cod_produto,valor_unitario,quantidade)
*
*
Desnormalização
*
*
Desnormalização
Vantagens
Melhorar o desempenho das consultas
Quando necessita retornar muitas vezes resultados já calculados
Criação de históricos
Quando já tiver pré-determinado os tipos de valores de uma tabela.
*
*
Desnormalização (cont.)
Desvantagens
Vulnerabilidade ao surgimento de anomalias quando ocorre manipulação
Ameaça a integridade dos dados
Quando a consulta precisa de dados separados. Nesse caso, se as tabelas estão desnormalizadas, a leitura das informações não necessárias ocasiona maior tempo de processamento. 
*
*
Fragmentação
Desnormalização
*
Scripts Oracle
*
*
Tabela
Unidade básica de armazenamento da base de dados, formada por colunas e linhas (tuplas) 
*
*
Criando Tabelas
 
SQL> CREATE TABLE depto 2	(depto_num NUMBER(2),
 3 		depto_nom VARCHAR2(14),
 4 		depto_loc VARCHAR2(13));
Table created.
Criando a tabela depto.
Listando a estrutura da tabela criada.
 
SQL> DESCRIBE depto
 Name Null? Type
 --------------------------- -------- ---------
 DEPTO_NUM NOT NULL NUMBER(2)
 DEPTO_NOME VARCHAR2(14)
 DEPTO_LOC VARCHAR2(13)
*
*
Descartando uma Tabela
Todos os dados e a estrutura da tabela são destruídos.
Qualquer transação pendente é encerrada.
Todos os índices são descartados.
Essa operação não pode ser desfeita.
SQL> DROP TABLE depto30;
Table dropped.
*
*
Truncando uma Tabela
Remove todas as linhas da tabela liberando o espaço ocupado 
Essa operação não pode ser desfeita
SQL> TRUNCATE TABLE departamento;
Table truncated.
*
*
Alterando uma Tabela
Altera a estrutura de uma tabela 
Essa operação não pode ser desfeita
SQL> Alter TABLE departamento 
alter column nome varchar(20);
Table altered.
SQL> Alter TABLE departamento 
drop column nome;
Table altered.
SQL> Alter TABLE departamento 
add nome varchar(20);
Table altered.
*
O Comando INSERT
Adicione linhas a uma tabela utilizando o comando INSERT. 
O comando INSERT insere apenas uma linha por vez.
Não esqueça o COMMIT
INSERT INTO	table [(column [, column...])]
VALUES		(value [, value...]);
*
Inserindo Novas Linhas
Insira uma nova linha informando os valores para cada coluna da tabela.
Liste os valores na mesma ordem das colunas na tabela. 
Opcionalmente, liste as colunas na cláusula do INSERT. 
 
Strings e datas devem ser informando entre aspas simples.
SQL> INSERT INTO depto (depto_num, depto_nome, depto_loc)
 2 VALUES	 (50, 'DESENVOLVIMENO', ‘RECIFE');
1 row created.
*
SQL> INSERT INTO	depto (depto_num, depto_nome )
 2 VALUES		(60, ‘REC HUMANOS');
1 row created.
SQL> INSERT INTO	depto
 2 VALUES		(70, ‘JURIDICO', NULL);
1 row created.
Inserindo Linhas com Nulls
Implicitamente: omita o nome da coluna da lista de colunas.
Explicitamente: especifique o valor NULL.
*
O Comando UPDATE
Modificando linhas existentes com o comando UPDATE. 
Modifique mais de uma linha por vez especificando uma condição na cláusula WHERE.
Não esqueça o COMMIT
UPDATE		table
SET		column = value [, column = value]
[WHERE 		condition];
*
Atualizando linhas em uma tabela
Linhas específicas podem ser modificadas utilizando a cláusula WHERE.
Todas as linhas da tabela são modificadas se a cláusula WHERE for omitida.
SQL> UPDATE 	emp
 2 SET 	depto_num = 20
 3 WHERE 	enum = 7782;
1 row updated.
SQL> UPDATE 	emp
 2 SET 	depto_num = 20;
14 rows updated.
*
Eliminando Linhas de uma Tabela
Linhas específicas podem ser eliminadas utilizando a cláusula WHERE.
Todas as linhas da tabela são eliminadas se a cláusula WHERE for omitida.
SQL> DELETE FROM	depto
 2 WHERE 		depto_nome = 'DESENVOLVIMENTO'; 
1 row deleted.
SQL> DELETE FROM	depto;
4 rows deleted.
*
*
O Comando SELECT
SELECT	[DISTINCT] {*, column [alias],...}
FROM	table;
SELECT identifica as colunas
FROM identifica as tabelas
*
*
Selecionando linhas
 
SQL> SELECT *
 2 FROM 	depto;
*
*
 
 
 
 
Definindo Alias para Colunas
 
SQL> SELECT enome AS nome, sal AS salario
 2 FROM emp;
NOME SALARIO
------------- --------- ...
SQL> SELECT enome "Nome",
 2 sal*12 “Salario Anual"
 3 FROM emp;
*
*
 
Eliminando Linhas Duplicadas
SQL> SELECT DISTINCT depto_num
 2 FROM emp;
DEPTO_NUM
---------
 10
 20
 30
 
DISTINCT
*
Utilizando a Cláusula WHERE
SQL> SELECT enome, cargo, depto_num
 2 FROM emp
 3 WHERE cargo='CAIXA';
ENOME CARGO DEPTO_NUM
---------- --------- ---------
RONALDO CAIXA 30
MANUEL CAIXA 20
PAULO CAIXA 20
LUCIANO CAIXA 10
*
Operadores de Comparação
Operador
=
>
 >=	
<
 <=	
<>
Significado
Igual a
Maior que
Maior ou igual a	
Menor que
Menor ou igual a
Diferente de
*
Outros Operadores
Operador
BETWEEN ...AND...
IN(lista)
LIKE
IS NULL
Significado
Entre dois valores (inclusive)	 
Satisfaz uma lista de valores 
Satisfaz um padrão de caracteres
É um valor nulo (null) 
*
Operador BETWEEN
ENOME SAL
---------- ---------
MARIA 1250
SERGIO 1500
MATHEUS 1250
PAULO 1100
LUCIANO 1300
SQL> SELECT	enome, sal
 2 FROM 	emp
 3 WHERE	sal BETWEEN 1000 AND 1500;
*
Operador IN
SQL> SELECT	enum, enome, sal, ger
 2 FROM 	emp
 3 WHERE	ger IN (7902, 7566, 7788);
 ENUM ENOME SAL GER
--------- ---------- --------- ---------
 7902 JOSE 3000 7566
 7369 MANUEL 800 7902
 7788 FABIO 3000 7566
 7876 PAULO 1100 7788
*
SQL> SELECT	enome
 2 FROM 	emp
 3 WHERE	enome LIKE ‘M%';
Operador LIKE
Utilize o operador LIKE para realizar pesquisas por padrões (wildcards).
% substitui zero ou mais caracteres
_ substitui um único caracter
*
SQL> SELECT enome, ger
 2 FROM emp
 3 WHERE ger IS NULL;
ENOME GER
---------- ---------
CARLOS
Operador IS NULL
Testando valores nulos (null)
*
Operadores Lógicos
Operador
AND OR
 NOT
Significado
Retorna TRUE se a condição de ambos os componentes for TRUE
Retorna TRUE se a condição de um dos componentes for TRUE
Retorna TRUE se a condição for FALSE (vise-versa) 
*
Operador NOT
SQL> SELECT enome, cargo
 2 FROM emp
 3 WHERE cargo NOT IN('CAIXA','GERENTE','ANALISTA');
ENOME CARGO
---------- ---------
CARLOS PRESIDENTE
MARIA VENDEDOR
CELSO 	 VENDEDOR
SERGIO 	 VENDEDOR
MATHEUS 	 VENDEDOR
*
Cláusula ORDER BY
SQL> SELECT 	 enome, cargo, depto_num, dtinicio
 2 FROM 	 emp
 3 ORDER BY dtinicio DESC;
ENOME CARGO DEPTO_NUM DTINICIO
---------- --------- --------- ---------
PAULO CAIXA 20 12-JAN-83
FABIO ANALISTA 20 09-DEC-82
LUCIANO CAIXA 10 23-JAN-82
RONALDO CAIXA
30 03-DEC-81
JOSE ANALISTA 20 03-DEC-81
CARLOS PRESIDENTE 10 17-NOV-81
MARIA VENDEDOR 30 28-SEP-81
...
14 rows selected.
*
Joins
Utilize uma junção para consultar dados de mais de uma tabela.
Especifique a condição de junção na cláusula WHERE.
Informe o nome da tabela junto com o nome da coluna, se tabelas diferentes possuírem colunas com os mesmos nomes.
SELECT	table1.column, table2.column
FROM	table1, table2
WHERE	table1.column1 = table2.column2;
*
Criando Alias para Tabelas
SQL> SELECT emp.enum, emp.enome, emp.depto_num, 
 2	 depto.depto_num, depto.depto_loc
 3 FROM emp, depto
 4 WHERE emp.depto_num = depto.depto_num;
SQL> SELECT e.enum, e.enome, e.depto_num, 
 2 d.depto_num, d.depto_loc
 3 FROM emp e, depto d
 4 WHERE e.depto_num = d.depto_num;
*
O que são Funções de Grupo?
Funções de grupo operam em conjuntos de linhas, produzindo um resultado por grupo.
EMP
“o maior salário da tabela EMP”
DEPTO_NUM SAL
--------- ---------
 10 2450
 10 5000
 10 1300
 20 800
 20 1100
 20 3000
 20 3000
 20 2975
 30 1600
 30 2850
 30 1250
 30 950
 30 1500
 30 1250
 MAX(SAL)
---------
 5000
*
Tipos de Funções de Grupo
AVG (média)
COUNT (contagem)
MAX (máximo)
MIN (mínimo)
STDDEV 
SUM (soma)
VARIANCE (variação)
*
Utilizando Funções de Grupo
SELECT	column, group_function(column)
FROM		table
[WHERE	condition]
[ORDER BY	column];
*
AVG(SAL) MAX(SAL) MIN(SAL) SUM(SAL)
-------- --------- --------- ---------
 1400 1600 1250 5600
SQL> SELECT	AVG(sal), MAX(sal),
 2		MIN(sal), SUM(sal)
 3	FROM	emp
 4	WHERE	cargo LIKE ‘VEND%';
Funções AVG e SUM
Utilize o AVG e SUM apenas para dados numéricos
*
 
SQL> SELECT	MIN(dtinicio), MAX(dtinicio)
 2 FROM	emp;
MIN(DTINI MAX(DTINI
--------- ---------
17-DEZ-80 12-JAN-83
Funções MIN e MAX
Utilize MIN e MAX para qualquer tipo de dado
*
 
 COUNT(*)
---------
 6
SQL> SELECT	COUNT(*)
 2 FROM	emp
 3 WHERE	depto_num = 30;
Função COUNT
COUNT(*) retorna o número de linhas na tabela
*
COUNT(COMIS)
------------
 4
SQL> SELECT	COUNT(comis)
 2 FROM	emp
 3 WHERE	depto_num = 30;
Função COUNT
COUNT(coluna) retorna o número de linhas não nulas da tabela
*
Criando Grupos de Dados 
EMP
“média salarial por departamento”
DEPTO_NUM SAL
--------- ---------
 10 2450
 10 5000
 10 1300
 20 800
 20 1100
 20 3000
 20 3000
 20 2975
 30 1600
 30 2850
 30 1250
 30 950
 30 1500
 30 1250
 DEPTO_NUM AVG(SAL)
 --------- ---------
 10 2916.6667
 20 2175
 30 1566.6667
*
Criando Grupos de Dados: 
A Cláusula GROUP BY
Divida as linhas de uma tabela em pequenos grupos usando a cláusula GROUP BY.
SELECT	column, group_function(column)
FROM		table
[WHERE	condition]
[GROUP BY	group_by_expression]
[ORDER BY	column];
*
SQL> SELECT AVG(sal)
 2 FROM emp
 3 GROUP BY depto_num;
Colunas utilizadas em funções de grupo não precisam estar listadas no GROUP BY.
 AVG(SAL)
--------- 
2916.6667
 2175
1566.6667
A Cláusula GROUP BY
*
SQL> SELECT depto_num, cargo, sum(sal)
 2 FROM emp
 3 GROUP BY depto_num, cargo;
Utilizando GROUP BY em Múltiplas Colunas
DEPTO_NUM CARGO SUM(SAL)
--------- --------- ---------
 10 CAIXA 1300
 10 GERENTE 2450
 10 PRESIDENTE 5000
 20 ANALISTA 6000
 20 CAIXA 1900
...
9 rows selected.
*
Subqueries
A subquery (inner query) geralmente é executada antes da consulta principal.
O resultado da subquery é, então, avaliado pelo da query principal (outer query).
SELECT	select_list
FROM	table
WHERE	expr operator
		 	(SELECT	select_list
		 FROM		table);
*
SQL> SELECT enome
 2 FROM emp
 3 WHERE sal > 
 4		 (SELECT sal
 5 FROM emp
 6 WHERE enum=7566);
Utilizando uma Subquery
ENOME
----------
CARLOS
JOSE
FABIO
*
Regras para Subqueries
Utilize subqueries entre parênteses. 
As subqueries vêem sempre à direita do operador de comparação.
Não utiliza a cláusula ORDER BY em subqueries.
Uma subquery retorna uam tabela sobre a qual pode-se realizar qualquer uma das operações vista anteriormente.
*
*
Stored Procedures
Procedimantos que permanecem armazenados no banco, de forma compilada.
Servem para executar alguma computação quando invocados
*
*
Sintaxe
CREATE OR REPLACE PROCEDURE NOME
( NOME TIPO[,NOME TIPO] )
IS BEGIN
 [DECLARE]
 <CORPO>
 COMMIT;
EXCEPTION
 WHEN OTHERS THEN
	<CORPO> 
END NOME;
/
*
*
Sintaxe (exemplo)
CREATE OR REPLACE PROCEDURE AJUSTE
(VALOR REAL, CAD INTEGER)
IS BEGIN
 UPDATE acf_EMPREGADO SET salario=salario +			 salario*VALOR WHERE cadastro=CAD;
 COMMIT;
EXCEPTION
 WHEN OTHERS THEN
 INSERT INTO acf_ERROS values(SYSDATE,'Erro na				 execucao de ajuste'); 
END AJUSTE;
/
*
*
Execução
EXECUTE AJUSTE(0.1, 21);
O procedimento é executado. Caso algum erro ocorra, então a tabela de erros será atualizada.
*
*
Exemplo
CREATE OR REPLACE PROCEDURE Lista_Func
 (codDepto llma_funcionarios.depto_func%TYPE) 
IS BEGIN
 DECLARE
 --cursor para guardar os funcionarios
 CURSOR c_diario_func is
 SELECT llma_funcionarios.cod_func,
 llma_funcionarios.nome_func,
 FROM llma_funcionarios
 WHERE depto_func = codDepto;
 --declaracao das variaveis do cursor
 v_cod_func llma_funcionarios.cod_func%TYPE;
 v_nome_func llma_funcionarios.nome_func%TYPE;
*
*
Procedures
Prodecures não retornam valores
A partir de uma procedure pode-se chamar outras procedures
Procedures são salvas em um arquivo .sql e compiladas no Oracle com o comando @caminho_completo do SQL Plus
Caso ocorra algum erro de compilação a procedure não funciona corretamente
Erros de compilação podem ser vistos com o comando show_errors do SQL Plus.
*
*
Triggers
Procedimantos especiais guardados no banco de forma compilada
Acionados automaticamente pelo banco quando sua condição de ativação for veradeira
*
*
Sintaxe
CREATE OR REPLACE TRIGGER NOME
CONDICAO DE ATIVACAO
BEGIN
 <CORPO>
END;
/
A CONDICAO DE ATIVACAO pode ser montada a partir de expressões lógicas:
BEFORE DELETE ON NOME_TABELA
ou
AFTER DELETE OR INSERT OR UPDATE ON NOME_TABELA
*
*
Sintaxe (exemplo)
CREATE OR REPLACE TRIGGER LOG_FUNCIONARIO
BEFORE DELETE OR INSERT OR UPDATE ON acf_EMPREGADO
BEGIN
 INSERT INTO acf_LOG_funcionario 	VALUES(SYSDATE,'Tabela modificada');
END;
/
*
*
Triggers
Triggers são salvas em um arquivo .sql e compiladas no Oracle com o comando @caminho_completo do SQL Plus
Caso ocorra algum erro de compilação a trigger não funciona corretamente
Erros de compilação podem ser vistos com o comando show_errors do SQL Plus.
Gatilhos podem ser utilizados para implementar regras de negócio
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
Database Objects
An Oracle database can contain multiple data structures. Each structure should be outlined in the database design so that it can be created during the build stage of database development.
Table: Stores data
View: Subset of data from one or more tables
Sequence: Generates primary key values
Index: Improves the performance of some queries
Synonym: Gives alternative names to objects
Oracle8 Table Structures
Tables can be created at any time, even while users are using the database.
You do not need to specify the size of any table. The size is ultimately defined by the amount of space allocated to the database as a whole. It is important, however, to estimate how much space a table will use over time.
Table structure can be modified online.
Note: More database objects are available but are not covered in this course.
Class Management Note
Tables can have up to 1000 columns and must conform to standard database object naming conventions. Column definitions can be omitted when using the AS subquery clause. Tables are created without data unless a query is specified. Rows are usually added by using INSERT statements. 
*
Creating Tables
The example above creates the DEPT table, with three columns¾namely, DEPTNO, DNAME, and LOC. It further confirms the creation of the table by issuing the DESCRIBE command. 
Since creating a table is a DDL statement, an automatic commit takes place when this statement is executed. 
*
Dropping a Table
The DROP TABLE statement removes the definition of an Oracle8 table. When you drop a table, the database loses all the data in the table and all the indexes associated with it. 
Syntax
where:	table			is the name of the table.
Guidelines
All data is deleted from the table.
Any views or synonyms will remain but are invalid.
Any pending transactions are committed.
Only the creator of the table or a user with the DROP ANY TABLE privilege can remove a table.
The DROP TABLE statement, once executed, is irreversible. The Oracle Server does not question the action when you issue the DROP TABLE statement. If you own that table or have a high-level privilege, then the table is immediately removed. All DDL statements issue a commit, therefore making the transaction permanent.
DROP TABLE table;
*
Truncating a Table
Another DDL statement is the TRUNCATE TABLE statement, which is used to remove all rows from a table and to release the storage space used by that table. When using the TRUNCATE TABLE statement, you cannot rollback row removal.
Syntax
 TRUNCATE TABLE table;
where:	table			is the name of the table.
You must be the owner of the table or have DELETE TABLE system privileges to truncate a table.
The DELETE statement can also remove all rows from a table, but it does not release storage space.
*
Truncating a Table
Another DDL statement is the TRUNCATE TABLE statement, which is used to remove all rows from a table and to release the storage space used by that table. When using the TRUNCATE TABLE statement, you cannot rollback row removal.
Syntax
 TRUNCATE TABLE table;
where:	table			is the name of the table.
You must be the owner of the table or have DELETE TABLE system privileges to truncate a table.
The DELETE statement can also remove all rows from a table, but it does not release storage space.
*
Adding a New Row to a Table (continued)
You can add new rows to a table by issuing the INSERT statement. 
In the syntax:
	table			is the name of the table.
	column		is the name of the column in the table to populate.
	value			is the corresponding value for the column.
Note: This statement with the VALUES clause adds only one row at a time to a table.
*
Adding a New Row to a Table (continued)
Because you can insert a new row that contains values for each column, the column list is not required in the INSERT clause. However, if you do not use the column list, the values must be listed according to the default order of the columns in the table. 
 SQL> DESCRIBE dept
 Name Null? Type
 ------------------------------- -------- ------------
 DEPTNO NOT NULL NUMBER(2)
 DNAME VARCHAR2(14)
 LOC VARCHAR2(13)
For clarity, use the column list in the INSERT clause. Enclose character and date values within single quotation marks; do not enclose numeric values within single quotation marks.
*
Methods for Inserting Null Values
Be sure that the targeted column allows null values by verifying the Null? status from the SQL*Plus DESCRIBE command.
The Oracle Server automatically enforces all datatypes, data ranges, and data integrity constraints. Any column that is not listed explicitly obtains a null value in the new row.
Class Management Note
Common errors that can occur during user input: 
Mandatory value missing for a NOT NULL column
Duplicate value violates uniqueness constraint
Foreign key constraint violated
CHECK constraint violated
Datatype mismatch
Value too wide to fit in column
*
Updating Rows
You can modify existing rows by using the UPDATE statement.
In the above syntax:
	table			is the name of the table.
	column		is the name of the column in the table to populate.
	value			is the corresponding value or subquery for the column.
	condition		identifies the rows to be updated and is composed of column names 					expressions, constants, subqueries, and comparison operators.
Confirm the update operation by querying the table to display the updated rows.
For more information, see Oracle Server SQL Reference, Release 8.0, “UPDATE.”
Note: In general, use the primary key to identify a single row. Using other columns may unexpectedly cause several rows to be updated. For example, identifying a single row in the EMP table by name is dangerous because more than one employee may have the same name.
Class Management Note
Demo: l9sel.sql, l9upd.sql
Purpose: To illustrate displaying the initial state of data, and performing updates and viewing results.
*
Updating Rows (continued)
The UPDATE statement modifies specific row(s), if the WHERE clause is specified. The example above transfers employee 7782 (Clark) to department 20. 
If you omit the WHERE clause, all the rows in the table are modified.
Note: The EMPLOYEE table has the same data as the EMP table. 
SQL> SELECT ename, deptno
 2 FROM employee;
ENAME DEPTNO
---------- ---------
KING 20
BLAKE 20
CLARK 20
JONES 20
MARTIN 20
ALLEN 20
TURNER 20
...
14 rows selected.
*
Deleting Rows (continued)
You can delete specific row(s) by specifying the WHERE clause in the DELETE statement. The example above deletes the DEVELOPMENT department from the DEPARTMENT table. You can confirm the delete operation by displaying the deleted rows by using the SELECT statement. 
Example
Remove all employees who started after January 1, 1997.
If you omit the WHERE clause, all rows in the table will be deleted. The second example on the slide deletes all the rows from the DEPARTMENT table because no WHERE clause had been specified.
Note: The DEPARTMENT table has the same data as the DEPT table.
SQL> SELECT *
 2 FROM department
 3 WHERE dname = 'DEVELOPMENT';
no rows selected.
SQL> DELETE FROM emp
 2 WHERE hiredate > TO_DATE('01.01.97', 'DD.MM.YY');
1 row deleted.
*
Basic SELECT Statement
In its simplest form, a SELECT statement must include the following:
A SELECT clause, which specifies the columns to be displayed
A FROM clause, which specifies the table containing the columns listed in the SELECT clause
In the syntax:
	SELECT		is a list of one or more columns.
DISTINCT		suppresses duplicates.
	* 			selects all columns.
	column		selects the named column.
	alias			gives selected columns different headings.
	FROM table 		specifies the table containing the columns.
Note: Throughout this course, the words: keyword, clause, and statement would be used.
A keyword refers to an individual SQL element. For example, SELECT and FROM are keywords.
A clause is a part of an SQL statement. For example, SELECT empno, ename, ... is a clause.
A statement is a combination of two or more clauses. For example, SELECT * FROM emp is a SQL statement.
*
Selecting All Columns, All Rows
You can display all columns of data in a table by following the SELECT keyword with an asterisk (*). In the example on the slide, the department table contains three columns: DEPTNO, DNAME, and LOC. The table contains four rows, one for each department. 
You can also display all columns in the table by listing all the columns after the SELECT keyword. For example, the following SQL statement, like the example on the slide, displays all columns and all rows of the DEPT table:
Class Management Note 
Let the students know that details of all the tables are given in Appendix B.
SQL> SELECT	deptno, dname, loc
 2 FROM 	dept;
*
Column Aliases (continued)
The first example displays the name and the monthly salary of all the employees. Notice that the optional AS keyword has been used before the column alias name. The result of the query would be the same whether the AS keyword is used or not. Also notice that the SQL statement has the column aliases, name and salary in lowercase, whereas the result of the query displays the column headings in uppercase. As mentioned in the last slide, column headings appear in uppercase by default. 
The second example displays the name and annual salary of all the employees. Because Annual Salary contains spaces, it has been enclosed in double quotation marks. Notice that the column heading in the output is exactly the same as the column alias.
Class Management Note 
Point out the optional AS keyword in the first example and the double quotation marks in the second example. Also show that the aliases always appear in uppercase, unless enclosed within double quotation marks. 
*
Duplicate Rows (continued)
To eliminate duplicate rows in the result, include the DISTINCT keyword in the SELECT clause immediately after the SELECT keyword. In the example above, the EMP table actually contains fourteen rows but there are only three unique department numbers in the table. 
You can specify multiple columns after the DISTINCT qualifier. The DISTINCT qualifier affects all the selected columns, and the result represents a distinct combination of the columns.
 
 DEPTNO JOB
 ------ ---------
 10 CLERK
 10 MANAGER
 10 PRESIDENT
 20 ANALYST
 ... 
 9 rows selected.
SQL> SELECT	DISTINCT deptno, job
 2 FROM	emp;
*
Using the WHERE clause
In the example, the SELECT statement retrieves the name, job title, and the department number of all employees whose job title is CLERK. 
Note that the job title CLERK has been specified in uppercase to ensure that the match is made with the job column in the EMP table. Character strings are case sensitive.
Class Management Note 
Snippet: Processing a Query
*
Comparison Operators
Comparison operators are used in conditions that compare one expression to another. They are used in the WHERE clause in the following format:
Syntax 
 	… WHERE expr operator value
Examples
	… WHERE hiredate='01-JAN-95'
	… WHERE sal>=1500
	… WHERE ename='SMITH'
Class Management Note
Remind students that the expr cannot be an alias.
*
*
The BETWEEN Operator
You can display rows based on a range of values using the BETWEEN operator. The range that you specify contains a lower range and an upper range.
The SELECT statement above returns rows from the EMP table for any employee whose salary is between $1000 and $1500.
Values specified with the BETWEEN operator are inclusive. You must specify the lower limit first.
Class Management Note
Emphasize that the values specified with the BETWEEN operator in the example are inclusive. Point out that Turner who earns $1500 (higher limit) is included in the output.
Demo: l2betw.sql
Purpose: To illustrate using the BETWEEN operator.
*
The IN Operator
To test for values in a specified list, use the IN operator. 
The above example displays employee number, name, salary, and manager’s employee number of all the employees whose manager’s employee number is 7902, 7566, or 7788.
The IN operator can be used with any datatype. The following example returns a row from the EMP table for any employee whose name is included in the list of names in the WHERE clause. 
 SQL> SELECT	 empno, ename, mgr, deptno
 2	 FROM 	 emp
 3	 WHERE 	 ename IN ('FORD' , 'ALLEN');
If characters or dates are used in the list, they must be enclosed in single quotation marks ('').
Class Management Note
Demo: l2in.sql
Purpose: To illustrate using the IN operator.
*
The LIKE Operator
You may not always know the exact value to search for. You can select rows that match a character pattern by using the LIKE operator. The character pattern matching operation is referred to as a wildcard search. Two symbols can be used to construct the search string. 
The SELECT statement above returns the employee name from the EMP table for any employee whose name begins with an “S.” Note the uppercase “S.” Names beginning with an “s” will not be returned. 
The LIKE operator can be used as a shortcut for some BETWEEN comparisons. The following example displays names and hiredates of all employees who joined between January 1981 and December 1981. 
 SQL> SELECT	ename, hiredate
 2 FROM		emp
 3 WHERE	hiredate LIKE '%81';
*
The IS NULL Operator
The IS NULL operator tests for values that are null. A null value means the value is unavailable, unassigned, unknown, or inapplicable. Therefore, you cannot test with (=) because a null value cannot be equal or unequal to any value. The example above retrieves the name and manager of all employees who do not have a manager.
For example, to display name, job title, and commission for all employees who are not entitled to get a commission, use the following SQL statement:
ENAME JOB COMM
-------- ----------- ------
KING PRESIDENT 
BLAKE MANAGER 
CLARK MANAGER
...
*
Logical Operators
A logical operator combines the result of two component conditions to produce a single result based on them or to invert the result of a single condition. Three logical operators are available in SQL:
AND
OR
NOT
All the examples so far have specified only one condition in the WHERE clause. You can use several conditions in one WHERE clause using the AND and OR operators.
*
The NOT Operator
The example above displays name and job title of all the employees whose job title is not CLERK, MANAGER, or ANALYST.
NOT Truth Table
The following table shows the result of applying the NOT operator to a condition:
Note: The NOT operator can also be used with other SQL operators such as BETWEEN, LIKE, and NULL.
 ... WHERE NOT job IN ('CLERK', 'ANALYST')
 ... WHERE sal NOT BETWEEN 1000 AND 1500
 ... WHERE ename NOT LIKE '%A%'
 ... WHERE comm IS NOT NULL
*
Default Ordering of Data
The default sort order is ascending:
Numeric values are displayed with the lowest values first¾for example, 1–999.
Date values are displayed with the earliest value first¾for example, 01-JAN-92 before 01-JAN-95.
Character values are displayed in alphabetical order¾for example, A first and Z last.
Null values are displayed last for ascending sequences and first for descending sequences.
Reversing the Default Order
To reverse the order in which rows are displayed, specify the keyword DESC
after the column name in the ORDER BY clause. The example above sorts the result by the most recently hired employee.
*
Defining Joins
When data from more than one table in the database is required, a join condition is used. Rows in one table can be joined to rows in another table according to common values existing in corresponding columns, that is usually, primary and foreign key columns. 
To display data from two or more related tables, write a simple join condition in the WHERE clause. In the syntax:
	table.column		denotes the table and column from which data is retrieved.
	table1.column1 =	is the condition that joins (or relates) the tables together. 	table2.column2	
Guidelines
When writing a SELECT statement that joins tables, precede the column name with the table name for clarity and to enhance database access.
If the same column name appears in more than one table, the column name must be prefixed with the table name.
To join n tables together, you need a minimum of (n-1) join conditions. Therefore, to join four tables, a minimum of three joins are required. This rule may not apply if your table has a concatenated primary key, in which case more than one column is required to uniquely identify each row.
For more information, see
Oracle Server SQL Reference Manual, Release 8.0, “SELECT.”
*
*
Group Functions
Unlike single-row functions, group functions operate on sets of rows to give one result per group. These sets may be the whole table or the table split into groups. 
*
*
Guidelines for Using Group Functions
DISTINCT makes the function consider only nonduplicate values; ALL makes it consider every value including duplicates. The default is ALL and therefore does not need to be specified.
The datatypes for the arguments may be CHAR, VARCHAR2, NUMBER, or DATE where expr is listed. 
All group functions except COUNT(*) ignore null values. To substitute a value for null values, use the NVL function.
Class Management Note
Stress the use of DISTINCT and group functions ignoring null values. ALL is the default and is very rarely specified.
*
Group Functions
You can use AVG, SUM, MIN, and MAX functions against columns that can store numeric data. The example above displays the average, highest, lowest, and sum of monthly salaries for all salesmen.
*
Group Functions (continued)
You can use MAX and MIN functions for any datatype. The example above displays the most junior and most senior employee. 
The example below displays the employee name that is first and the employee name that is the last in an alphabetized list of all employees.
Note: AVG, SUM, VARIANCE, and STDDEV functions can be used only with numeric datatypes.
SQL> SELECT	MIN(ename), MAX(ename)
 2 FROM	emp;
MIN(ENAME) MAX(ENAME)
---------- ----------
ADAMS WARD
*
The COUNT Function
The COUNT function has two formats:
 COUNT(*) 
 COUNT(expr)
COUNT(*) returns the number of rows in a table, including duplicate rows and rows containing null values. 
In contrast, COUNT(expr) returns the number of nonnull rows in the column identified by expr. 
The example above displays the number of employees in department 30.
Class Management Note
Demo: l5count1.sql, l5count2.sql
Purpose: To illustrate using the COUNT(*) and COUNT(expr) functions.
*
SQL> SELECT	COUNT(deptno)
 2 FROM	emp;
COUNT(DEPTNO)
-------------
 14
COUNT(DISTINCT(DEPTNO))
-----------------------
 3
*
Groups of Data
Until now, all group functions have treated the table as one large group of information. At times, you need to divide the table of information into smaller groups. This can be done by using the GROUP BY clause.
*
The GROUP BY Clause
You can use the GROUP BY clause to divide the rows in a table into groups. You can then use the group functions to return summary information for each group. 
In the syntax:
	group_by_expression	specifies columns whose values determine the basis for 					grouping rows.
Guidelines
If you include a group function in a SELECT clause, you cannot select individual results as well unless the individual column appears in the GROUP BY clause. You will receive an error message if you fail to include the column list.
Using a WHERE clause, you can preexclude rows before dividing them into groups.
You must include the columns in the GROUP BY clause. 
You cannot use the column alias in the GROUP BY clause.
By default, rows are sorted by ascending order of the columns included in the GROUP BY list. You can override this by using the ORDER BY clause.
*
The GROUP BY Clause (continued)
The GROUP BY column does not have to be in the SELECT clause. For example, the above SELECT statement displays the average salaries for each department without displaying the respective department numbers. However, without the department numbers, the results do not look meaningful. 
You can use the group function in the ORDER BY clause.
Class Management Note
Demonstrate the query with and without the DEPTNO in the SELECT statement.
 DEPTNO AVG(SAL)
---------- ------------
 30 1566.6667 
 20 2175
 10 2916.6667
*
Groups Within Groups (continued)
You can return summary results for groups and subgroups by listing more than one GROUP BY column. You can determine the default sort order of the results by the order of the columns in the GROUP BY clause. Here is how the SELECT statement above, containing a GROUP BY clause, is evaluated:
The SELECT clause specifies the column to be retrieved:
Department number in the EMP table
Job title in the EMP table
The sum of all the salaries in the group you specified in the GROUP BY clause
The FROM clause specifies the tables that the database must access: the EMP table.
The GROUP BY clause specifies how you must group the rows:
First, the rows are grouped by department number. 
Second, within the department number groups, the rows are grouped by job title. 
So the SUM function is being applied to the salary column for all job titles within each department number group. 
*
Subqueries
A subquery is a SELECT statement that is embedded in a clause of another SELECT statement. You can build powerful statements out of simple ones by using subqueries. They can be very useful when you need to select rows from a table with a condition that depends on the data in the table itself.
You can place the subquery in a number of SQL clauses: 
WHERE clause
HAVING clause
FROM clause
In the syntax:
	operator 	includes a comparison operator such as >, =, or IN
Note: Comparison operators fall into two classes: single-row operators (>, =, >=, <, <>, <=) and multiple-row operators (IN, ANY, ALL).
The subquery is often referred to as a nested SELECT, sub-SELECT, or inner SELECT statement. The subquery generally executes first, and its output is used to complete the query condition for the main or outer query.
Class Management Note
Additionally, subqueries can be placed in the CREATE VIEW statement, CREATE TABLE statement, UPDATE clause, INTO clause of an INSERT statement, and SET clause of an UPDATE statement. 
*
Using a Subquery
In the slide, the inner query determines the salary of employee 7566. The outer query takes the result of the inner query and uses this result to display all the employees who earn more than this amount.
Class Management Note
Execute the subquery (inner query) on its own first to show the value that the subquery returns. Then execute the outer query using the result returned by the inner query. Finally, execute the entire query (containing the subquery) and show that the result is the same. 
*
Guidelines for Using Subqueries
A subquery must be enclosed in parentheses.
A subquery must appear on the right side of the comparison operator.
Subqueries cannot contain an ORDER BY clause. You can have only one ORDER BY clause for a SELECT statement, and if specified

Teste o Premium para desbloquear

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

Continue navegando