Você está na página 1de 19

Apostila de SQL.....................................................................................................

pg 1 de 19

APOSTILA NR 07 - SQL
1. INTRODUO
A SQL, Structured Query Language (ou Linguagem de Consulta Estruturada), a linguagem
padro para acesso a bancos de dados relacionais. aceita por quase todos os produtos existentes no
mercado. Foi desenvolvida no incio da dcada de 1970, nos laboratrios da IBM. Inicialmente, foi
chamada de SEQUEL; posteriormente seu nome foi alterado para SQL.
Em 1982, o American National Standard Institute (ANSI) tornou a SQL padro oficial de
linguagem em ambiente relacional.
Aps sofrer algumas alteraes, a SQL passou a ter capacidade de ser utilizada em linguagens
hospedeiras, tais como: COBOL, FORTRAN, C, JAVA, DELPH, VISUAL BASIC, PHP, etc. Dessa
forma, programas aplicativos (front-end) passaram a ser desenvolvidos e implementados com o uso da
linguagem SQL embutida. As solicitaes ao banco de dados so feitas por meio da SQL
independentemente da linguagem utilizada pelo aplicativo.

DBA/SQL Plus
Aplicao
Usurio/Aplicao

SQL

Rede corporativa

SQ L

Sevidor de Banco de Dados

Aplicao

Desenvolvedor

Banco
de Dados

2. A LINGUAGEM SQL
A linguagem SQL possui dois grandes grupos de instrues: DDL (Data Definition Language) e
DML (Data Manipulation Language).
A DDL permite ao usurio a definio da estrutura e organizao dos dados armazenados e,
tambm, a relao entre eles.
A DML permite ao usurio a manipulao dos dados (inserir, alterar e apagar) e a consulta aos
mesmos.
Podemos, ainda, considerar uma terceira categoria:DCL (Data Control Language). Esta permite
atribuir privilgios de acesso ao banco de dados.

Apostila de SQL.....................................................................................................pg 2 de 19

DDL

DML
DCL

CREATE
ALTER
DROP
RENAME
SELECT
INSERT
UPDATE
DELETE
GRANT

Criar
Alterar
Eliminar
Renomear
Consultar dados
Inserir dados
Modificar dados
Eliminar dados
Segurana quanto a acesso

3. TIPOS DE DADOS
Em nosso curso utilizaremos o SGBD Oracle. Vamos acess-lo por meio de sua interface
nativa: o SQL/PLUS.
Os principais tipos de dados que utilizaremos so:

VARCHAR2(tamanho): Dados do tipo caractere de comprimento varivel (um tamanho


mximo deve ser especificado). O tamanho mximo 400.

NUMBER(p,s): nmero com tamanho mximo de 38 caracteres. Ex NUMBER(12,2)


no mximo 12 nmeros (10 inteiros e 02 decimais).

DATE Os dados sempre sero armazenados com sculo, ano, ms, dia, hora, minuto e
segundo.

4. COMANDOS DDL (Data Definition Language)


4.1. CRIAO DE TABELAS (DDL)
CREATE TABLE (nome da tabela)
(nome da coluna
tipo de dado [ (tamanho)] [restrio],
nome da coluna
tipo de dado [ (tamanho)] [restrio],
[restrio],
.............................................................................................);
Exemplos:
SQL> CREATE TABLE fornecedor
2 (Cod_Fornecedor
NUmber(4),
3
Nome
Varchar2(50),
4
Endereco
Varchar2(70),
5
Data_nascimento
Date,
6
Sexo
Varchar2(2));
Tabela criada.

Apostila de SQL.....................................................................................................pg 3 de 19
SQL> CREATE TABLE cliente
2 (CodClinte
3
Nome
4
Ident
5
End
6
Tel

Number(8),
Varchar2(80),
Varchar2(11),
Varchar2(50),
Varchar2(12));

Tabela criada.

Para verificar a estrutura da tabela utilize o comando Describe ou Desc.


