Consultas SQL sobre Funcionários, Cargos e Departamentos

Classificado em Design e Engenharia

Escrito em em português com um tamanho de 4,38 KB

Exibir os nomes dos funcionários alocados em mais de 1 departamento: SELECT f.numero_func, nome_func, COUNT(*) AS qtde FROM func f, aloc a WHERE f.numero_func = a.numero_func GROUP BY f.numero_func, nome_func HAVING qtde > 1;

Exibir os nomes de todos os prestadores de serviço, informando também seus salários base e códigos dos cargos: SELECT nome_func, f.salario_base_func, f.codigo_carg FROM func f, carg c WHERE f.codigo_carg = c.codigo_carg AND tipo_contrato_carg IN ('R','S');

Exibir o nome e a data de admissão dos funcionários alocados no departamento FIN: SELECT nome_func, data_admissao_func FROM func f, aloc a WHERE f.numero_func = a.numero_func AND a.codigo_dpto = 'FIN';

Exibir o nome do gerente de cada departamento: SELECT nome_dpto, nome_func AS nome_gerente FROM dpto d LEFT JOIN func f ON d.numero_gerente = f.numero_func;

Exibir o nome dos departamentos que não possuem gerentes: SELECT nome_dpto FROM dpto WHERE numero_gerente IS NULL;

Listar a quantidade de funcionários por cargo exibindo o código do cargo, o nome do cargo: SELECT c.codigo_carg, nome_carg, COUNT(*) AS qtde FROM func f, carg c WHERE f.codigo_carg = c.codigo_carg GROUP BY c.codigo_carg, nome_carg;

Exibir a quantidade de funcionários de cada departamento: SELECT a.codigo_dpto, nome_dpto, COUNT(*) AS qtde FROM func f, aloc a, dpto d WHERE f.numero_func = a.numero_func AND d.codigo_dpto = a.codigo_dpto GROUP BY a.codigo_dpto, nome_dpto;

Selecionar os funcionários que se encontram abaixo do piso salarial de seu cargo: SELECT nome_func, f.salario_base_func, salario_piso_carg FROM func f, carg c WHERE f.codigo_carg = c.codigo_carg AND salario_base_func < salario_piso_carg;

Exercícios Complementares

1. Listar o código dos cargos dos funcionários do departamento de ‘TI’ que possuem mais de 10 funcionários cadastrados: SELECT CODIGO_CARG, COUNT(*) AS QTDE FROM FUNC F, ALOC A WHERE F.NUMERO_FUNC = A.NUMERO_FUNC AND CODIGO_DPTO = 'TI' GROUP BY CODIGO_CARG HAVING QTDE > 10;

2. Crie a tabela CARG: CREATE TABLE CARG (CODIGO_CARG CHAR(3) PRIMARY KEY, NOME_CARG CHAR(35), CLASSE_CARG CHAR(1), TIPO_CONTRATO_CARG CHAR(1), SALARIO_PISO_CARG DECIMAL(7,2), SALARIO_TETO_CARG DECIMAL(7,2), IND_COMISSAO_CARG CHAR(1));

3. Adicione a coluna SEXO_FUNC, alfanumérico de 1 posição, na tabela FUNC: ALTER TABLE FUNC ADD SEXO_FUNC CHAR(1);

4. Aplicar um aumento de 15% nos salários (piso e teto) de todos os cargos que exigem curso superior: UPDATE CARG SET SALARIO_PISO_CARG = SALARIO_PISO_CARG * 1.15, SALARIO_TETO_CARG = SALARIO_TETO_CARG * 1.15 WHERE CLASSE_CARG = 'G';

5. Listar os nomes dos cargos que não possuem nenhum funcionário cadastrado: SELECT NOME_CARG FROM CARG WHERE CODIGO_CARG NOT IN (SELECT DISTINCT CODIGO_CARG FROM FUNC);

6. Listar a média salarial de cada cargo (levando em conta o SALARIO_BASE_FUNC): SELECT CODIGO_CARG, AVG(SALARIO_BASE_FUNC) FROM FUNC GROUP BY CODIGO_CARG;

7. Inserir um novo cargo: código AS3, nome Analista de Negócios 3, exigência de Curso Superior, mensalista CLT não comissionado e com piso e teto salarial de R$ 2.500,00 e R$ 6.000,00 respectivamente: INSERT INTO CARG VALUES ('AS3','ANALISTA DE NEGOCIOS 3','G','M',2500,6000,'N');

8. Crie um índice único para o campo CPF da tabela FUNC: ALTER TABLE FUNC ADD UNIQUE (CPF_FUNC);

9. Listar, utilizando uma instrução SQL, o número e nome gerente do departamento de “RH” e todos os seus funcionários (número e nome também): SELECT NUMERO_GERENTE, NOME_FUNC AS NOME_GERENTE FROM FUNC F, DPTO D WHERE NUMERO_FUNC = NUMERO_GERENTE AND CODIGO_DPTO = 'RH' UNION SELECT NUMERO_FUNC, NOME_FUNC FROM FUNC F, ALOC A WHERE F.NUMERO_FUNC = A.NUMERO_FUNC AND CODIGO_DPTO = 'RH';

Entradas relacionadas: