Você está na página 1de 6

Para a resoluo dos prximos exerccios, considere as tabelas abaixo:

ATENO: A aplicao de um ou outro comando SQL NO implicar na estrutura e nos dados das tabelas, sempre considere as tabelas como mostradas abaixo.

1) Baseando-se nas tabelas acima, identifique as chaves primrias e estrangeiras de cada uma. Coloque a frente do nome do atributo CP(Chave Primria) e CE(Chave Estrangeira). (Valor 1,0 Pt) FUNCIONARIO -> matricula(CP), cod_lotacao(CE) DIVISO -> cod_divisao(CP), depto(CE) DEPARTAMENTO ->cod_dep(CP)

2) Crie um comando SQL em que selecione a MATRICULA, NOME DO FUNCIONRIO E O SEU ENDEREO apenas para aqueles que possuem SALARIO abaixo de R$1000,00. (Valor 1,5 Pt) SELECT MATRICULA, NOME_FUNC, ENDERECO FROM Funcionario WHERE SALARIO < 1000 Fonte: Slide 166(Consulta similar) 3) Crie um comando SQL em que selecione apenas os funcionrios que chamam Marcelo, independentemente do sobrenome. (Valor 1,5 Pt)

SELECT NOME_FUNC FROM Funcionario WHERE NOME_FUNC LIKE MARCELO% Fonte: Slide 173(Consulta similar)

4) Crie um comando SQL em que mostre o somatrio dos salrios dos departamentos 7321 e 7323 e o campo cod_lotacao. (Valor 1,5 Pt) SELECT SUM(SALARIO), cod_lotacao FROM Funcionario WHERE cod_lotacao=7321 or cod_lotacao=7323 GROUP BY COD_LOTACAO Fonte: Slide 181(Consulta similar) 5) Crie um comando SQL em que selecione a MATRICULA, NOME DO FUNCIONARIO e o seu SALARIO ordenando pelo salrio mais alto. Ou seja, o maior salrio precisa aparecer no topo do resultado. (Valor 1,5 Pt) SELECT MATRICULA, NOME_FUNC, SALARIO FROM Funcionario ORDER BY SALARIO DESC Fonte: Slide 167(Consulta similar) 6) Crie um comando SQL em que selecione MATRICULA, NOME DO FUNCIONARIO, ENDERECO e o seu SALARIO onde SALARIO maior que R$1000,00 e o endereo no nulo. (Valor 1,5 Pt) SELECT MATRICULA, NOME_FUNC, ENDERECO, SALARIO FROM Funcionario WHERE SALARIO > 1000 AND ENDERECO IS NOT NULL Fonte: Slide 184(Consulta similar)

7) Crie um comando SQl que selecione o Cdigo e o Nome do(s) departamento(s) que tenham uma diviso com nome DIDAP. Utilize o comando INNER JOIN para fazer a relao entre as tabelas. (Valor 1,5 Pt) SELECT DE.cod_dep, DE.Nome_depto FROM DIVISAO D INNER JOIN DEPARTAMENTO DE ON D.depto = DE.cod_dep WHERE D.sig_divisao = DIDAP

Fonte: Slide 171(Consulta similar)

8) Crie um comando SQl que selecione o nmero da diviso(cod_lotacao) e o seu respectivo nmero total de funcionrios. D o apelido de Total Funcionrios para o campo que indica a contagem dos funcionrios. (Valor 1,5 Pt) SELECT F.cod_lotacao, COUNT(F.cod_lotacao) AS Total Funcionario FROM divisao d INNER JOIN funcionario F ON d.cod_divisao = F.cod_lotacao GROUP BY f.cod_lotacao Fonte: Slide 174(Consulta similar) 9) Crie um comando SQl que selecione o Nome do Funcionrio e o seu Salrio onde Salrio est entre R$10.000, 00 e R$50.000,00. (Valor 1,5 Pt) SELECT Nome_Func, Salario FROM funcionrio WHERE Salario Between 10000 AND 50000 Fonte: Slide 182(Consulta similar)

10) Selecione todos os campos da tabela funcionrio onde o campo matricula igual a 10078, 11404, 11057. (Valor 1,5 Pt) SELECT * FROM funcionrio WHERE matricula = 10078 OR matricula = 11404 OR matricula = 11057 11) Crie uma consulta SQL em todos os campos da tabela FUNCIONARIO e da tabela DIVISAO sejam selecionados, mesmo aqueles campos que no possuem vnculos entre as duas tabelas. (Valor 1,5 Pt) Observao: Percebam que o cod_lotacao=7300 no parece na relao de cdigos da tabela DIVISAO, mas mesmo assim essa tupla deve aparecer. *Parta do princpio que a tabela FUNCIONARIO est esquerda e DIVISAO est direita. SELECT * FROM funcionrio LEFT JOIN diviso ON f.cod_lotacao = d.cod_divisao

Fonte: Slide 192(Consulta similar)

12) Crie uma consulta em que aparea todos os campos das tabelas FUNCIONARIO, DIVISAO e DEPARTAMENTO. Utilize INNER JOIN para isso. (Valor 1,5 Pt) SELECT * FROM funcionrio F INNER JOIN diviso D INNER JOIN departamento DE ON f.cod_lotacao = d.cod_divisao ON d.depto = de.cod_dep

Fonte: Slide 193(Consulta similar)

13) Crie um comando SQL que atualize o ENDERECO e o SALARIO do FUNCIONARIO Marcelo Vasconcelos para Rua Antonio Gomes, 97 e R$10.000,00 respectivamente. (Valor 1,5 Pt)
UPDATE funcionario SET endereco = 'Rua Antonio Gomes, 97', salario = 10000 WHERE nome_func = 'Marcelo Vasconcelos'

