sim2008.files.wordpress.com  · Web view,'Casaco','Preto') insert into produtos values(4 ......

25

Click here to load reader

Transcript of sim2008.files.wordpress.com  · Web view,'Casaco','Preto') insert into produtos values(4 ......

Page 1: sim2008.files.wordpress.com  · Web view,'Casaco','Preto') insert into produtos values(4 ... Listar os nomes dos empregados mais velhos. select nome_empregado, idade. from empregados.

create database exercicio1

use exercicio1

create table estudante(nestudante int identity(1000,1) primary key,enome nvarchar(50),nivel int default 1,idade int check(idade>=18))

create table professor(idprofessor int primary key,pnome nvarchar(50),departamento int)

create table salas(sigla char(5) primary key,descrição nvarchar(20))

create table classes(classe char(5) primary key,hora datetime not null,sala char(5) foreign key references salas(sigla),prof int foreign key references professor(idprofessor))

create table estudantes_classe(estudante int foreign key references estudante(nestudante),classe char(5)foreign key references classes(classe),primary key(estudante,classe))

alter table salasadd edificio int

select * from salasselect * from estudante

insert into estudante (enome,nivel,idade) values ('João', 2, 18)insert into estudante (enome,nivel,idade) values ('Maria', 1, 22)insert into estudante (enome,nivel,idade) values ('Sinósio', 1, 23)insert into estudante (enome,nivel,idade) values ('Joaquina', 3, 22)insert into estudante (enome,nivel,idade) values ('João', 2,20)insert into estudante (enome,nivel,idade) values ('Maria', 1,20)insert into estudante (enome,nivel,idade) values ('Sinósio', 1,21)insert into estudante (enome,nivel,idade) values ('Joaquina', 3,18)

select * from estudante

delete from estudantewhere idade<=20

alter table estudanteadd estado int check(estado=1 or estado=0)

insert into estudante (enome,nivel,idade, estado) values ('João', 2,20,0)insert into estudante (enome,nivel,idade, estado) values ('Maria', 1,20, 0)insert into estudante (enome,nivel,idade, estado) values ('Sinósio', 1,21,1)insert into estudante (enome,nivel,idade, estado) values ('Joaquina', 3,18,1)

Page 2: sim2008.files.wordpress.com  · Web view,'Casaco','Preto') insert into produtos values(4 ... Listar os nomes dos empregados mais velhos. select nome_empregado, idade. from empregados.

update estudante set estado =1where enome like 'joão'

update estudante set estado =1where estado is null

select * from estudante

create table antigos(estudante int primary key,idade int)

insert into antigosselect nestudante ,idadefrom estudante where estado =0

select * from antigos

/*a) Listar os estudantes do 2º nível com idade compreendida entre 12 e 15 anos.*/select nestudante, enomefrom estudantewhere nivel=2 and idade between 18 and 20/*OU*/select * from estudante where nivel = 2 and idade >=18 and idade <=20

/*b) Listar os alunos que não estão inscritos em nenhuma classe.*/select * from estudante where nestudante not in (select estudante from estudantes_classe)

/*c) Listar as classe sem alunos inscritos.*/select * from classes where classe not in (select classe from estudantes_classe)

/*d) Listar o número de alunos por cada classe.*/select classe, count(*) as numero_alunos_inscritosfrom estudantes_classegroup by classe

/*e) Listar as salas com sigla começada por B.*/select * from salaswhere sigla like 'b%'

/*f) Listar as classes sem sala atribuída.*/select *from classeswhere sala is nullselect * from classes where sala is null

Page 3: sim2008.files.wordpress.com  · Web view,'Casaco','Preto') insert into produtos values(4 ... Listar os nomes dos empregados mais velhos. select nome_empregado, idade. from empregados.

/*g) Listar as o numero de classes que cada professor lecciona.*/select prof, count(*)from classesgroup by prof

/*h) Listar os estudantes que estão inscritos apenas a uma disciplina.*/select estudantefrom estudantes_classegroup by estudante having count(*)=1

/*i) Encontre os nomes de todos os estudantes do nivel 1 que estão inscritos numa classe do professor Correia Lopes.*/select enomefrom estudante e, estudantes_classe ec, classes c, professor pwhere nivel=1 and p.pnome like 'Correia Lopes'ande.nestudante= ec.estudante and ec.classe=c.classe and p.idprofessor=c.prof /*j) Encontre a idade do estudante mais velho que seja do nível 2 ou inscrito numa classe leccionada pelo professor Raul Vidal.*/select max (idade)from estudante ewhere nivel=2 or nestudante in (select estudante

from estudantes_classe ec, classes c, professor p

where ec.classe=c.classe and p.idprofessor=c.prof

and pnome like 'raul vidal')

/*k) Encontre o nome de todas as classes com horário na sala 210 ou com mais de cincos estudantes inscritos.*/select classe from classes cwhere sala=210 or (select count(*) from estudantes_classe ec

where ec.classe=c.classe) >5

/*l) Encontre o nome de todos os estudantes que estão inscritos em duas classes que têm horário igual.*/select distinct e1.enomefrom estudante e1, estudantes_classe ec1, classes c1, estudante e2, estudantes_classe ec2, classes c2where e1.nestudante=ec1.estudante and ec1.classe=c1.classe and e2.nestudante=ec2.estudante and ec2.classe=c2.classe and ec1.estudante=ec2.estudante and ec1.classe<>ec2.classe and c1.hora=c2.hora

/*m) Encontre o nome dos professores que leccionam em todas as salas com horário atribuido a uma classe.*/select pnomefrom professor pwhere p.idprofessor in (select prof

from classes group by prof

having count(*)=(select count(*) from classes where hora is not null))

Page 4: sim2008.files.wordpress.com  · Web view,'Casaco','Preto') insert into produtos values(4 ... Listar os nomes dos empregados mais velhos. select nome_empregado, idade. from empregados.

/*n) Encontre o nome dos professores que leccionam um número de classes inferior a cinco.*/select pnomefrom professor pwhere idprofessor in (select prof

from classes group by prof

having count(*)<5)

/*o) Encontre o nome dos estudantes que estão inscritos no número máximo de classes.*/create view nc as

select count(*)as nclasses from estudantes_classe

group by estudante

select enomefrom estudantewhere nestudante in (select estudante

from estudantes_classe group by estudante

having count(*)=(select max(nclasses) from nc)

Page 5: sim2008.files.wordpress.com  · Web view,'Casaco','Preto') insert into produtos values(4 ... Listar os nomes dos empregados mais velhos. select nome_empregado, idade. from empregados.

create database exercicio2

use exercicio2

create table fornecedores(fornecedor_id int primary key,nome_fornecedor nvarchar(20) not null,endereco nvarchar(20))

create table produtos(produto_id int primary key,nome_produto nvarchar(20) not null,cor nvarchar(20))

create table catalogo(fornecedor_id int foreign key references

fornecedores(fornecedor_id),produto_id int foreign key references produtos(produto_id),preco money,primary key(fornecedor_id, produto_id))

insert into fornecedores values(100,'Nike','Portugal')insert into fornecedores values(110,'Adidas','Fran?a')insert into fornecedores values(120,'Puma','EUA')insert into fornecedores values(130,'Reebok','EUA')

insert into produtos values(1,'Sapatilha','Preto')insert into produtos values(2,'Sapatilha','Azul')insert into produtos values(3,'Casaco','Preto')insert into produtos values(4,'Casaco','Branco')insert into produtos values(5,'Sapatilhas','Varias')insert into produtos values(6,'T-Shirt','Branca')

insert into catalogo values(120,1,30)insert into catalogo values(120,2,30)insert into catalogo values(110,3,20)insert into catalogo values(110,4,20)insert into catalogo values(100,5,60)insert into catalogo values(100,3,60)insert into catalogo values(100,1,10)

/*a) listar os produtos com preço>20 e codigo=5.*/select *from catalogo c where c.preco > '20' and produto_id = '5'select * from catalogowhere produto_id=5 and preco>20

/*b) Listar os produtos que tem mais do que um fornecedor.*/select produto_id as Produto from catalogogroup by produto_idhaving count(*)>1

/*c) Listar para cada fornecedor o preço médio dos produtos que fornece.*/select fornecedor_id, avg(preco) Media_Preçofrom catalogogroup by fornecedor_id

Page 6: sim2008.files.wordpress.com  · Web view,'Casaco','Preto') insert into produtos values(4 ... Listar os nomes dos empregados mais velhos. select nome_empregado, idade. from empregados.

select fornecedor_id as Fornecedor, avg(preco) as Media from catalogogroup by fornecedor_id

/*d) Listar os produtos que não tem fornecedor atribuído.*/select produto_id from produtoswhere produto_id not in (select distinct produto_id

from catalogo)

/*e) Listar os produtos mais caros de todos.*/select produto_id from catalogowhere preco=(select max(preco) from catalogo)

/*f) Listar os fornecedores que não fornecem nenhum produto.*/select fornecedor_idfrom fornecedoreswhere fornecedor_id not in (select distinct fornecedor_id

from catalogo)

/*g) Listar para cada produto o fornecedor mais barato.*/select c1.produto_id, fornecedor_idfrom catalogo c1where c1.preco=(select min(c2.preco)

from catalogo c2 where c2.produto_id=c1.produto_id)

/*h) Encontre os nomes de todos os produtos para os quais existe pelo menos um fornecedor.*/select nome_produto,fornecedor_idfrom produtos, catalogohaving count(*) >=1

select c1.produto_id, fornecedor_idfrom catalogo c1where c1.preco=(select min(c2.preco)

from catalogo c2 where c2.produto_id=c1.produto_id)

Page 7: sim2008.files.wordpress.com  · Web view,'Casaco','Preto') insert into produtos values(4 ... Listar os nomes dos empregados mais velhos. select nome_empregado, idade. from empregados.

create database exercico3;use ex3;

drop table voos

create table voos(n_voo int primary key,origem nvarchar(50),destino nvarchar(50),distancia int,hora_partida datetime,hora_chegada datetime,preço money,n_serie int references avioes(n_serie));

alter table voos addn_serie int references avioes(n_serie);

create table avioes(n_serie int primary key,nome_aviao nvarchar(50),modelo nvarchar(20),distancia_max int,fabricante nvarchar(50));

create table empregados(empregado_id int primary key,nome_empregado nvarchar(50),salario money);

create table licenca(empregado_id int references empregados(empregado_id),n_serie int references avioes(n_serie));

insert into avioes values (1206, 'Avião Condor', 'Hercules C130', 5000, 'TAP')

insert into avioes values (1201, 'Avião Condor', 'Hercules C130', 5000, 'TAP')

insert into voos values (1, 'Porto', 'Lisboa', 1500, 1230, 1300, 1500, 1206)

select * from voos

--a) Listar os voos efectuados pelo avião nº1206.select * from vooswhere n_serie = 1206

--b) Listar os nome dos aviões que não têm voos atribuídos.select nome_aviaofrom avioeswhere n_serie not in( select n_serie from voos)

--c) Listar os nomes dos empregados com salário máximoselect nome_empregado from empregadoswhere salario=(select max(salario) from empregados)

--d) Listar o nome de todos os pilotos.select nome_empregadofrom empregadoswhere empregado_id in (select empregado_id from licenca)--OU

Page 8: sim2008.files.wordpress.com  · Web view,'Casaco','Preto') insert into produtos values(4 ... Listar os nomes dos empregados mais velhos. select nome_empregado, idade. from empregados.

select distinct nome_empregadofrom empregados e, licenca lwhere e.empregado_id=l.empregado_id

--e) Listar os pilotos que podem pilotar mais do que 3 aviões.select nome_empregadofrom empregadoswhere empregado_id in ( select empregado_id

from licenca group by empregado_idhaving count(*)>3)

--OUselect nome_empregadofrom empregados e, licenca lwhere e.empregado_id=l.empregado_idgroup by l.empregado_id, nome_empregadoHaving count(*)>3

--f) Listar os aviões que podem efectuar todos os voos existentes.select n_seriefrom avioeswhere distancia_max>=(select max(distancia) from voos)

select n_seriefrom avioeswhere distancia_max >=ALL(SELECT DISTANCIA FROM VOOS)

--g) Encontre o modelo e fabricante dos aviões que podem ser pilotados por pilotos que ganham mais de 800,000Esc.select nome_aviao,modelo,fabricantefrom avioeswhere n_serie in (select n_serie

from licencawhere empregado_id in (

select empregado_idfrom empregadoswhere salario>800))

--OUselect nome_aviao,modelo,fabricantefrom avioes a, licenca l, empregados ewhere l.empregado_id=e.empregado_id and a.n_serie=l.n_serie and salario>800

--h) Para cada piloto que tem licença para pilotar mais do que 3 aviões, encontre o Empregado_Id e a Distância_max maxima dos aviões que pode pilotar.select empregado_id, a1.distancia_maxfrom licenca l1, avioes a1where l1.n_serie=a1.n_serie and a1.distancia_max=( select max(distancia_max)

from avioes a2, licenca l2 where l1.empregado_id=l2.empregado_id and a2.n_serie=l2.n_serie)

and l1.empregado_id in (select empregado_id from licenca group by empregado_id having count(*)>3)

--i) Encontre os nomes dos pilotos cujo salario é mais baixo que o preço do vôo mais barato de L.A. para Honolulu.select nome_empregadofrom empregados e, licenca l

Page 9: sim2008.files.wordpress.com  · Web view,'Casaco','Preto') insert into produtos values(4 ... Listar os nomes dos empregados mais velhos. select nome_empregado, idade. from empregados.

where l.empregado_id = e.empregado_id andsalario < (select min (preço) from voos where origem ='L.A.' and destino ='Honolulu')

--j) Para todos os aviões com distâncias de cruzeiro superiores a 1000, encontre o fabricante do avião e o salario médio dos pilotos com licença para os pilotar.Select a.n_serie,fabricante, avg(salario) from avioes a, licenca l, empregados ewhere distancia_max>1000 and l.empregado_id=e.empregado_id and a.n_serie=l.n_seriegroup by a.n_serie, fabricante

--k) Encontre os nomes dos pilotos com licença para pilotar um dos aviões da Boeing.select nome_empregadofrom empregados e, licenca l, avioes awhere e.empregado_id=l.empregado_id andl.n_serie=a.n_serie anda.fabricante = 'Boeing'--OU create view piloto asselect l.n_serie aviao, l.empregado_id empregado, fabricante, modelo,distancia_max, nome_empregado from empregados e, licenca l, avioes awhere e.empregado_id=l.empregado_id and a.n_serie=l.n_serieselect distinct nome_empregadofrom pilotowhere fabricante='Boeing'

--l) Encontre o Nº_Série dos aviões que podem ser utilizados em vôos de L.A para Chicago.select a.n_seriefrom avioes a, voos vwhere a.n_serie=v.n_serie anda.distancia_max <= v.distancia

--m) Identifique as rotas que podem pilotadas por todos os pilotos cujo salário é superior a 1,000,000Esc.select origem, destino from voos v, licenca l, empregados ewhere v.n_serie=l.n_serie and l.empregado_id = e.empregado_idand e.salario > 1000insert into empregados values (1, 'ABC', 1001)select * from voosinsert into licenca values(1,1206)

--n) Encontre o nome dos pilotos que podem pilotar aviões com Distância_max superior a 7000Km, mas que não estão habilitados a pilotar nenhum avião Boeing.select nome_empregado, nome_aviaofrom empregados e, licenca l, avioes awhere e.empregado_id = l.empregado_id and a.distancia_max > 4000 and a.fabricante <> 'Boeing'

--o) Encontre o nome e salario de cada empregado não piloto cujo salário é superior ao salário médio dos pilotos.select nome_empregado, salario from empregados e, licenca lwhere e.empregado_id<>l.empregado_id and select (e.salario > avg(salário)

Page 10: sim2008.files.wordpress.com  · Web view,'Casaco','Preto') insert into produtos values(4 ... Listar os nomes dos empregados mais velhos. select nome_empregado, idade. from empregados.

create database exercicio4use exercicio4

create table empregados(id_empregado int primary key,nome_empregado nvarchar(30) not null,salario money,idade int check(idade>0))create table departamentos(id_departamento int primary key,nome_departamento nvarchar(30) not null,orcamento money,id_director int foreign key references empregados(id_empregado))create table trabalha(id_empregado int foreign key references

empregados(id_empregado),id_departamento int foreign key references

departamentos(id_departamento),percentagem int,primary key(id_empregado,id_departamento))

insert into empregados values(1,'Jose Pereira',700,45)insert into empregados values(2,'Paulo Silva',400,40)insert into empregados values(3,'Maria Santos',500,20)insert into empregados values(4,'Preguica Silva',10,15)

insert into departamentos values(100,'Informatica',6000,1)insert into departamentos values(110,'Contabilidade',3000,2)insert into departamentos values(120,'Quimica',6500,3)

insert into trabalha values(1,100,50)insert into trabalha values(2,100,50)insert into trabalha values(3,120,70)insert into trabalha values(1,120,30)insert into trabalha values(1,110,30)insert into trabalha values(2,110,40)insert into trabalha values(3,110,30)

--a) Listar todos os departamentos com orçamento superior a 5000eur.select nome_departamentofrom departamentoswhere orcamento > 5000

--b) Listar os nomes dos empregados mais velhos.select nome_empregado, idadefrom empregadoswhere idade = (select max(idade)from empregados)

--c) Listar o numero de empregados com um salário inferior a 400 euros.select count(*) NumeroEmpregadosfrom empregadoswhere salario < 400

--d) Listar o salário médio de todos os empregados com idade compreendida entre 30 e 40 anos.select avg(salario) mediasalariofrom empregados

Page 11: sim2008.files.wordpress.com  · Web view,'Casaco','Preto') insert into produtos values(4 ... Listar os nomes dos empregados mais velhos. select nome_empregado, idade. from empregados.

where idade between 30 and 40--OUselect avg(salario) mediasalariofrom empregadoswhere idade >= 30 and idade <= 40

--e) Listar os empregados com nome contendo “Silva” e, que não estão alocados a nenhum departamento.select *from empregados e, trabalha twhere e.nome_empregado like '%Silva%' and e.id_empregado <> t.id_empregado--OUselect distinct nome_empregadofrom empregados e, trabalha twhere e.nome_empregado like '%Silva%' and e.id_empregado <> t.id_empregado--OUselect *from empregados e1where (e1.nome_empregado like '%silva%') and (e1.id_empregado not in (select distinct id_empregado from trabalha))

--f) Listar os empregados que não são directores de departamento.select *from empregados ewhere e.id_empregado not in (Select id_director from departamentos)

select *from empregados ewhere e.id_empregado in (select id_director from departamentos)

--g) Listar para cada empregado a percentagem de tempo máximo.select nome_empregado, max(percentagem)from empregados e, trabalha twhere e.id_empregado = t.id_empregadogroup by nome_empregado--OUselect id_empregado , max(percentagem)from trabalhagroup by id_empregado

--h)Listar os departamentos que tem mais do que 2 empregados a trabalhar exclusivamente para esse departamento.select id_departamentofrom trabalhawhere percentagem=100group by id_departamentohaving count(*)>2

--i) Listar os empregados que excedem no total das percentagens de tempo, os 100%.select id_empregadofrom trabalha where sum(percentagem) > 100group by id_empregado

--j) Listar os empregados que trabalham em mais do 5 departamentos.select id_departamento, id_empregadofrom trabalha tgroup by id_departamento,id_empregado

Page 12: sim2008.files.wordpress.com  · Web view,'Casaco','Preto') insert into produtos values(4 ... Listar os nomes dos empregados mais velhos. select nome_empregado, idade. from empregados.

having count(*) > 5

--k) Listar os departamentos com menos de 10 empregados.select id_empregado, id_departamentofrom trabalhagroup by id_empregado, id_departamentohaving count (*) <10

--l) Listar os empregados que trabalham em todos os departamentos.select t.id_empregado, t.id_departamentofrom empregados e, departamentos d, trabalha twhere t.id_empregado in all (select t.id_departamento from trabalha)

--m) Encontre o nome e idade de cada empregado que trabalhe nos departamentos de Hardware e de Software.select nome_empregado, idadefrom empregados e, departamentos d, trabalha twhere e.id_empregado=t.id_empregado and t.id_departamento=d.id_departamento and d.nome_departamento = 'Hardware' or d.nome_departamento='software'

--n) Encontre o nome de cada empregado com salário superior ao orçamento de todos os departamentos em que ele trabalha.select nome_empregadofrom empregados e, departamentos d, trabalha twhere e.salario > (select sum(orcamento) from departamentos where d.id_departamento=t.id_departamento)

--o) Encontre o Director_ID dos directores dos departamentos com orçamentos superiores a 2,000,000.select id_directorfrom departamentos where orcamento > 2000000

--p) Encontre o nome dos directores que dirigem os departamentos com o orçamento máximo.*/select nome_empregado, max(orcamento)from empregados e, trabalha t, departamentos dwhere e.id_empregado = t.id_empregado and t.id_departamento=d.id_departamentogroup by nome_empregado

