Professional Documents
Culture Documents
Introduo Linguagem
SQL em Ambiente Oracle
Banco de Dados
Prof. Maria Anglica
Atualizao: Janeiro/2013
ndice
1. Introduo a Linguagem SQL................................................................................................................3
1.1 SQL Bsico............................................................................................................................................3
1.2 A ferramenta SQL*Plus.........................................................................................................................3
2. Tipos de declaraes SQL............................................................................................................................4
3. Padres do Oracle-8.....................................................................................................................................5
3.1 Tipos de dados no ORACLE-8.............................................................................................................5
3.2 Restries (constraints)..........................................................................................................................6
3.3 Nome de campos no Oracle8.................................................................................................................6
4. Gerenciando Objetos no Oracle...................................................................................................................7
4.1 Comandos DDL - Linguagem de Definio 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 Restries.............................................................................................................................................11
4.3 Comandos DML - Linguagem de Manipulao de dados...................................................................14
4.4 Pesquisa em Tabelas.............................................................................................................................15
4.5 Exemplos de pesquisas (comando select)...........................................................................................16
4.6 Funes.................................................................................................................................................18
4.7 Funes para Manipulao de Datas...................................................................................................19
5. Extraindo Dados de mais de uma Tabela - Juno....................................................................................20
6. Vises.........................................................................................................................................................21
7. Subconsultas...............................................................................................................................................24
7.1 Consultas Encadeadas (Clasula Where com Subquery)...................................................................24
7.2 Subconsultas em comandos Update e Delete......................................................................................27
8. Variveis de Substituio em Consultas.....................................................................................................28
8.1 Comando Define..................................................................................................................................28
8.2 Comando Accept..................................................................................................................................29
9. Usando Apelidos para Tabelas...................................................................................................................30
10 . Criao de seqncias automticas.........................................................................................................31
11. Incluso de tabelas a partir de outra tabela..............................................................................................32
12. Criando uma Tabela atravs de uma consulta........................................................................................32
13. O Dicionrio de Dados do Oracle-8.........................................................................................................33
14. Transaes................................................................................................................................................35
15. Utilizao dos Operadores Relacionais no Oracle.................................................................................36
16. Exerccios.................................................................................................................................................38
16.1 Lista de exerccios complementar sobre o modelo Paciente-Consulta..............................................38
Lista nmero 1...........................................................................................................................................38
Parte 2.1 Criando e manipulando o banco de dados..........................................................................39
Parte 2.2 Realizando Consultas..........................................................................................................40
Parte 2.3 Consultas usando funes....................................................................................................41
Parte 2.4 Consultas avanadas............................................................................................................41
Parte 2.5 Vises...................................................................................................................................42
Parte 2.6 Subconsultas........................................................................................................................42
Laboratrio SQL - Lista Nmero 3............................................................................................................43
Banco de Dados
Prof. Maria Anglica
Banco de Dados
Prof. Maria Anglica
Funo
Cria uma tabela
Cria um ndice
Altera ou insere uma coluna da tabela
Elimina uma tabela do banco de Dados
Elimina um ndice
Concede privilgios de acesso p/a um usurio
Funo
Seleciona dados de uma base
Insere uma linha em uma tabela
Apaga linhas da Tabela
Altera o contedo de colunas (campos) da tabela.
Grava no disco as alteraes feitas
Desfaz as alteraes
3. Padres do Oracle-8
3.1 Tipos de dados no ORACLE-8
Banco de Dados
Prof. Maria Anglica
Descrio
Armazena dados do tipo caracter de comprimento fixo onde
n indica o tamanho. Mximo de 255.
Armazena dados do tipo caracter de tamanho varivel.
Mximo de 2000 bytes.
Armazena dados numricos onde t o total de dgitos e d
indica o nmero de casas decimais. Mximo de 38 caracteres
Data e hora entre 1/1/4712 a. C. at 31/12/4712 d.C.
Semelhante ao varchar2, mas com tamanho at 2 GB.
Armazena dados binrios de tamanho at 2000 bytes.
Armazena dados binrios de tamanho at 2GB.
ROWID : Cada linha de uma tabela possui uma identificao ou endereo prprio. A
funo ROWID mostra o endereo de uma linha.
Exemplo:
SELECT ROWID FROM PACIENTE:
Retornar o nmero interno das linhas:
ROWID
-----------------AAAGD5AADAAAAADAAA
AAAGD5AADAAAAADAAB
AAAGD5AADAAAAADAAC
AAAGD5AADAAAAADAAD
AAAGD5AADAAAAADAAE
Banco de Dados
Prof. Maria Anglica
Restrio
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY/
REFERENCES
CHECK
Descrio
Especifica que a coluna no pode conter um valor null.
Especifica que uma coluna ou combinao de colunas devem ser
nicas para todas as linhas na tabela.
Identifica unicamente cada linha da tabela.
Estabelece e fora um relacionamento entre uma coluna e a tabela
referenciada
Especifica que uma condio deve ser True
No item 4.2 desta apostila encontram-se mais detalhes sobre como definir restries
no banco de dados Oracle.
Banco de Dados
Prof. Maria Anglica
Paciente
1:1
Faz
1: N
Consulta
1: N
atende
1:1
Mdico
number(04) (PK)
varchar2(30)
Date
char(01)
varchar2(25)
varchar2(15)
char(01)
Tabela de Consulta
Codconsulta
DataCon
TipoCon
Codmedico
Codpaciente
Valconsulta
number(03) PK
Date
char(01)
P=Particular
C=Convnio
number(04) FK
number(04) FK
Number(7,2)
Tabela de Mdico
Codmedico
Nommedico
number(4) PK
varchar2(30)
Banco de Dados
Prof. Maria Anglica
Exemplo:
Create table Paciente
( Codpaciente
number(4,0)
Primary Key,
Nompaciente
varchar2(30)
not null,
Datanasc
date,
Sexo
char( 1 ) check (sexo in ( F,
Endereco
varchar2(25) ) ;
M )),
Indica chave
Create table Consulta
estrangeira
(
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 ) ;
Banco de Dados
Prof. Maria Anglica
Remove uma tabela da base de dados. Ao deletar uma tabela todos os seus dados e ndices
sero perdidos. Caso existam vises (View) definidas sobre a tabela estas continuaro
existindo porm estaro invlidas. S o criador da tabela e o DBA podem eliminar uma
viso.
DROP TABLE <nome_tabela> ;
Exemplo:
Drop Table paciente;
Drop Table consultas;
Banco de Dados
Prof. Maria Anglica
10
Atravs do comando:
SQL> Describe
<nome_da_tabela>;
4.2 Restries
As restries so regras estabelecidas referentes ao preenchimento de uma coluna.
10
Banco de Dados
Prof. Maria Anglica
11
Estas regras podem ser definidas no momento da criao da tabela, sendo no final da
especificao da coluna ou ao final do comando Create. Tambm possvel definir
restries aps a criao da tabela atravs do comando ALTER TABLE.
Toda restrio tem um nome associado a ela. Se este nome no for indicado o
ORACLE atribui um nome padronizado. interessante dar nome as restries,
principalmente quando se trabalha em um ambiente cliente-servidor, pois quando da
ocorrncia de erros relativos a no observncia das regras, o nome da restrio
propagado para o cliente, e sempre mais fcil de ser diagnosticado se o nome for
definido pelo usurio.
Entre as restries destacam-se:
Chaves primrias
Chaves estrangeiras
Chaves nicas
Identificadores de campos obrigatrios
Condies para valores permitidos para determinado campo.
Exemplos:
Chave Primria:
--- Forma mais simples (sem nomear a restrio):
Create table Medico
( codMedico number(4) primary key,
nomemedico varchar2(30));
----
Nomeando a restrio
Nome da
restrio
aps a criao da
tabela
Create table Medico
( codMedico number(4),
nomemedico varchar2(30)) ;
Nome da
restrio
11
Banco de Dados
Prof. Maria Anglica
12
primary key,
references paciente,
references medico,
);
-- Nomeando a restrio
Create table consulta
( codConsulta number(3) primary key,
dataconsulta date,
Nome da
codpaciente number(4) ,
restrio
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 restrio nomeada
aps a criao da
tabela
Create table consulta
( codConsulta number(3) primary key,
dataconsulta date,
Nome da
restrio
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);
12
Banco de Dados
Prof. Maria Anglica
13
Clusula Check:
Define um conjunto de valores permitidos ou condies de insero em uma tabela
--- Forma mais simples (sem nomear a restrio):
Create table paciente
( ----------sexo char(1) check (sexo in (F, M)) ,
-----);
OU
--- Criando uma restrio nomeada aps a criao da tabela
Create table paciente
( ----------sexo char(1) ,
-----);
alter table paciente add constraint CK_paciente_sexo
check
Comando INSERT
13
Banco de Dados
Prof. Maria Anglica
14
usado para inserir linhas em uma tabela. No necessrio atribuir contedo para todos
os campos.
Sintaxe:
Insert Into tabela [ (coluna,coluna... ) ]
Values
(valor, valor,....)
Exemplo:
Insert into paciente
values (001,Joo da Silva, 01-09-1957 , M, Rua das Flores, 30, Sorocaba,S );
Observaes:
a) O formato padro de datas pode variar dependendo da instalao do Oracle.
b) Se na criao da tabela for utilizada uma clusula Check, o dado digitado deve respeitar
os valores definidos dentro da clusula. Isto inclui, no caso de letras, a distino entre
maisculas e minsculas.
Comando UPDATE
Comando Delete
14
Banco de Dados
Prof. Maria Anglica
15
[Where condio] ;
Exemplo:
Delete from paciente
where codpaciente = 001;
4.4 Pesquisa em Tabelas
Comando Select
O comando bsico para pesquisa simples a uma tabela o SELECT. Este comando faz
parte da DML (Data Manipulation Language ou Linguagem de Manipulao de Dados).
Sintaxe:
SELECT informao-coluna FROM tabela(s)
WHERE condio
ORDER BY expresso da palavra chave
Onde:
informao_coluna : especifica as colunas da tabela a serem recuperadas. Podem tambm
ser expresses ou constantes .
tabela(s) : Nome das tabelas envolvidas.
Where: Clasula opcional, identifica um critrio para recuperar linhas especficas. Filtra as
linhas a serem exibidas.
Order by : Clasula opcional. Especifica a ordem no qual as linhas sero exibidas.
Clusula Where
Representa o operador relacional de restrio, pois indica as condies que devem ser
satisfeitas para seleo das linhas e colunas de uma tabela. A tabela a seguir apresenta os
operadores lgicos que podem ser utilizados em uma clusula Select .
Operador
=
>
<
>=
<=
<>
AND
OR
NOT
BETWEEN
LIKE
IN
Significado
igual a
maior que
menor que
maior ou igual
menor ou igual
Diferente de
E
Ou
Negao
Testa faixa de valores
Valores correspondentes ao valor especificado
Valor que seja igual a algum dos valores
especificados em uma lista.
15
Banco de Dados
Prof. Maria Anglica
16
%
Curinga para qualquer combinao de caracteres
Curinga para qualquer caracter na posio
Operadores lgicos suportados pelo SQL
From
Paciente;
Banco de Dados
Prof. Maria Anglica
17
17
Banco de Dados
Prof. Maria Anglica
18
Group by coddepto;
coddepto min(salario) max(salario) sum(salario)
---------- -------------- -------------- -------------100
102
103
1050
850
2000
2000
1800
5000
9500
5700
12000
4.6 Funes
Uma funo uma rotina que realiza uma operao especfica retornado um resultado. O
SQL possui funes de linha simples ou escalares (single Row) e funes de grupo
(Group).
Funes de Grupo
As funes de grupo atuam sobre um conjunto de linhas retornando um nico resultado.
Funo AVG - Calcula a mdia dos valores selecionados
Exemplo:
SQL > Select avg(nota) from aluno;
Funo MIN/MAX - Seleciona o menor ou o maior valor dentre os selecionados.
Exemplo:
SQL> Select min(nota) from aluno;
Funo COUNT - Retorna o nmero de linhas da consulta.
SQL> Select count(Idaluno) from curso;
Funo SUM - realiza o somatrio dos dados extrados da coluna especificada. Os
valores null so ignorados.
4.7 Funes para Manipulao de Datas
SYSDATE
Retorna a data do sistema.
Exemplo: SELECT SYSDATE FROM DUAL;
SYSDATE
18
Banco de Dados
Prof. Maria Anglica
19
-------18/08/05
Funo TO_CHAR
Funo ADD_MONTHS
Soma ou subtrai o nmero de meses indicados da data.
Exemplo:
SELECT ADD_MONTHS(DATACONS,+3)
FROM CONSULTA;
19
Banco de Dados
Prof. Maria Anglica
20
CODCONSULTA
---------------------010
020
028
014
024
030
DATA
-------10-AUG-97
12-SEP-97
01-NOV-97
15-JAN-98
15-MAR-98
20-ABR-98
NOMPACIENTE
---------------------Pedro Luiz Silva
Pedro Luiz Silva
CODCONSULTA
--------------------010
020
NOMMEDICO
------------------Dr. Carlos Wen
Dr. Srgio Cesar
20
Banco de Dados
Prof. Maria Anglica
507
604
604
21
028
024
030
6. Vises
uma forma de visualizar vrias tabelas como se fossem uma nica tabela. Uma viso
como uma tabela lgica, pois no existe fisicamente e seus dados so obtidos
dinamicamente a partir de tabelas do banco de dados. Ela pode conter colunas de
diferentes tabelas e linhas que satisfaam alguma condio.
As vises ou visualizaes tem como vantagem o fato de poder limitar as colunas e linhas
que sero exibidas na tela. Este recurso importante para proteo contra acesso a dados
no permitidos para um determinado usurio. Outra vantagem a simplificao do
comando Select uma vez que, para um comando Select complexo e frequentemente
utilizado podemos criar uma viso facilitando a execuo do comando.
21
Banco de Dados
Prof. Maria Anglica
22
Uma viso pode sofrer operaes de alterao, deleo, incluso e consulta respeitando
porm as seguintes restries:
Deleo, Atualizao e Incluso de dados (delete, update e insert) atravs de uma
viso no permitida se:
A viso foi criada a partir da juno de uma ou mais tabelas.
Se existir uma funo de agrupamento (group by)
Se possuir a clusula distinct
Se possuir colunas definidas por expresses
Alm disso, o insert no permitido se alguma coluna Not Null, sem valor default
especificado, no foi selecionada pela viso.
22
Banco de Dados
Prof. Maria Anglica
23
7. Subconsultas
7.1 Consultas Encadeadas (Clasula 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.
Restries:
A query interna deve ser usada dentro de parnteses
A subquery no pode conter a clusula order by
Quando utilizando mltiplas colunas em uma subquery, estas colunas devem aparecer
na mesma ordem e com os mesmos tipos de dados da query principal, alm do mesmo
nmero de colunas
Podem ser utilizados operadores lgicos
As clusulas numa instruo SQL so executadas na seguinte ordem:
From (produto cartesiano)
where (restrio)
group by (agrupamento das linhas que satisfizerem o where)
having (restrio sobre linhas do agrupamento)
Exemplo:
Produto
@Codigo produto
Descrio
Unidade
Valor unit.
Item-pedido
@Numero do pedido
@Codigo do produto
Quantidade
23
Banco de Dados
Prof. Maria Anglica
24
Construtores:
A construo in testa a pertinncia de conjuntos, onde o conjunto uma coleo de
valores produzidos por uma clusula select. O not-in testa a no pertinncia de
conjuntos.
O construtor exist retorna o valor true se o resultado da subconsulta no vazio. O not
exists testa a no existncia de tuplas em uma subconsulta.
Consulta: Quais vendedores ganham um salrio fixo abaixo da mdia?
Vendedor
@codigo-vendedor
Nome-vendedor
Faixa-de-Comisso
Salrio-Fixo
Banco de Dados
Prof. Maria Anglica
25
Pedido
@Numero-pedido
Prazo-entrega
Codigo-cliente
Codigo-vendedor
Banco de Dados
Prof. Maria Anglica
26
26
Banco de Dados
Prof. Maria Anglica
27
27
Banco de Dados
Prof. Maria Anglica
28
28
Banco de Dados
Prof. Maria Anglica
29
Utilizando Sinnimos
Sinnimos podem ser definidos tambm no dicionrio de dados da forma:
Create synonym func for funcionrio;
Sinnimos podem ser removidos pelo comando DROP
SQL> Drop synonym [ Nome-do-sinnimo]
29
Banco de Dados
Prof. Maria Anglica
30
30
Banco de Dados
Prof. Maria Anglica
31
31
Banco de Dados
Prof. Maria Anglica
32
Exemplo:
SQL> Select * from dictionary;
As views mais utilizadas so:
Nome da View
Dictionary
User_objects
User_tables
User_sequences
User_synonym
User_views
User_indexes
all_objects
Descrio
Todos os objetos do dicionrio de dados acessveis pelo
usurio
Objetos pertencentes ao usurio
Descrio das tabelas do usurio
Descrio das sequences do usurio
Sinnimos do usurio
texto das views do usurio
Descrio dos ndices do usurio
Objetos acessveis pelo usurio
Exemplo:
Tabelas do usurio corrente:
32
Banco de Dados
Prof. Maria Anglica
33
33
Banco de Dados
Prof. Maria Anglica
34
14. Transaes
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 so os responsveis pela
gravao definitiva no banco de dados das alteraes feitas pelos comandos DDL e DML
e pela recuperao da situao anterior caso necessrio.
Commit : Grava uma transao no Banco de dados
Rollback: Restaura uma transao. Recupera a posio em que o banco estava aps o
ltimo commit ser executado.
Exerccio:
1- Inclua um novo paciente na tabela de pacientes.
Atravs do comando select verifique se a incluso foi realizada.
Digite:
SQL> Rollback ;
Execute o select novamente e voce ir notar que o registro includo no existe mais.
2- Inclua um novo paciente na tabela de pacientes.
Digite:
SQL> Commit ;
Atravs do comando select verifique se a incluso foi realizada.
Digite:
SQL> Rollback ;
Execute o select novamente e voce ir notar que o registro includo 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 situao atual.
34
Banco de Dados
Prof. Maria Anglica
35
35
Banco de Dados
Prof. Maria Anglica
36
36
Banco de Dados
Prof. Maria Anglica
37
16. Exerccios
37
Banco de Dados
Prof. Maria Anglica
38
Pedido
Num_pedido (num,5) (PK)
Prazo_entrega (data)
Cod_cliente (FK )
Cod_vendedor (FK)
PK
Vendedor
Cod_vendedor (num,5) (PK)
nomevendedor (alfanum. 30 posies)
Produto
Cod_produto (num,3) (PK)
Descrio
(alfan.,20)
unidade
(alfan.,2)
valor_unitario (6 inteiros e
2 decimais)
Item_Pedido
Num_pedido (FK)
cod_produto(FK)
Quantidade 5 inteiros
Banco de Dados
Prof. Maria Anglica
39
39
Banco de Dados
Prof. Maria Anglica
40
40
Banco de Dados
Prof. Maria Anglica
41
Listar todos os clientes que moram na mesma cidade que 'Joo da Silva'.
2.
3.
Quais os clientes que s compraram com o vendedor com codigo 10 e com mais
nenhum outro vendedor (fidelidade).
4.
5.
6.
7. Listar o nome dos clientes e o nmero 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 cdigo =2;
9. Alterar o valor unitrio de todos os produtos sem vendas no ano de 2013 para menos
20%.
41
Banco de Dados
Prof. Maria Anglica
42
Criar uma sequncia automtica para o nmero do pedido da tabela pedido. Incluir
duas tuplas usando este recurso.
Criar uma tabela de nome itens-bkp a partir da tabela de itens. Esta nova tabela
dever conter os campos: numero do pedido, cdigo do produto para todos os
pedidos
do ano de 2011.
Listar o nome de todas as tabelas de seu banco de dados e o nome dos campos que
so chave estrangeira nestas tabelas.
Listar todas as constraints da tabela pedido.
Listar o nome de todas as vises que voc criou em seu banco de dados e o seu
respectivo texto.
Listar todas as clusulas CHECK e o nome da tabela a qual pertence.
Crie uma viso 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 criao 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
4
10
Aps criao da tabela, ao adicionar uma nova coluna:
ALTER TABLE TESTE14 ADD CAMPO NUMBER(3) DEFAULT 1;
42