SQL
Dados esquemas relaconais das tabelas
abaixo:
•EMPREGADO (numemp, nome, numsec, cargo,
chefe, Salário, Comissão)
•SEÇÃO (numsec, nome, cidade)
Declarar as tabelas acima, usando o DDL do
Oracle e criar as respectivas chaves
primárias e estrangeiras
Resolução: Criação das tabelas
create table seção
(NumSec varchar2(2),
nome Varchar2(25),
cidade varchar2(20));
create table empregado
(numemp varchar2(4),
nome varchar2(20),
numsec varchar2(2),
cargo varchar2(15),
chefe varchar2(4),
Salário number(7,2),
Comissão number (7,2));
Resolução: Declaração das chaves Primárias e
Estrangeiras
Alter table seção add constraint pk_seção
primary key (numsec);
Alter table empregado add constraint
pk_empregado primary key (numemp);
Alter table empregado add constraint
fk_seção_empregado foreign key (numsec)
references seção (numsec);
Inserir os dados abaixo na Tabela Seção
10
20
30
40
50
60
70
Fábrica
Comercial
Marketing
Planejamento
Administração
Informática
Recursos Humanos
Vinhedo
Vinhedo
São Paulo
Jundiaí
Vinhedo
São Paulo
Jundiaí
Resolução: Inserção de Dados na Tabela
SEÇÃO
Insert into seção values (‘10’,’Fábrica’,’Vinhedo’);
Insert into seção values (‘20’,’Comercial’,’Vinhedo’);
Insert into seção values (‘30’,’Marketing’,’São Paulo’);
Insert into seção values (‘40’,’Planejamento’,’Jundiaí’);
Insert into seção values (‘50’,’Administração’,’Vinhedo’);
Insert into seção values (‘60’,’Informática’,’São Paulo’);
Insert into seção values (‘70’,’Recursos Humanos’,’Jundiaí’);
Inserir os dados abaixo na Tabela
Empregado
NumEmp Nome NumSec Cargo
1
2
3
4
5
6
Ana
Paulo
Álvaro
Antonio
Susana
Cláudio
10
70
50
10
20
60
7
Dilminha 50
Chefe Salário Comissão
Programador
Engenheiro
Administrador
Engenheiro
Administrador
Comercial
Presidente
3
1
7
3
4
3000
1500
2500
1450
2750
1000
10
40
0
20
30
50
9000
0
Resolução: Inserção de Dados EMPREGADO
insert into empregado values
( ‘1’,’Ana’,’10’,’Programador’,’3’,3000,10);
Insert into empregado values
(‘2’,’Paulo’,’70’,’Engenheiro’,’1’,1500,40);
Insert into empregado values
(‘3’,’Álvaro’,’50’,’Administrador’,’7’,2500,0);
Insert into empregado values
(‘4’,’Antonio’,’10’,’Engenheiro’,’3’,1450,20);
Insert into empregado values
(‘5’,’Susana’,’20’,’Administrador’,’’,2750,30);
Insert into empregado values
(‘6’,’Cláudio’,’60’,’Comercial’,’4’,1000,50);
Insert into empregado values
(‘7’,’Dilminha’,’50’,’Presidente’,’’,9000,0);
ESQUEMA DAS TABELAS:
EMPREGADO (numemp, nome, numsec, cargo, chefe, salário, comissão)
SEÇÂO (numsec, nome, cidade)
Mostre o nome e a localização
(cidade) da seção 70
SELECT Nome, Cidade FROM
Seção WHERE NumSec=70;
ESQUEMA DAS TABELAS:
EMPREGADO (numemp, nome, numsec, cargo, chefe, salário, comissão)
SEÇÂO (numsec, nome, cidade)
Selecione o cargo, salário e
comissão dos empregados cuja
comissão excedeu o salário.
SELECT Nome, Cargo, Salário,
Comissão FROM Empregado
WHERE Comissão>Salário;
EMPREGADO (numemp, nome, numsec, cargo, chefe, salário, comissão)
SEÇÂO (numsec, nome, cidade)
Mostre os nomes de todas as
seções que ficam em
Vinhedo.
SELECT Nome FROM Secção
WHERE Cidade=’Vinhedo’;
EMPREGADO (numemp, nome, numsec, cargo, chefe, salário, comissão)
SEÇÂO (numsec, nome, cidade)
Selecione todos os cargos de
funcionários (sem repetição).
SELECT DISTINCT Cargo
FROM Empregado;
EMPREGADO (numemp, nome, numsec, cargo, chefe, salário, comissão)
SEÇÂO (numsec, nome, cidade)
Mostre o nome, posto e número
de secção dos empregados que
trabalham nas secções 20, 30 e
40
SELECT Nome, Posto,
Secção FROM Empregado
WHERE Numsec IN (20, 30,
40);
EMPREGADO (numemp, nome, numsec, cargo, chefe, salário, comissão)
SEÇÂO (numsec, nome, cidade)
Calcule e mostre quanto é que a
companhia gasta com engenheiros
e programadores em cada ano.
SELECT
SUM (Salário+Comissão) * 12
FROM Empregado
WHERE Cargo IN (‘Engenheiro’,
‘Programador’);
EMPREGADO (numemp, nome, numsec, cargo, chefe, salário, comissão)
SEÇÂO (numsec, nome, cidade)
Mostre o número, nome e cargo de
todos os empregados, ordenando
pelo número do empregado.
SELECT NumEmp, Nome,
Cargo FROM Empregado
ORDER BY NumEmp;
EMPREGADO (numemp, nome, numsec, cargo, chefe, salário, comissão)
SEÇÂO (numsec, nome, cidade)
Para cada secção, mostre o número de
secção, total de empregados e total dos
salários completos.
SELECT numsec, COUNT(*),
SUM(Salário+Comissão)
FROM Empregado GROUP
BY numsec;
EMPREGADO (numemp, nome, numsec, cargo, chefe, salário, comissão)
SEÇÂO (numsec, nome, cidade)
Mostre o número da seção, cargo,
número de empregados e salário
médio para cada cargo, por seção,
para as seções 10, 20 e 30.
SELECT numsec, Cargo,
COUNT(*), AVG(Salário) FROM
Empregado WHERE numsec IN
(20, 30, 40) GROUP BY numsec,
Cargo;
EMPREGADO (numemp, nome, numsec, cargo, chefe, salário, comissão)
SEÇÂO (numsec, nome, cidade)
Para cada seção, mostre quanto
se paga por ano a Engenheiros.
Mostre também o número da
seção e o total de Engenheiros.
SELECT numsec, COUNT(*),
SUM(Salário+Comissão)*12
FROM Empregado WHERE
Cargo=’Engenheiro’ GROUP BY
numsec;
EMPREGADO (numemp, nome, numsec, cargo, chefe, salário,
comissão)
SEÇÂO (numsec, nome, cidade)
Mostre qual o salário médio de
todos os cargos, exceto o de
presidente. .
SELECT AVG(Salário) FROM
Empregado WHERE
Cargo!=’Presidente’ GROUP
BY Cargo;
EMPREGADO (numemp, nome, numsec, cargo, chefe, salário,
comissão)
SEÇÂO (numsec, nome, cidade)
Mostre o nome e o cargo do
empregado que ganha o maior
salário total (Salário + Comissão)
SELECT Nome, Cargo FROM
Empregado WHERE
Salário+Comissão=(SELECT
MAX(Salário+Comissão) FROM
Empregado);
EMPREGADO (numemp, nome, numsec, cargo, chefe, salário,
comissão)
SEÇÂO (numsec, nome, cidade)
Mostre o número da seção, nome, cargo e salário
total do empregado com o segundo maior salário
total.
SELECT numsec, Nome, Cargo,
Salário+Comissão FROM Empregado WHERE
Salário+Comissão=(SELECT
MAX(Salário+Comissão) FROM Empregado
WHERE NumEmp NOT IN (SELECT NumEmp
FROM Empregado WHERE
Salário+Comissão=(SELECT
MAX(Salário+Comissão) FROM Empregado)));
EMPREGADO (numemp, nome, numsec, cargo, chefe, salário,
comissão)
SEÇÂO (numsec, nome, cidade)
Liste o nome, cargo e salário dos
empregados não pertencentes à seção
10, que têm o mesmo salário e cargo
dos empregados da seção 10.
SELECT sn10.Nome, sn10.Cargo,
sn10.Salário FROM Empregado sn10,
Empregado s10 WHERE
sn10.numsec!=10 AND
sn10.Salário=s10.Salário
AND sn10.Cargo=s10.Cargo
AND s10.numsec=10;
EMPREGADO (numemp, nome, numsec, cargo, chefe, salário,
comissão)
SEÇÂO (numsec, nome, cidade)
•
•
•
•
•
Calcule o número médio de empregados
por secção.
Mostre qual o salário médio de todos os
postos, exceto o de presidente.
Mostre o nome e o posto do empregado
que ganha o maior salário total.
Liste o nome, posto e salário dos
empregados não pertencentes à secção
10, que têm o mesmo salário e posto dos
empregados da secção 10.
Mostre o número da secção, nome,
posto e salário total do empregado com
o segundo maior salário total.
•
SELECT COUNT(*)/(SELECT COUNT(*) FROM
Seccao) FROM Empregado;
•
SELECT AVG(Salario) FROM Empregado WHERE
Posto!=’Presidente’ GROUP BY Posto;
•
SELECT Nome, Posto FROM Empregado WHERE
Salario+Comissao=(SELECT MAX(Salario+Comissao)
FROM Empregado);
•
SELECT sn10.Nome, sn10.Posto, sn10.Salario FROM
Empregado sn10, Empregado s10 WHERE
sn10.Secção!=10 AND sn10.Salario=s10.Salario
AND sn10.Posto=s10.Posto
AND s10.Seccao=10;
•
SELECT Secção, Nome, Posto, Salario+Comissao
FROM Empregado WHERE
Salario+Comissao=(SELECT MAX(Salario+Comissao)
FROM Empregado WHERE NumEmp NOT IN
(SELECT NumEmp FROM Empregado WHERE
Salario+Comissao=(SELECT MAX(Salario+Comissao)
FROM Empregado)));
Download

Primeira Aula de SQL