Você está na página 1de 7

Banco de Dados I EAD

SQL Exerccio 1
Aula a distncia
Professora: Denise Bandeira


Sobre o SGBD ORACLE Express

(a) Tipos de dados implementados pelo ORACLE

Tipo de Dado Descrio
varchar2(tamanho) Armazena dados de caracter de comprimento varivel
number Armazena dados numricos,
date Armazena datas, de 1
o
de janeiro de 4712 aC. at 31 de dezembro de 4712 d.C.
ATENO: para insero de valores em atributos do tipo varchar2, digite os valores entre o caracter aspas
simples ( ).

(b) Interface

Acessar a Home Page do banco de dados em:

Iniciar ->
Oracle Database 10g Express Edition ->
Ir para Home Page de Banco de Dados

Ou simplesmente colocar a seguinte URL no browser (depois de instalar o software):

http://127.0.0.1:8080/apex

A primeira pagina solicita o login de usurio.

Na primeira vez, voc entra como usurio System (com a senha que atribuiu na instalao do sistema).

A seguir, voc pode criar um novo usurio acessando as opes:
Administration -> Database Users -> boto Create

Sete as seguintes opes ao criar o usurio.

Direct Grant System Privileges:

CREATE DATABASE LINK CREATE MATERIALIZED VIEW CREATE PROCEDURE
CREATE PUBLIC SYNONYM CREATE ROLE CREATE SEQUENCE
CREATE SYNONYM CREATE TABLE CREATE TRIGGER
CREATE TYPE CREATE VIEW




Aps criar o novo usurio, voc pode fazer logoff e login novamente como novo usurio.

J logado com o novo usurio, para executar as instrues SQL, acesse a opo:
SQL -> SQL commands

Digite as instrues SQL na parte de cima da janela, aperte o boto RUN ( direita) e veja o retorno do ORACLE na
parte de baixo da interface.

Cada instruo deve ser executada separadamente, pois o sistema funciona como um interpretador. Caso queira
submeter mais de uma instruo ao mesmo tempo, como um script, veja a dica no Moodle, listada na semana desta
mesma aula.
Banco de Dados I EAD
SQL Exerccio 1
Aula a distncia
Professora: Denise Bandeira

Enunciado do Exerccio

Considerando o seguinte banco de dados:

CURSO cod_curso, nome, titulo
DISCIPLINA cod_d, nome, ch
CURRICULO cod_curso, num_curriculo, data_inicio, ch
DC (DISCIPLINA_CURRCULO) cod_curso, num_curriculo, cod_d

Exemplos de dados para as tabelas:

CURSO
cod_curso nome Ttulo
6074 Sistemas de Informao Bacharel
6110 Anlise e Desenvolvimento de Sistemas Tecnlogo
6094 Cincia da Computao Bacharel

DISCIPLINA
cod_d nome ch
60030 Banco de Dados I 60
95234 Definio de Processos 120

CURRCULO
cod_curso num_curriculo data_inicio ch
6074 3 01/03/2000 3300
6074 4 01/01/2007 3060

DC (DISCIPLINA_CURRCULO)
cod_curso num_curriculo cod_d
6074 4 60030
6074 4 95234
6110 2 60030
6110 2 95234

Observaes:
Na definio de tabelas acima:
o chave primria: sublinhado em vermelho.
o chave estrangeira: negrito.
Tabela DISCIPLINA:
o ch a carga horria (valores possveis 30, 60 ou 120); o valor mais comum para ch 60.
Tabela CURRICULO:
o ch a carga horria do currculo do curso (exemplos: 3.300 horas, 3.060 horas, etc.); os valores
devem estar na faixa de 3.000 a 6.000 horas.
Tabela CURSO:
o titulo (valores possveis bacharel ou tecnlogo)
Tabela DC:
o Contm a definio das disciplinas presentes nos currculos dos cursos.