Page 13: sim2008.files.wordpress.com  · Web view,'Casaco','Preto') insert into produtos values(4 ... Listar os nomes dos empregados mais velhos. select nome_empregado, idade. from empregados.

create database livrosuse livroscreate table autores(

AutorID int primary key,Nome nvarchar(30),Sexo char not null check (Sexo in ('M','F')),DDN datetime)

create table Editoras(EditoraID int primary key,Nome nvarchar(30),Morada nvarchar(30),CodPostal nvarchar(8),Localidade nvarchar(15)

)

Create table PalavrasChave(PalavraID int primary key

)

Create Table Livros(ISBN int primary key,Titulo nvarchar(20),Ano datetime,Edicao nvarchar(15),Quota smallint,Editoraid int foreign key references Editoras(EditoraID)

)

Create table LivrosAutores(ISBN int foreign key references Livros(ISBN),Autorid int foreign key references Autores(AutorID),primary key (ISBN,Autorid)

)

Create table LivrosPalavras(ISBN int foreign key references Livros(ISBN),Palavraid int foreign key references PalavrasChave(PalavraID),primary key (ISBN, Palavraid)

)

Create table Exemplares(ExemplaresID int primary key,DataAquisicao datetime,ISBN int foreign key references Livros(ISBN),

)

Create Table Utentes(UtenteID int primary key,Nome nvarchar(30),Morada nvarchar(30),CodPostal nvarchar(20),Localidade nvarchar(15),BInum nvarchar(9)not null)

create table requisicoes(requisicaoId int primary key, ExemplaresId int foreign key references

exemplares(exemplaresId),

Page 14: sim2008.files.wordpress.com  · Web view,'Casaco','Preto') insert into produtos values(4 ... Listar os nomes dos empregados mais velhos. select nome_empregado, idade. from empregados.

UtenteId int foreign key references utentes(utenteId) , DataRequisicao datetime, DataPrevEntrega datetime, DataRealEntrega datetime, ValorMulta money,check(DataRequisicao<DataRealEntrega)

)

/*2. Acrescentar a tabela Editores o atributo Localidade.*/alter table editoras

add localidade char (15)

/* 3. Inserir o Utente n?mero 124, nome Jos? Maria Santos, C?digo Postal 442-4556, Localidade Senhora da Hora, BI 123456789. */insert into utentes values (124, 'José Maria Santos', 'Rua do Sobe e Desce, 123', '442-4556','Senhora da Hora', '123456789')

/* 4. Listar todos os dados dos Utentes. */select* from utentes

/*5. Eliminar todos os Livros com ano inferior a 1910.*/delete from livroswhere ano < 1910

/*6. Retirar da tabela Autores o campo Idade. */alter table autoresdrop column idade

/*7. Quais os codigos dos exemplares do livro com o titulo Codigo de Da Vinci?*/select exemplaresID from exemplares e, livros lwhere e.ISBN = l.ISBN and l.Titulo = 'Codigo Da Vinci'--OUselect exemplaresIDfrom exemplares e, livros lwhere l.ISBN=e.ISBN and titulo like 'Codigo de Da Vinci'

/*8. Quais os titulos dos exemplares, ordenados alfabeticamente, requisitados no mes de Janeiro de 2004?*/select titulo from livros l, exemplares e, requisicoes rwhere e.ISBN = l.ISBN and r.ExemplaresId=e.ExemplaresID and r.DataRequisicao >= '1-1-2004' and r.DataRequisicao <= '31-1-2004'order by titulo--OUselect TITULOfrom exemplares e, livros l, REQUISICOES Rwhere l.ISBN=e.ISBN and r.exemplaresId=e.exemplaresId and dataRequisicao between '1-1-2004' and '30-1-2004'order by titulo

/*9. Que codigo de exemplares nao foram requisitados em Janeiro de 2004? */select exemplaresID from requisicoes rwhere r.DataRequisicao not between '1-1-2004' and '30-1-2004'

/*10. Codigo, nome dos autores e quantidades de livros que foram escritos para a Editora FCA?*/select a.AutorID, a.Nomefrom livros l, autores a, editoras e, livrosAutores lawhere l.Editoraid=e.EditoraID

Page 15: sim2008.files.wordpress.com  · Web view,'Casaco','Preto') insert into produtos values(4 ... Listar os nomes dos empregados mais velhos. select nome_empregado, idade. from empregados.

and l.ISBN=la.ISBN and a.AutorID= la.Autorid and e.Nome = 'FCA'--OUselect a.autorId, a.nomefrom autores a, livros l, editoras e, LivrosAutores la where l.editoraId=e.editoraId and l.isbn=la.isbn and la.autorId=a.autorId and e.nome like'FCA'

/*11. Qual o valor mximo de uma multa paga PELO UTENTE RUI OLIVEIRA?*/select max (valormulta) from requisicoes r, utentes uwhere r.UtenteId = u.UtenteID and u.Nome like 'Rui Oliveira'

/*12. Que utentes requisitaram todos os livros da Editora Centro Atlantico?*/select u.UtenteID, u.Nomefrom utentes u, requisicoes r, exemplares e, livros l, editoras edwhere u.UtenteID = r.UtenteId and e.ExemplaresID = r.ExemplaresId and e.ISBN = l.ISBN and l.Editoraid = ed.EditoraID and ed.Nome like 'Editora Centro Atlantico'--OUselect utenteId, Nomefrom utentes u, exemplares e, requisiscoes r, livros l, editoras ewhere u.utenteid=r.utenteid and r.exemplarId=e.exemplarId and e.isbn=l.isbn and l.editoraId=e.editoraId and e.nome='centro atlantico' group by utenteid having count(*)=(select count(*)

from livros l2, editoras e2 where l2.editoraId=e2.editoraId and e2.nome like 'Centro Atlantico')

Page 16: sim2008.files.wordpress.com  · Web view,'Casaco','Preto') insert into produtos values(4 ... Listar os nomes dos empregados mais velhos. select nome_empregado, idade. from empregados.

create database futebol1use futebol1

create table Jogador (nome nvarchar(30) primary key,Clube nvarchar(30),Nacionalidade nvarchar(30),Golos_marcados int)

create table Jogo (N_jogo int primary key,Clube_visitante nvarchar(30),Clube_visitado nvarchar(30),Data datetime,Hora datetime,check(Clube_visitante <> Clube_visitado))

create table clube (nome nchar(30) primary key,localizacao nchar(30),data_fundacao datetime)

create table Golo (Nome_jogador nvarchar(30) foreign key references Jogador(nome),N_jogo int foreign key references Jogo(N_jogo),Tempo_decorrido datetime,primary key(Nome_jogador,N_jogo,Tempo_decorrido))

/*b) Listar os nomes dos jogadores do Porto por ordem alfabetica.*/select nome from jogadorwhere clube like 'Porto'order by nome

/* c) Listar o(s) nome(s) e clube(s) do(s) melhor(es) marcador(es).*/select nome, clubefrom jogadorwhere golos_marcados =(select max(golos_marcados) from jogador)

/*d) Listar os nomes dos clubes que sofreram golos em casa.*/select nome from clube c, jogo j, golo gwhere c.nome = j.Clube_visitado and j.N_jogo = g.N_jogo--OUselect clube_visitadofrom golo g, jogador j, jogo jgwhere g.nome_jogador=j.nome and g.n_jogo=jg.n_jogo andj.clube=jg.clube_visitante

Page 17: sim2008.files.wordpress.com  · Web view,'Casaco','Preto') insert into produtos values(4 ... Listar os nomes dos empregados mais velhos. select nome_empregado, idade. from empregados.

create database caixote

drop table caixotesuse caixote

create table artigos (cod int primary key ,nome nvarchar(20),peso int,preco money,fornecedor nvarchar(20))

create table caixotes(num int primary key default 3000,tamanho nvarchar(10) not null)

create table armazens(ref nvarchar(20) primary key,cidade nvarchar(20))

create table guarda(armazem nvarchar(20) foreign key references armazens(ref) ,caixote int foreign key references caixotes(num) ,entrada nvarchar(20),saida nvarchar(20),primary key(armazem,caixote))

create table contem(caixote int foreign key references caixotes(num) ,artigo int foreign key references artigos(cod),quantidade int,inicio nvarchar(20),fim nvarchar(20),Primary key(artigo,caixote))

--a)Garantir a integridade referencial no campo caixote da tabela Contém (considere apenas o evento insert).Create trigger verifica_caixote on contemfor insertasdeclare @c int select @c=caixote from inserted If not exists(select * from caixotes where num=@c)beginraiserror 50010 'O caixote não existe!'rollback transactionendgoinsert into caixotes values(1,'ABC')insert into artigos values (1,'Garrafa', 125, 10, 'XPTO')insert into contem values (1,1,5,'123','123')delete from contemdelete from caixotesselect * from contem

Page 18: sim2008.files.wordpress.com  · Web view,'Casaco','Preto') insert into produtos values(4 ... Listar os nomes dos empregados mais velhos. select nome_empregado, idade. from empregados.

create database familiause familia

Drop table pessoasdrop table casamento

create table pessoas(bi bigint primary key,nome nvarchar(30),Data_nasc datetime,bi_mae bigint foreign key references pessoas(bi),bi_pai bigint foreign key references pessoas(bi),sexo char(1) check(sexo like 'm' or sexo like 'f'))

create table casamento (bi_marido bigint,bi_mulher bigint,data_inicio datetime,data_fim datetime,primary key(bi_marido,bi_mulher))

insert into pessoas values(1234567,'ana',null,null,null,'f')insert into pessoas values(1234568,'rui',null,null,null,'m')insert into pessoas values(1234569,'manuel',null,1234567,1234568,'m')insert into pessoas values(12345610,'maria',null,1234567,1234568,null)insert into pessoas values(12345611,'joao',null,1234567,1234568,'m')insert into pessoas values(12345612,'teresa',null,1234567,1234568,null)insert into pessoas values(12345613,'tiago',null,null,null,'m')insert into pessoas values(12345614,'xico',null,null,null,'m')insert into pessoas values(12345615,'albertina',null,null,null,'f')insert into pessoas values(12345616,'eurico',null,null,null,'m')insert into pessoas values(12345617,'sofia',null,12345615,12345616,'f')insert into pessoas values(12345618,'cristina',null,null,null,'f')insert into pessoas values(12345619,'anabela',null,null,null,'f')insert into pessoas values(12345620,'luciana',null,1234567,1234568,'f')select * from pessoasinsert into casamento values(1234568,1234567,null,null)insert into casamento values(12345616,12345615,null,null)insert into casamento values(12345616,12345618,null,null)insert into casamento values(12345616,12345619,null,null)select * from casamento

/*a)Mostrar os nomes dos filhos da pessoa com numero de bilhete de identidade BI=1234567, por ordem alfabetica.*/select nomefrom pessoaswhere bi_mae = 1234567 or bi_pai = 1234567order by nome

/*b)Mostrar pares de nomes de irmaos.*/select nomefrom pessoas p, casamento cwhere c.bi_marido = p.bi_pai and c.bi_mulher = p.bi_mae--OUselect p1.nome, p2.nomefrom pessoas p1, pessoas p2where p1.bi<>p2.bi and p1.bi_pai=p2.bi_pai and p1.bi_mae=p2.bi_mae

Page 19: sim2008.files.wordpress.com  · Web view,'Casaco','Preto') insert into produtos values(4 ... Listar os nomes dos empregados mais velhos. select nome_empregado, idade. from empregados.

/*c)Mostrar os numeros de BI das pessoas com pais desconhecidos e que nunca estiveram casados.*/select bi from pessoaswhere bi_mae is null and bi_pai is null and bi not in (select bi_marido from casamento) and bi not in (select bi_mulher from casamento)--ouselect bifrom pessoas where bi_pai is null and bi_mae is null and (bi not in (select bi_mulher from casamento) and bi not in (select bi_marido from casamento))

/*d)Mostrar os numeros de BI, nome da mae e do pai, de mulheres que nunca foram casadas.*/select bi, bi_mae, bi_pai, sexofrom pessoaswhere sexo like 'f' and bi not in (select bi_mulher from casamento)--OUselect p1.bi, p1.nome,p2.nome as mae,p3.nome as paifrom pessoas p1, pessoas p2, pessoas p3where p1.bi_mae=p2.bi and p1.bi_pai=p3.bi and p1.bi not in (select bi_mulher from casamento) and p1.sexo like'f'

--/*e)Mostrar os nomes dos homens que foram casados mais do que duas vezes.*/select nome from pessoas pwhere bi in (select bi_marido from casamento

group by bi_marido having count(*)>2)

/*f)Mostrar os numeros de BI e nome dos filhos do(s) casal(ais) com mais de 4 filhos.*/create view filhosas select bi_marido, bi_mulherfrom casamento c, pessoas pwhere c.bi_marido=p.bi_pai and c.bi_mulher=p.bi_maegroup by bi_marido, bi_mulherhaving count(*)>4

select bi, nomefrom pessoas pwhere exists (select * from filhos f where p.bi_pai= f.bi_marido and p.bi_mae= f.bi_mulher)