exercícios revisão

5
SQL Exercícios Revisão Pretende-se desenvolver uma base de dados com o nome TrofaLimpa, utilizando a linguagem SQL, que permita efectuar a gestão dos funcionários da empresa TrofaLimpa. Os funcionários estão organizados por secções e cada secção pode ter mais do que um funcionário mas, cada funcionário apenas pode pertencer a uma secção. Na criação da base de dados registe todos os comandos SQL efectuados e tenha em atenção as indicações das seguintes alíneas: 1. Os dados na base de dados ficarão organizados logicamente de acordo com o diagrama E-R seguinte: 2. Os dados na base de dados vão ficar organizados nas seguintes tabelas: 3. Crie as tabelas anteriores atribuindo aos campos os tipos de dados e cláusulas que considera mais adequadas. Não se esqueça de criar as ligações entre as tabelas tal como estão representadas diagramas E-R anterior. 4. Registe na base de dados os seguintes dados:

Upload: pedro-castro

Post on 13-Apr-2016

1 views

Category:

Documents


0 download

DESCRIPTION

SQL

TRANSCRIPT

Page 1: Exercícios Revisão

SQL

Exercícios Revisão

Pretende-se desenvolver uma base de dados com o nome TrofaLimpa, utilizando a linguagem SQL, que

permita efectuar a gestão dos funcionários da empresa TrofaLimpa. Os funcionários estão organizados por

secções e cada secção pode ter mais do que um funcionário mas, cada funcionário apenas pode pertencer a

uma secção.

Na criação da base de dados registe todos os comandos SQL efectuados e tenha em atenção as indicações

das seguintes alíneas:

1. Os dados na base de dados ficarão organizados logicamente de acordo com o diagrama E-R seguinte:

2. Os dados na base de dados vão ficar organizados nas seguintes tabelas:

3. Crie as tabelas anteriores atribuindo aos campos os tipos de dados e cláusulas que considera mais

adequadas. Não se esqueça de criar as ligações entre as tabelas tal como estão representadas

diagramas E-R anterior.

4. Registe na base de dados os seguintes dados:

Page 2: Exercícios Revisão

1. Não se esqueça de criar as chaves externas (CodSecção e CodEmp) e de estabelecer os

relacionamentos entre as tabelas Empregado <-> Secção/Empregado e entre Seção <-> Secção

garantindo a integridade referencial.

create database castlimpo;

create table Empregado ( CodEmp int not null auto_increment, Nome varchar(30), primary key (CodEmp) );

create table Secção ( Codsecção int not null auto_increment, Designasec varchar(26), primary key (Codsecção) );

create table Secção_Empregado ( Codemp int not null, Codsecção int not null, primary key (Codemp,Codsecção), FOREIGN KEY (Codemp) REFERENCES Empregado (Codemp)on update cascade on delete cascade, FOREIGN KEY (Codsecção) REFERENCES secção (Codsecção)on update cascade on delete cascade )

INSERT INTO empregado(Nome) VALUES ('Joaquim'); INSERT INTO empregado(Nome) VALUES ('Rosa'); INSERT INTO empregado(Nome) VALUES ('Maria'); INSERT INTO empregado(Nome) VALUES ('Agostinho'); INSERT INTO secção(Designasec) VALUES (‘Informática’); INSERT INTO secção(Designasec) VALUES (‘Manutenção’); INSERT INTO secção(Designasec) VALUES (‘Contabilidade’); INSERT INTO secção(Designasec) VALUES (‘Financeira’); INSERT INTO secção_empregado (Codemp,Codsecção) VALUES (1,1); INSERT INTO secção_empregado (Codemp,Codsecção) VALUES (2,2); INSERT INTO secção_empregado (Codemp,Codsecção) VALUES (3,3); INSERT INTO secção_empregado (Codemp,Codsecção) VALUES (4,4);

2. Acrescente na tabela Empregado o campo DataNasc, com tipo de dado Date e de preenchimento

obrigatório.

ALTER TABLE empregado ADD datanasc date not null;

3. Insira no campo DataNasc, da tabela Empregado os seguintes dados:

DataNasc 1988-12-1

1987-11-11

1978-12-12

1978-2-3

UPDATE empregado SET datanasc=’1988-12-1’ WHERE codemp=1;

UPDATE empregado SET datanasc=’1987-11-11’ WHERE codemp=2;

UPDATE empregado SET datanasc=’1978-12-12’ WHERE codemp=3;

Page 3: Exercícios Revisão

UPDATE empregado SET datanasc=’1978-2-3’ WHERE codemp=4;

4. Altere o nome do campo Nome para NomeEmp.

ALTER TABLE empregado CHANGE nome nomeemp varchar(30);

5. Efetue as alterações necessárias no campo CodSecção de forma que passe a fazer o incremento