Banco de Dados I EAD
SQL Exerccio 1
Aula a distncia
Professora: Denise Bandeira
QUESTO 1:
1. Crie as tabelas que faro parte do banco de dados. Alm dos atributos de cada tabela, defina tambm:
1.1. chaves primrias apropriadas; utilize a clusula CONSTRAINT para isso.
1.2. chaves estrangeiras apropriadas; utilize a clusula CONSTRAINT para isso.
1.3. algumas restries de integridade para o banco de dados acima. As restries podem ser criadas atravs
uma CONSTRAINT (na instruo CREATE TABLE) da seguinte forma:

CONSTRAINT <nome da constraint> CHECK (<expresso>)

onde <expresso> alguma expresso envolvendo o atributo relacionado na restrio. Ela pode
envolver os operadores IN e BETWEEN.

Exemplo para a tabela Disciplina:
...
CONSTRAINT ck_ch CHECK (CH > 29)
!

1.4. alguns valores default para atributos de alguma(s) tabela(s). Valores default podem ser criados atravs da
clusula DEFAULT (na instruo CREATE TABLE) da seguinte forma:

DEFAULT <valor>, ao lado da definio do atributo na criao da tabela.

Exemplo para a tabela Disciplina:


Ch number DEFAULT 60


RESPOSTA QUESTO 1:

/* As instrues DROP abaixo esto listadas para facilitar a criao do banco de dados
por parte dos alunos. Caso alguma das tabelas seja criada com problemas, todas podem
ser removidas pela seqncia de instrues a seguir. Ou qualquer uma, individualmente,
usando a instruo pertinente */

Drop table DC CASCADE CONSTRAINT;
Drop table CURRICULO CASCADE CONSTRAINT;
Drop table DISCIPLINA CASCADE CONSTRAINT;
Drop table CURSO CASCADE CONSTRAINT;

Create table CURSO (
cod_curso integer not null,
nome varchar(50) null,
titulo varchar(50),
constraint pk_curso Primary key(cod_curso),
constraint ck_curso check(titulo in ('bacharel','tecnologo'))
);

Create table DISCIPLINA (
cod_d integer not null,
nome varchar(50) null,
ch integer default 60,
constraint pk_disciplina Primary key(cod_d),
constraint ck_disciplina check(ch in (30,60,120))
);

Create table CURRICULO (
Banco de Dados I EAD
SQL Exerccio 1
Aula a distncia
Professora: Denise Bandeira
cod_curso integer not null,
num_curriculo integer not null,
data_inicio date,
ch integer,
constraint pk_curriculo primary key(cod_curso, num_curriculo),
constraint fk_curriculo foreign key(cod_curso) references CURSO(cod_curso),
constraint ck_curriculo check(ch between 3000 and 6000)
);

Create table DC (
cod_curso integer not null,
num_curriculo integer not null,
cod_d integer not null,
constraint pk_dc primary key(cod_curso, num_curriculo, cod_d),
constraint fk_dc_curso foreign key(cod_curso) references CURSO,
constraint fk_dc_curriculo foreign key(cod_curso, num_curriculo) references CURRICULO,
constraint fk_dc_disciplina foreign key(cod_d) references DISCIPLINA
);

Banco de Dados I EAD
SQL Exerccio 1
Aula a distncia
Professora: Denise Bandeira
QUESTO 2:

2. Popule as tabelas do banco de dados. Teste a insero de alguns valores de forma que voc verifique a aplicao
das restries de integridade definidas para a tabela. Utilize a instruo
INSERT INTO <tabela> VALUES (<valores>)

RESPOSTA QUESTO 2:

Insert into CURSO values (1,'Sistemas de Informacao','bacharel');
Insert into CURSO (cod_curso, nome, titulo) values (2,'Ciencia da
Computacao','bacharel');
Insert into CURSO (cod_curso, nome, titulo) values (3,'Desenvolvimento de
Software','tecnologo');


Insert into DISCIPLINA values (1,'Banco de Dados 1',30);
Insert into DISCIPLINA values (2,'Analise de Sistemas',60);
Insert into DISCIPLINA values (3,'Engenharia de Software',120);
Insert into DISCIPLINA values (4,'Desenvolvimento de Software',120);

Insert into CURRICULO values (1,1,null,3060);
Insert into CURRICULO values (2,2,null,3600);
Insert into CURRICULO values (3,3,null,3600);
Insert into CURRICULO values (1,4,null,5000);

Insert into DC values (1,1,1);
Insert into DC values (1,1,2);
Insert into DC values (1,1,3);
Insert into DC values (1,4,2);
Insert into DC values (1,4,4);
Insert into DC values (2,2,2);
Insert into DC values (2,2,3);
Insert into DC values (3,3,2);
Insert into DC values (3,3,3);

Banco de Dados I EAD
SQL Exerccio 1
Aula a distncia
Professora: Denise Bandeira
QUESTO 3:

3. Realize as seguintes consultas atravs de SQL:
3.1. Qual o cdigo dos cursos que tm carga horria superior 3.100 horas?
3.2. Quais as disciplinas, com carga horria superior a 60 horas, que esto presentes nos currculos de cursos
de tecnlogo?
3.3. Qual a carga horria mdia das disciplinas dos cursos de tecnlogo (por currculo de curso)?
3.4. Quantas disciplinas (ao todo) so ministradas em cada currculo de cada curso?
3.5. Quais disciplinas fazem parte de todos os cursos, ou seja, esto presentes em todos os cursos ao mesmo
tempo?
3.6. Quais disciplinas fazem parte de cursos de bacharelado e de tecnologia ao mesmo tempo?

RESPOSTA QUESTO 3:

3.1 Qual o cdigo dos cursos que tm carga horria superior 3.100 horas?

SELECT curriculo.cod_curso
FROM curriculo
WHERE curriculo.ch > 3100;

3.2 Quais as disciplinas, com carga horria superior a 60 horas, que esto presentes nos currculos de cursos de
tecnlogo?

SELECT disciplina.nome
FROM disciplina, dc, curso
WHERE disciplina.ch > 60 AND
curso.titulo = tecnologoAND
dc.cod_d = disciplina.cod_d AND
dc.cod_curso = curso.cod_curso;

3.3 Qual a carga horria mdia das disciplinas dos cursos de tecnlogo (por currculo de curso)?

SELECT curriculo.cod_curso, curriculo.num_curriculo, AVG(disciplina.ch)
FROM disciplina, dc, curriculo, curso
WHERE disciplina.cod_d = dc.cod_d AND
dc.cod_curso = curriculo.cod_curso AND
dc.num_curriculo = curriculo.num_curriculo AND
curriculo.cod_curso = curso.cod_curso AND
curso.titulo = tecnologo
GROUP BY curriculo.cod_curso, curriculo.num_curriculo;

3.4 Quantas disciplinas (ao todo) so ministradas em cada currculo de cada curso?

SELECT dc.cod_curso, dc.num_curriculo, count(*)
FROM dc
GROUP BY dc.cod_curso, dc.num_curriculo;

3.5 Quais disciplinas fazem parte de todos os cursos, ou seja, esto presentes em todos os cursos ao mesmo tempo?

SELECT disciplina.nome
FROM disciplina
WHERE NOT EXISTS (
SELECT *
FROM curriculo
WHERE NOT EXISTS (
SELECT *
FROM dc
Banco de Dados I EAD
SQL Exerccio 1
Aula a distncia
Professora: Denise Bandeira
WHERE dc.cod_curso = curriculo.cod_curso AND
dc.num_curriculo = curriculo.num_curriculo AND
dc.cod_d = disciplina.cod_d));


3.5 Quais disciplinas fazem parte de cursos de bacharelado e de tecnologia ao mesmo tempo?

SELECT disciplina.nome
FROM disciplina
WHERE disciplina.cod_d in (
SELECT cod_d
FROM dc, curso
WHERE dc.cod_curso = curso.cod_curso AND
Curso.titulo = tecnologo)
AND
disciplina.cod_d in (
SELECT cod_d
FROM dc, curso
WHERE dc.cod_curso = curso.cod_curso AND
Curso.titulo = bacharel);

Você também pode gostar