Você está na página 1de 8

Exerccios SQL SELECT Bsico

1 - Defina o comando SELECT necessrio para exibir os dados abaixo indicados:


- Todos os dados da tabela CURSOS.
SELECT *
FROM CURSOS
- Todos os dados da tabela FUNCIONARIOS.
SELECT *
FROM FUNCIONARIOS
- As colunas NOME e ENDERECO da tabela FUNCIONARIOS.

SELECT NOME,ENDERECO
FROM FUNCIONARIOS

- Todos os dados dos FUNCIONARIOS com SALARIO maior ou igual a 1000.

SELECT *
FROM FUNCIONARIOS
WHERE SALARIO >= '1000'

- NOME e a DESCRICAO do cargo de cada funcionrio que tenha um SALARIO menor


ou igual a 500, ordenado pelo NOME do funcionrio.

SELECT NOME,DESCRICAO
FROM FUNCIONARIOS, CARGO
WHERE SALARIO <='500'
ORDER BY NOME

- A idade mdia dos funcionrios, agrupada pela DESCRICAO do CARGO.

SELECT DESCRICAO, AVG(TO_NUMBER(TO_CHAR(SYSDATE,'YYYY'))-


TO_NUMBER('19'||TO_CHAR(DATA_NASC,'YY'))) MEDIA
FROM FUNCIONARIO F, CARGO C
WHERE F.CODIGO_CARGO=C.CODIGO_CARGO
GROUP BY DESCRICAO

- A mdia salarial global da empresa.

SELECT AVG (SALARIO)


FROM FUNCIONARIO

- A DESCRICAO dos cursos que tenham mais que dois alunos matriculados.

SELECT DESCRICAO, COUNT(*)


FROM CURSO, TURMA, ALUNO_NA_TURMA
WHERE CURSO.CODIGO_CURSO= TURMA.CODIGO_CURSO AND
ALUNO_NA_TURMA.CODIGO_TURMA = TURMA.CODIGO_TURMA
GROUP BY DESCRICAO
HAVING COUNT(*) >2
2 - Os comandos SELECT abaixo podem contem erros. Indique-os:

- SELECT NOME, DESCRICAO_CARGO


FROM FUNCIONARIOS;

O comando acima apresentar erro DESCRICAO_CARGO: identificador invlido.


Porque a coluna DESCRICAO_CARGO no existe. O correto seria DESCRICAO na
tabela CARGOS.

O certo seria:

SELECT NOME, DESCRICAO


FROM FUNCIONARIO F, CARGO C
WHERE F.CODIGO_CARGO = C.CODIGO_CARGO

- SELECT DESCRICAO, SALARIO_MAX


FROM CARGOS
GROUP BY CODIGO_CARGO;

ERRADO: O certo seria:

SELECT DESCRICAO, MAX(SALARIO) MAIOR_SALARIO


FROM FUNCIONARIO F, CARGO C
WHERE F.CODIGO_CARGO = C.CODIGO_CARGO
GROUP BY DESCRICAO

- SELECT * FROM CURSO

O comando acima funcionou perfeitamente. Exibe toda tabela de curso.

- SELECT COUNT(*) FROM ALUNOS_NAS_TURMAS.

O comando acima funcionou perfeitamente.

- SELECT COUNT(*), CODIGO_CARGO


FROM CARGOS
GROUP BY CODIGO_CARGO.

O comando acima funcionou perfeitamente

3 - Liste a relao de funcionrios da empresa e seus respectivos


cargos,obedecendo o seguinte padro:

- "<Fulano De Tal>, exerce a funo de <Funo>" e mantendo alinhados os


nomes de funcionrios pela esquerda.
4 - Crie a coluna DATA_ADMISSAO do tipo DATE na tabela FUNCIONARIOS
antes de executar os itens seguintes:

ALTER TABLE FUNCIONARIOS


ADD COLUMN DATA_ADMISSO DATE

a. Os funcionrios de matrcula (cdigo) acima de 35 foram contratados em


12 de maio de 1998, os demais, foram admitidos hoje. Cadastre a data de
admisso de cada um deles no sistema.
b. Em seguida, exiba o nome e data de admisso destes funcionrios,
exibindo a data com hora, no formato 24 horas.

5 - Selecione todos os nomes dos funcionrios e os ttulos de seus


respectivos cargos, por ordem de cargo.

select nome, descricao


FROM FUNCIONARIO F, CARGO C
WHERE F.CODIGO_CARGO = C.CODIGO_CARGO
ORDER BY DESCRIO

6 - Selecione todos os nomes de todos os funcionrios que tm ministrado


aulas desde agosto de 1997, ordenados por nome. Informe ainda o perodo de
cada curso.

7 - Selecione o nome de todos os funcionrios, alm da identificao nica e


ttulo do respectivo cargo.

SELECT NOME, C.CODIGO_CARGO, DESCRICAO


FROM FUNCIONARIO F, CARGO C
WHERE F.CODIGO_CARGO = C.CODIGO_CARGO
ORDER BY DESCRICAO

8 - Insira um novo funcionrio na tabela FUNCIONARIOS sem associ-lo a


qualquer cargo existente. Agora selecione o nome e a descrio do cargo de
todos os funcionrios, mesmo os que no possuem um cargo definido, neste
caso, preenchendo com a string "Sem cargo definido".

INSERT INTO FUNCIONARIO (CODIGO_FUNCIONARIO, NOME)


VALUES (99,'JOAO DE DEUS')

9 - Selecione as matrculas e os nomes dos funcionrios e seus respectivos


chefes.

SELECT F.CODIGO_FUNCIONARIO, F.NOME FUNC, C.NOME CHEFE


FROM FUNCIONARIO F, FUNCIONARIO C
WHERE F.CODIGO_CHEFE = C.CODIGO_FUNCIONARIO
Exerccios SQL Subqueries

Subqueries Simples

1 - A empresa necessita rever os planos de benefcios de todos os


funcionrios do mesmo cargo do Sr. Tito Lemos. Liste os funcionrios
desejados.
SELECT NOME
FROM FUNCIONARIOS
WHERE CODIGO_CARGO=(SELECT CODIGO_CARGO
FROM FUNCIONARIOS
WHERE NOME='TITO LEMOS')

2 - Quais cargos possuem salrio maior que a mdia salarial da empresa?

SELECT CODIGO_CARGO
FROM FUNCIONARIOS
WHERE SALARIO>(SELECT AVG(SALARIO)
FROM FUNCIONARIOS)

3 - Selecione o nome, o cargo (descrio) e o salrio anual de todos os


funcionrios que recebam mais que o maior salrio mximo por ano, ou que
sejam instrutores, exibindo o resultado em ordem crescente pela
remunerao mensal.

SELECT NOME,DESCRICAO
FROM FUNCIONARIOS F, CARGOS C
WHERE F.CODIGO_CARGO=C.CODIGO_CARGO AND SALARIO * 12>(SELECT
MAX(SALARIO_MAX)
FROM CARGOS) OR DESCRICAO='INSTRUTOR'
ORDER BY SALARIO

Subqueries Multi-linhas

4 - Selecione a ltima turma realizada de cada curso, ordenando a sada pela


data de incio das ltimas turmas. Inclua na pesquisa a descrio dos cursos.

SELECT C.DESCRICAO, T.DATA_INICIO, T.DATA_FIM


FROM CURSO C, TURMA T
WHERE C.CODIGO_CURSO = T.CODIGO_CURSO
AND (T.DATA_INICIO, T.CODIGO_CURSO) IN (SELECT MAX (DATA_INICIO),
CODIGO_CURSO
FROM TURMA
GROUP BY CODIGO_CURSO)
Subqueries Correlatas

5 - Selecione o nome do funcionrio para o qual no foi cadastrado o cargo.


Utilize subquery para obter esta seleo.

SELECT NOME
FROM FUNCIONARIOS F1
WHERE NOT EXISTS (SELECT *
FROM FUNCIONARIOS F2
WHERE F1.CODIGO_CARGO=F2.CODIGO_CARGO)

Exerccios SQL Insert, Update, Delete

1 - Insira os seguintes dados na tabela CARGOS:

CODIGO DESCRICAO Salario_Min Salario_max Tipo_Cargo


1100 SUPERVISOR 1500 2000 T
1101 ANALISTA 2000 3000 T
1102 SECRETARIA 700 1500 A
1103 (nulo) 300 X
1104 ASSISTENTE 250 A
1101 SEGURANCA 200 400 E
1105 TECN. EM SEGURANCAO DOTRABALHO (nulo) T

1 - Insira os seguintes dados na tabela CARGOS:

insert into cargo (codigo_cargo, descricao, tipo_cargo, salario_min, salario_max)


values (110O, 'SUPERVISOR', 'T', 1500, 2000)

insert into cargo (codigo_cargo, descricao, tipo_cargo, salario_min, salario_max)


values (1101, 'ANALISTA', 'T', 2000, 3000)

insert into cargo (codigo_cargo, descricao, tipo_cargo, salario_min, salario_max)


values (1102, 'SECRETARIA', 'A', 700, 1500)

1103 ERRADO: Porque esse campo no pode ser nulo.

insert into cargo (codigo_cargo, descricao, tipo_cargo, salario_min, salario_max)


values (1104, 'ASSISTENTE', 'A', 250, null)

ERRADO:
insert into cargo (codigo_cargo, descricao, tipo_cargo, salario_min, salario_max)
values (1101, 'SEGURANCA', 'E', 200, 400)

Est errado porque j existe o cdigo 1101 preenchido. No pode colocar um valor
duplicado na chave primria.

ERRADO:
insert into cargo (codigo_cargo, descricao, tipo_cargo, salario_min, salario_max)
values (1105, 'TECNICO EM SEGURANCA DO TRABALHO', 'T', null, null)
Errado porque ultrapassa o nmero de caracteres permitido.
3 - Estenda em 50% a faixa de salrio mximo para os cargos do tipo D.

SELECT DESCRICAO,SALARIO_MIN,SALARIO_MAX
FROM CARGOS
WHERE TIPO_CARGO='D'
UPDATE CARGO
SET SALARIO_MAX=SALARIO *1.5
WHERE TIPO_CARGO='D'

4 - Se voc tentar executar o comando abaixo ocorrer um erro. Qual a causa


deste erro ?

SQL> DELETE FROM CARGOS;


ORA-02292: restrio de integridade (SBDNOITE.FK_FUNC_CARGO) violada -
registro filho localizado

5 - Defina os comandos DELETE necessrios para excluir as seguintes linhas da


tabela ALUNOS:

Todos os alunos da tabela.


DELETE FROM ALUNOS

Todos os alunos que morem no bairro CENTRO da cidade OSASCO.


DELETE FROM ALUNO

WHERE BAIRRO='CENTRO'

AND CIDADE='OSASCO'

Todos os alunos que morem em apartamento.

DELETE FROM ALUNO

WHERE ENDERECO LIKE '%APTO%'

Exerccios SQL Views

Views

1 - Defina o comando de criao de views para os seguintes


conjuntos de dados:

Nome e sexo dos alunos;


CREATE VIEW ALUNO_V1
AS SELECT NOME, SEXO
FROM ALUNOS

Ms de nascimento e nome dos funcionrios;


CREATE VIEW ALUNO_V2
AS SELECT NOME, TO_CHAR(DATA_NASC,'MM') MES
FROM FUNCIONARIOS
Nome, descrio do cargo e salrio dos funcionrios;
CREATE VIEW ALUNO_V3 AS
SELECT NOME,DESCRICAO,SALARIO
FROM FUNCIONARIOS, CARGOS

Nome do funcionrio e nome do chefe do mesmo.

CREATE VIEW FUNCIONARIO_V3


AS SELECT F.NOME AS FUNC, C.NOME AS CHEFE
FROM FUNCIONARIO F , FUNCIONARIO C
WHERE F.CODIGO_CHEFE = C.CODIGO_FUNCIONARIO
ORDER BY FUNC

2 - Tente executar um comando DML (INSERT, DELETE ou UPDATE)


na view criada no item 1.1. Funcionou? Caso no tenha
funcionado, qual o problema? Esta VIEW simples ou complexa?

3 - Crie uma View sobre a tabela de FUNCIONARIOS, definindo


alias abreviados para cada coluna, restringindo a View para
funcionrios do sexo feminino.

SELECT CODIGO_FUNCIONARIO AS COD_FUNC,NOME AS NOME_FUNC,


CODIGO_CARGO AS COD_CARGO, ENDERECO AS END, BAIRRO AS BAIR, CIDADE AS
MUNICIPIO, CODIGO_CHEFE AS CHEFE, ESTADO AS UF,DATA_NASC AS NASCIMENTO,
SEXO, SALARIO AS REMUNERACAO
FROM FUNCIONARIOS
WHERE SEXO='F'

4 - Liste as views que voce criou.

SELECT VIEW_NAME,TEXT
FROM USER_VIEWS

PAGINA 79.

1) SELECT NAMED

FROM DICIPLINA
WHERE CARGAD > ALL (SELECT CARGAD
FROM DICIPLINA
WHERE AREAD = MATEMATICA)

2) SELECT CODD, COUNT (*) QTE


FROM GRADE
GROUP BY CODD

3) SELECT AREAD, AVG (CARGA) MEDIA


FROM DICIPLINA
GROUP BY AREAD
HAVING AVG (AREAD) > = 3

4) SELECT NAMED
FROM DICIPLINA
WHERE PREREQ IS NULL
AND CODD NOT IN (SELECT PREREQ
FROM DICIPLINA)

5) SELECT NOMEC
FROM CURSO
WHERE DURACAO = (SELECT DURACAOD
FROM CURSO
WHERE NOMED = ENGENHARIA ELETRICA)

6) SELECT NOME C
FROM CURSO
WHERE DURACAO = (SELECT DURACAO
FROM CURSO
WHERE NOMED = ENGENHARIA ELETRICA)
AND MENSC > (SELECT MENSC
FROM CURSO
WHERE NOMED = ENGENHARIA ELETRICA)

7) SELECT NOMEC
FROM CURSO
WHERE MENSC > (SELECT AVG (MENSC)
FROM CURSO)