SlideShare uma empresa Scribd logo
1 de 44
Faculdade de Tecnologia de Sorocaba 
Curso de Análise e Desenvolvimento de Sistemas 
Disciplina Tópicos em Banco de Dados 
Introdução à Linguagem 
SQL em Ambiente Oracle 
Apostila elaborada pela prof.ª Maria Angélica C. Andrade Cardieri
Banco de Dados 2 
Prof.ª Maria Angélica 
2 
Atualização: Janeiro/2013 
Índice 
1. Introdução a Linguagem SQL ................................................................................................................ 3 
1.1 SQL Básico .......................................................................................................................................... 3 
1.2 A ferramenta SQL*Plus ........................................................................................................................ 3 
2. Tipos de declarações SQL .......................................................................................................................... 4 
3. Padrões do Oracle-8 ................................................................................................................................... 5 
3.1 Tipos de dados no ORACLE-8 ............................................................................................................ 5 
3.2 Restrições (constraints) ......................................................................................................................... 6 
3.3 Nome de campos no Oracle8 ................................................................................................................ 6 
4. Gerenciando Objetos no Oracle .................................................................................................................. 7 
4.1 Comandos DDL - Linguagem de Definição de Dados .......................................................................... 8 
4.1.1 Criando Tabelas ............................................................................................................................. 8 
4.1.2 Alterando a estrutura de tabelas ..................................................................................................... 9 
4.1.3 Excluindo Tabelas ........................................................................................................................ 9 
4.1.4 Renomeando uma tabela .............................................................................................................. 10 
4.1.5 Visualizando a estrutura de uma tabela e as tabelas criadas ....................................................... 10 
4.1.6 Definido valores Default ....................................................................................................... 10 
4.2 Restrições .......................................................................................................................................... 11 
4.3 Comandos DML - Linguagem de Manipulação de dados ................................................................... 14 
4.4 Pesquisa em Tabelas ........................................................................................................................... 15 
4.5 Exemplos de pesquisas (comando select) .......................................................................................... 16 
4.6 Funções ............................................................................................................................................... 18 
4.7 Funções para Manipulação de Datas .................................................................................................. 19 
5. Extraindo Dados de mais de uma Tabela - Junção ................................................................................... 20 
6. Visões ...................................................................................................................................................... 21 
7. Subconsultas ............................................................................................................................................. 24 
7.1 Consultas Encadeadas (Claúsula Where com Subquery) ................................................................... 24 
7.2 Subconsultas em comandos Update e Delete. .................................................................................... 27 
8. Variáveis de Substituição em Consultas ................................................................................................... 28 
8.1 Comando Define ................................................................................................................................. 28 
8.2 Comando Accept ................................................................................................................................ 29 
9. Usando Apelidos para Tabelas ................................................................................................................. 30 
10 . Criação de seqüências automáticas ........................................................................................................ 31 
11. Inclusão de tabelas a partir de outra tabela ............................................................................................. 32 
12. Criando uma Tabela através de uma consulta ........................................................................................ 32 
13. O Dicionário de Dados do Oracle-8 ....................................................................................................... 33 
14. Transações .............................................................................................................................................. 35 
15. Utilização dos Operadores Relacionais no Oracle ................................................................................ 36 
16. Exercícios ............................................................................................................................................... 38 
16.1 Lista de exercícios complementar sobre o modelo Paciente-Consulta ............................................. 38 
Lista número 1 .......................................................................................................................................... 38 
Parte 2.1 – Criando e manipulando o banco de dados .......................................................................... 39 
Parte 2.2 – Realizando Consultas ......................................................................................................... 40 
Parte 2.3 – Consultas usando funções ................................................................................................... 41 
Parte 2.4 – Consultas avançadas ........................................................................................................... 41 
Parte 2.5 – Visões ................................................................................................................................. 42 
Parte 2.6 – Subconsultas ....................................................................................................................... 42 
Laboratório SQL - Lista Número 3 ........................................................................................................... 43
Banco de Dados 3 
Prof.ª Maria Angélica 
3 
1. Introdução a Linguagem SQL 
Esta apostila apresenta uma introdução à linguagem SQL do SGBD ORACLE, 
apresentando os comandos que permitem criar, manter e acessar uma base de dados 
relacional. 
1.1 SQL Básico 
A linguagem SQL é a ferramenta básica para acesso aos dados de um banco de 
dados relacional. Foi desenvolvida inicialmente nos laboratórios da IBM (1976) por E.F. 
Codd, sendo atualmente um padrão para os SGBD relacionais. Apesar de existirem 
alguns padrões da linguagem SQL, a maioria dos fabricantes de banco de dados criou 
suas próprias extensões para explorar as características do banco de dados como é o caso 
da Oracle com o PL/SQL. 
A SQL é considerada como sendo uma linguagem não procedural uma vez que ela 
processa conjunto de registros e fornece acesso ou navegação automática de dados. A 
base para esta linguagem é a álgebra relacional, muito embora existam diversas 
características importantes que não pertencem à álgebra relacional. 
Na verdade, a SQL padrão deve ser considerada como uma sub-linguagem, uma 
vez que não possui comandos ou declarações que permitam o controle de repetições ou de 
desvios condicionais e incondicionais. Para este tipo de controle a Oracle desenvolveu o 
PL/SQL que consiste em uma extensão da SQL padrão. 
1.2 A ferramenta SQL*Plus 
A interface interativa do Oracle chama-se SQL*PLUS. Em um ambiente cliente-servidor, 
o módulo cliente do ORACLE deve estar instalado, fornecendo esta ferramenta. 
Para conectar ao banco através do SQL*PLUS acessar o menu INICIAR => Programas 
=> Oracle FOR WINDOWS NT => SQL*PLUS.
Banco de Dados 4 
Prof.ª Maria Angélica 
4 
2. Tipos de declarações SQL 
Os comandos ou declarações em SQL são divididos nas seguintes categorias: 
DDL (Data Definition Language) 
É a parte do SQL usada para definir dados e objetos de um banco de dados. 
Através destes comandos são feitas inserções no dicionário de dados. 
A tabela abaixo indica comandos DDL : 
Comando Função 
Create Table Cria uma tabela 
Create Index Cria um índice 
Alter Table Altera ou insere uma coluna da tabela 
Drop Table Elimina uma tabela do banco de Dados 
Drop Index Elimina um índice 
Grant Concede privilégios de acesso p/a um usuário 
DML (Data Manipulation Language) 
É a parte da SQL usada para a recuperação ou manipulação de dados. Permite 
realizar consultas, adicionar, alterar e excluir informações do banco de dados. Possui 
também cláusulas adicionais e funções para cálculo de totais, médias, contagem de 
registros e máximo e mínimo entre valores. 
A tabela abaixo apresenta alguns dos mais importantes comandos dessa categoria: 
Comando Função 
Select Seleciona dados de uma base 
Insert Insere uma linha em uma tabela 
Delete Apaga linhas da Tabela 
Update Altera o conteúdo de colunas (campos) da tabela. 
Commit Grava no disco as alterações feitas 
Rollback Desfaz as alterações
Banco de Dados 5 
Prof.ª Maria Angélica 
5 
3. Padrões do Oracle-8 
3.1 Tipos de dados no ORACLE-8 
No Oracle os tipos de dados armazenados em uma tabela podem ser declarados 
conforme indicados na tabela abaixo: 
Tipo de Dado Descrição 
Char(n) Armazena dados do tipo caracter de comprimento fixo onde 
n indica o tamanho. Máximo de 255. 
Varchar2(n) Armazena dados do tipo caracter de tamanho variável. 
Máximo de 2000 bytes. 
Number(t,d) Armazena dados numéricos onde t é o total de dígitos e d 
indica o número de casas decimais. Máximo de 38 
caracteres 
Date Data e hora entre 1/1/4712 a. C. até 31/12/4712 d.C. 
Long Semelhante ao varchar2, mas com tamanho até 2 GB. 
Raw (n) Armazena dados binários de tamanho até 2000 bytes. 
Long raw(n) Armazena dados binários de tamanho até 2GB. 
Outros tipos de dados: 
ROWID : Cada linha de uma tabela possui uma identificação ou endereço próprio. A 
função ROWID mostra o endereço de uma linha. 
Exemplo: 
SELECT ROWID FROM PACIENTE: 
Retornará o número interno das linhas: 
ROWID 
------------------ 
AAAGD5AADAAAAADAAA 
AAAGD5AADAAAAADAAB 
AAAGD5AADAAAAADAAC 
AAAGD5AADAAAAADAAD 
AAAGD5AADAAAAADAAE
Banco de Dados 6 
Prof.ª Maria Angélica 
6 
3.2 Restrições (constraints) 
São recursos proporcionados pelo SGBD para implementar regras de consistência básicas 
para os dados de uma tabela. 
Restrição Descrição 
NOT NULL Especifica que a coluna não pode conter um valor null. 
UNIQUE Especifica que uma coluna ou combinação de colunas devem ser 
únicas para todas as linhas na tabela. 
PRIMARY KEY Identifica unicamente cada linha da tabela. 
FOREIGN KEY/ 
REFERENCES 
Estabelece e força um relacionamento entre uma coluna e a tabela 
referenciada 
CHECK Especifica que uma condição deve ser True 
No item 4.2 desta apostila encontram-se mais detalhes sobre como definir restrições 
no banco de dados Oracle. 
3.3 Nome de campos no Oracle8 
É permitido o máximo de 30 caracteres para nomes de tabelas e colunas. Os 
nomes podem ser compostos de caracteres alfabéticos; dígitos numéricos(0 a 9) e os 
caracteres especiais “_” (underline), “$” (cifrão) , “#” (number). Um nome deve sempre 
começar com um caracter alfabético. 
Não é permitido o uso de palavras reservadas do Oracle como nome de tabelas e 
colunas. Para um mesmo usuário, não podem existir dois objetos do banco de dados com 
o mesmo nome.
Banco de Dados 7 
Prof.ª Maria Angélica 
7 
4. Gerenciando Objetos no Oracle 
Nesta apostila utilizaremos o modelo abaixo como referência para os exemplos que se 
seguem. 
Modelo Entidade-Relacionamento 
Paciente 1:1 Faz 1: N Consulta 
1: N 
atende 
1:1 
Médico 
Tabelas correspondentes ao Modelo E-R 
Tabela de Paciente 
Codpaciente n u m b e r ( 0 4 ) (PK) 
Nomepaciente varchar2(30) 
Datanasc Date 
Sexo char(01) 
Endereco varchar2(25) 
Cidade varchar2(15) 
Desconto char(01) 
Tabela de Consulta 
Codconsulta number(03) PK 
DataCon Date 
TipoCon char(01) 
P=Particular 
C=Convênio 
Codmedico number(04) FK 
Codpaciente number(04) FK 
Valconsulta Number(7,2) 
Tabela de Médico 
Codmedico number(4) PK 
Nommedico varchar2(30)
Banco de Dados 8 
Prof.ª Maria Angélica 
8 
4.1 Comandos DDL - Linguagem de Definição de Dados 
4.1.1 Criando Tabelas 
Uma tabela pode ser criada a qualquer momento e sua estrutura pode ser modificada on-line. 
O nome de uma tabela não é sensível a letras maiúsculas/minúsculas. 
 Comando Create Table 