SQL> DESC cliente
Nome
Nulo?
----------------------------------------- -------CODCLINTE
NOME
IDENT
END
TEL

Tipo
------------NUMBER(8)
VARCHAR2(80)
VARCHAR2(11)
VARCHAR2(50)
VARCHAR2(12)

4.2.ELIMINAO DE TABELAS (DROP)


Para eliminar uma tabela utilizamos o comando DROP
DROP TABLE (nome da tabela);
Caso exista outra(s) tabela(s) que a referencia(m) com chave(s) estrangeira(s), temos duas
opes:
1 eliminar primeiramente a(s) tabela(s) que a referencia(m) (tabelas filhas), para, ento,
elimin-la (tabela me)
2 usar a clusula CASCADE CONSTRAINT. Dessa forma a tabela ser eliminada,
independentemente de que haja outra(s) que a referencie(m)
DROP TABLE (nome da tabela) CASCADE CONSTRAINT;
Exemplo:
DROP TABLE FORNECEDOR;
DROP TABLE CLIENTE CASCADE CONSTRAINT;
4.3. RESTRIES
Entre as restries encontram-se:
Chaves primrias;
Chaves estrangeiras;
Chaves nicas;
Identificadores de campos obrigatrios;
Condies para valores permitidos para determinado campo.
A incluso de restries pode ocorrer no momento da criao da tabela ou em um segundo
momento, na alterao da estrutura da tabela.

Apostila de SQL.....................................................................................................pg 4 de 19

4.3.1 PRIMARY KEY


Define que uma ou mais colunas compe a chave primria de uma tabela.
Exemplos:
SQL>
2
3
4
5
6

CREATE TABLE fornecedor


(Cod_Fornecedor
NUmber(4) PRIMARY KEY,
Nome
Varchar2(50),
Endereco
Varchar2(70),
Data_nascimento
Date,
Sexo
Varchar2(2));

Tabela criada.
SQL> CREATE TABLE cliente
2 (CodClinte
3
Nome
4
Ident
5
End
6
Tel

Number(8) PRIMARY KEY,


Varchar2(80),
Varchar2(11),
Varchar2(50),
Varchar2(12));

Tabela criada.

Ou definindo a restrio aps a definio das colunas da tabela


SQL> DROP TABLE fornecedor;
SQL> CREATE TABLE fornecedor
2 (COD_FORNECEDOR
NUMBER(4),
3
NOME
VARCHAR2(50),
4
CONSTRAINT
FORNECEDOR_PK
5
PRIMARY KEY
(COD_FORNECEDOR));

4.3.2 UNIQUE
Define uma ou mais colunas que no podem ter valor repetido em mais de uma linha da
tabela.
EXEMPLO:
SQL>
2
3
4
5
6

CREATE TABLE cliente


(CodClinte
Nome
Ident
End
Tel

Number(8) PRIMARY KEY,


Varchar2(80),
Varchar2(11) UNIQUE,
Varchar2(50),
Varchar2(12));

Tabela criada.

Ou definindo a restrio aps a definio das colunas da tabela

Apostila de SQL.....................................................................................................pg 5 de 19

SQL> CREATE TABLE cliente


2 (CodClinte
3
Nome
4
Ident
5
End
6
Tel
7
CONSTRAINT
8
UNIQUE

Number(8) PRIMARY KEY,


Varchar2(80),
Varchar2(11),
Varchar2(50),
Varchar2(12),
cliente_ident_uk
(ident));

4.3.3 NOT NULL


Indica que obrigatria a insero de algum valor nessa coluna.
SQL>
2
3
4
5
6

CREATE TABLE cliente


(CodClinte
Nome
Ident
End
Tel

Number(8) PRIMARY KEY,


Varchar2(80) NOT NULL,
Varchar2(11) NOT NULL UNIQUE,
Varchar2(50) NOT NULL,
Varchar2(12));

Tabela criada.
SQL> DESC CLIENTE
Nome
----------------------------------------CODCLINTE
NOME
IDENT
END
TEL