Fonte: Slide 198(Consulta similar) 14) Crie um comando SQL que insira na tabela FUNCIONARIO os seguintes dados: {10250, Rodrigo Franklin Frogeri, Rua AA, 97, 10.000,00, 7322). (Valor 1,5 Pt)
INSERT INTO funcionario VALUES(10250, 'Rodrigo Franklin Frogeri', 'Rua AA, 97', 10000, 7322)

Fonte: Slide 196(Consulta similar) 15) Crie um comando SQL que apague os registros dos FUNCIONARIOS que possuem SALARIO maior que R$60.000,00. (Valor 1,5 Pt)
DELETE FROM funcionario WHERE salario > 60000

Fonte: Slide 197(Consulta similar) 16) Crie um comando SQL que mostre a soma dos salrios de todos os funcionrios, agrupando-os por departamento. Mostre o nome do departamento e o total de salrios daquele departamento.
SELECT dep.nome_depto, SUM(func.SALARIO) FROM funcionario func INNER JOIN DIVISAO div ON func.cod_lotacao = div.cod_divisao INNER JOIN departamento dep ON div.depto = dep.cod_dep GROUP BY dep.nome_depto

17) Crie um comando SQl que mostre o total de funcionrios alocados no departamento de nmero 7300.
SELECT dep.nome_depto, COUNT(func.matricula) FROM funcionario func INNER JOIN DIVISAO div ON func.cod_lotacao = div.cod_divisao INNER JOIN departamento dep ON div.depto = dep.cod_dep WHERE dep.cod_dep = 7300 GROUP BY dep.nome_depto SELECT departamento.nome_depto, COUNT(funcionario.matricula) FROM funcionario, DIVISAO, departamento WHERE (funcionario.cod_lotacao = divisao.cod_divisao) AND (divisao.depto = departamento.cod_dep) AND dep.cod_dep = 7300 GROUP BY dep.nome_depto

18) Crie um comando SQl que mostre a mdia de salrio dos funcionrios alocados na diviso 7321.
SELECT avg(salario) FROM funcionario Where cod_lotacao = 7321

19) Crie um comando SQl que mostre o nome do funcionrio com maior salrio.
SELECT nome_func, salario FROM funcionario

WHERe Salario = (select MAX(salario) from FUNCIONARIO)

20) Crie um comando SQl que mostre o nome do funcionrio com menor salrio.
SELECT nome_func, salario FROM funcionario WHERe Salario = (select MIN(salario) from FUNCIONARIO)

21) Crie um comando SQl que mostre o nome dos funcionrios que trabalhem na diviso de nome DIDAP, que tenham matrcula maior que 200, e que recebam salrio maior que a mdia da diviso.

22) Crie uma consulta SQl que mostre o nome dos funcionrios e o cdigo de sua lotao que trabalhem nas divises do departamento de nome INF, ou cujo nome do funcionrio inicie com a letra A.

A consulta acima pode ser feita da seguinte forma: SELECT nome_func, cod_lotacao FROM funcionario func INNER JOIN DIVISAO div ON func.cod_lotacao = div.cod_divisao INNER JOIN departamento dep ON div.depto = dep.cod_dep WHERE dep.sig_depto = INF AND func.nome_func LIKE A%

23) Crie uma consulta SQl que mostre o cdigo e o nome estendido da diviso que tenha um funcionrio com salrio menor que R$1.000,00.
SELECT cod_divisao, nome_divisao, salario FROM DIVISAO INNER JOIN FUNCIONARIO ON cod_divisao = cod_lotacao WHERE salario > 1000

24) Crie uma consulta SQL em que sejam selecionados apenas o nome do funcionrio e a sua diviso onde o campo salrio no nulo, o campo mat_assessor no nulo e o salrio seja maior que R$10.000,00
SELECT nome_func, nome_divisao FROM FUNCIONARIO INNER JOIN DIVISAO ON cod_lotacao = cod_divisao INNER JOIN DEPARTAMENTO ON depto = cod_dep WHERE salario is not null AND mat_assessor is not null AND salario > 10000

25) Insira na tabela FUNCIONRIOS os seguintes valores: {10078, Joao Azevedo, Rua Nilo 1, R$21.000,00, 7300}. Observao: Neste exerccio alterem o valor 100078 para 10078, pois caso contrrio exceder o campo smallint que foi definido. Alterem o valor 7300 para 7105, pois caso contrrio ocorrer uma exceo de chave estrangeira na tabela DIVISAO, j que no existe o valor 7300 na mesma. ATENO: Utilizem aspas simples caso executem o comando de insero abaixo no SQL Server.
INSERT INTO FUNCIONARIO VALUES (10078, 'Joao Azevedo', 'Rua Nilo 1', 21000, 7105)

26) Atualize o salrio dos funcionrios que so da Diviso de Suporte Tcnico em 10%.
UPDATE FUNCIONARIO SET salario = ((salario*10)/100) FROM FUNCIONARIO INNER JOIN DIVISAO ON cod_lotacao=cod_divisao WHERE nome_divisao = 'Diviso de Suporte Tcnico'

27) Atualize o endereo dos funcionrios em que o nome inicia com Marcelo para Rua dos Marcelos, 31.
UPDATE FUNCIONARIO SET endereco='Rua dos Marcelos, 31' WHERE nome_func like 'Marcelo%'

Você também pode gostar