Create Table <nome _tabela> 
( < nome coluna1 > <Tipo_dado> [< restrições_C1> ] 
. . . . . . . 
( < nome colunaN> <Tipo_dado> [< restrições_CN> ] 
[, < Restrição > ...... < Restrição_TN> ] ) ; 
Exemplo: 
Create table Paciente 
( Codpaciente number(4,0) Primary Key, 
Nompaciente varchar2(30) not null, 
Datanasc date, 
Sexo char( 1 ) check (sexo in ( ‘F’, ‘M’ )), 
Endereco varchar2(25) ) ; 
Create table Consulta 
( Codconsulta number(3,0) Primary Key , 
Dataconsulta date, 
Tipocons char(01) check (tipocons in (´P´,´C´)), 
Codpaciente number(4,0) Not Null References Paciente, 
Codmedico number(4,0) Not Null References Medico , 
Valconsulta number(5,0) Not Null ) ; 
Obs.: Após o comando ser executado o Oracle retorna a seguinte mensagem: 
Table Created . 
Indica chave 
estrangeira
Banco de Dados 9 
Prof.ª Maria Angélica 
9 
4.1.2 Alterando a estrutura de tabelas 
 Comando Alter Table 
Através deste comando o usuário pode alterar a estrutura de uma tabela, adicionar ou 
retirar uma constraint, etc 
ALTER TABLE < nome da tabela> 
[ ADD [< nome da coluna> <tipo_dado> [ <restriçãoC>] | < restriçãoT > ] ] 
[MODIFY (< nome da coluna > , . . .) ] 
[ DROP CONSTRAINT < restição> ] ; 
Exemplo: 
ALTER TABLE Paciente ADD (cidpaciente varchar2( 15 ) ) ; 
ALTER TABLE Paciente MODIFY (cidpaciente varchar2( 20 ) 
NOT Null ) ; 
ALTER TABLE Paciente ADD (desconto char( 01 ) 
check (desconto in (‘S`,´N` ) )) ; 
ALTER TABLE Paciente ADD ( Check (sexo in (´F´, ´M´ ))) ; 
Excluindo uma coluna ( para versões a partir do oracle 8i): 
ALTER TABLE Paciente DROP COLUMN desconto; 
4.1.3 Excluindo Tabelas 
 Comando Drop Table 
Remove uma tabela da base de dados. Ao deletar uma tabela todos os seus dados e 
índices serão perdidos. Caso existam visões (View) definidas sobre a tabela estas 
continuarão existindo porém estarão inválidas. Só o criador da tabela e o DBA podem 
eliminar uma visão. 
DROP TABLE <nome_tabela> ; 
Exemplo: 
Drop Table paciente; 
Drop Table consultas;
Banco de Dados 10 
Prof.ª Maria Angélica 
10 
4.1.4 Renomeando uma tabela 
Rename nome-antigo to nome-novo 
Exemplo: 
Rename paciente to paciente_BKP; 
4.1.5 Visualizando a estrutura de uma tabela e as tabelas criadas 
Através do comando: 
SQL> Describe <nome_da_tabela>; 
É possível verificar a estrutura da tabela criada. 
O comando: 
SQL > Select table_name from user_tables; 
Lista o nome de todas as tabelas criadas pelo usuário em sua base de dados. 
4.1.6 Definido valores Default 
Create table x 
( ........ 
......... 
datapagto date default sysdate, 
.......... 
status char(01) default ´F´ check (status in 
(´F´,´B´)), 
..........);
Banco de Dados 11 
Prof.ª Maria Angélica 
11 
4.2 Restrições 
As restrições são regras estabelecidas referentes ao preenchimento de uma coluna. 
Estas regras podem ser definidas no momento da criação da tabela, sendo no final da 
especificação da coluna ou ao final do comando Create. Também é possível definir 
restrições após a criação da tabela através do comando ALTER TABLE. 
Toda restrição tem um nome associado a ela. Se este nome não for indicado o 
ORACLE atribui um nome padronizado. É interessante dar nome as restrições, 
principalmente quando se trabalha em um ambiente cliente-servidor, pois quando da 
ocorrência de erros relativos a não observância das regras, o nome da restrição é 
propagado para o cliente, e é sempre mais fácil de ser diagnosticado se o nome for 
definido pelo usuário. 
Entre as restrições destacam-se: 
Chaves primárias 
Chaves estrangeiras 
Chaves únicas 
Identificadores de campos obrigatórios 
Condições para valores permitidos para determinado campo. 
Exemplos: 
Chave Primária: 
--- Forma mais simples (sem nomear a restrição): 
Create table Medico 
( codMedico number(4) primary key, 
nomemedico varchar2(30)); 
---- Nomeando a restrição 
Nome da 
restrição 
Create table Medico 
(codMedico number(4), 
nomemedico varchar2(30), 
Constraint PK_Medico_codmedico Primary Key 
(codMedico) ); 
--- Criando uma restrição após a criação da 
tabela 
Create table Medico 
( codMedico number(4), 
nomemedico varchar2(30)) ; 
Nome da 
restrição 
Alter table medico add 
Constraint PK_Medico_codmedico primary key (codMedico);
Banco de Dados 12 
Prof.ª Maria Angélica 
Obs: É interessante que o nome da restrição identifique claramente a qual tabela e 
campo esta se refere. Em aplicações cliente servidor isto pode ser útil para 
facilitar a identificação de erros. 
12 
Chave Estrangeira: 
--- Forma mais simples (sem nomear a restrição): 
Create table consulta 
( codConsulta number(3) primary key, 
dataconsulta date, 
codpaciente number(4) references paciente, 
codmedico number(4) references medico, 
valconsulta number(5) ); 
-- Nomeando a restrição 
Create table consulta 
( codConsulta number(3) primary key, 
dataconsulta date, 
codpaciente number(4) , 
codmedico number(4) , 
valconsulta number(5), 
constraint FK_Consulta_codpaciente foreign key 
(codPaciente) references Paciente, 
Constraint FK_Consulta_codmedico foreign key 
(codMedico) references Medico); 
--- Criando uma restrição nomeada após a criação da 
tabela 
Create table consulta 
( codConsulta number(3) primary key, 
dataconsulta date, 
codpaciente number(4) , 
codmedico number(4) , 
valconsulta number(5) ); 
alter table consulta add 
( constraint FK_consulta_codpaciente foreign key 
(codPaciente) references paciente); 
alter table consulta add 
( constraint FK_consulta_codmedico foreign key 
(codmedico) references Medico); 
Nome da 
restrição 
Nome da 
restrição
Banco de Dados 13 
Prof.ª Maria Angélica 
13 
Cláusula Check: 
Define um conjunto de valores permitidos ou condições de inserção em uma 
tabela 
--- Forma mais simples (sem nomear a restrição): 
Create table paciente 
( ------ 
------ 
sexo char(1) check (sexo in (‘F’, ‘M’)) , 
------ 
); 
OU 
--- Criando uma restrição nomeada após a criação da tabela 
Create table paciente 
( ------ 
------ 
sexo char(1) , 
------ 
); 
alter table paciente add constraint CK_paciente_sexo check (sexo in (‘F’, ‘M’)); 
4.3 Comandos DML - Linguagem de Manipulação de dados
Banco de Dados 14 
Prof.ª Maria Angélica 
14 
 Comando INSERT 
é usado para inserir linhas em uma tabela. Não é necessário atribuir conteúdo para todos 
os campos. 
Sintaxe: 
Insert Into tabela [ (coluna,coluna... ) ] 
Values 
(valor, valor,....) 
Exemplo: 
Insert into paciente 
values (001,´João da Silva´, ´01-09-1957´ , ´M´, ´Rua das Flores, 30´, ´Sorocaba´,´S´ ); 
Observações: 
a) O formato padrão de datas pode variar dependendo da instalação do Oracle. 
b) Se na criação da tabela for utilizada uma cláusula Check, o dado digitado deve 
respeitar os valores definidos dentro da cláusula. Isto inclui, no caso de letras, a distinção 
entre maiúsculas e minúsculas. 
 Comando UPDATE 