automático dos códigos aquando da inserção de novos registos.

ALTER TABLE secção MODIFY codsecção int auto_increment;

6. Acrescente na tabela Secção/Empregado o campo DataHoraInício com o tipo de dados adequado de

forma que apresente a data e hora do sistema aquando da inserção do registo.

ALTER TABLE secção_empregado ADD datahorainício timestamp;

7. Insira no campo DataHoraInício nos quatro registos existentes na tabela Secção/Empregado a data

hora de 2013-2-1 13:30:30.

UPDATE secção_empregado SET datahorainício = ‘2013-2-1 13:30:30’;

8. Acrescente o campo NumEmp, na tabela Secção, do tipo inteiro e de forma que seja preenchido por

defeito com o valor 13 e aceite apenas valores superiores ou iguais a 6.

ALTER TABLE secção ADD numemp int default 13 check (numemp>=6);

9. Insira no campo NumEmp, da tabela Secção, os dados a seguir apresentados:

NumEmp 8

13

6

8

UPDATE secção SET numemp = 8;

UPDATE secção SET numemp = 13;

UPDATE secção SET numemp = 6;

UPDATE secção SET numemp = 8;

10. Defina como chave externa o campo CodCondutor, da tabela Viaturas, estando ligado ao campo

CodCond, da tabela Condutores.

11. Crie o índice DataOrd a partir do campo DataNasc, da tabela Empregado.

CREATE INDEX dataord ON empregado (datanasc);

12. Liste todos os dados da tabela Empregado.

SELECT * FROM empregado;

13. Liste todos os dados da tabela Empregado, ordenados pelo campo Datanasc.

SELECT * FROM empregado ORDER BY datanasc;

Page 4: Exercícios Revisão

14. Crie o índice NEmpOrd a partir do campo NumEmp, da tabela Secção.

CREATE INDEX nempord ON secção(numemp);

15. Liste os dados dos campos CodSecção e DesignaSec, da tabela Secção, com valores em CodSecção

superiores a 2.

SELECT codsecção, designasec FROM secção WHERE codsecção>2;

16. Elimine o índice DataOrd da tabela Empregado.

ALTER TABLE empregado DROP INDEX dataord;

17. Acrescente o campo SalEmp, na tabela Empregado, do tipo decimal e de forma que seja preenchido

por defeito com o valor 600 e aceite apenas valores superiores ou iguais a 500.

ALTER TABLE empregado ADD salemp decimal DEFAULT 600 CHECK (salemp>=500);

18. Insira no campo SalEmp, da tabela Empregado, os dados a seguir apresentados:

SalEmp 750

900

600

650

INSERT INTO empregado (salemp) values (750);

INSERT INTO empregado (salemp) values (900);

INSERT INTO empregado (salemp) values (600);

INSERT INTO empregado (salemp) values (650);

1. Crie a View VEmp para apresentar o código e nome dos empregados, cujo salário esteja

compreendido entre 599 e 899, os dados são apresentados por ordem decrescente do valor

do salário.

CREATE VIEW VEmp (Código,Nome) AS SELECT codemp,nomeemp FROM empregado WHERE

salemp>599 AND salemp<899 ORDER BY salemp DESC

2. Crie a view VSalM para apresentar a média dos salários recebidos pelos empregados.

CREATE VIEW VSalM (média) AS SELECT AVG(salemp) FROM empregado;

3. Crie a view VSecMin para apresentar o código e designação da secção com menor número de

empregados.

CREATE VIEW VSecMin (Código,Designação) AS SELECT codsecção,designasec FROM secção WHERE

numemp=(SELECT MIN(numemp) FROM secção);

4. Crie a view VEmpMax para apresentar o código e nome dos empregados cujo salário seja

igual ao salário máximo recebido.

Page 5: Exercícios Revisão

CREATE VIEW VEmpMax (Código,Nome) AS SELECT codemp,nomeemp FROM empregado WHERE

salemp=(SELECT MAX(salemp) FROM empregado);

5. Crie a view VSAnual para apresentar o código e salário total recebido pelo empregado,

considerando que recebe subsídio de férias e de natal, os dados são apresentados por ordem

crescente do código.

CREATE VIEW VSAnual (Código,Salário_total) AS SELECT codemp,salemp*14 FROM empregado

ORDER BY codemp ASC;

6. Visualize o conteúdo da view VSAnual.

SELECT * FROM vsanual;

7. Crie a view VSEmp para apresentar uma lista com os nomes dos empregados que pertencem

à secção Informática com o código 1.

CREATE VIEW VSEmp (Nomes_empregados) AS SELECT (nomeemp) FROM

empregado,secção_empregado WHERE secção_empregado.codsecção=1 and

secção_empregado.codsecção=empregado.codemp

8. Apague a view VSEmp.

DROP VIEW vsemp;