You are on page 1of 42

Faculdade de Tecnologia de Sorocaba

Curso de Anlise e Desenvolvimento de Sistemas

Disciplina Tpicos em Banco de Dados

Introduo Linguagem
SQL em Ambiente Oracle

Apostila elaborada pela prof. Maria Anglica C. Andrade Cardieri

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

1. Introduo a Linguagem SQL


Esta apostila apresenta uma introduo linguagem SQL do SGBD ORACLE,
apresentando os comandos que permitem criar, manter e acessar uma base de dados
relacional.
1.1 SQL Bsico
A linguagem SQL a ferramenta bsica para acesso aos dados de um banco de
dados relacional. Foi desenvolvida inicialmente nos laboratrios da IBM (1976) por E.F.
Codd, sendo atualmente um padro para os SGBD relacionais. Apesar de existirem
alguns padres da linguagem SQL, a maioria dos fabricantes de banco de dados criou
suas prprias extenses para explorar as caractersticas do banco de dados como o caso
da Oracle com o PL/SQL.
A SQL considerada como sendo uma linguagem no procedural uma vez que ela
processa conjunto de registros e fornece acesso ou navegao automtica de dados. A
base para esta linguagem a lgebra relacional, muito embora existam diversas
caractersticas importantes que no pertencem lgebra relacional.
Na verdade, a SQL padro deve ser considerada como uma sub-linguagem, uma
vez que no possui comandos ou declaraes que permitam o controle de repeties ou de
desvios condicionais e incondicionais. Para este tipo de controle a Oracle desenvolveu o
PL/SQL que consiste em uma extenso da SQL padro.

1.2 A ferramenta SQL*Plus


A interface interativa do Oracle chama-se SQL*PLUS. Em um ambiente clienteservidor, o mdulo cliente do ORACLE deve estar instalado, fornecendo esta ferramenta.
Para conectar ao banco atravs do SQL*PLUS acessar o menu INICIAR => Programas
=> Oracle FOR WINDOWS NT => SQL*PLUS.

2. Tipos de declaraes SQL

Banco de Dados
Prof. Maria Anglica

Os comandos ou declaraes em SQL so divididos nas seguintes categorias:


DDL (Data Definition Language)
a parte do SQL usada para definir dados e objetos de um banco de dados.
Atravs destes comandos so feitas inseres no dicionrio de dados.
A tabela abaixo indica comandos DDL :
Comando
Create Table
Create Index
Alter Table
Drop Table
Drop Index
Grant

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

DML (Data Manipulation Language)


a parte da SQL usada para a recuperao ou manipulao de dados. Permite
realizar consultas, adicionar, alterar e excluir informaes do banco de dados.
Possui tambm clusulas adicionais e funes para clculo de totais, mdias, contagem de
registros e mximo e mnimo entre valores.
A tabela abaixo apresenta alguns dos mais importantes comandos dessa categoria:
Comando
Select
Insert
Delete
Update
Commit
Rollback

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

No Oracle os tipos de dados armazenados em uma tabela podem ser declarados


conforme indicados na tabela abaixo:
Tipo de Dado
Char(n)
Varchar2(n)
Number(t,d)
Date
Long
Raw (n)
Long raw(n)

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.

Outros tipos de dados:

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

3.2 Restries (constraints)


So recursos proporcionados pelo SGBD para implementar regras de consistncia bsicas
para os dados de uma tabela.

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.

3.3 Nome de campos no Oracle8


permitido o mximo de 30 caracteres para nomes de tabelas e colunas. Os nomes
podem ser compostos de caracteres alfabticos; dgitos numricos(0 a 9) e os caracteres
especiais _ (underline), $ (cifro) , # (number). Um nome deve sempre comear
com um caracter alfabtico.
No permitido o uso de palavras reservadas do Oracle como nome de tabelas e
colunas. Para um mesmo usurio, no podem existir dois objetos do banco de dados com
o mesmo nome.

Banco de Dados
Prof. Maria Anglica

4. Gerenciando Objetos no Oracle


Nesta apostila utilizaremos o modelo abaixo como referncia para os exemplos que se
seguem.
Modelo Entidade-Relacionamento

Paciente

1:1

Faz

1: N

Consulta
1: N
atende
1:1
Mdico

Tabelas correspondentes ao Modelo E-R


Tabela de Paciente
Codpaciente
Nomepaciente
Datanasc
Sexo
Endereco
Cidade
Desconto

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

4.1 Comandos DDL - Linguagem de Definio de Dados


4.1.1 Criando Tabelas
Uma tabela pode ser criada a qualquer momento e sua estrutura pode ser modificada online. O nome de uma tabela no sensvel a letras maisculas/minsculas.

Comando Create Table

Create Table <nome _tabela>


( < nome coluna1 > <Tipo_dado> [< restries_C1> ]
. . . . . . .
( < nome colunaN> <Tipo_dado> [< restries_CN> ]
[, < Restrio > ...... < Restrio_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,
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 ) ;

create table Medico


(codmedico number(4) primary key,
nomemedico varchar2(50))

Obs.: Aps o comando ser executado o Oracle retorna a seguinte mensagem:


Table Created .

Banco de Dados
Prof. Maria Anglica

4.1.2 Alterando a estrutura de tabelas

Comando Alter Table


Atravs deste comando o usurio pode alterar a estrutura de uma tabela, adicionar ou
retirar uma constraint, etc
ALTER TABLE < nome da tabela>
[ ADD [< nome da coluna> <tipo_dado> [ <restrioC>] | < restrioT > ] ]
[MODIFY (< nome da coluna > , . . .) ]
[ DROP CONSTRAINT < restio> ] ;
Exemplo:
ALTER
ALTER
NOT
ALTER
check
ALTER

TABLE Paciente ADD (cidpaciente varchar2( 15 ) ) ;


TABLE Paciente MODIFY (cidpaciente varchar2( 20 )
Null ) ;
TABLE Paciente ADD (desconto char( 01 )
(desconto in (S`,N` ) )) ;
TABLE Paciente ADD ( Check (sexo in (F, M ))) ;

Excluindo uma coluna ( para verses 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
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;

4.1.4 Renomeando uma tabela

Banco de Dados
Prof. Maria Anglica

10

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

Atravs do comando:
SQL> Describe

<nome_da_tabela>;

possvel verificar a estrutura da tabela criada.


O comando:
SQL > Select table_name from user_tables;
Lista o nome de todas as tabelas criadas pelo usurio em sua base de dados.

Definido valores Default


Create table x
( ........
.........
datapagto
date
default sysdate,
..........
status char(01)
default F
check (status in (F
,B)),
..........);

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

Create table Medico


(codMedico number(4),
nomemedico varchar2(30),
Constraint PK_Medico_codmedico Primary Key
(codMedico) );
--- Criando uma restrio

aps a criao da

tabela
Create table Medico
( codMedico number(4),
nomemedico varchar2(30)) ;

Nome da
restrio

Alter table medico add


Constraint PK_Medico_codmedico primary key (codMedico);

11

Banco de Dados
Prof. Maria Anglica

12

Obs: interessante que o nome da restrio identifique claramente a qual tabela e


campo esta se refere. Em aplicaes cliente servidor isto pode ser til para facilitar
a identificao de erros.
Chave Estrangeira:
--- Forma mais simples (sem nomear a restrio):
Create table consulta
( codConsulta number(3)
dataconsulta date,
codpaciente number(4)
codmedico number(4)
valconsulta number(5)

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

(sexo in (F, M));

4.3 Comandos DML - Linguagem de Manipulao de dados

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

Permite ao usurio alterar valores em linhas de uma tabela:


Sintaxe:
Update tabela
set coluna [, coluna...] = [expresso, subquery ]
[Where condio ] ;
Exemplo:
Update paciente
set endereo = Rua das Jaboticabas, 40`
where codpaciente= 003;
Update paciente
set desconto = S
where datanasc < 01/01/1937;

Comando Delete

Usado para eliminar linhas de uma tabela.


Sintaxe:
Delete from tabela

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

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 endereo de todos os pacientes.


Select nomepaciente, endereco
From Paciente;

Selecionar linhas sem repetio de dados:


Select distinct cidade
From paciente;

4- Utilizando cabealhos especficos


Select nomepaciente Nome, datanasc Nascimento
From paciente;
5- Seleo utilizando uma funo
Select sum(valconsulta) , codmedico
From consulta
group by codmedico;
Obs: A clusula group by est detalhada na pgina 13 desta apostila.
6- Expresses aritmticas 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
no alterado.
7- Exibindo os dados em determinada ordem
16

Banco de Dados
Prof. Maria Anglica

17

Select * From paciente


order by cdpaciente;
Neste caso, a clusula order by far com que a consulta seja exibida em ordem de
paciente. Qualquer campo pode ser utilizado nesta clusula.
8- Exibindo dados com clusula para seleo de registros especficos
Select * from paciente
where sexo = `F`
9- Concatenando colunas
Select codpaciente || - || nompaciente from paciente ;
O resultado deste comando ser:
Codpaciente ||-|| nompaciente
-----------------------------------1- Luclia Santos
2- Osmar Santos
3- Silvio Santos
4- Jos Santos
10- Tratando Valores Nulos
Se uma coluna no possui valor (lembre-se espao em branco valor), ela considerada
com o valor NULO. O valor NULO afeta uma operao aritmtica pois seu resultado
sempre nulo
Podemos usar a funo NVL para a converso de valores nulos. Por exemplo:
Select Cod_consulta, NVL( valconsulta,100) * 0.8
From Consulta
Neste exemplo, se o valor da consulta for nulo ser substitudo pelo valor 100.
11. Clusula Group By
Utilizada para agrupar as linhas selecionadas baseada no valor expr para cada linha e
retorna uma nica linha de informao para cada grupo.
Exemplo:
SQL> Select coddepto, min(salario), max(salario), sum(salario)
from emp

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

Converte campo do tipo data em uma string. possvel extrair substrings


correspondentes ao dia, ms , 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

Funo ADD_MONTHS
Soma ou subtrai o nmero 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 nmero de dias ao campo data.


update consulta
set datacons = datacons + 7
where codpaciente = 003;

Subtrao entre duas datas


O Oracle devolve o nmero de dias.
SELECT (SYSDATE DATANASC) FROM PACIENTE;

Incluso de data com a hora minuto e segundo usando a funo 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, ........);

19

Banco de Dados
Prof. Maria Anglica

20

5. Extraindo Dados de mais de uma Tabela - Juno


As vezes torna-se necessrio juntar duas ou mais tabelas seguindo um determinado critrio
com o objetivo de selecionar colunas das mesmas. Neste caso as colunas das tabelas
envolvidas na relao so comparadas. Ser apresentado a seguir a juno 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 cdigo de todas as consultas realizadas por
ele.
Select nompaciente, codconsulta, data
Equao de Juno
From paciente, consulta
Where paciente.codpaciente = consulta.codpaciente;
Ser exibido na tela:
NOMPACIENTE
--------------------Pedro Luiz Silva
Pedro Luiz Silva
Pedro Luiz Silva
Antnio Vieira
Cristina Souza
Cristina Souza

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

Exemplo: Exibir cdigo do paciente, nome do paciente, e o nome do mdico e o


cdigo de cada consulta
Select paciente.codpaciente, nompaciente, codconsulta, nommedico
From paciente, consulta, medico
Equao de Juno
Where paciente.codpaciente = consulta.codpaciente
Para 3 tabelas
and
consulta.codmedico = medico.codmedico;
Ser exibido na tela:
CODPACIENTE
--------------------507
507

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

Pedro Luiz Silva


Cristina Souza
Cristina Souza

028
024
030

Dr. Srgio Cesar


Dr. Eleno Gis
Dr. Carlos Wen

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.

Comando Create View


Create [ or replace ] View < nome_viso> [ < nome_coluna1>, . . . ]
as <consulta>
[with check option [constraint < restrio> ] ] ;
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.

21

Banco de Dados
Prof. Maria Anglica

22

Para selecionar todos os dados da view criada :


Select * from paciente_res;
Obs: A clusula order by no pode ser usada em views.

Comando Drop View

Exclui uma viso do dicionrio de dados.


Drop view < nome da Viso> ;
Exemplo:
Drop view pacientes-res ;

Alterao de dados atravs de uma Viso

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

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:
Descrio
Disquetes
Papel
Caneta

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

Select nome-vendedor from vendedor


Where salario-fixo < (select AVG(salario-fixo) from vendedor);

Consulta: Quais os produtos que no esto presentes em nenhum pedido?


Select cod-produto, descrio from produto
Where not exists
24

Banco de Dados
Prof. Maria Anglica

25

( select * from item-pedido where


produto.cod-produto = item-pedido.cod-produto)

Consulta: Quais clientes esto presentes em mais de trs pedidos ?


Cliente
@Cdigo-cliente
Nome-cliente
Endereo
Cidade
Cep

Pedido
@Numero-pedido
Prazo-entrega
Codigo-cliente
Codigo-vendedor

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 vdeo-locadora:


Consulta: Exibir nome dos scios com uma ou mais locaes
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 cdigo dos scios que no possuam locaes.
- Utilizaremos o operador NOT EXISTS.
Select cod-socio
from socio
where not exists (select cod-socio from locacao
25

Banco de Dados
Prof. Maria Anglica

26

where locacao.cod-socio = socio.cod-socio)

- Podemos tambm 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.
possvel utilizar subconsultas como argumento da clusula 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 no tem consultas realizadas.
DELETE PACIENTE WHERE CODPACIENTE NOT IN
(SELECT DISTINCT CODPACIENTE FROM CONSULTA)

26

Banco de Dados
Prof. Maria Anglica

27

7.3 Clusula Having


A Clusula HAVING utilizada para selecionar linhas de uma seleo feita com group by
( restrio para o group by). muito utilizada em subqueries.
Exemplo: Alunos cuja mdia final superior mdia 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. Variveis de Substituio em Consultas


Uma consulta pode conter variveis que so informadas no momento da sua execuo.
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 varivel seja pedida apenas uma vez utilizar o smbolo &&. Na prxima
referncia a esta varivel, 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 varivel, ou substitui o valor previamente definido.
Exemplo:

27

Banco de Dados
Prof. Maria Anglica

28

SQL> Define codigo = 5;


SQL> Select nomesocio, endsocio from socio
where codsocio = &codigo ;
=> O comando Undefine libera a varivel.
SQL> undefine codigo;

8.2 Comando Accept


Permite criar uma varivel e obter o valor para ela, incluindo um texto explicativo.
ACCEPT varivel [number / char] [Prompt / Noprompt mensagem-de- solicitao: ]
[Hide]
Com o comando accept possvel:
- Testar o tipo de dado que est sendo informado.
- Incluir texto explicativo.
- Suprimir o eco, isto no aparecer o que est sendo digitado.
Exemplo:
SQL> accept nome char prompt Informe o Nome: ` ;
Informe o Nome: Joo 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 no aparece o que est sendo digitado.
SQL> accept codsocio char noprompt;
Neste caso no aparece a mensagem.

9. Usando Apelidos para Tabelas

28

Banco de Dados
Prof. Maria Anglica

29

Apelidos ou table aliases podem ser usados para :


1- Simplificar o uso do nome de tabelas nas consultas;
2- Realizar juno 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, funcionrio g
where e.mgr = g.numfunc
Tabela funcionrio
numfunc ( numero de matrcula do funcionrio)
nomfunc (nome do funcionrio)
mgr (numero de matrcula gerente)

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

10 . Criao de seqncias automticas


Seqncias so estruturas do banco de dados que geram nmeros seqenciais.
Isto interessante para gerar chaves primrias ou seqncias geradas pelo prprio 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;

Insert into cliente values


(seqcli.nextval, Maria da Silva`, Rua das Flores`,
Sorocaba`, 01-sep-97` );
SQL>

Para verificao e utilizao dos nmeros gerados pela seqncia:


nome-da-sequencia.nextval => indica o prximo valor da sequncia
nome-da-sequencia.currval => indica o valor corrente
SQL> select nsocio.currval from dual;
SQL> select nsocio.nextval from dual;
Para alterar uma sequncia:
SQL> Alter sequence seq increment by 1
Para eliminar uma sequncia:
SQL> Drop sequence seq;

30

Banco de Dados
Prof. Maria Anglica

31

11. Incluso de tabelas a partir de outra tabela


possvel usar os dados de uma tabela j existente para incluso em outra.
Insert into nome-da-tabela [ (coluna, coluna, ...) ]
select lista-de-seleo
from tabela;
Exemplo:
SQL> insert into socio-aux ( codsocio, nomesocio, datincluso)
select codsocio, nomesocio, datincluso
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 atravs de uma consulta


possvel 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 tambm 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.
Dica: Para criar uma nova tabela aproveitando a estrutura de outra mas sem levar os
dados deve-se utilizar a clusula Select com uma condio(Where) que force a consulta a
no retornar nehuma linha.

31

Banco de Dados
Prof. Maria Anglica

32

13. O Dicionrio de Dados do Oracle-8


Consiste de um conjunto de tabelas e views que so um guia de referncia sobre a
base de dados.
Contm informaes sobre:
- O nome dos usurios Oracle
- Direitos e privilgios
- Nome dos objetos do banco de Dados
- Constrains de tabelas
Acesso ao dicionrio de dados Atravs de comandos select nas tabelas e views do
dicionrio.
Principais Views:
User_xxx
all_xxxxxx
Dba_xxxxx
Dictionary

Mostra informaes sobre objetos do usurio


Mostra objetos que o usurio tem acesso alm dos objetos do prprio
usurio
Para usurios que tem acesso de dba, mostra objetos pertencentes a base de
dados .
Contm todos os objetos do diconrio de dados acessveis pelo usurio

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

select table_name from user_tables;


Colunas do tipo date na tabela locao
select column_name from user_tab_columns
where data_type = DATE` ;
Informaes do objeto do usurio corrente
select object_name, object_type , created from user_objects;
Definio de uma view
select text from user_views
where view_name = sociossor`;
Todos os sinnimos visveis pelo usurio
Select synonym_name, table_name from all_synonyms;
Consultar o nome da primary Key da tabela scio
Select constraint_name from user_constraints where table_name = SOCIO` and
constraint_type = P` ;
Obs: tipos de constrains:
P = Primary Key
C = Clusula Check
R = Foreign Key
Verificar todas as constraints
select constraint_name, constraint_type, table_name from user_constraints;

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.

15. Utilizao dos Operadores Relacionais no Oracle

34

Banco de Dados
Prof. Maria Anglica

35

UNIO - unir 2 consultas em uma nica


As tabelas devem ser unio compatveis isto ter a mesma estrutura.
select * from paciente
union select * from paciente_bkp;
_______________________________________________________________________
INTERSECO - unir 2 consultas, somente as linhas idnticas sero
retornadas.
select * from paciente
intersect select * from paciente_bkp;
_______________________________________________________________________
DIFERENA - 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 no 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 (+);
_______________________________________________________________________
PROJEO
select codpaciente, nomepac from paciente;
SELEO
select * from paciente
where cidade = 'So Roque';
juno - (inner join)
_______________________________________________________________________

35

Banco de Dados
Prof. Maria Anglica

36

deletar linha da tabela paciente_bkp


delete from paciente_bkp
where codpaciente = 003;
________________________________________________________

36

Banco de Dados
Prof. Maria Anglica

37

16. Exerccios

16.1 Lista de exerccios complementar sobre o modelo Paciente-Consulta


Lista nmero 1
Criar uma nova coluna na tabela paciente com o nome Pas varchar2(15);
Alterar a coluna endereo da tabela de paciente para 28 posies.
Excluir a nova coluna criada no exerccio 1.
Incluir a restrio NOT NULL na coluna endereco.
Alterar a data de nascimento do paciente de cdigo = 001 para 01-09-1960.
Alterar o campo desconto de todos os pacientes para N.
Sobre a tabela Paciente, alterar o campo endereo para Rua Melo Alves,40 e
cidade para Itu para o paciente de cdigo = 02.
Excluir a consulta 002, somente se o campo valor consulta for igual a zero.
Excluir o paciente de cdigo 5

Excluir todos os pacientes da cidade de sorocaba de sexo feminino.

Alterar o campo desconto de todos os pacientes de sexo feminino e idade


superior a 60 anos para S.

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.

37

Banco de Dados
Prof. Maria Anglica

38

16.2 Laboratrio SQL - Lista Nmero 2


As tabelas apresentadas neste item devero ser utilizadas nos exerccios da parte 2.1
a parte 2.6 da lista nmero 2.
Observao:
PK - Chaves primrias
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)
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

faixa_comisso (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 endereo da tabela Cliente para 30 posies.
4. Acrescentar um novo campo de nome Pco_Unit (numrico 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 cdigo 20 para mais 10
dias.
7. Alterar o valor unitrio para mais 10% para todos os produtos com unidade = KG.
8. Excluir todos os produtos com unidade = CX e valor unitrio superior a 50,00.
Parte 2.2 Realizando Consultas
Listar nmero do pedido e prazo de entrega de todos os pedidos.
38

Banco de Dados
Prof. Maria Anglica

39

Listar a descrio e o valor unitrio dos produtos.


Listar nome e endereo de todos os clientes.
Listar nome de todos os vendedores.
Listar todas as informaes da tabela de clientes.
Listar todas as informaes da tabela produtos.
Listar o nome de todos os vendedores. Alterar o cabealho da coluna para nome.
Listar o preo dos produtos simulando um aumento em 10%.
Listar o salrio fixo dos vendedores simulando o aumento em 5%.
Listar o nome dos clientes que moram em Sorocaba.
Listar todos os dados dos vendedores com salrio fixo <$400,00.
Listar o cdigo do produto e a descrio para os produtos cuja unidade seja igual a
"Kg".
Listar o nmero dos pedidos com prazo de entrega entre 01/05/2012 a 01/06/2012.
Listar o pedido e o prazo de entrega para os pedidos com data de entrega no ano de
2004.
Listar os dados dos produtos cujo valor unitrio seja maior que $100,00 e menor que
$200,00.
Listar o nmero do pedido e o cdigo do produto cuja quantidade esteja entre 1000 e
1500.
Listar o nome dos vendedores cujo nome comece por "Jos".
Listar o nome de todos os clientes cujo ultimo nome seja "Silva".
Listar a descrio e o cdigo dos produtos que tem a seqncia "AC" em qualquer
parte da descrio.
Listar os nomes dos clientes que no tenham endereo cadastrado.
Listar as cidades onde moram os clientes (exibir cada cidade apenas uma vez).
Listar os dados dos clientes por ordem alfabtica de nome.

39

Banco de Dados
Prof. Maria Anglica

40

Listar os dados dos clientes por ordem alfabtica decrescente de cidade.


Listar os dados dos clientes por ordem de cidade e por ordem do nome dos clientes.
Listar os cdigos e a descrio dos produtos, cuja unidade igual o "Kg" por ordem
alfabtica de descrio.

Parte 2.3 Consultas usando funes


1. Listar a maior quantidade que conste na tabela de item do pedido.
2. Listar o menor valor unitrio da tabela de produtos.
3. Listar a somatria dos salrios 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 unitrio 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 avanadas
1. Listar o cdigo e o nome dos vendedores que efetuaram vendas para o cliente com cdigo 10.
2. Listar o nmero do pedido, prazo de entrega, a quantidade e a descrio do produto com
cdigo 100.
3. Quais os vendedores (cdigo e nome) fizeram pedidos para o cliente 'Jos da Silva'.
4. Listar o nmero do pedido, o cdigo do produto, a descrio do produto, o cdigo do vendedor,
o nome do vendedor , o nome do cliente, para todos os clientes que moram em Sorocaba.

5. Listar o cdigo do produto, a descrio, a quantidade pedida e o prazo de entrega


para o pedido nmero 123.
6. Quais os cliente ( nome e endereo) da cidade de Itu ou Sorocaba tiveram seus
pedidos tirados com o vendedor de cdigo igual a 10.

40

Banco de Dados
Prof. Maria Anglica

41

Parte 2.5 Vises


1. Escreva uma viso que exiba o nmero do pedido, codcliente e prazo de entrega.
2. Escreva uma viso que liste todos os produtos com unidade = KG.
3. Escreva uma viso que liste todos os produtos com valor_unitrio menor que a
mdia.
4. Escreva uma viso que liste o numero total de pedidos feitos por vendedor. Esta
viso deve conter o Codigo do vendedor, nome do vendedor e nmero total de
pedidos.
Qual das vises acima atualizvel?
Parte 2.6 Subconsultas
1.

Listar todos os clientes que moram na mesma cidade que 'Joo da Silva'.

2.

Quais produtos tem valor unitrio maior que a mdia.

3.

Quais os clientes que s compraram com o vendedor com codigo 10 e com mais
nenhum outro vendedor (fidelidade).

4.

Quais vendedores no fizeram mais de 5 pedidos.

5.

Quais os vendedores no fizeram nenhum pedido no ms de maio/2013

6.

Listar o nome do vendedor que mais fez pedidos.

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%.

Laboratrio SQL - Lista Nmero 3

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

You might also like