Permite ao usuário alterar valores em linhas de uma tabela: 
Sintaxe: 
Update tabela 
set coluna [, coluna...] = [expressão, subquery ] 
[Where condição ] ; 
Exemplo: 
Update paciente 
set endereço = ‘Rua das Jaboticabas, 40` 
where codpaciente= 003; 
Update paciente 
set desconto = ´S´ 
where datanasc < ‘01/01/1937’; 
 Comando Delete
Banco de Dados 15 
Prof.ª Maria Angélica 
15 
Usado para eliminar linhas de uma tabela. 
Sintaxe: 
Delete from tabela 
[Where condição] ; 
Exemplo: 
Delete from paciente 
where codpaciente = 001; 
4.4 Pesquisa em Tabelas 
 Comando Select 
O comando básico para pesquisa simples a uma tabela é o SELECT. Este comando faz 
parte da DML (Data Manipulation Language ou Linguagem de Manipulação de Dados). 
Sintaxe: 
SELECT informação-coluna FROM tabela(s) 
WHERE condição 
ORDER BY expressão da palavra chave 
Onde: 
informação_coluna : especifica as colunas da tabela a serem recuperadas. Podem também 
ser expressões ou constantes . 
tabela(s) : Nome das tabelas envolvidas. 
Where: Claúsula opcional, identifica um critério para recuperar linhas específicas. Filtra 
as linhas a serem exibidas. 
Order by : Claúsula opcional. Especifica a ordem no qual as linhas serão exibidas. 
Cláusula Where 
Representa o operador relacional de restrição, pois indica as condições que devem ser 
satisfeitas para seleção das linhas e colunas de uma tabela. A tabela a seguir apresenta os 
operadores lógicos que podem ser utilizados em uma cláusula Select . 
Operador Significado 
= igual a 
> maior que 
< menor que 
>= maior ou igual 
<= menor ou igual 
<> Diferente de 
AND E
Banco de Dados 16 
Prof.ª Maria Angélica 
16 
OR Ou 
NOT Negação 
BETWEEN Testa faixa de valores 
LIKE Valores correspondentes ao valor especificado 
IN Valor que seja igual a algum dos valores 
especificados em uma lista. 
% Curinga para qualquer combinação de caracteres 
- Curinga para qualquer caracter na posição 
Operadores lógicos suportados pelo SQL 
4.5 Exemplos de pesquisas (comando select) 
1- Exibir todos os dados de todas as linhas da tabela Paciente: 
Select * From Paciente; 
2- Selecionar o nome e o endereço de todos os pacientes. 
Select nomepaciente, endereco 
From Paciente; 
3- Selecionar linhas sem repetição de dados: 
Select distinct cidade 
From paciente; 
4- Utilizando cabeçalhos específicos 
Select nomepaciente “Nome”, datanasc “Nascimento” 
From paciente; 
5- Seleção utilizando uma função 
Select sum(valconsulta) , codmedico 
From consulta 
group by codmedico; 
Obs: A cláusula group by está detalhada na página 13 desta apostila.
Banco de Dados 17 
Prof.ª Maria Angélica 
17 
6- Expressões aritméticas em determinada coluna 
Select codconsulta, valconsulta * 0.8 
From consulta; 
O valor da consulta exibido será 80% do armazenado no banco de dados. O valor real 
não é alterado. 
7- Exibindo os dados em determinada ordem 
Select * From paciente 
order by cdpaciente; 
Neste caso, a cláusula order by fará com que a consulta seja exibida em ordem de 
paciente. Qualquer campo pode ser utilizado nesta cláusula. 
8- Exibindo dados com cláusula para seleção de registros específicos 
Select * from paciente 
where sexo = `F` 
9- Concatenando colunas 
Select codpaciente || ´-´ || nompaciente from paciente ; 
O resultado deste comando será: 
Codpaciente ||´-´|| nompaciente 
------------------------------------ 
1- Lucélia Santos 
2- Osmar Santos 
3- Silvio Santos 
4- José Santos 
10- Tratando Valores Nulos 
Se uma coluna não possui valor (lembre-se espaço em branco é valor), ela é considerada 
com o valor NULO. O valor NULO afeta uma operação aritmética pois seu resultado é 
sempre nulo 
Podemos usar a função NVL para a conversão de valores nulos. Por exemplo: 
Select Cod_consulta, NVL( valconsulta,100) * 0.8 
From Consulta
Banco de Dados 18 
Prof.ª Maria Angélica 
18 
Neste exemplo, se o valor da consulta for nulo será substituído pelo valor 100. 
11. Cláusula Group By 
Utilizada para agrupar as linhas selecionadas baseada no valor expr para cada linha e 
retorna uma única linha de informação para cada grupo. 
Exemplo: 
SQL> Select coddepto, min(salario), max(salario), sum(salario) 
from emp 
Group by coddepto; 
coddepto min(salario) max(salario) sum(salario) 
---------- -------------- -------------- -------------- 
100 1050 2000 9500 
102 850 1800 5700 
103 2000 5000 12000 
4.6 Funções 
Uma função é uma rotina que realiza uma operação específica retornado um resultado. O 
SQL possui funções de linha simples ou escalares (single Row) e funções de grupo 
(Group). 
Funções de Grupo 
As funções de grupo atuam sobre um conjunto de linhas retornando um único resultado. 
Função AVG - Calcula a média dos valores selecionados 
Exemplo: 
SQL > Select avg(nota) from aluno; 
Função MIN/MAX - Seleciona o menor ou o maior valor dentre os selecionados. 
Exemplo: 
SQL> Select min(nota) from aluno; 
Função COUNT - Retorna o número de linhas da consulta. 
SQL> Select count(Idaluno) from curso;
Banco de Dados 19 
Prof.ª Maria Angélica 
19 
Função SUM - realiza o somatório dos dados extraídos da coluna especificada. Os 
valores null são ignorados. 
4.7 Funções para Manipulação de Datas 
 SYSDATE 
Retorna a data do sistema. 
Exemplo: SELECT SYSDATE FROM DUAL; 
SYSDATE 
-------- 
18/08/05 
 Função TO_CHAR 
Converte campo do tipo data em uma string. È possível extrair substrings 
correspondentes ao dia, mês , ano, hora, minuto e segundo. 
Exemplos: 
SELECT NOMEPACIENTE FROM PACIENTE 
WHERE TO_CHAR(DATANASC,’MM/YYYY’) = ‘03/1959’; 
SELECT TO_CHAR(SYSDATE, 'HH24:MI:SS') FROM DUAL; 
TO_CHAR( 
-------- 
14:42:38 
 Função ADD_MONTHS 
Soma ou subtrai o número de meses indicados da data. 
Exemplo: 
SELECT ADD_MONTHS(DATACONS,+3) FROM CONSULTA; 
O exemplo acima exibe o campo data da consulta acrescido de 3 meses 
Para subtrair usar –3. 
 Para Somar Dias: basta somar o número de dias ao campo data.
Banco de Dados 20 
Prof.ª Maria Angélica 
20 
update consulta 
set datacons = datacons + 7 
where codpaciente = 003; 
 Subtração entre duas datas 
O Oracle devolve o número de dias. 
SELECT (SYSDATE – DATANASC) FROM PACIENTE; 
 Inclusão de data com a hora minuto e segundo usando a função TO_DATE 
Indica 
o 
formato 
1-24 
Insert into consulta 
values (020, To_Date(‘20/09/2003:10:15:00’,‘dd/mm/yyyy:hh24:mi:ss’) ,’P’, ........); 
5. Extraindo Dados de mais de uma Tabela - Junção 
As vezes torna-se necessário juntar duas ou mais tabelas seguindo um determinado 
critério com o objetivo de selecionar colunas das mesmas. Neste caso as colunas das 
tabelas envolvidas na relação são comparadas. Será apresentado a seguir a junção 
denominada equi-join. 
Equi-Join : Quando o valor da coluna de uma tabela tem o seu valor correspondente na 
segunda. 
Exemplo : Exibir o nome do paciente e o código de todas as consultas realizadas por 
ele. 
Select nompaciente, codconsulta, data 
From paciente, consulta 
Where paciente.codpaciente = consulta.codpaciente; 
Será exibido na tela: 
Equação de Junção 
NOMPACIENTE CODCONSULTA DATA 
--------------------- ---------------------- -------- 
Pedro Luiz Silva 010 10-AUG-97 
Pedro Luiz Silva 020 12-SEP-97 
Pedro Luiz Silva 028 01-NOV-97 
Antônio Vieira 014 15-JAN-98 
Cristina Souza 024 15-MAR-98
Banco de Dados 21 
Prof.ª Maria Angélica 
21 
Cristina Souza 030 20-ABR-98 
Exemplo: Exibir código do paciente, nome do paciente, e o nome do médico e o 
código de cada consulta 
Select paciente.codpaciente, nompaciente, codconsulta, nommedico 
From paciente, consulta, medico 
Where paciente.codpaciente = consulta.codpaciente 
and 
consulta.codmedico = medico.codmedico; 
Será exibido na tela: 
Equação de Junção 
Para 3 tabelas 
CODPACIENTE NOMPACIENTE CODCONSULTA NOMMEDICO 
--------------------- ---------------------- --------------------- ------------------- 
507 Pedro Luiz Silva 010 Dr. Carlos Wen 
507 Pedro Luiz Silva 020 Dr. Sérgio Cesar 
507 Pedro Luiz Silva 028 Dr. Sérgio Cesar 
604 Cristina Souza 024 Dr. Eleno Góis 
604 Cristina Souza 030 Dr. Carlos Wen 
6. Visões 
É uma forma de visualizar várias tabelas como se fossem uma única tabela. Uma visão é 
como uma tabela lógica, pois não existe fisicamente e seus dados são obtidos 
dinamicamente a partir de tabelas do banco de dados. Ela pode conter colunas de 
diferentes tabelas e linhas que satisfaçam alguma condição. 
As visões ou visualizações tem como vantagem o fato de poder limitar as colunas e linhas 
que serão exibidas na tela. Este recurso é importante para proteção contra acesso a dados 
não permitidos para um determinado usuário. Outra vantagem é a simplificação do 
comando Select uma vez que, para um comando Select complexo e frequentemente 
utilizado podemos criar uma visão facilitando a execução do comando. 
 Comando Create View 
Create [ or replace ] View < nome_visão> [ < nome_coluna1>, . . . ] 
as <consulta> 
[with check option [constraint < restrição> ] ] ;
Banco de Dados 22 
Prof.ª Maria Angélica 
22 
Exemplos: 
Create View pacsorocaba 
as select * from pacientes 
where cidpaciente = ´Sorocaba´ 
with check option ; 
Create or replace View pacientes-res 
as select codpaciente, nomepaciente 
from paciente ; 
Create View PacConsulta 
as select codpaciente, nomepaciente, codconsulta,dataconsulta 
from paciente, consultas 
where paciente.codpaciente = consultas.codpaciente ; 
OBS: A view PacConsulta se refere a mais de uma tabela. 
Para selecionar todos os dados da view criada : 
Select * from paciente_res; 
Obs: A cláusula order by não pode ser usada em views. 
 Comando Drop View 
Exclui uma visão do dicionário de dados. 
Drop view < nome da Visão> ; 
Exemplo: 
Drop view pacientes-res ; 
 Alteração de dados através de uma Visão 
Uma visão pode sofrer operações de alteração, deleção, inclusão e consulta respeitando 
porém as seguintes restrições:
Banco de Dados 23 
Prof.ª Maria Angélica 
23 
Deleção, Atualização e Inclusão de dados (delete, update e insert) através de uma 
visão não é permitida se: 
 A visão foi criada a partir da junção de uma ou mais tabelas. 
 Se existir uma função de agrupamento (group by) 
 Se possuir a cláusula distinct 
 Se possuir colunas definidas por expressões 
Além disso, o insert não é permitido se alguma coluna Not Null, sem valor default 
especificado, não foi selecionada pela visão.
Banco de Dados 24 
Prof.ª Maria Angélica 
24 
7. Subconsultas 
7.1 Consultas Encadeadas (Claúsula Where com Subquery) 
Uma subquery ou subconsulta é quando o resultado de uma consulta é utilizado por outra 
consulta, de forma encadeada e contida no mesmo comando SQL. 
Restrições: 
 A query interna deve ser usada dentro de parênteses 
 A subquery não pode conter a cláusula order by 
 Quando utilizando múltiplas colunas em uma subquery, estas colunas devem aparecer 
na mesma ordem e com os mesmos tipos de dados da query principal, além do mesmo 
número de colunas 
 Podem ser utilizados operadores lógicos 
 As cláusulas numa instrução SQL são executadas na seguinte ordem: 
From (produto cartesiano) 
where (restrição) 
group by (agrupamento das linhas que satisfizerem o where) 
having (restrição sobre linhas do agrupamento) 
Exemplo: 
Produto Item-pedido 
@Codigo produto @Numero do pedido 
Descrição @Codigo do produto 
Unidade Quantidade 
Valor unit.
Banco de Dados 25 
Prof.ª Maria Angélica 
25 
Consulta: Que produtos tem pedidos cuja quantidade é superior a 20 ? 
Select descricao from produto 
Where cod_produto in (select cod_Produto from item-pedido 
where quantidade > 20) 
Resultado: 
Descrição 
Disquetes 
Papel 
Caneta 
Construtores: 
A construção in testa a pertinência de conjuntos, onde o conjunto é uma coleção de 
valores produzidos por uma cláusula select. O not-in testa a não pertinência de 
conjuntos. 
O construtor exist retorna o valor true se o resultado da subconsulta é não vazio. O not 
exists testa a não existência de tuplas em uma subconsulta. 
Consulta: Quais vendedores ganham um salário fixo abaixo da média? 
Vendedor 
@codigo-vendedor 
Nome-vendedor 
Faixa-de-Comissão 
Salário-Fixo 
Select nome-vendedor from vendedor 
Where salario-fixo < (select AVG(salario-fixo) from vendedor);
Banco de Dados 26 
Prof.ª Maria Angélica 
26 
Consulta: Quais os produtos que não estão presentes em nenhum pedido? 
Select cod-produto, descrição from produto 
Where not exists 
( select * from item-pedido where 
produto.cod-produto = item-pedido.cod-produto) 
Consulta: Quais clientes estão presentes em mais de três pedidos ? 
Cliente Pedido 
@Código-cliente @Numero-pedido 
Nome-cliente Prazo-entrega 
Endereço Codigo-cliente 
Cidade Codigo-vendedor 
Cep 
Select nome-cliente from cliente where exists 
(select count( * ) from pedido where 
pedido.cod-cliente = cliente.cod-cliente 
group by cliente.cod-cliente 
having count(*) > 3 ); 
Exemplos com base no Modelo da vídeo-locadora: 
Consulta: Exibir nome dos sócios com uma ou mais locações 
Select cod-socio 
from socio 
where exists (select cod-socio from locacao 
where locacao.cod-socio = socio.cod-socio); 
ou podemos usar o operador IN : 
select cod-socio 
from socio 
where cod-socio in (select cod-socio from locacao); 
Consulta: Exibir código dos sócios que não possuam locações.
Banco de Dados 27 
Prof.ª Maria Angélica 
27 
- Utilizaremos o operador NOT EXISTS. 
Select cod-socio 
from socio 
where not exists (select cod-socio from locacao 
where locacao.cod-socio = socio.cod-socio) 
- Podemos também escrever este comando utilizando o operador NOT IN : 
Select cod-socio 
from socio 
where cod-socio not in ( select cod-socio from locacao); 
7.2 Subconsultas em comandos Update e Delete. 
É possível utilizar subconsultas como argumento da cláusula where. 
Exemplo: 
1. Alterar o valor da consulta em menos 10% se o campo desconto da tabela de 
paciente for igual a ‘S’. 
UPDATE CONSULTA 
SET VALCONSULTA = VALCONSULTA * 0.9 
WHERE CODPACIENTE IN 
(SELECT CODPACIENTE FROM PACIENTE 
WHERE DESCONTO = ‘S’); 
2. Excluir os pacientes que não tem consultas realizadas. 
DELETE PACIENTE WHERE CODPACIENTE NOT IN 
(SELECT DISTINCT CODPACIENTE FROM CONSULTA)
Banco de Dados 28 
Prof.ª Maria Angélica 
28 
7.3 Cláusula Having 
A Cláusula HAVING é utilizada para selecionar linhas de uma seleção feita com group 
by ( restrição para o group by). É muito utilizada em subqueries. 
Exemplo: Alunos cuja média final é superior à média do aluno JOSE(cod_aluno = 002). 
Select nom_aluno, avg(val_nota_final) 
from matricula m, aluno a 
where m.cod_aluno = a .cod_aluno 
group by nom_aluno 
having avg(val_nota_final) > (select avg(val_nota_final) from 
matricula where cod_aluno = 002); 
8. Variáveis de Substituição em Consultas 
Uma consulta pode conter variáveis que são informadas no momento da sua execução. 
Exemplo: 
SQL> Select codsocio, nomesocio 
2 from socio where 
3 cidsocio = &cidade; 
Enter value for cidade: ‘Sorocaba’ 
Old 3: cidsocio = &cidade 
new 3: cidsocio = ‘Sorocaba’ 
Para que a variável seja pedida apenas uma vez utilizar o símbolo &&. Na próxima 
referência a esta variável, ela já assume o valor especificado anteriormente. 
SQL> Select codsocio, nomesocio 
2 from socio where 
3 cidsocio = &&cidade; 
Enter value for cidade: ‘Sorocaba’ 
Old 3: cidsocio = &&cidade 
new 3: cidsocio = ‘Sorocaba’ 
8.1 Comando Define 
Cria uma variável, ou substitui o valor previamente definido.
Banco de Dados 29 
Prof.ª Maria Angélica 
29 
Exemplo: 
SQL> Define codigo = 5; 
SQL> Select nomesocio, endsocio from socio 
where codsocio = &codigo ; 
=> O comando Undefine libera a variável. 
SQL> undefine codigo; 
8.2 Comando Accept 
Permite criar uma variável e obter o valor para ela, incluindo um texto 
explicativo. 
ACCEPT variável [number / char] [Prompt / Noprompt ‘mensagem-de- solicitação:’ ] 
[Hide] 
Com o comando accept é possível: 
- Testar o tipo de dado que está sendo informado. 
- Incluir texto explicativo. 
- Suprimir o eco, isto é não aparecer o que está sendo digitado. 
Exemplo: 
SQL> accept nome char prompt ‘ Informe o Nome: ` ; 
Informe o Nome: João da Silva 
SQL> Select codsocio, endsocio from socio 
where nomesocio = &nome; 
Char faz com que o tipo de dado seja verificado. 
SQL> accept password char prompt ´ Informe a senha: ` hide; 
Informe a senha: ****** 
Neste caso não aparece o que está sendo digitado. 
SQL> accept codsocio char noprompt;
Banco de Dados 30 
Prof.ª Maria Angélica 
30 
Neste caso não aparece a mensagem. 
9. Usando Apelidos para Tabelas 
Apelidos ou table aliases podem ser usados para : 
1- Simplificar o uso do nome de tabelas nas consultas; 
2- Realizar junção usando a mesma tabela; isto é join de uma tabela com ela mesma. 
Exemplo: 
SQL> select distinct nomesocio 
from locacao l, socio s 
where l.codsocio = s.codsocio; 
SQL> select e.nomfunc, g.nomefunc 
from empregado e, funcionário g 
where e.mgr = g.numfunc 
Tabela funcionário 
numfunc ( numero de matrícula do funcionário) 
nomfunc (nome do funcionário) 
mgr (numero de matrícula gerente) 
Utilizando Sinônimos 
 Sinônimos podem ser definidos também no dicionário de dados da forma: 
Create synonym func for funcionário; 
 Sinônimos podem ser removidos pelo comando DROP 
SQL> Drop synonym [ Nome-do-sinônimo]
Banco de Dados 31 
Prof.ª Maria Angélica 
31 
10 . Criação de seqüências automáticas 
Seqüências são estruturas do banco de dados que geram números seqüenciais. 
Isto é interessante para gerar chaves primárias ou seqüências geradas pelo próprio 
sistema. 
Sintaxe: 
Create sequence Nome-da-sequencia 
[ Increment by incrementador] 
[ start with valor-inicial] 
[ maxvalue valor_maximo | nomaxvalue ] 
[ minvalue valor_minimo | nominvalue ] 
[ Cycle | nocycle ] 
[ cache | nocache ] 
[ order | noorder ] 
Exemplo: 
SQL> Create sequence SEQcli 
increment by 1 
start with 10 
maxvalue 9999 
nocache 
minvalue 1 
order; 
SQL> Insert into cliente values 
(seqcli.nextval, ´Maria da Silva`, ´Rua das Flores`, 
´Sorocaba`, ´01-sep-97` ); 
Para verificação e utilização dos números gerados pela seqüência: 
nome-da-sequencia.nextval => indica o próximo valor da sequência 
nome-da-sequencia.currval => indica o valor corrente 
SQL> select nsocio.currval from dual; 
SQL> select nsocio.nextval from dual; 
Para alterar uma sequência: 
SQL> Alter sequence seq increment by 1
Banco de Dados 32 
Prof.ª Maria Angélica 
32 
Para eliminar uma sequência: 
SQL> Drop sequence seq; 
11. Inclusão de tabelas a partir de outra tabela 
É possível usar os dados de uma tabela já existente para inclusão em outra. 
Insert into nome-da-tabela [ (coluna, coluna, ...) ] 
select lista-de-seleção 
from tabela; 
Exemplo: 
SQL> insert into socio-aux ( codsocio, nomesocio, datinclusão) 
select codsocio, nomesocio, datinclusão 
from socio where cidsocio = ´Sorocaba`; 
ou se as duas tabelas tem as mesmas colunas: 
SQL> insert into socio_aux 
select * from socio; 
12. Criando uma Tabela através de uma consulta 
É possível criar uma tabela usando como base uma já existente. 
Create table paciente-bkp 
as 
select * from paciente; 
Neste caso será criada a tabela paciente_bkp com estrutura igual a tabela paciente e 
herdará também os dados. 
Create table paciente-fem 
as 
select codpaciente, nomepaciente 
where sexo = ´F´ 
Neste caso será criada a tabela paciente-fem apenas com dois campos da tabela paciente e 
somente com as linhas cujo campo sexo for igual a ´F´.
Banco de Dados 33 
Prof.ª Maria Angélica 
Dica: Para criar uma nova tabela aproveitando a estrutura de outra mas sem levar os 
dados deve-se utilizar a cláusula Select com uma condição(Where) que force a consulta a 
não retornar nehuma linha. 
33 
13. O Dicionário de Dados do Oracle-8 
Consiste de um conjunto de tabelas e views que são um guia de referência sobre a 
base de dados. 
Contém informações sobre: 
- O nome dos usuários Oracle 
- Direitos e privilégios 
- Nome dos objetos do banco de Dados 
- Constrains de tabelas 
Acesso ao dicionário de dados  Através de comandos select nas tabelas e views do 
dicionário. 
Principais Views: 
User_xxx Mostra informações sobre objetos do usuário 
all_xxxxxx Mostra objetos que o usuário tem acesso além dos objetos do próprio 
usuário 
Dba_xxxxx Para usuários que tem acesso de dba, mostra objetos pertencentes a base de 
dados . 
Dictionary Contém todos os objetos do diconário de dados acessíveis pelo usuário 
Exemplo: 
SQL> Select * from dictionary; 
As views mais utilizadas são: 
Nome da View Descrição 
Dictionary Todos os objetos do dicionário de dados acessíveis pelo 
usuário 
User_objects Objetos pertencentes ao usuário 
User_tables Descrição das tabelas do usuário 
User_sequences Descrição das sequences do usuário 
User_synonym Sinônimos do usuário
Banco de Dados 34 
Prof.ª Maria Angélica 
34 
User_views texto das views do usuário 
User_indexes Descrição dos índices do usuário 
all_objects Objetos acessíveis pelo usuário 
Exemplo: 
Tabelas do usuário corrente: 
select table_name from user_tables; 
Colunas do tipo date na tabela locação 
select column_name from user_tab_columns 
where data_type = ´DATE` ; 
Informações do objeto do usuário corrente 
select object_name, object_type , created from user_objects; 
Definição de uma view 
select text from user_views 
where view_name = ´sociossor`; 
Todos os sinônimos visíveis pelo usuário 
Select synonym_name, table_name from all_synonyms; 
Consultar o nome da primary Key da tabela sócio 
Select constraint_name from user_constraints where table_name = ´SOCIO` and 
constraint_type = ´P` ; 
Obs: tipos de constrains: 
P = Primary Key 
C = Cláusula Check 
R = Foreign Key 
Verificar todas as constraints 
select constraint_name, constraint_type, table_name from user_constraints;
Banco de Dados 35 
Prof.ª Maria Angélica 
35 
14. Transações 
Até agora vimos os comandos que pertencem a categoria DDL e DML. Existe uma 
terceira categoria de comandos chamada TPL (Transaction Process Language). Esta 
categoria inclui os comandos COMMIT e ROLLBACK que são os responsáveis pela 
gravação definitiva no banco de dados das alterações feitas pelos comandos DDL e DML 
e pela recuperação da situação anterior caso necessário. 
Commit : Grava uma transação no Banco de dados 
Rollback: Restaura uma transação. Recupera a posição em que o banco estava após o 
último commit ser executado. 
Exercício: 
1- Inclua um novo paciente na tabela de pacientes. 
Através do comando select verifique se a inclusão foi realizada. 
Digite: 
SQL> Rollback ; 
Execute o select novamente e voce irá notar que o registro incluído não existe mais. 
2- Inclua um novo paciente na tabela de pacientes. 
Digite: 
SQL> Commit ; 
Através do comando select verifique se a inclusão foi realizada. 
Digite: 
SQL> Rollback ; 
Execute o select novamente e voce irá notar que o registro incluído ainda existe apesar 
do Rollback ter sido executado. Isto acontece porque o rollback desfaz o que foi feito 
entre o último commit executado e a situação atual.
Banco de Dados 36 
Prof.ª Maria Angélica 
36 
15. Utilização dos Operadores Relacionais no Oracle 
UNIÃO - unir 2 consultas em uma única 
As tabelas devem ser união compatíveis isto é ter a mesma estrutura. 
select * from paciente 
union select * from paciente_bkp; 
_______________________________________________________________________ 
INTERSECÇÃO - unir 2 consultas, somente as linhas idênticas serão 
retornadas. 
select * from paciente 
intersect select * from paciente_bkp; 
_______________________________________________________________________ 
DIFERENÇA - unir 2 consultas. Retorna todas as linhas da primeira 
consulta, menos as linhas iguais à segunda consulta. 
select * from paciente 
minus select * from paciente_bkp; 
_______________________________________________________________________ 
Outros Operadores 
(+) Indica que uma coluna é "outer join". 
Mesmo não existindo na outra tabela uma linha correspondente à 
coluna indicada com o operador. 
select A.nome, B.nome from paciente A, paciente_bkp B 
where A.codpaciente = B.codpaciente (+); 
_______________________________________________________________________ 
PROJEÇÃO 
select codpaciente, nomepac from paciente; 
SELEÇÃO 
select * from paciente 
where cidade = 'São Roque';
Banco de Dados 37 
Prof.ª Maria Angélica 
37 
junção - (inner join) 
_______________________________________________________________________ 
deletar linha da tabela paciente_bkp 
delete from paciente_bkp 
where codpaciente = 003; 
________________________________________________________
Banco de Dados 38 
Prof.ª Maria Angélica 
38 
16. Exercícios 
16.1 Lista de exercícios complementar sobre o modelo Paciente-Consulta 
Lista número 1 
1- Criar uma nova coluna na tabela paciente com o nome País varchar2(15); 
2- Alterar a coluna endereço da tabela de paciente para 28 posições. 
3- Excluir a nova coluna criada no exercício 1. 
4- Incluir a restrição NOT NULL na coluna endereco. 
5- Alterar a data de nascimento do paciente de código = 001 para ´01-09-1960´. 
6- Alterar o campo desconto de todos os pacientes para ´N´. 
7- Sobre a tabela Paciente, alterar o campo endereço para ‘Rua Melo Alves,40’ e 
cidade para ‘Itu” para o paciente de código = 02. 
8- Excluir a consulta 002, somente se o campo valor consulta for igual a zero. 
9- Excluir o paciente de código 5 
10- Excluir todos os pacientes da cidade de sorocaba de sexo feminino. 
11- Alterar o campo desconto de todos os pacientes de sexo feminino e idade 
superior a 60 anos para ‘S’. 
12- Criar um novo campo na tabela paciente para registrar o telefone do paciente. Este 
campo deverá ser varchar2(15). Inserir o numero de telefone dos pacientes neste 
novo campo.
Banco de Dados 39 
Prof.ª Maria Angélica 
Cod_produto (num,3) (PK) 
Descrição (alfan.,20) 
unidade (alfan.,2) 
valor_unitario (6 inteiros e 
2 decimais) 
39 
16.2 Laboratório SQL - Lista Número 2 
As tabelas apresentadas neste item deverão ser utilizadas nos exercícios da parte 2.1 
a parte 2.6 da lista número 2. 
Observação: 
PK - Chaves primárias 
FK - Chaves estrangeiras 
Cliente 
Cod_cliente (num,5) (PK) 
Nome_cliente (alfan.,30) 
Endereco (alfan.,25) 
Cidade (alfan.,20) 
Cep (alfan.,10) 
UF (alfan.,2) 
Pedido 
Num_pedido (num,5) (PK) 
Prazo_entrega (data) 
Cod_cliente (FK ) 
Cod_vendedor (FK) 
Item_Pedido 
Num_pedido (FK) 
cod_produto(FK) PK 
Quantidade 5 inteiros 
Vendedor 
Cod_vendedor (num,5) (PK) 
nomevendedor (alfanum. 30 posições) 
faixa_comissão (2 inteiros e 2 decimais) 
salario_fixo ( 5 inteiros e 2 decimais) 
Parte 2.1 – Criando e manipulando o banco de dados 
1. Criar as tabelas do modelo acima. 
2. Inserir pelo menos 5 linhas de dados para cada tabela. 
3. Alterar o campo endereço da tabela Cliente para 30 posições. 
Produto 
4. Acrescentar um novo campo de nome Pco_Unit (numérico com 4 inteiros e duas 
decimais), na tabela de itens de pedido. 
5. Alterar o CEP de todos os clientes da cidade de Sorocaba para ‘18035-400’. 
6. Alterar o prazo de entrega de todos os pedidos do cliente de código 20 para mais 10 
dias. 
7. Alterar o valor unitário para mais 10% para todos os produtos com unidade = ‘KG’.
Banco de Dados 40 
Prof.ª Maria Angélica 
40 
8. Excluir todos os produtos com unidade = ‘CX’ e valor unitário superior a 50,00. 
Parte 2.2 – Realizando Consultas 
1. Listar número do pedido e prazo de entrega de todos os pedidos. 
2. Listar a descrição e o valor unitário dos produtos. 
3. Listar nome e endereço de todos os clientes. 
4. Listar nome de todos os vendedores. 
5. Listar todas as informações da tabela de clientes. 
6. Listar todas as informações da tabela produtos. 
7. Listar o nome de todos os vendedores. Alterar o cabeçalho da coluna para nome. 
8. Listar o preço dos produtos simulando um aumento em 10%. 
9. Listar o salário fixo dos vendedores simulando o aumento em 5%. 
10. Listar o nome dos clientes que moram em Sorocaba. 
11. Listar todos os dados dos vendedores com salário fixo <$400,00. 
12. Listar o código do produto e a descrição para os produtos cuja unidade seja igual a 
"Kg". 
13. Listar o número dos pedidos com prazo de entrega entre 01/05/2012 a 01/06/2012. 
14. Listar o pedido e o prazo de entrega para os pedidos com data de entrega no ano de 
2004. 
15. Listar os dados dos produtos cujo valor unitário seja maior que $100,00 e menor que 
$200,00. 
16. Listar o número do pedido e o código do produto cuja quantidade esteja entre 1000 e 
1500. 
17. Listar o nome dos vendedores cujo nome comece por "José". 
18. Listar o nome de todos os clientes cujo ultimo nome seja "Silva". 
19. Listar a descrição e o código dos produtos que tem a seqüência "AC" em qualquer 
parte da descrição.
Banco de Dados 41 
Prof.ª Maria Angélica 
41 
20. Listar os nomes dos clientes que não tenham endereço cadastrado. 
21. Listar as cidades onde moram os clientes (exibir cada cidade apenas uma vez). 
22. Listar os dados dos clientes por ordem alfabética de nome. 
23. Listar os dados dos clientes por ordem alfabética decrescente de cidade. 
24. Listar os dados dos clientes por ordem de cidade e por ordem do nome dos clientes. 
25. Listar os códigos e a descrição dos produtos, cuja unidade igual o "Kg" por ordem 
alfabética de descrição. 
Parte 2.3 – Consultas usando funções 
1. Listar a maior quantidade que conste na tabela de item do pedido. 
2. Listar o menor valor unitário da tabela de produtos. 
3. Listar a somatória dos salários fixos pago aos vendedores. 
4. Listar o numero de produtos cuja unidade seja igual a "Lt". 
5. Listar o numero de clientes agrupados por cidade. 
6. Listar quantos pedidos cada vendedor realizou. 
7. Listar o maior e o menor valor unitário para cada tipo de unidade de produto. 
8. Listar o numero de clientes, agrupados por cidade para todas as cidades que aparecem 
mais de 4 vezes na tabela de clientes. 
Parte 2.4 – Consultas avançadas 
1. Listar o código e o nome dos vendedores que efetuaram vendas para o cliente com código 10. 
2. Listar o número do pedido, prazo de entrega, a quantidade e a descrição do produto com 
código 100. 
3. Quais os vendedores (código e nome) fizeram pedidos para o cliente 'José da Silva'. 
4. Listar o número do pedido, o código do produto, a descrição do produto, o código do 
vendedor, o nome do vendedor , o nome do cliente, para todos os clientes que moram em 
Sorocaba.
Banco de Dados 42 
Prof.ª Maria Angélica 
5. Listar o código do produto, a descrição, a quantidade pedida e o prazo de entrega para 
42 
o pedido número 123. 
6. Quais os cliente ( nome e endereço) da cidade de Itu ou Sorocaba tiveram seus 
pedidos tirados com o vendedor de código igual a 10. 
Parte 2.5 – Visões 
1. Escreva uma visão que exiba o número do pedido, codcliente e prazo de entrega. 
2. Escreva uma visão que liste todos os produtos com unidade = ‘KG’. 
3. Escreva uma visão que liste todos os produtos com valor_unitário menor que a 
média. 
4. Escreva uma visão que liste o numero total de pedidos feitos por vendedor. Esta 
visão deve conter o Codigo do vendedor, nome do vendedor e número total de 
pedidos. 
Qual das visões acima é atualizável? 
Parte 2.6 – Subconsultas 
1. Listar todos os clientes que moram na mesma cidade que 'João da Silva'. 
2. Quais produtos tem valor unitário maior que a média. 
3. Quais os clientes que só compraram com o vendedor com codigo 10 e com mais 
nenhum outro vendedor (fidelidade). 
4. Quais vendedores não fizeram mais de 5 pedidos. 
5. Quais os vendedores não fizeram nenhum pedido no mês de maio/2013 
6. Listar o nome do vendedor que mais fez pedidos. 
7. Listar o nome dos clientes e o número total de pedidos associados a cada cliente em 
ordem decrescente de vendas, isto é do cliente que mais tem pedidos para o que 
menos tem. 
8. Excluir todos os itens dos pedidos feitos pelo cliente de código =2; 
9. Alterar o valor unitário de todos os produtos sem vendas no ano de 2013 para menos 
20%.
Banco de Dados 43 
Prof.ª Maria Angélica 
43 
Laboratório SQL - Lista Número 3 
1- Criar uma sequência automática para o número do pedido da tabela pedido. Incluir 
duas tuplas usando este recurso. 
2- Criar uma tabela de nome itens-bkp a partir da tabela de itens. Esta nova tabela 
deverá conter os campos: numero do pedido, código do produto para todos os pedidos 
do ano de 2011. 
3- Listar o nome de todas as tabelas de seu banco de dados e o nome dos campos que 
são chave estrangeira nestas tabelas. 
4- Listar todas as constraints da tabela pedido. 
5- Listar o nome de todas as visões que você criou em seu banco de dados e o seu 
respectivo texto. 
6- Listar todas as cláusulas CHECK e o nome da tabela a qual pertence. 
7- Crie uma visão que exiba o nome da tabela, nome da coluna, tipo e a constraint 
(P,R,C) caso exista. 
============================================================== 
Anexo Dicas: 
Para declarar valores default em tabelas: 
Na criação da tabela: 
Create table teste 
(codigo number(3) PRIMARY KEY, 
VALOR NUMBER(3) DEFAULT 10); 
SQL> INSERT INTO TESTE(CODIGO) VALUES (4); 
1 linha criada. 
SQL> SELECT * FROM TESTE14; 
CODIGO VALOR 
---------- ---------- 
1 2 
2
Banco de Dados 44 
Prof.ª Maria Angélica 
44 
4 10 
Após criação da tabela, ao adicionar uma nova coluna:

Mais conteúdo relacionado

Mais procurados

14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-ptguest519a5b6
 
Marcos_Antonio_V_Oliveira_TCC_Apr_Final
Marcos_Antonio_V_Oliveira_TCC_Apr_FinalMarcos_Antonio_V_Oliveira_TCC_Apr_Final
Marcos_Antonio_V_Oliveira_TCC_Apr_FinalMarcos Ventura
 
Tutorial oracle forms builder
Tutorial oracle forms builderTutorial oracle forms builder
Tutorial oracle forms builderValdinho Pereira
 
Programando ooo b
Programando ooo bProgramando ooo b
Programando ooo bvangney
 
Curso completo de excel
Curso completo de excelCurso completo de excel
Curso completo de excelCDIM Daniel
 
K19 k03-sql-e-modelo-relacional
K19 k03-sql-e-modelo-relacionalK19 k03-sql-e-modelo-relacional
K19 k03-sql-e-modelo-relacionalJean Lopes
 
Apostila Tutorial CakePHP
Apostila Tutorial CakePHPApostila Tutorial CakePHP
Apostila Tutorial CakePHPFernando Palma
 
Programacao cpp
Programacao cppProgramacao cpp
Programacao cppTiago
 
K19 k52-desenvolvimento-web-com-struts
K19 k52-desenvolvimento-web-com-strutsK19 k52-desenvolvimento-web-com-struts
K19 k52-desenvolvimento-web-com-strutsCaique Moretto
 

Mais procurados (13)

Apostila excel sandro unipac
Apostila excel   sandro unipacApostila excel   sandro unipac
Apostila excel sandro unipac
 
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
 
Marcos_Antonio_V_Oliveira_TCC_Apr_Final
Marcos_Antonio_V_Oliveira_TCC_Apr_FinalMarcos_Antonio_V_Oliveira_TCC_Apr_Final
Marcos_Antonio_V_Oliveira_TCC_Apr_Final
 
Tutorial oracle forms builder
Tutorial oracle forms builderTutorial oracle forms builder
Tutorial oracle forms builder
 
Programando ooo b
Programando ooo bProgramando ooo b
Programando ooo b
 
Apostila access 2010
Apostila access 2010Apostila access 2010
Apostila access 2010
 
Introdução ao SciLab
Introdução ao SciLabIntrodução ao SciLab
Introdução ao SciLab
 
Curso completo de excel
Curso completo de excelCurso completo de excel
Curso completo de excel
 
