Você está na página 1de 4

Exercícios BD

AULA TEÓRICO-PRÁTICA
Linguagem de Manipulação de Dados (DML)

1. Consultas (Recuperação) em SQL

1.1 Consultas com Junção


A capacidade de “junção” de duas ou mais tabelas é uma das características mais apreciáveis e
poderosas das bases de dados relacionais. Na prática, é realmente a operação com junção que,
acima de tudo, distingue os sistemas de bases de dados relacionais dos não-relacionais.

Definição: Junção, é uma consulta em que os dados são recuperados de mais de uma tabela.

1.1.1 Junção com igualdade simples


Com INNER JOIN (junção natural)

Sintaxe:
SELECT <tabela1.campo1, …, tabela1.campon , tabela2.campo1 ,…, tabela2.campom>
FROM tabela1, INNER JOIN tabela2> ON <tabela1.campoi> = <tabela2.campoj>;

Tarefa preliminar:

1. Crie uma base de dados com o nome “MAC”;


2. Corra o script Mac de criação de tabelas;
3. Corra o script Mac_insert de inserção de dados.

Exemplo:
a) Para cada docente especializado em informática, liste o nome, sexo, data de nascimento e contacto.

Resp: select Professor.nome, Professor.sexo, Professor.dataNasc, Contacto.descricao from


Professor INNER JOIN Contacto ON Professor.codProf=Contacto.codProf AND
Professor.areaFormacao=’INFORMATICA’;

b) Listar o código, nível, nome e carga horária de todas as disciplinas do Primeiro Ano.

Resp: select Disciplina.codDisc, Nivel.codNivel, Disciplina.descricao, Disciplina.cargaHoraria


from Disciplina INNER JOIN Nivel ON Disciplina.codNivel=Nivel.codNivel AND
Nivel.codNivel=’I’;

c) Liste o nome e contacto de todos os profissionais que possuem e-mail.

1
Exercícios BD

Resp: select Professor.nome, contacto.descricao from Professor INNER JOIN Contacto ON


Professor.codProf=Contacto.codProf AND Contacto.tipo=’E-MAIL’;

d) Para cada aula dada com mais de três horas, listar o sumário, data, bem como o respectivo
intervalo temporal em que a mesma teve lugar.

Resp: Select Aula.sumario, Leccionacao.data, Aula.horaInicio, Aula.horaFim from Aula


INNER JOIN Leccionacao ON Aula.codAula=Leccionacao.codAula AND Aula.numHoras>3;

Renomeação
Nas consultas com junção, é prática comum a renomeação de tabelas ou colunas.
 Renomeação de Tabelas:
SELECT <lista de colunas> FROM <nome actual da tabela> AS <novo nome da tabela>
WHERE <condição>;

Exemplo:
e) De todas as docentes formadas em informática e que tenham E-MAIL, listar o nome, sexo, e-mail
e data de nascimento.

Resp: select distinct Docente.nome, Docente.sexo, Contacto.descricao, Docente.dataNasc from


Professor AS Docente INNER JOIN Contacto ON Docente.codProf=Contacto.codProf AND
Docente.areaFormacao=’informatica’ AND Docente.sexo=’F’ AND Contacto.tipo=’E-Mail’;

 Renomeação de Colunas:
SELECT <Tabela1.coluna1 AS novaColuna1 , … , Tabelam.colunan AS novaColunan> FROM
Tabela1 , … , Tabelam WHERE <condição>;

Exemplo:
f) Listar o código da disciplina, código do nível, nome da disciplina, nível e regime de todas as
disciplinas com carga horária superior a 74 horas e ministradas do segundo semestre.

Resp: select Disciplina.codDisc AS Codigo_Disciplina, Nivel.codNivel AS Codigo_Nivel,


Disciplina.descricao AS Nome_Disciplina, Nivel.descricao AS Nivel, Disciplina.regime As
Semestre from Nivel INNER JOIN Disciplina ON Nivel.codNivel=Disciplina.codNivel AND
Disciplina.cargaHoraria>74 AND Disciplina.regime=’SEGUNDO SEMESTRE’;

Observação:
Na renomeação de colunas, o predicado AS pode ser omisso e ganhar-se o mesmo efeito no
resultado da consulta!

Exemplo:
g) Listar os nomes (distintos) e áreas de formação de todas as professoras que alguma vez se
apresentaram numa sala de aulas da escola.

2
Exercícios BD

Resp: select distinct Professor.nome Nome_Professor, Professor.areaFormacao


Area_de_Formacao from Professor INNER JOIN Leccionacao ON
Professor.codProf=Leccionacao.codProf AND Professor.sexo=’F’;

1.1.2 Junção de três ou mais tabelas


Exemplo:

h) De todos os profissionais que já começaram a trabalhar, liste o nome, área de formação, disciplina,
o sumário prescrito bem como a data na qual a aula foi ministrada.

Resp: select Professor.nome, Professor.areaFormacao Formacao, Disciplina.descricao


Disciplina, Aula.sumario, Leccionacao.data from Leccionacao INNER JOIN Professor ON
Leccionacao.codProf=Professor.codProf INNER JOIN Aula ON
Leccionacao.codAula=Aula.codAula INNER JOIN Disciplina ON
Leccionacao.codDisc=Disciplina.codDisc;

OU

Select Professor.nome, Professor.areaFormacao Formacao, Disciplina.descricao Disciplina,


Aula.sumario, Leccionacao.data FROM Professor, Disciplina, Aula, Leccionacao WHERE
Professor.codProf=Leccionacao.codProf AND Aula.codAula=Leccionacao.codAula AND
Disciplina.codDisc=Leccionacao.codDisc;

i) Liste para cada piloto o nome, endereço, experiencia profissional e a marca de sua viatura.

Resp: select Empregado.nome, Piloto.experiencia, Apartamento.endereco, Automovel.marca


from Empregado INNER JOIN Piloto ON Empregado.codEmp=Piloto.codEmp INNER JOIN
Apartamento ON Empregado.codApart=Apartamento.codApart INNER JOIN Automovel ON
Automovel.matricula=Empregado.matricula;

OU

Select Empregado.nome, Piloto.experiencia, Apartamento.endereco, Automovel.marca FROM


Empregado, Piloto, Apartamento, Automovel WHERE Empregado.codEmp=Piloto.codEmp
AND Apartamento.codApart=Empregado.codApart AND
Empregado.matricula=Automovel.matricula;

j) Dos docentes formados em matemática liste o nome, sexo, a disciplina e sumario da aula dada.

Resp: select Professor.nome, Professor.sexo, Disciplina.descricao Disciplina, Aula.sumario


from Professor INNER JOIN Leccionacao ON Professor.codProf=Leccionacao.codProf
INNER JOIN Aula ON Aula.codAula=Leccionacao.codAula INNER JOIN Disciplina ON
Disciplina.codDisc=Leccionacao.codDisc AND Professor.areaFormacao=’MATEMATICA’;

3
Exercícios BD

OU

Select Professor.nome, Professor.sexo, Disciplina.descricao Disciplina, Aula.sumario FROM


Professor, Aula, Disciplina, Leccionacao WHERE Professor.codProf=Leccionacao.codProf
AND Leccionacao.codAula=Aula.codAula AND Disciplina.codDisc=Leccionacao.codDisc AND
Professor.areaFormacao=’matematica’;

Você também pode gostar