Nulo?
-------NOT NULL
NOT NULL
NOT NULL
NOT NULL

Tipo
------------NUMBER(8)
VARCHAR2(80)
VARCHAR2(11)
VARCHAR2(50)
VARCHAR2(12)

4.3.4. FOREIGN KEY


Implementa o relacionamento ao criar uma chave estrangeira que faz referncia a chave
primria de outra tabela.
Exemplos:
SQL> CREATE TABLE funcionario
2 (CodFuncionario
NUMBER(5) PRIMARY KEY,
3
NOME
VARCHAR2(50) NOT NULL,
4
TEL
VARCHAR2(12));
Tabela criada.
SQL> CREATE TABLE dependente
2 (CodDependente
NUMBER(5) PRIMARY KEY,
3
CodFunc
NUMBER(5),
4
NOME
VARCHAR2(50) NOT NULL,
5
CONSTRAINT
DEP_FK_FUNC
6
FOREIGN KEY (CodFunc)
7
REFERENCES funcionario (CodFuncionario));

Apostila de SQL.....................................................................................................pg 6 de 19
Tabela criada.

4.3.5. CHECK
Define um conjunto de valores permitidos ou condies para insero de valores em uma
determinada coluna.
EXEMPLO:
SQL>
2
3
4
5
6
7

CREATE TABLE cliente


(CodCliente
NUMBER(5) PRIMARY KEY,
Nome
VARCHAR2(50) NOT NULL,
SEXO
VARCHAR2(2) NOT NULL,
TEL
VARCHAR2(12),
CONSTRAINT CLI_CK_SEXO
CHECK (SEXO in ('MA','FE')));

Tabela criada.

Segue um exemplo de tentativa de insero de dado que viole a constraint check


SQL> INSERT INTO CLIENTE
2 VALUES
3 ('01','MARIA','F','242-7689');
INSERT INTO CLIENTE
*
ERRO na linha 1:
ORA-02290: restrio de checagem (LUIZ.CLI_CK_SEXO) violada

Abaixo o comando com o valor correto


SQL> INSERT INTO CLIENTE
2 VALUES
3 ('01','MARIA','FE','242-7689');
1 linha criada.

4.4.ALTERANDO A ESTRUTURA DE TABELAS (ALTER TABLE)


4.4.1.adicionar/modificar coluna
ALTER TABLE (nome da tabela)
ADD (coluna
tipo de coluna);
Exemplo:
SQL> ALTER TABLE cliente
2 ADD (cpf
varchar2(11));
Tabela alterada.

Apostila de SQL.....................................................................................................pg 7 de 19

SQL> desc cliente


Nome
Nulo?
----------------------------------------- -------COD_CLIENTE
END
DATA_NASC
CPF

ALTER TABLE
MODIFY (coluna

Tipo
--------------NUMBER(4)
VARCHAR2(50)
DATE
VARCHAR2(11)

CLIENTE
tipo de dado);

Exemplo:
SQL> ALTER TABLE cliente
2 MODIFY (END
VARCHAR2(60));
Tabela alterada.
SQL> DESC CLIENTE
Nome
Nulo?
----------------------------------------- -------COD_CLIENTE
END
DATA_NASC
CPF

Tipo
-----------NUMBER(4)
VARCHAR2(60)
DATE
VARCHAR2(11)

4.4.2.Eliminando coluna
ALTER TABLE (nome da tabela)
DROP COLUMN (nome da cluna);

Exemplo:

SQL> ALTER TABLE cliente


2 DROP COLUMN end;
Tabela alterada.
SQL> desc cliente
Nome
Nulo?
----------------------------------------- -------COD_CLIENTE
DATA_NASC
CPF

Tipo
----------------NUMBER(4)
DATE
VARCHAR2(11)

Apostila de SQL.....................................................................................................pg 8 de 19
4.4.3.Incluindo restries

ALTER TABLE (nome da tabela)


ADD [ CONSTRAINT restrio] tipo (coluna);
Exemplo:
SQL> ALTER TABLE CLIENTE
2 ADD (CONSTRAINT cliente_pk
3
PRIMARY KEY (cod_cliente));
Tabela alterada.
SQL> ALTER TABLE CLIENTE
2 ADD (CONSTRAINT cliente_cpf_uk
3
UNIQUE
(cpf));
Tabela alterada.

4.5.ALTERANDO O NOME DA TABELA

RENAME nome_tabela to nome_novo_tabela;


Exemplo:
SQL> RENAME cliente to parceiro;
Tabela renomeada.
SQL> desc parceiro
Nome
Nulo?
----------------------------------------- -------COD_CLIENTE
NOT NULL
DATA_NASC
CPF

Tipo
------------NUMBER(4)
DATE
VARCHAR2(11)

4.6.CRIANDO SEQUNCIAS (SEQUENCES)


Usamos sequnce para criar sequncias numricas em campos de chave primria
CREATE SEQUNCE nome_da-sequncia
[INCREMENT BY n]
[START WITH n];
Exemplo:

SQL> CREATE SEQUENCE cliente_cod_cliente;


Seqncia criada.

Apostila de SQL.....................................................................................................pg 9 de 19
5. COMANDOS DML (DATA MANIPULATION LANGUAGE)
5.1 INSERIR LINHAS EM TABELAS
Para incluir dados em uma tabela pode-se, ou no, incluir valores em todas as suas colunas(caso
no sejam obrigatrias). Este procedimento realizado com o comando INSERT.
A relao de colunas poder ser omitida quando forem includos valores para todas as colunas
dessa tabela. Neste caso, os valores sero atribudos s colunas na seqncia em que as mesmas se
apresentam na tabela (esta ordem pode ser verificada com o comando Desc). No aconselhvel o uso
de comandos de incluso com omisso da lista de colunas dentro de aplicaes em geral, pois, sempre
que a estrutura da tabela for alterada, a aplicao tambm sofrer alteraes, mesmo que seja a incluso
de campos com valores nulos.
COMANDO SQL:
INSERT INTO nome da tabela
[ (nome da coluna [,nome da coluna])]
VALUES
(valor da coluna [,valor da coluna])
EXEMPLOS:
Explicitando as colunas
SQL>
2
3
4

INSERT INTO CLIENTE


(CODCLIENTE,NOME,SEXO,TEL)
VALUES
('2','MARIO','MA','658-2829');

1 linha criada.
SQL>
2
3
4

INSERT INTO CLIENTE


(CODCLIENTE,NOME,SEXO,TEL)
VALUES
('3','MARCIA','FE',NULL);

1 linha criada.

No explicitando as colunas
SQL> INSERT INTO CLIENTE
2 VALUES
3 ('4','JANAINA','FE','638-9976');
1 linha criada.

Utilizando sequncia:
SQL> create table cliente2
2 (cod_cliente number(4),
3 nome
varchar2(30));

Apostila de SQL.....................................................................................................pg 10 de 19

Tabela criada.
SQL> INSERT INTO cliente2
2 VALUES
3 (cliente_cod_cliente.NEXTVAL,'MARIA');
1 linha criada.
SQL> INSERT INTO cliente2
2 VALUES
3 (cliente_cod_cliente.NEXTVAL,'juca');
1 linha criada.
SQL> INSERT INTO cliente2
2 VALUES
3 (cliente_cod_cliente.NEXTVAL,'PAULO');
1 linha criada.
SQL> SELECT * FROM CLIENTE2;
COD_CLIENTE
----------1
2
3

NOME
-----------------------------MARIA
juca
PAULO

5.2 RECUPERAR DADOS DE UMA TABELA


COMANDO:
SELECT [* / nome da coluna]
FROM nome da tabela
WHERE condio;
Exemplos:
SQL>
2

SELECT *
FROM prof.aluno;

CODCLIENTE
---------1
2
3

NOME
--------------MARA
JUCA
CLAUDECIR

4 CLARA

O * seleciona todas as colunas

IDENT
--------------76702
76809
087872

END
NOTA
-------------------- ---------RUA DA GLORIA NR 75
9,4
RUA DOS PATOS NR 95
5,4
RUA ESPIRITO SAGRADO
7,4
NR 875

73789

RUA DA GLORIA NR 95

8,7

Apostila de SQL.....................................................................................................pg 11 de 19
SQL> SELECT nome, nota
2 FROM prof.aluno;
NOME
NOTA
--------------- ---------MARA
9,4
JUCA
5,4
CLAUDECIR
7,4
CLARA
8,7
SELECIONOU SOMENTE AS COLUNAS NOME E NOTA

5.2.1COMPARAES NA CLUSULA WHERE


WHERE nome_da_coluna operador valor
Operadores relacionais
= igual
<> diferente

< menor que

> maior que

>= maior ou igual do que

<= menor ou igual do que


Quando a coluna do tipo caractere, o valor deve estar entre aspas simples ( ' );
Na SQL existe diferena enter maisculas e minsculas, dessa forma 'JUCA' diferente de 'juca'.

Exemplos
SQL> SELECT *
2 FROM prof.aluno
3 WHERE nome='MARA';
CODCLIENTE NOME
IDENT
END
NOTA
---------- --------------- --------------- -------------------- ---------1 MARA
76702
RUA DA GLORIA NR 75
9,4

Com o uso do WHERE, selecionou todas as colunas onde o nome MARA


SQL> SELECT nome, nota
2 FROM prof.aluno
3 WHERE NOME ='JUCA';
NOME
NOTA
--------------- ---------JUCA
5,4

Selecionou as colunas nome e nota onde o nome JUCA


SQL> SELECT nome, nota
2 FROM prof.aluno
3
WHERE NOTA > '7,4';

Apostila de SQL.....................................................................................................pg 12 de 19

NOME
NOTA
--------------- ---------MARA
9,4
CLARA
8,7

Selecionou os campos nome e nota onde a nota maior que 7,4


Operadores Lgicos

AND
OR
NOT

e lgico
ou lgico
negao

Listar na tabela PROF.DISCIPLINA os cursos com carga horria maior que 50 e cujos professores
sejam aqueles de cdigo 1
SQL>
select *
2
from prof.disciplina
3
where carga_horaria > 50
4 and cod_professor =1;
COD_DISCIPLINA
-------------1
2

NOME_DISCIPLINA CARGA_HORARIA COD_PROFESSOR


--------------- ------------- ------------BANCO DE DADOS
68
1
ESTRUTURA DADOS
68
1

Operadores BETWEEN e NOT BETWEEN


selecione as disciplinas que possuem carga horria entre 30 e 50 horas
SQL> select * from
2 disciplina
3 where carga_horaria between 30 and 50;
COD_DISCIPLINA NOME_DISCIPLINA CARGA_HORARIA COD_PROFESSOR
-------------- --------------- ------------- ------------3 MATEMATICA
34
2

Operadores LIKE e NOT LIKE


Os operadores LIKE e NOT LIKE s trabalham sobre colunas que sejam do tipo CHAR. Eles
tm praticamente o mesmo funcionamento que os operadores = e <>, porm o poder desses operadores
est na utilizao dos smbolos (%) e( _ ) que podem fazer o papel de curinga:

% substitui uma sequncia de caracteres

_ substitui um caractere
Exemplo: LAPIS% pode enxergar os seguintes registros

LAPIS PRETO
LAPIS CERA
LAPIS BORRACHA

Apostila de SQL.....................................................................................................pg 13 de 19
Listar todos os professores cujos nomes iniciam com a letra J
SQL>
2
3

select *
from professor
where nome_professor like 'J%';

COD_PROFESSOR
------------3
4

NOME_PROFESSOR
-------------------JANA
JULIANA

TITULACAO
--------------BACHAREL
MESTRE

listar os professores cujos nomes no iniciam com J


SQL>
2
3

select *
from professor
where nome_professor not like 'J%';

COD_PROFESSOR
------------1
2

NOME_PROFESSOR
-------------------LUIZ
MIRANDA

TITULACAO
--------------MESTRE
DOUTOR

Operadores IN e NOT IN
Esses operadores listam registros que esto ou no contidos no conjunto de valores fornecidos.
Estes operadores minimizam o uso dos operadores =, <>, and e or.
Listar todos os professores que sejam mestres ou doutores
SQL> select *
2 from professor
3 where titulacao in ('MESTRE','DOUTOR');
COD_PROFESSOR
------------1
2
4

NOME_PROFESSOR
-------------------LUIZ
MIRANDA
JULIANA

TITULACAO
----------MESTRE
DOUTOR
MESTRE

listar todos os professores que no sejam mestres ou doutores


SQL>
2
3

select *
from professor
where titulacao not in ('MESTRE','DOUTOR');

COD_PROFESSOR NOME_PROFESSOR
TITULACAO
------------- -------------------- -------------3 JANA
BACHAREL

Operadores IS NULL e IS NOT NULL

Apostila de SQL.....................................................................................................pg 14 de 19
A utilizao do valor nulo (NULL) muito problemtica, pois cada implementao da
linguagem pode adotar qualquer representao para valor nulo
Listar todos os professores que no possuam titulao
SQL> select *
2 from professor
3 where titulacao is null;
no h linhas selecionadas

Listar todos os professores que possuam alguma titulao


SQL> select *
2 from professor
3 where titulacao is not null;
COD_PROFESSOR
------------1
2
3
4

NOME_PROFESSOR
-------------------LUIZ
MIRANDA
JANA
JULIANA

TITULACAO
--------------MESTRE
DOUTOR
BACHAREL
MESTRE

Recuperando dados de vrias tabelas


At agora viemos trabalhando com a recuperao de dados sobre uma nica tabela, mas o
conceito de banco de dados rene, evidentemente, vrias tabelas diferentes.
Para que possamos recuperar informaes de um banco de dados temos, muitas vezes, a
necessidade de acessar simultaneamente vrias tabelas. Algumas dessas consultas necessitam realizar
uma juno (join) entre tabelas, para poder extrair as informaes necessrias para a consulta
formulada.
Verificar a titulao dos professores que ministram cada uma das disciplinas
SQL> select d.nome_disciplina, p.titulacao
2 from disciplina d, professor p
3 where d.cod_professor=p.cod_professor;
NOME_DISCIPLINA
--------------BANCO DE DADOS
ESTRUTURA DADOS
MATEMATICA
ESTATISTICA
ECONOMIA

TITULACAO
--------------MESTRE
MESTRE
DOUTOR
DOUTOR
MESTRE

Listar as disciplinas com seus respectivos professores

Apostila de SQL.....................................................................................................pg 15 de 19
SQL> select d.nome_disciplina, p.nome_professor
2 from disciplina d, professor p
3 where d.cod_professor=p.cod_professor;
NOME_DISCIPLINA
--------------BANCO DE DADOS
ESTRUTURA DADOS
MATEMATICA
ESTATISTICA
ECONOMIA

NOME_PROFESSOR
-------------------LUIZ
LUIZ
MIRANDA
MIRANDA
JULIANA

Listar as disciplinas ministradas pelo professor miranda


SQL>
2
3
4

select d.nome_disciplina, p.nome_professor


from disciplina d, professor p
where d.cod_professor=p.cod_professor
AND p.nome_professor ='MIRANDA';

NOME_DISCIPLINA
--------------MATEMATICA
ESTATISTICA

NOME_PROFESSOR
-------------------MIRANDA
MIRANDA

EXERCCIOS
Exerccio 01 : Crie as tabelas do estudo de caso videolocadora, seus relacionamentos, restries de
integridade, insira dados e execute consultas nas mesmas
A seguir, como parte da resposta, a criao das tabelas cliente, alocao, fita e filme
SQL> CREATE TABLE cliente
2 (CodCliente
NUMBER(5) PRIMARY KEY,
3
Nome
VARCHAR2(30) NOT NULL,
4
Ident
VARCHAR2(15) UNIQUE NOT NULL,
5
End
VARCHAR2(30) NOT NULL,
6
Tel
VARCHAR2(13) );
Tabela criada.
SQL> CREATE TABLE fita
2 (CodFita
NUMBER(5) PRIMARY KEY,
3
Fab
VARCHAR2(20) NOT NULL,
4
CodFilme
NUMBER(5) NOT NULL);
Tabela criada.
SQL> CREATE TABLE alocacao
2 (CodCliente
NUMBER(5) ,
3
CodFita
NUMBER(5) ,
4
DataLoc
Date not null,

Apostila de SQL.....................................................................................................pg 16 de 19
5
6
7
8
9
10
11
12
13
14

DataDevPrev
DATE NOT NULL,
DataDevReal
DATE NOT NULL,
CONSTRAINT ALOC_PK
PRIMARY KEY (CodCliente,CodFita),
CONSTRAINT
ALOC_FK_CLI
FOREIGN KEY (CodCliente)
REFERENCES
cliente(CodCliente),
CONSTRAINT
ALOC_FK_FITA
FOREIGN KEY (CodFita)
REFERENCES
FITA(CodFita) );

Tabela criada.
SQL> CREATE TABLE filme
2 (CodFilme
NUMBER(5) PRIMARY KEY,
3
Titulo
VARCHAR2(20) NOT NULL,
4
Dur
VARCHAR2(6) NOT NULL,
5
IdiomaOrig
VARCHAR2(10),
6
Categoria
VARCHAR2(10) NOT NULL,
7
CONSTRAINT
FILME_CK_CAT
8
CHECK (cATEGORIA in ('ROMANCE','SUSPENCE','POLICIAL','AO')));
Tabela criada.
SQL> ALTER TABLE fita
2 ADD (CONSTRAINT fit_fk_codfilme
3
FOREIGN KEY (CodFilme)
4
REFERENCES filme(CodFilme));
Tabela alterada.

A seguir, um script com a criao completa do banco de dados da


videolocadora.
Observaes:
1- Os comandos DROP TABLE... iniciais so para apagar as tabelas caso j
tenham sido criadas anteriormente; e
2- A adio das CONSTRAINTS (restries) feita no momento da criao das
tabelas. Uma outra soluo seria criar todas as tabelas e, depois,
acrescentar as restries (por meio de comandos do tipo ALTER TABLE ......
ADD CONSTRAINT ........
SCRIPT:
DROP
DROP
DROP
DROP
DROP
DROP

TABLE
TABLE
TABLE
TABLE
TABLE
TABLE

CLIENTE CASCADE CONSTRAINT;


FITA CASCADE CONSTRAINT;
ALOCACAO CASCADE CONSTRAINT;
FILME CASCADE CONSTRAINT;
ATOR CASCADE CONSTRAINT;
ATUACAO CASCADE CONSTRAINT;

CREATE TABLE FILME


(COD_FILME
NUMBER(5) PRIMARY KEY,
TITULO
VARCHAR2(20) NOT NULL,

Apostila de SQL.....................................................................................................pg 17 de 19
DURACAO
IDIOMA_ORIG
CATEGORIA

VARCHAR2(6) NOT NULL,


VARCHAR2(10) NOT NULL,
VARCHAR2(10) NOT NULL);

CREATE TABLE ATOR


(COD_ATOR
NUMBER(5) PRIMARY KEY,
NOME_ATOR
VARCHAR2(20) NOT NULL,
NACIONALIDADE VARCHAR2(15));
CREATE TABLE ATUACAO
(COD_FILME
NUMBER(5),
COD_ATOR
NUMBER(5),
CONSTRAINT
ATUACAO_PK
PRIMARY KEY (COD_FILME,COD_ATOR),
CONSTRAINT
ATUACAO_COD_FILME_FK
FOREIGN KEY (COD_FILME)
REFERENCES
FILME(COD_FILME),
CONSTRAINT
ATUACAO_COD_ATOR
FOREIGN KEY (COD_ATOR)
REFERENCES
ATOR(COD_ATOR));
CREATE TABLE CLIENTE
(COD_CLIENTE
NOME
IDENTIDADE
ENDERECO
TEL

NUMBER(5) PRIMARY KEY,


VARCHAR2(30) NOT NULL,
VARCHAR2(15) NOT NULL UNIQUE,
VARCHAR2(30) NOT NULL,
VARCHAR2(13));

CREATE TABLE FITA


(COD_FITA
NUMBER(5) PRIMARY KEY,
FABRICANTE
VARCHAR2(15) NOT NULL,
COD_FILME
NUMBER(5) NOT NULL,
CONSTRAINT FITA_COD_FILME_FK
FOREIGN KEY (COD_FILME)
REFERENCES FILME(COD_FILME));
CREATE TABLE ALOCACAO
(COD_FITA
NUMBER(5),
COD_CLIENTE
NUMBER(5),
DATA_LOCACAO
DATE,
DATA_DEV_PREV
DATE NOT NULL,
DATA_DEV_REAL
DATE,
CONSTRAINT ALOCACAO_PK
PRIMARY KEY (COD_FITA,COD_CLIENTE,DATA_LOCACAO),
CONSTRAINT ALOCACAO_COD_FITA_FK
FOREIGN KEY (COD_FITA)
REFERENCES FITA(COD_FITA),
CONSTRAINT ALOCACAO_COD_CLIENTE_FK
FOREIGN KEY (COD_CLIENTE)
REFERENCES CLIENTE(COD_CLIENTE));
INSERO DE VALORES NAS TABELAS FILME, ATOR E ATUAO:
INSERT INTO FILME
VALUES
(01,'O VENTO LEVOU','03H','INGLES','ROMANCE');

Apostila de SQL.....................................................................................................pg 18 de 19
INSERT INTO FILME
VALUES
(02,'DURO DE MATAR','02H40M','INGLES','AO');
INSERT INTO FILME
VALUES
(03,'UMA LINDA MULHER','01H35M','INGLES','AO');
INSERT INTO ATOR
VALUES
(01,'VIVIEN LIGH','IRLANDES');
INSERT INTO ATOR
VALUES
(02,'CLARCK GABLE','AMERICANO');
INSERT INTO ATOR
VALUES
(03,'JULIA ROBERTS','AMERICANO');
INSERT INTO ATOR
VALUES
(04,'BRUCE WILLYS','AMERICANO');
INSERT INTO ATUACAO
VALUES
(01,01);
INSERT INTO ATUACAO
VALUES
(01,02);
INSERT INTO ATUACAO
VALUES
(02,04);
INSERT INTO ATUACAO
VALUES
(03,03);

EXERCCIO NR 02 : Dados os modelos conceitual e lgico abaixo, crie as tabelas no banco de dados.
No esquea de criar, tambm todas as restries de integridade necessrias.

Apostila de SQL.....................................................................................................pg 19 de 19

DER:
Nome

Cod_aluno

Nome_discipli
na

Nota(0,1)
Cod_disciplina

ALUNO

(0,n)

CURSA

(1,n)

DISCIPLINA
Carga_horaria

CPF
(0,n)

MINISTRA

(1,1)

Nome_professor

PROFESSOR
Cod_professor
titulao(0,1)

Modelo Lgico:
PROFESSOR(Cd_Professor, Nome_prof(NN), titulao(NN))
DISCIPLINA(Cd_Dsiciplina, Nome_disciplina(NN), Carga_horria(NN), Cod_professor(FK,NN))
Cd_Professor referencia PROFESSOR
ALUNO (Cd_Aluno, Nome_Aluno(NN), CPF (NN,U))
CURSA (Cod_Aluno(FK), Cd_disciplina(FK), Nota )
Cd_aluno referencia ALUNO
Cd_Disciplina referencia DISCIPLINA

Você também pode gostar