K19 k03-sql-e-modelo-relacional
K19 k03-sql-e-modelo-relacionalK19 k03-sql-e-modelo-relacional
K19 k03-sql-e-modelo-relacional
 
Bd apost
Bd apostBd apost
Bd apost
 
Apostila Tutorial CakePHP
Apostila Tutorial CakePHPApostila Tutorial CakePHP
Apostila Tutorial CakePHP
 
Programacao cpp
Programacao cppProgramacao cpp
Programacao cpp
 
K19 k52-desenvolvimento-web-com-struts
K19 k52-desenvolvimento-web-com-strutsK19 k52-desenvolvimento-web-com-struts
K19 k52-desenvolvimento-web-com-struts
 

Destaque

Ast s-it004 - it instrucoes gerais seguranca
Ast s-it004 - it instrucoes gerais segurancaAst s-it004 - it instrucoes gerais seguranca
Ast s-it004 - it instrucoes gerais segurancaBorsalin
 
Estrutura do plano de contingência para suporte de crise
Estrutura do plano de contingência para suporte de criseEstrutura do plano de contingência para suporte de crise
Estrutura do plano de contingência para suporte de crisempetersonss
 
Auditoria, Controle e Programação dos Serviços de Saúde
Auditoria, Controle e Programação dos Serviços de SaúdeAuditoria, Controle e Programação dos Serviços de Saúde
Auditoria, Controle e Programação dos Serviços de SaúdeHelenice Alexandrino
 
Plano de emergências médicas e primeiros socorros pemps
Plano de emergências médicas e primeiros socorros   pempsPlano de emergências médicas e primeiros socorros   pemps
Plano de emergências médicas e primeiros socorros pempsUniversidade Federal Fluminense
 
Treinamento de SQL Básico
Treinamento de SQL BásicoTreinamento de SQL Básico
Treinamento de SQL BásicoIgor Alves
 
Tec saude -_urgencia_e_emergencia
Tec saude -_urgencia_e_emergenciaTec saude -_urgencia_e_emergencia
Tec saude -_urgencia_e_emergenciaClaudio Viegas
 
Gerenciamento de enfermagem em unidade de Urgência e Emergência
Gerenciamento de enfermagem em unidade de Urgência e EmergênciaGerenciamento de enfermagem em unidade de Urgência e Emergência
Gerenciamento de enfermagem em unidade de Urgência e EmergênciaAroldo Gavioli
 

Destaque (12)

Clube 1a reuniao extra plano de ação 24-09_2013
Clube 1a reuniao extra   plano de ação 24-09_2013Clube 1a reuniao extra   plano de ação 24-09_2013
Clube 1a reuniao extra plano de ação 24-09_2013
 
Planos de saúde
Planos de saúdePlanos de saúde
Planos de saúde
 
Plano de contingências
Plano de contingênciasPlano de contingências
Plano de contingências
 
Ast s-it004 - it instrucoes gerais seguranca
Ast s-it004 - it instrucoes gerais segurancaAst s-it004 - it instrucoes gerais seguranca
Ast s-it004 - it instrucoes gerais seguranca
 
Estrutura do plano de contingência para suporte de crise
Estrutura do plano de contingência para suporte de criseEstrutura do plano de contingência para suporte de crise
Estrutura do plano de contingência para suporte de crise
 
As Múltiplas Lógicas de Construção de Redes de Cuidado no SUS
As Múltiplas Lógicas de Construção de Redes de Cuidado no SUS As Múltiplas Lógicas de Construção de Redes de Cuidado no SUS
As Múltiplas Lógicas de Construção de Redes de Cuidado no SUS
 
Auditoria, Controle e Programação dos Serviços de Saúde
Auditoria, Controle e Programação dos Serviços de SaúdeAuditoria, Controle e Programação dos Serviços de Saúde
Auditoria, Controle e Programação dos Serviços de Saúde
 
Plano de emergências médicas e primeiros socorros pemps
Plano de emergências médicas e primeiros socorros   pempsPlano de emergências médicas e primeiros socorros   pemps
Plano de emergências médicas e primeiros socorros pemps
 
Treinamento de SQL Básico
Treinamento de SQL BásicoTreinamento de SQL Básico
Treinamento de SQL Básico
 
Plano de contingência
Plano de contingênciaPlano de contingência
Plano de contingência
 
Tec saude -_urgencia_e_emergencia
Tec saude -_urgencia_e_emergenciaTec saude -_urgencia_e_emergencia
Tec saude -_urgencia_e_emergencia
 
Gerenciamento de enfermagem em unidade de Urgência e Emergência
Gerenciamento de enfermagem em unidade de Urgência e EmergênciaGerenciamento de enfermagem em unidade de Urgência e Emergência
Gerenciamento de enfermagem em unidade de Urgência e Emergência
 

Semelhante a Introdução SQL Oracle com exemplos tabelas

Semelhante a Introdução SQL Oracle com exemplos tabelas (20)

Apostila de postgre
Apostila de postgreApostila de postgre
Apostila de postgre
 
programacao-c-banco-de-dados
programacao-c-banco-de-dadosprogramacao-c-banco-de-dados
programacao-c-banco-de-dados
 
Caderno de info(banco de dados).
Caderno de info(banco de dados).Caderno de info(banco de dados).
Caderno de info(banco de dados).
 
SQL_e_banco_de_dados_Oracle_SQL_Uma_abor.pdf
SQL_e_banco_de_dados_Oracle_SQL_Uma_abor.pdfSQL_e_banco_de_dados_Oracle_SQL_Uma_abor.pdf
SQL_e_banco_de_dados_Oracle_SQL_Uma_abor.pdf
 
Manual SQL
Manual SQLManual SQL
Manual SQL
 
Manual SQL
Manual SQLManual SQL
Manual SQL
 
Apostila access 2010_basico
Apostila access 2010_basicoApostila access 2010_basico
Apostila access 2010_basico
 
Apostila postgre
Apostila postgreApostila postgre
Apostila postgre
 
JPA - Mini-Livro - Iniciação e Conceitos
JPA - Mini-Livro - Iniciação e ConceitosJPA - Mini-Livro - Iniciação e Conceitos
JPA - Mini-Livro - Iniciação e Conceitos
 
4081 my sql
4081 my sql4081 my sql
4081 my sql
 
Apostila access 2010 2
Apostila access 2010 2Apostila access 2010 2
Apostila access 2010 2
 
Apostila access 2010
Apostila access 2010Apostila access 2010
Apostila access 2010
 
Apostila access 2010(2)
Apostila access 2010(2)Apostila access 2010(2)
Apostila access 2010(2)
 
Apostila access 2010
Apostila access 2010Apostila access 2010
Apostila access 2010
 
Apostila access 2010
Apostila access 2010Apostila access 2010
Apostila access 2010
 
Apostila access 2010
Apostila access 2010Apostila access 2010
Apostila access 2010
 
Jdbc
JdbcJdbc
Jdbc
 
Java web fj21-- apostila da caelum
Java web fj21-- apostila da caelumJava web fj21-- apostila da caelum
Java web fj21-- apostila da caelum
 
P funcional
P funcionalP funcional
P funcional
 
Plsql
PlsqlPlsql
Plsql
 

Introdução SQL Oracle com exemplos tabelas

  • 1. Faculdade de Tecnologia de Sorocaba Curso de Análise e Desenvolvimento de Sistemas Disciplina Tópicos em Banco de Dados Introdução à Linguagem SQL em Ambiente Oracle Apostila elaborada pela prof.ª Maria Angélica C. Andrade Cardieri
  • 2. Banco de Dados 2 Prof.ª Maria Angélica 2 Atualização: Janeiro/2013 Índice 1. Introdução a Linguagem SQL ................................................................................................................ 3 1.1 SQL Básico .......................................................................................................................................... 3 1.2 A ferramenta SQL*Plus ........................................................................................................................ 3 2. Tipos de declarações SQL .......................................................................................................................... 4 3. Padrões do Oracle-8 ................................................................................................................................... 5 3.1 Tipos de dados no ORACLE-8 ............................................................................................................ 5 3.2 Restrições (constraints) ......................................................................................................................... 6 3.3 Nome de campos no Oracle8 ................................................................................................................ 6 4. Gerenciando Objetos no Oracle .................................................................................................................. 7 4.1 Comandos DDL - Linguagem de Definição de Dados .......................................................................... 8 4.1.1 Criando Tabelas ............................................................................................................................. 8 4.1.2 Alterando a estrutura de tabelas ..................................................................................................... 9 4.1.3 Excluindo Tabelas ........................................................................................................................ 9 4.1.4 Renomeando uma tabela .............................................................................................................. 10 4.1.5 Visualizando a estrutura de uma tabela e as tabelas criadas ....................................................... 10 4.1.6 Definido valores Default ....................................................................................................... 10 4.2 Restrições .......................................................................................................................................... 11 4.3 Comandos DML - Linguagem de Manipulação de dados ................................................................... 14 4.4 Pesquisa em Tabelas ........................................................................................................................... 15 4.5 Exemplos de pesquisas (comando select) .......................................................................................... 16 4.6 Funções ............................................................................................................................................... 18 4.7 Funções para Manipulação de Datas .................................................................................................. 19 5. Extraindo Dados de mais de uma Tabela - Junção ................................................................................... 20 6. Visões ...................................................................................................................................................... 21 7. Subconsultas ............................................................................................................................................. 24 7.1 Consultas Encadeadas (Claúsula Where com Subquery) ................................................................... 24 7.2 Subconsultas em comandos Update e Delete. .................................................................................... 27 8. Variáveis de Substituição em Consultas ................................................................................................... 28 8.1 Comando Define ................................................................................................................................. 28 8.2 Comando Accept ................................................................................................................................ 29 9. Usando Apelidos para Tabelas ................................................................................................................. 30 10 . Criação de seqüências automáticas ........................................................................................................ 31 11. Inclusão de tabelas a partir de outra tabela ............................................................................................. 32 12. Criando uma Tabela através de uma consulta ........................................................................................ 32 13. O Dicionário de Dados do Oracle-8 ....................................................................................................... 33 14. Transações .............................................................................................................................................. 35 15. Utilização dos Operadores Relacionais no Oracle ................................................................................ 36 16. Exercícios ............................................................................................................................................... 38 16.1 Lista de exercícios complementar sobre o modelo Paciente-Consulta ............................................. 38 Lista número 1 .......................................................................................................................................... 38 Parte 2.1 – Criando e manipulando o banco de dados .......................................................................... 39 Parte 2.2 – Realizando Consultas ......................................................................................................... 40 Parte 2.3 – Consultas usando funções ................................................................................................... 41 Parte 2.4 – Consultas avançadas ........................................................................................................... 41 Parte 2.5 – Visões ................................................................................................................................. 42 Parte 2.6 – Subconsultas ....................................................................................................................... 42 Laboratório SQL - Lista Número 3 ........................................................................................................... 43
  • 3. Banco de Dados 3 Prof.ª Maria Angélica 3 1. Introdução a Linguagem SQL Esta apostila apresenta uma introdução à linguagem SQL do SGBD ORACLE, apresentando os comandos que permitem criar, manter e acessar uma base de dados relacional. 1.1 SQL Básico A linguagem SQL é a ferramenta básica para acesso aos dados de um banco de dados relacional. Foi desenvolvida inicialmente nos laboratórios da IBM (1976) por E.F. Codd, sendo atualmente um padrão para os SGBD relacionais. Apesar de existirem alguns padrões da linguagem SQL, a maioria dos fabricantes de banco de dados criou suas próprias extensões para explorar as características do banco de dados como é o caso da Oracle com o PL/SQL. A SQL é considerada como sendo uma linguagem não procedural uma vez que ela processa conjunto de registros e fornece acesso ou navegação automática de dados. A base para esta linguagem é a álgebra relacional, muito embora existam diversas características importantes que não pertencem à álgebra relacional. Na verdade, a SQL padrão deve ser considerada como uma sub-linguagem, uma vez que não possui comandos ou declarações que permitam o controle de repetições ou de desvios condicionais e incondicionais. Para este tipo de controle a Oracle desenvolveu o PL/SQL que consiste em uma extensão da SQL padrão. 1.2 A ferramenta SQL*Plus A interface interativa do Oracle chama-se SQL*PLUS. Em um ambiente cliente-servidor, o módulo cliente do ORACLE deve estar instalado, fornecendo esta ferramenta. Para conectar ao banco através do SQL*PLUS acessar o menu INICIAR => Programas => Oracle FOR WINDOWS NT => SQL*PLUS.
  • 4. Banco de Dados 4 Prof.ª Maria Angélica 4 2. Tipos de declarações SQL Os comandos ou declarações em SQL são divididos nas seguintes categorias: DDL (Data Definition Language) É a parte do SQL usada para definir dados e objetos de um banco de dados. Através destes comandos são feitas inserções no dicionário de dados. A tabela abaixo indica comandos DDL : Comando Função Create Table Cria uma tabela Create Index Cria um índice Alter Table Altera ou insere uma coluna da tabela Drop Table Elimina uma tabela do banco de Dados Drop Index Elimina um índice Grant Concede privilégios de acesso p/a um usuário DML (Data Manipulation Language) É a parte da SQL usada para a recuperação ou manipulação de dados. Permite realizar consultas, adicionar, alterar e excluir informações do banco de dados. Possui também cláusulas adicionais e funções para cálculo de totais, médias, contagem de registros e máximo e mínimo entre valores. A tabela abaixo apresenta alguns dos mais importantes comandos dessa categoria: Comando Função Select Seleciona dados de uma base Insert Insere uma linha em uma tabela Delete Apaga linhas da Tabela Update Altera o conteúdo de colunas (campos) da tabela. Commit Grava no disco as alterações feitas Rollback Desfaz as alterações
  • 5. Banco de Dados 5 Prof.ª Maria Angélica 5 3. Padrões do Oracle-8 3.1 Tipos de dados no ORACLE-8 No Oracle os tipos de dados armazenados em uma tabela podem ser declarados conforme indicados na tabela abaixo: Tipo de Dado Descrição Char(n) Armazena dados do tipo caracter de comprimento fixo onde n indica o tamanho. Máximo de 255. Varchar2(n) Armazena dados do tipo caracter de tamanho variável. Máximo de 2000 bytes. Number(t,d) Armazena dados numéricos onde t é o total de dígitos e d indica o número de casas decimais. Máximo de 38 caracteres Date Data e hora entre 1/1/4712 a. C. até 31/12/4712 d.C. Long Semelhante ao varchar2, mas com tamanho até 2 GB. Raw (n) Armazena dados binários de tamanho até 2000 bytes. Long raw(n) Armazena dados binários de tamanho até 2GB. Outros tipos de dados: ROWID : Cada linha de uma tabela possui uma identificação ou endereço próprio. A função ROWID mostra o endereço de uma linha. Exemplo: SELECT ROWID FROM PACIENTE: Retornará o número interno das linhas: ROWID ------------------ AAAGD5AADAAAAADAAA AAAGD5AADAAAAADAAB AAAGD5AADAAAAADAAC AAAGD5AADAAAAADAAD AAAGD5AADAAAAADAAE
  • 6. Banco de Dados 6 Prof.ª Maria Angélica 6 3.2 Restrições (constraints) São recursos proporcionados pelo SGBD para implementar regras de consistência básicas para os dados de uma tabela. Restrição Descrição NOT NULL Especifica que a coluna não pode conter um valor null. UNIQUE Especifica que uma coluna ou combinação de colunas devem ser únicas para todas as linhas na tabela. PRIMARY KEY Identifica unicamente cada linha da tabela. FOREIGN KEY/ REFERENCES Estabelece e força um relacionamento entre uma coluna e a tabela referenciada CHECK Especifica que uma condição deve ser True No item 4.2 desta apostila encontram-se mais detalhes sobre como definir restrições no banco de dados Oracle. 3.3 Nome de campos no Oracle8 É permitido o máximo de 30 caracteres para nomes de tabelas e colunas. Os nomes podem ser compostos de caracteres alfabéticos; dígitos numéricos(0 a 9) e os caracteres especiais “_” (underline), “$” (cifrão) , “#” (number). Um nome deve sempre começar com um caracter alfabético. Não é permitido o uso de palavras reservadas do Oracle como nome de tabelas e colunas. Para um mesmo usuário, não podem existir dois objetos do banco de dados com o mesmo nome.
  • 7. Banco de Dados 7 Prof.ª Maria Angélica 7 4. Gerenciando Objetos no Oracle Nesta apostila utilizaremos o modelo abaixo como referência para os exemplos que se seguem. Modelo Entidade-Relacionamento Paciente 1:1 Faz 1: N Consulta 1: N atende 1:1 Médico Tabelas correspondentes ao Modelo E-R Tabela de Paciente Codpaciente n u m b e r ( 0 4 ) (PK) Nomepaciente varchar2(30) Datanasc Date Sexo char(01) Endereco varchar2(25) Cidade varchar2(15) Desconto char(01) Tabela de Consulta Codconsulta number(03) PK DataCon Date TipoCon char(01) P=Particular C=Convênio Codmedico number(04) FK Codpaciente number(04) FK Valconsulta Number(7,2) Tabela de Médico Codmedico number(4) PK Nommedico varchar2(30)
  • 8. Banco de Dados 8 Prof.ª Maria Angélica 8 4.1 Comandos DDL - Linguagem de Definição de Dados 4.1.1 Criando Tabelas Uma tabela pode ser criada a qualquer momento e sua estrutura pode ser modificada on-line. O nome de uma tabela não é sensível a letras maiúsculas/minúsculas.  Comando Create Table Create Table <nome _tabela> ( < nome coluna1 > <Tipo_dado> [< restrições_C1> ] . . . . . . . ( < nome colunaN> <Tipo_dado> [< restrições_CN> ] [, < Restrição > ...... < Restrição_TN> ] ) ; Exemplo: Create table Paciente ( Codpaciente number(4,0) Primary Key, Nompaciente varchar2(30) not null, Datanasc date, Sexo char( 1 ) check (sexo in ( ‘F’, ‘M’ )), Endereco varchar2(25) ) ; Create table Consulta ( Codconsulta number(3,0) Primary Key , Dataconsulta date, Tipocons char(01) check (tipocons in (´P´,´C´)), Codpaciente number(4,0) Not Null References Paciente, Codmedico number(4,0) Not Null References Medico , Valconsulta number(5,0) Not Null ) ; Obs.: Após o comando ser executado o Oracle retorna a seguinte mensagem: Table Created . Indica chave estrangeira
  • 9. Banco de Dados 9 Prof.ª Maria Angélica 9 4.1.2 Alterando a estrutura de tabelas  Comando Alter Table Através deste comando o usuário pode alterar a estrutura de uma tabela, adicionar ou retirar uma constraint, etc ALTER TABLE < nome da tabela> [ ADD [< nome da coluna> <tipo_dado> [ <restriçãoC>] | < restriçãoT > ] ] [MODIFY (< nome da coluna > , . . .) ] [ DROP CONSTRAINT < restição> ] ; Exemplo: ALTER TABLE Paciente ADD (cidpaciente varchar2( 15 ) ) ; ALTER TABLE Paciente MODIFY (cidpaciente varchar2( 20 ) NOT Null ) ; ALTER TABLE Paciente ADD (desconto char( 01 ) check (desconto in (‘S`,´N` ) )) ; ALTER TABLE Paciente ADD ( Check (sexo in (´F´, ´M´ ))) ; Excluindo uma coluna ( para versões a partir do oracle 8i): ALTER TABLE Paciente DROP COLUMN desconto; 4.1.3 Excluindo Tabelas  Comando Drop Table Remove uma tabela da base de dados. Ao deletar uma tabela todos os seus dados e índices serão perdidos. Caso existam visões (View) definidas sobre a tabela estas continuarão existindo porém estarão inválidas. Só o criador da tabela e o DBA podem eliminar uma visão. DROP TABLE <nome_tabela> ; Exemplo: Drop Table paciente; Drop Table consultas;
  • 10. Banco de Dados 10 Prof.ª Maria Angélica 10 4.1.4 Renomeando uma tabela Rename nome-antigo to nome-novo Exemplo: Rename paciente to paciente_BKP; 4.1.5 Visualizando a estrutura de uma tabela e as tabelas criadas Através do comando: SQL> Describe <nome_da_tabela>; É possível verificar a estrutura da tabela criada. O comando: SQL > Select table_name from user_tables; Lista o nome de todas as tabelas criadas pelo usuário em sua base de dados. 4.1.6 Definido valores Default Create table x ( ........ ......... datapagto date default sysdate, .......... status char(01) default ´F´ check (status in (´F´,´B´)), ..........);
  • 11. Banco de Dados 11 Prof.ª Maria Angélica 11 4.2 Restrições As restrições são regras estabelecidas referentes ao preenchimento de uma coluna. Estas regras podem ser definidas no momento da criação da tabela, sendo no final da especificação da coluna ou ao final do comando Create. Também é possível definir restrições após a criação da tabela através do comando ALTER TABLE. Toda restrição tem um nome associado a ela. Se este nome não for indicado o ORACLE atribui um nome padronizado. É interessante dar nome as restrições, principalmente quando se trabalha em um ambiente cliente-servidor, pois quando da ocorrência de erros relativos a não observância das regras, o nome da restrição é propagado para o cliente, e é sempre mais fácil de ser diagnosticado se o nome for definido pelo usuário. Entre as restrições destacam-se: Chaves primárias Chaves estrangeiras Chaves únicas Identificadores de campos obrigatórios Condições para valores permitidos para determinado campo. Exemplos: Chave Primária: --- Forma mais simples (sem nomear a restrição): Create table Medico ( codMedico number(4) primary key, nomemedico varchar2(30)); ---- Nomeando a restrição Nome da restrição Create table Medico (codMedico number(4), nomemedico varchar2(30), Constraint PK_Medico_codmedico Primary Key (codMedico) ); --- Criando uma restrição após a criação da tabela Create table Medico ( codMedico number(4), nomemedico varchar2(30)) ; Nome da restrição Alter table medico add Constraint PK_Medico_codmedico primary key (codMedico);
  • 12. Banco de Dados 12 Prof.ª Maria Angélica Obs: É interessante que o nome da restrição identifique claramente a qual tabela e campo esta se refere. Em aplicações cliente servidor isto pode ser útil para facilitar a identificação de erros. 12 Chave Estrangeira: --- Forma mais simples (sem nomear a restrição): Create table consulta ( codConsulta number(3) primary key, dataconsulta date, codpaciente number(4) references paciente, codmedico number(4) references medico, valconsulta number(5) ); -- Nomeando a restrição Create table consulta ( codConsulta number(3) primary key, dataconsulta date, codpaciente number(4) , codmedico number(4) , valconsulta number(5), constraint FK_Consulta_codpaciente foreign key (codPaciente) references Paciente, Constraint FK_Consulta_codmedico foreign key (codMedico) references Medico); --- Criando uma restrição nomeada após a criação da tabela Create table consulta ( codConsulta number(3) primary key, dataconsulta date, codpaciente number(4) , codmedico number(4) , valconsulta number(5) ); alter table consulta add ( constraint FK_consulta_codpaciente foreign key (codPaciente) references paciente); alter table consulta add ( constraint FK_consulta_codmedico foreign key (codmedico) references Medico); Nome da restrição Nome da restrição
  • 13. Banco de Dados 13 Prof.ª Maria Angélica 13 Cláusula Check: Define um conjunto de valores permitidos ou condições de inserção em uma tabela --- Forma mais simples (sem nomear a restrição): Create table paciente ( ------ ------ sexo char(1) check (sexo in (‘F’, ‘M’)) , ------ ); OU --- Criando uma restrição nomeada após a criação da tabela Create table paciente ( ------ ------ sexo char(1) , ------ ); alter table paciente add constraint CK_paciente_sexo check (sexo in (‘F’, ‘M’)); 4.3 Comandos DML - Linguagem de Manipulação de dados
  • 14. Banco de Dados 14 Prof.ª Maria Angélica 14  Comando INSERT é usado para inserir linhas em uma tabela. Não é necessário atribuir conteúdo para todos os campos. Sintaxe: Insert Into tabela [ (coluna,coluna... ) ] Values (valor, valor,....) Exemplo: Insert into paciente values (001,´João da Silva´, ´01-09-1957´ , ´M´, ´Rua das Flores, 30´, ´Sorocaba´,´S´ ); Observações: a) O formato padrão de datas pode variar dependendo da instalação do Oracle. b) Se na criação da tabela for utilizada uma cláusula Check, o dado digitado deve respeitar os valores definidos dentro da cláusula. Isto inclui, no caso de letras, a distinção entre maiúsculas e minúsculas.  Comando UPDATE Permite ao usuário alterar valores em linhas de uma tabela: Sintaxe: Update tabela set coluna [, coluna...] = [expressão, subquery ] [Where condição ] ; Exemplo: Update paciente set endereço = ‘Rua das Jaboticabas, 40` where codpaciente= 003; Update paciente set desconto = ´S´ where datanasc < ‘01/01/1937’;  Comando Delete
  • 15. Banco de Dados 15 Prof.ª Maria Angélica 15 Usado para eliminar linhas de uma tabela. Sintaxe: Delete from tabela [Where condição] ; Exemplo: Delete from paciente where codpaciente = 001; 4.4 Pesquisa em Tabelas  Comando Select O comando básico para pesquisa simples a uma tabela é o SELECT. Este comando faz parte da DML (Data Manipulation Language ou Linguagem de Manipulação de Dados). Sintaxe: SELECT informação-coluna FROM tabela(s) WHERE condição ORDER BY expressão da palavra chave Onde: informação_coluna : especifica as colunas da tabela a serem recuperadas. Podem também ser expressões ou constantes . tabela(s) : Nome das tabelas envolvidas. Where: Claúsula opcional, identifica um critério para recuperar linhas específicas. Filtra as linhas a serem exibidas. Order by : Claúsula opcional. Especifica a ordem no qual as linhas serão exibidas. Cláusula Where Representa o operador relacional de restrição, pois indica as condições que devem ser satisfeitas para seleção das linhas e colunas de uma tabela. A tabela a seguir apresenta os operadores lógicos que podem ser utilizados em uma cláusula Select . Operador Significado = igual a > maior que < menor que >= maior ou igual <= menor ou igual <> Diferente de AND E
  • 16. Banco de Dados 16 Prof.ª Maria Angélica 16 OR Ou NOT Negação BETWEEN Testa faixa de valores LIKE Valores correspondentes ao valor especificado IN Valor que seja igual a algum dos valores especificados em uma lista. % Curinga para qualquer combinação de caracteres - Curinga para qualquer caracter na posição Operadores lógicos suportados pelo SQL 4.5 Exemplos de pesquisas (comando select) 1- Exibir todos os dados de todas as linhas da tabela Paciente: Select * From Paciente; 2- Selecionar o nome e o endereço de todos os pacientes. Select nomepaciente, endereco From Paciente; 3- Selecionar linhas sem repetição de dados: Select distinct cidade From paciente; 4- Utilizando cabeçalhos específicos Select nomepaciente “Nome”, datanasc “Nascimento” From paciente; 5- Seleção utilizando uma função Select sum(valconsulta) , codmedico From consulta group by codmedico; Obs: A cláusula group by está detalhada na página 13 desta apostila.
  • 17. Banco de Dados 17 Prof.ª Maria Angélica 17 6- Expressões aritméticas em determinada coluna Select codconsulta, valconsulta * 0.8 From consulta; O valor da consulta exibido será 80% do armazenado no banco de dados. O valor real não é alterado. 7- Exibindo os dados em determinada ordem Select * From paciente order by cdpaciente; Neste caso, a cláusula order by fará com que a consulta seja exibida em ordem de paciente. Qualquer campo pode ser utilizado nesta cláusula. 8- Exibindo dados com cláusula para seleção de registros específicos Select * from paciente where sexo = `F` 9- Concatenando colunas Select codpaciente || ´-´ || nompaciente from paciente ; O resultado deste comando será: Codpaciente ||´-´|| nompaciente ------------------------------------ 1- Lucélia Santos 2- Osmar Santos 3- Silvio Santos 4- José Santos 10- Tratando Valores Nulos Se uma coluna não possui valor (lembre-se espaço em branco é valor), ela é considerada com o valor NULO. O valor NULO afeta uma operação aritmética pois seu resultado é sempre nulo Podemos usar a função NVL para a conversão de valores nulos. Por exemplo: Select Cod_consulta, NVL( valconsulta,100) * 0.8 From Consulta
  • 18. Banco de Dados 18 Prof.ª Maria Angélica 18 Neste exemplo, se o valor da consulta for nulo será substituído pelo valor 100. 11. Cláusula Group By Utilizada para agrupar as linhas selecionadas baseada no valor expr para cada linha e retorna uma única linha de informação para cada grupo. Exemplo: SQL> Select coddepto, min(salario), max(salario), sum(salario) from emp Group by coddepto; coddepto min(salario) max(salario) sum(salario) ---------- -------------- -------------- -------------- 100 1050 2000 9500 102 850 1800 5700 103 2000 5000 12000 4.6 Funções Uma função é uma rotina que realiza uma operação específica retornado um resultado. O SQL possui funções de linha simples ou escalares (single Row) e funções de grupo (Group). Funções de Grupo As funções de grupo atuam sobre um conjunto de linhas retornando um único resultado. Função AVG - Calcula a média dos valores selecionados Exemplo: SQL > Select avg(nota) from aluno; Função MIN/MAX - Seleciona o menor ou o maior valor dentre os selecionados. Exemplo: SQL> Select min(nota) from aluno; Função COUNT - Retorna o número de linhas da consulta. SQL> Select count(Idaluno) from curso;
  • 19. Banco de Dados 19 Prof.ª Maria Angélica 19 Função SUM - realiza o somatório dos dados extraídos da coluna especificada. Os valores null são ignorados. 4.7 Funções para Manipulação de Datas  SYSDATE Retorna a data do sistema. Exemplo: SELECT SYSDATE FROM DUAL; SYSDATE -------- 18/08/05  Função TO_CHAR Converte campo do tipo data em uma string. È possível extrair substrings correspondentes ao dia, mês , ano, hora, minuto e segundo. Exemplos: SELECT NOMEPACIENTE FROM PACIENTE WHERE TO_CHAR(DATANASC,’MM/YYYY’) = ‘03/1959’; SELECT TO_CHAR(SYSDATE, 'HH24:MI:SS') FROM DUAL; TO_CHAR( -------- 14:42:38  Função ADD_MONTHS Soma ou subtrai o número de meses indicados da data. Exemplo: SELECT ADD_MONTHS(DATACONS,+3) FROM CONSULTA; O exemplo acima exibe o campo data da consulta acrescido de 3 meses Para subtrair usar –3.  Para Somar Dias: basta somar o número de dias ao campo data.
  • 20. Banco de Dados 20 Prof.ª Maria Angélica 20 update consulta set datacons = datacons + 7 where codpaciente = 003;  Subtração entre duas datas O Oracle devolve o número de dias. SELECT (SYSDATE – DATANASC) FROM PACIENTE;  Inclusão de data com a hora minuto e segundo usando a função TO_DATE Indica o formato 1-24 Insert into consulta values (020, To_Date(‘20/09/2003:10:15:00’,‘dd/mm/yyyy:hh24:mi:ss’) ,’P’, ........); 5. Extraindo Dados de mais de uma Tabela - Junção As vezes torna-se necessário juntar duas ou mais tabelas seguindo um determinado critério com o objetivo de selecionar colunas das mesmas. Neste caso as colunas das tabelas envolvidas na relação são comparadas. Será apresentado a seguir a junção denominada equi-join. Equi-Join : Quando o valor da coluna de uma tabela tem o seu valor correspondente na segunda. Exemplo : Exibir o nome do paciente e o código de todas as consultas realizadas por ele. Select nompaciente, codconsulta, data From paciente, consulta Where paciente.codpaciente = consulta.codpaciente; Será exibido na tela: Equação de Junção NOMPACIENTE CODCONSULTA DATA --------------------- ---------------------- -------- Pedro Luiz Silva 010 10-AUG-97 Pedro Luiz Silva 020 12-SEP-97 Pedro Luiz Silva 028 01-NOV-97 Antônio Vieira 014 15-JAN-98 Cristina Souza 024 15-MAR-98
  • 21. Banco de Dados 21 Prof.ª Maria Angélica 21 Cristina Souza 030 20-ABR-98 Exemplo: Exibir código do paciente, nome do paciente, e o nome do médico e o código de cada consulta Select paciente.codpaciente, nompaciente, codconsulta, nommedico From paciente, consulta, medico Where paciente.codpaciente = consulta.codpaciente and consulta.codmedico = medico.codmedico; Será exibido na tela: Equação de Junção Para 3 tabelas CODPACIENTE NOMPACIENTE CODCONSULTA NOMMEDICO --------------------- ---------------------- --------------------- ------------------- 507 Pedro Luiz Silva 010 Dr. Carlos Wen 507 Pedro Luiz Silva 020 Dr. Sérgio Cesar 507 Pedro Luiz Silva 028 Dr. Sérgio Cesar 604 Cristina Souza 024 Dr. Eleno Góis 604 Cristina Souza 030 Dr. Carlos Wen 6. Visões É uma forma de visualizar várias tabelas como se fossem uma única tabela. Uma visão é como uma tabela lógica, pois não existe fisicamente e seus dados são obtidos dinamicamente a partir de tabelas do banco de dados. Ela pode conter colunas de diferentes tabelas e linhas que satisfaçam alguma condição. As visões ou visualizações tem como vantagem o fato de poder limitar as colunas e linhas que serão exibidas na tela. Este recurso é importante para proteção contra acesso a dados não permitidos para um determinado usuário. Outra vantagem é a simplificação do comando Select uma vez que, para um comando Select complexo e frequentemente utilizado podemos criar uma visão facilitando a execução do comando.  Comando Create View Create [ or replace ] View < nome_visão> [ < nome_coluna1>, . . . ] as <consulta> [with check option [constraint < restrição> ] ] ;
  • 22. Banco de Dados 22 Prof.ª Maria Angélica 22 Exemplos: Create View pacsorocaba as select * from pacientes where cidpaciente = ´Sorocaba´ with check option ; Create or replace View pacientes-res as select codpaciente, nomepaciente from paciente ; Create View PacConsulta as select codpaciente, nomepaciente, codconsulta,dataconsulta from paciente, consultas where paciente.codpaciente = consultas.codpaciente ; OBS: A view PacConsulta se refere a mais de uma tabela. Para selecionar todos os dados da view criada : Select * from paciente_res; Obs: A cláusula order by não pode ser usada em views.  Comando Drop View Exclui uma visão do dicionário de dados. Drop view < nome da Visão> ; Exemplo: Drop view pacientes-res ;  Alteração de dados através de uma Visão Uma visão pode sofrer operações de alteração, deleção, inclusão e consulta respeitando porém as seguintes restrições:
  • 23. Banco de Dados 23 Prof.ª Maria Angélica 23 Deleção, Atualização e Inclusão de dados (delete, update e insert) através de uma visão não é permitida se:  A visão foi criada a partir da junção de uma ou mais tabelas.  Se existir uma função de agrupamento (group by)  Se possuir a cláusula distinct  Se possuir colunas definidas por expressões Além disso, o insert não é permitido se alguma coluna Not Null, sem valor default especificado, não foi selecionada pela visão.
  • 24. Banco de Dados 24 Prof.ª Maria Angélica 24 7. Subconsultas 7.1 Consultas Encadeadas (Claúsula Where com Subquery) Uma subquery ou subconsulta é quando o resultado de uma consulta é utilizado por outra consulta, de forma encadeada e contida no mesmo comando SQL. Restrições:  A query interna deve ser usada dentro de parênteses  A subquery não pode conter a cláusula order by  Quando utilizando múltiplas colunas em uma subquery, estas colunas devem aparecer na mesma ordem e com os mesmos tipos de dados da query principal, além do mesmo número de colunas  Podem ser utilizados operadores lógicos  As cláusulas numa instrução SQL são executadas na seguinte ordem: From (produto cartesiano) where (restrição) group by (agrupamento das linhas que satisfizerem o where) having (restrição sobre linhas do agrupamento) Exemplo: Produto Item-pedido @Codigo produto @Numero do pedido Descrição @Codigo do produto Unidade Quantidade Valor unit.
  • 25. Banco de Dados 25 Prof.ª Maria Angélica 25 Consulta: Que produtos tem pedidos cuja quantidade é superior a 20 ? Select descricao from produto Where cod_produto in (select cod_Produto from item-pedido where quantidade > 20) Resultado: Descrição Disquetes Papel Caneta Construtores: A construção in testa a pertinência de conjuntos, onde o conjunto é uma coleção de valores produzidos por uma cláusula select. O not-in testa a não pertinência de conjuntos. O construtor exist retorna o valor true se o resultado da subconsulta é não vazio. O not exists testa a não existência de tuplas em uma subconsulta. Consulta: Quais vendedores ganham um salário fixo abaixo da média? Vendedor @codigo-vendedor Nome-vendedor Faixa-de-Comissão Salário-Fixo Select nome-vendedor from vendedor Where salario-fixo < (select AVG(salario-fixo) from vendedor);
  • 26. Banco de Dados 26 Prof.ª Maria Angélica 26 Consulta: Quais os produtos que não estão presentes em nenhum pedido? Select cod-produto, descrição from produto Where not exists ( select * from item-pedido where produto.cod-produto = item-pedido.cod-produto) Consulta: Quais clientes estão presentes em mais de três pedidos ? Cliente Pedido @Código-cliente @Numero-pedido Nome-cliente Prazo-entrega Endereço Codigo-cliente Cidade Codigo-vendedor Cep Select nome-cliente from cliente where exists (select count( * ) from pedido where pedido.cod-cliente = cliente.cod-cliente group by cliente.cod-cliente having count(*) > 3 ); Exemplos com base no Modelo da vídeo-locadora: Consulta: Exibir nome dos sócios com uma ou mais locações Select cod-socio from socio where exists (select cod-socio from locacao where locacao.cod-socio = socio.cod-socio); ou podemos usar o operador IN : select cod-socio from socio where cod-socio in (select cod-socio from locacao); Consulta: Exibir código dos sócios que não possuam locações.
  • 27. Banco de Dados 27 Prof.ª Maria Angélica 27 - Utilizaremos o operador NOT EXISTS. Select cod-socio from socio where not exists (select cod-socio from locacao where locacao.cod-socio = socio.cod-socio) - Podemos também escrever este comando utilizando o operador NOT IN : Select cod-socio from socio where cod-socio not in ( select cod-socio from locacao); 7.2 Subconsultas em comandos Update e Delete. É possível utilizar subconsultas como argumento da cláusula where. Exemplo: 1. Alterar o valor da consulta em menos 10% se o campo desconto da tabela de paciente for igual a ‘S’. UPDATE CONSULTA SET VALCONSULTA = VALCONSULTA * 0.9 WHERE CODPACIENTE IN (SELECT CODPACIENTE FROM PACIENTE WHERE DESCONTO = ‘S’); 2. Excluir os pacientes que não tem consultas realizadas. DELETE PACIENTE WHERE CODPACIENTE NOT IN (SELECT DISTINCT CODPACIENTE FROM CONSULTA)
  • 28. Banco de Dados 28 Prof.ª Maria Angélica 28 7.3 Cláusula Having A Cláusula HAVING é utilizada para selecionar linhas de uma seleção feita com group by ( restrição para o group by). É muito utilizada em subqueries. Exemplo: Alunos cuja média final é superior à média do aluno JOSE(cod_aluno = 002). Select nom_aluno, avg(val_nota_final) from matricula m, aluno a where m.cod_aluno = a .cod_aluno group by nom_aluno having avg(val_nota_final) > (select avg(val_nota_final) from matricula where cod_aluno = 002); 8. Variáveis de Substituição em Consultas Uma consulta pode conter variáveis que são informadas no momento da sua execução. Exemplo: SQL> Select codsocio, nomesocio 2 from socio where 3 cidsocio = &cidade; Enter value for cidade: ‘Sorocaba’ Old 3: cidsocio = &cidade new 3: cidsocio = ‘Sorocaba’ Para que a variável seja pedida apenas uma vez utilizar o símbolo &&. Na próxima referência a esta variável, ela já assume o valor especificado anteriormente. SQL> Select codsocio, nomesocio 2 from socio where 3 cidsocio = &&cidade; Enter value for cidade: ‘Sorocaba’ Old 3: cidsocio = &&cidade new 3: cidsocio = ‘Sorocaba’ 8.1 Comando Define Cria uma variável, ou substitui o valor previamente definido.
  • 29. Banco de Dados 29 Prof.ª Maria Angélica 29 Exemplo: SQL> Define codigo = 5; SQL> Select nomesocio, endsocio from socio where codsocio = &codigo ; => O comando Undefine libera a variável. SQL> undefine codigo; 8.2 Comando Accept Permite criar uma variável e obter o valor para ela, incluindo um texto explicativo. ACCEPT variável [number / char] [Prompt / Noprompt ‘mensagem-de- solicitação:’ ] [Hide] Com o comando accept é possível: - Testar o tipo de dado que está sendo informado. - Incluir texto explicativo. - Suprimir o eco, isto é não aparecer o que está sendo digitado. Exemplo: SQL> accept nome char prompt ‘ Informe o Nome: ` ; Informe o Nome: João da Silva SQL> Select codsocio, endsocio from socio where nomesocio = &nome; Char faz com que o tipo de dado seja verificado. SQL> accept password char prompt ´ Informe a senha: ` hide; Informe a senha: ****** Neste caso não aparece o que está sendo digitado. SQL> accept codsocio char noprompt;
  • 30. Banco de Dados 30 Prof.ª Maria Angélica 30 Neste caso não aparece a mensagem. 9. Usando Apelidos para Tabelas Apelidos ou table aliases podem ser usados para : 1- Simplificar o uso do nome de tabelas nas consultas; 2- Realizar junção usando a mesma tabela; isto é join de uma tabela com ela mesma. Exemplo: SQL> select distinct nomesocio from locacao l, socio s where l.codsocio = s.codsocio; SQL> select e.nomfunc, g.nomefunc from empregado e, funcionário g where e.mgr = g.numfunc Tabela funcionário numfunc ( numero de matrícula do funcionário) nomfunc (nome do funcionário) mgr (numero de matrícula gerente) Utilizando Sinônimos  Sinônimos podem ser definidos também no dicionário de dados da forma: Create synonym func for funcionário;  Sinônimos podem ser removidos pelo comando DROP SQL> Drop synonym [ Nome-do-sinônimo]
  • 31. Banco de Dados 31 Prof.ª Maria Angélica 31 10 . Criação de seqüências automáticas Seqüências são estruturas do banco de dados que geram números seqüenciais. Isto é interessante para gerar chaves primárias ou seqüências geradas pelo próprio sistema. Sintaxe: Create sequence Nome-da-sequencia [ Increment by incrementador] [ start with valor-inicial] [ maxvalue valor_maximo | nomaxvalue ] [ minvalue valor_minimo | nominvalue ] [ Cycle | nocycle ] [ cache | nocache ] [ order | noorder ] Exemplo: SQL> Create sequence SEQcli increment by 1 start with 10 maxvalue 9999 nocache minvalue 1 order; SQL> Insert into cliente values (seqcli.nextval, ´Maria da Silva`, ´Rua das Flores`, ´Sorocaba`, ´01-sep-97` ); Para verificação e utilização dos números gerados pela seqüência: nome-da-sequencia.nextval => indica o próximo valor da sequência nome-da-sequencia.currval => indica o valor corrente SQL> select nsocio.currval from dual; SQL> select nsocio.nextval from dual; Para alterar uma sequência: SQL> Alter sequence seq increment by 1
  • 32. Banco de Dados 32 Prof.ª Maria Angélica 32 Para eliminar uma sequência: SQL> Drop sequence seq; 11. Inclusão de tabelas a partir de outra tabela É possível usar os dados de uma tabela já existente para inclusão em outra. Insert into nome-da-tabela [ (coluna, coluna, ...) ] select lista-de-seleção from tabela; Exemplo: SQL> insert into socio-aux ( codsocio, nomesocio, datinclusão) select codsocio, nomesocio, datinclusão from socio where cidsocio = ´Sorocaba`; ou se as duas tabelas tem as mesmas colunas: SQL> insert into socio_aux select * from socio; 12. Criando uma Tabela através de uma consulta É possível criar uma tabela usando como base uma já existente. Create table paciente-bkp as select * from paciente; Neste caso será criada a tabela paciente_bkp com estrutura igual a tabela paciente e herdará também os dados. Create table paciente-fem as select codpaciente, nomepaciente where sexo = ´F´ Neste caso será criada a tabela paciente-fem apenas com dois campos da tabela paciente e somente com as linhas cujo campo sexo for igual a ´F´.
  • 33. Banco de Dados 33 Prof.ª Maria Angélica Dica: Para criar uma nova tabela aproveitando a estrutura de outra mas sem levar os dados deve-se utilizar a cláusula Select com uma condição(Where) que force a consulta a não retornar nehuma linha. 33 13. O Dicionário de Dados do Oracle-8 Consiste de um conjunto de tabelas e views que são um guia de referência sobre a base de dados. Contém informações sobre: - O nome dos usuários Oracle - Direitos e privilégios - Nome dos objetos do banco de Dados - Constrains de tabelas Acesso ao dicionário de dados  Através de comandos select nas tabelas e views do dicionário. Principais Views: User_xxx Mostra informações sobre objetos do usuário all_xxxxxx Mostra objetos que o usuário tem acesso além dos objetos do próprio usuário Dba_xxxxx Para usuários que tem acesso de dba, mostra objetos pertencentes a base de dados . Dictionary Contém todos os objetos do diconário de dados acessíveis pelo usuário Exemplo: SQL> Select * from dictionary; As views mais utilizadas são: Nome da View Descrição Dictionary Todos os objetos do dicionário de dados acessíveis pelo usuário User_objects Objetos pertencentes ao usuário User_tables Descrição das tabelas do usuário User_sequences Descrição das sequences do usuário User_synonym Sinônimos do usuário
  • 34. Banco de Dados 34 Prof.ª Maria Angélica 34 User_views texto das views do usuário User_indexes Descrição dos índices do usuário all_objects Objetos acessíveis pelo usuário Exemplo: Tabelas do usuário corrente: select table_name from user_tables; Colunas do tipo date na tabela locação select column_name from user_tab_columns where data_type = ´DATE` ; Informações do objeto do usuário corrente select object_name, object_type , created from user_objects; Definição de uma view select text from user_views where view_name = ´sociossor`; Todos os sinônimos visíveis pelo usuário Select synonym_name, table_name from all_synonyms; Consultar o nome da primary Key da tabela sócio Select constraint_name from user_constraints where table_name = ´SOCIO` and constraint_type = ´P` ; Obs: tipos de constrains: P = Primary Key C = Cláusula Check R = Foreign Key Verificar todas as constraints select constraint_name, constraint_type, table_name from user_constraints;
  • 35. Banco de Dados 35 Prof.ª Maria Angélica 35 14. Transações Até agora vimos os comandos que pertencem a categoria DDL e DML. Existe uma terceira categoria de comandos chamada TPL (Transaction Process Language). Esta categoria inclui os comandos COMMIT e ROLLBACK que são os responsáveis pela gravação definitiva no banco de dados das alterações feitas pelos comandos DDL e DML e pela recuperação da situação anterior caso necessário. Commit : Grava uma transação no Banco de dados Rollback: Restaura uma transação. Recupera a posição em que o banco estava após o último commit ser executado. Exercício: 1- Inclua um novo paciente na tabela de pacientes. Através do comando select verifique se a inclusão foi realizada. Digite: SQL> Rollback ; Execute o select novamente e voce irá notar que o registro incluído não existe mais. 2- Inclua um novo paciente na tabela de pacientes. Digite: SQL> Commit ; Através do comando select verifique se a inclusão foi realizada. Digite: SQL> Rollback ; Execute o select novamente e voce irá notar que o registro incluído ainda existe apesar do Rollback ter sido executado. Isto acontece porque o rollback desfaz o que foi feito entre o último commit executado e a situação atual.
  • 36. Banco de Dados 36 Prof.ª Maria Angélica 36 15. Utilização dos Operadores Relacionais no Oracle UNIÃO - unir 2 consultas em uma única As tabelas devem ser união compatíveis isto é ter a mesma estrutura. select * from paciente union select * from paciente_bkp; _______________________________________________________________________ INTERSECÇÃO - unir 2 consultas, somente as linhas idênticas serão retornadas. select * from paciente intersect select * from paciente_bkp; _______________________________________________________________________ DIFERENÇA - unir 2 consultas. Retorna todas as linhas da primeira consulta, menos as linhas iguais à segunda consulta. select * from paciente minus select * from paciente_bkp; _______________________________________________________________________ Outros Operadores (+) Indica que uma coluna é "outer join". Mesmo não existindo na outra tabela uma linha correspondente à coluna indicada com o operador. select A.nome, B.nome from paciente A, paciente_bkp B where A.codpaciente = B.codpaciente (+); _______________________________________________________________________ PROJEÇÃO select codpaciente, nomepac from paciente; SELEÇÃO select * from paciente where cidade = 'São Roque';
  • 37. Banco de Dados 37 Prof.ª Maria Angélica 37 junção - (inner join) _______________________________________________________________________ deletar linha da tabela paciente_bkp delete from paciente_bkp where codpaciente = 003; ________________________________________________________
  • 38. Banco de Dados 38 Prof.ª Maria Angélica 38 16. Exercícios 16.1 Lista de exercícios complementar sobre o modelo Paciente-Consulta Lista número 1 1- Criar uma nova coluna na tabela paciente com o nome País varchar2(15); 2- Alterar a coluna endereço da tabela de paciente para 28 posições. 3- Excluir a nova coluna criada no exercício 1. 4- Incluir a restrição NOT NULL na coluna endereco. 5- Alterar a data de nascimento do paciente de código = 001 para ´01-09-1960´. 6- Alterar o campo desconto de todos os pacientes para ´N´. 7- Sobre a tabela Paciente, alterar o campo endereço para ‘Rua Melo Alves,40’ e cidade para ‘Itu” para o paciente de código = 02. 8- Excluir a consulta 002, somente se o campo valor consulta for igual a zero. 9- Excluir o paciente de código 5 10- Excluir todos os pacientes da cidade de sorocaba de sexo feminino. 11- Alterar o campo desconto de todos os pacientes de sexo feminino e idade superior a 60 anos para ‘S’. 12- Criar um novo campo na tabela paciente para registrar o telefone do paciente. Este campo deverá ser varchar2(15). Inserir o numero de telefone dos pacientes neste novo campo.
  • 39. Banco de Dados 39 Prof.ª Maria Angélica Cod_produto (num,3) (PK) Descrição (alfan.,20) unidade (alfan.,2) valor_unitario (6 inteiros e 2 decimais) 39 16.2 Laboratório SQL - Lista Número 2 As tabelas apresentadas neste item deverão ser utilizadas nos exercícios da parte 2.1 a parte 2.6 da lista número 2. Observação: PK - Chaves primárias FK - Chaves estrangeiras Cliente Cod_cliente (num,5) (PK) Nome_cliente (alfan.,30) Endereco (alfan.,25) Cidade (alfan.,20) Cep (alfan.,10) UF (alfan.,2) Pedido Num_pedido (num,5) (PK) Prazo_entrega (data) Cod_cliente (FK ) Cod_vendedor (FK) Item_Pedido Num_pedido (FK) cod_produto(FK) PK Quantidade 5 inteiros Vendedor Cod_vendedor (num,5) (PK) nomevendedor (alfanum. 30 posições) faixa_comissão (2 inteiros e 2 decimais) salario_fixo ( 5 inteiros e 2 decimais) Parte 2.1 – Criando e manipulando o banco de dados 1. Criar as tabelas do modelo acima. 2. Inserir pelo menos 5 linhas de dados para cada tabela. 3. Alterar o campo endereço da tabela Cliente para 30 posições. Produto 4. Acrescentar um novo campo de nome Pco_Unit (numérico com 4 inteiros e duas decimais), na tabela de itens de pedido. 5. Alterar o CEP de todos os clientes da cidade de Sorocaba para ‘18035-400’. 6. Alterar o prazo de entrega de todos os pedidos do cliente de código 20 para mais 10 dias. 7. Alterar o valor unitário para mais 10% para todos os produtos com unidade = ‘KG’.
  • 40. Banco de Dados 40 Prof.ª Maria Angélica 40 8. Excluir todos os produtos com unidade = ‘CX’ e valor unitário superior a 50,00. Parte 2.2 – Realizando Consultas 1. Listar número do pedido e prazo de entrega de todos os pedidos. 2. Listar a descrição e o valor unitário dos produtos. 3. Listar nome e endereço de todos os clientes. 4. Listar nome de todos os vendedores. 5. Listar todas as informações da tabela de clientes. 6. Listar todas as informações da tabela produtos. 7. Listar o nome de todos os vendedores. Alterar o cabeçalho da coluna para nome. 8. Listar o preço dos produtos simulando um aumento em 10%. 9. Listar o salário fixo dos vendedores simulando o aumento em 5%. 10. Listar o nome dos clientes que moram em Sorocaba. 11. Listar todos os dados dos vendedores com salário fixo <$400,00. 12. Listar o código do produto e a descrição para os produtos cuja unidade seja igual a "Kg". 13. Listar o número dos pedidos com prazo de entrega entre 01/05/2012 a 01/06/2012. 14. Listar o pedido e o prazo de entrega para os pedidos com data de entrega no ano de 2004. 15. Listar os dados dos produtos cujo valor unitário seja maior que $100,00 e menor que $200,00. 16. Listar o número do pedido e o código do produto cuja quantidade esteja entre 1000 e 1500. 17. Listar o nome dos vendedores cujo nome comece por "José". 18. Listar o nome de todos os clientes cujo ultimo nome seja "Silva". 19. Listar a descrição e o código dos produtos que tem a seqüência "AC" em qualquer parte da descrição.
  • 41. Banco de Dados 41 Prof.ª Maria Angélica 41 20. Listar os nomes dos clientes que não tenham endereço cadastrado. 21. Listar as cidades onde moram os clientes (exibir cada cidade apenas uma vez). 22. Listar os dados dos clientes por ordem alfabética de nome. 23. Listar os dados dos clientes por ordem alfabética decrescente de cidade. 24. Listar os dados dos clientes por ordem de cidade e por ordem do nome dos clientes. 25. Listar os códigos e a descrição dos produtos, cuja unidade igual o "Kg" por ordem alfabética de descrição. Parte 2.3 – Consultas usando funções 1. Listar a maior quantidade que conste na tabela de item do pedido. 2. Listar o menor valor unitário da tabela de produtos. 3. Listar a somatória dos salários fixos pago aos vendedores. 4. Listar o numero de produtos cuja unidade seja igual a "Lt". 5. Listar o numero de clientes agrupados por cidade. 6. Listar quantos pedidos cada vendedor realizou. 7. Listar o maior e o menor valor unitário para cada tipo de unidade de produto. 8. Listar o numero de clientes, agrupados por cidade para todas as cidades que aparecem mais de 4 vezes na tabela de clientes. Parte 2.4 – Consultas avançadas 1. Listar o código e o nome dos vendedores que efetuaram vendas para o cliente com código 10. 2. Listar o número do pedido, prazo de entrega, a quantidade e a descrição do produto com código 100. 3. Quais os vendedores (código e nome) fizeram pedidos para o cliente 'José da Silva'. 4. Listar o número do pedido, o código do produto, a descrição do produto, o código do vendedor, o nome do vendedor , o nome do cliente, para todos os clientes que moram em Sorocaba.
  • 42. Banco de Dados 42 Prof.ª Maria Angélica 5. Listar o código do produto, a descrição, a quantidade pedida e o prazo de entrega para 42 o pedido número 123. 6. Quais os cliente ( nome e endereço) da cidade de Itu ou Sorocaba tiveram seus pedidos tirados com o vendedor de código igual a 10. Parte 2.5 – Visões 1. Escreva uma visão que exiba o número do pedido, codcliente e prazo de entrega. 2. Escreva uma visão que liste todos os produtos com unidade = ‘KG’. 3. Escreva uma visão que liste todos os produtos com valor_unitário menor que a média. 4. Escreva uma visão que liste o numero total de pedidos feitos por vendedor. Esta visão deve conter o Codigo do vendedor, nome do vendedor e número total de pedidos. Qual das visões acima é atualizável? Parte 2.6 – Subconsultas 1. Listar todos os clientes que moram na mesma cidade que 'João da Silva'. 2. Quais produtos tem valor unitário maior que a média. 3. Quais os clientes que só compraram com o vendedor com codigo 10 e com mais nenhum outro vendedor (fidelidade). 4. Quais vendedores não fizeram mais de 5 pedidos. 5. Quais os vendedores não fizeram nenhum pedido no mês de maio/2013 6. Listar o nome do vendedor que mais fez pedidos. 7. Listar o nome dos clientes e o número total de pedidos associados a cada cliente em ordem decrescente de vendas, isto é do cliente que mais tem pedidos para o que menos tem. 8. Excluir todos os itens dos pedidos feitos pelo cliente de código =2; 9. Alterar o valor unitário de todos os produtos sem vendas no ano de 2013 para menos 20%.
  • 43. Banco de Dados 43 Prof.ª Maria Angélica 43 Laboratório SQL - Lista Número 3 1- Criar uma sequência automática para o número do pedido da tabela pedido. Incluir duas tuplas usando este recurso. 2- Criar uma tabela de nome itens-bkp a partir da tabela de itens. Esta nova tabela deverá conter os campos: numero do pedido, código do produto para todos os pedidos do ano de 2011. 3- Listar o nome de todas as tabelas de seu banco de dados e o nome dos campos que são chave estrangeira nestas tabelas. 4- Listar todas as constraints da tabela pedido. 5- Listar o nome de todas as visões que você criou em seu banco de dados e o seu respectivo texto. 6- Listar todas as cláusulas CHECK e o nome da tabela a qual pertence. 7- Crie uma visão que exiba o nome da tabela, nome da coluna, tipo e a constraint (P,R,C) caso exista. ============================================================== Anexo Dicas: Para declarar valores default em tabelas: Na criação da tabela: Create table teste (codigo number(3) PRIMARY KEY, VALOR NUMBER(3) DEFAULT 10); SQL> INSERT INTO TESTE(CODIGO) VALUES (4); 1 linha criada. SQL> SELECT * FROM TESTE14; CODIGO VALOR ---------- ---------- 1 2 2
  • 44. Banco de Dados 44 Prof.ª Maria Angélica 44 4 10 Após criação da tabela, ao adicionar uma nova coluna: