Tenho essas tables e preciso realizar essas querys nelas, sou iniciante e estou quebrando a cabeça e não consigo, alguem poderia me dar uma luz?
04/04/2020
0
-- Selecionar o funcionário (matrícula e nome do funcionário) que tem o maior número de dependentes;
-- Selecionar todos os funcionários (matrícula, nome do funcionário, data nascimento) que nasceram a partir de 2002, que tenha pelo menos um dependente e que não possui salário;
** sei que terei que usar o count e o max, porem não consegui entender como usar eles nesses exemplos =/
create table cidade(
codigo int4 not null,
nome varchar(40) not null,
estado bpchar(2) not null,
primary key (codigo)
);
create table funcionario(
matricula int4 not null,
nome varchar(50) not null,
rg varchar(50) not null,
datanascimento date not null,
cidade_nasc int4,
primary key(matricula),
foreign key(cidade_nasc) references cidade(codigo)
);
create table enderecofunc(
matricula int4 not null,
endereco varchar(50) not null,
numero int4 not null,
bairro varchar(50) not null,
cidade int4 not null,
cep varchar(10),
fone varchar(20),
celular varchar(40),
email varchar(50),
primary key(matricula),
foreign key(matricula) references funcionario(matricula),
foreign key(cidade) references cidade(codigo)
);
create table salario(
matricula int4 not null,
ano int4 not null,
mes int4 not null,
salario numeric(12,2) not null,
primary key(matricula, ano, mes),
foreign key(matricula) references funcionario(matricula)
);
create table dependentes(
matricula int4 not null,
codigo int4 not null,
nomedependente varchar(50) not null,
datanascimento date not null,
primary key(matricula, codigo),
foreign key(matricula) references funcionario(matricula)
);
Gabriel Neves
Post mais votado
06/04/2020
select top 1 -- dependendo do banco pode ser first 1, ou outro comando, daí a importância do que o Mário Reis postou fun.matricula, fun.nome from funcionario fun left join dependentes dep on dep.matricula = fun.matricula group by fun.matricula, fun.nome order by count(dep.codigo) desc
-- Selecionar todos os funcionários (matrícula, nome do funcionário, data nascimento) que nasceram a partir de 2002, que tenha pelo menos um dependente e que não possui salário;
select fun.matricula, fun.nome, fun.datanascimento from funcionario fun where fun.datanascimento >= '2002-01-01' and exists(select dep.matricula from dependentes dep where dep.matricula = fun.matricula) and not exists(select sal.matricula from salario sal where sal.matricula = fun.matricula)
Emerson Nascimento
Mais Posts
05/04/2020
Mário Reis
V. tem que dizer como liga as tabelas entre si.
Que base de dados está usando. Firebird e que versão?
Que ferramenta front-end usa para aceder e manipular directamente os dados?
E, em que linguagem V. está programando?
Sabem mais alguma coisa talvez te possa ajudar.
Abr.
06/04/2020
Gabriel Neves
V. tem que dizer como liga as tabelas entre si.
Que base de dados está usando. Firebird e que versão?
Que ferramenta front-end usa para aceder e manipular directamente os dados?
E, em que linguagem V. está programando?
Sabem mais alguma coisa talvez te possa ajudar.
Abr.
Olá Márcio Reis, desculpa a falta de informações, estou utilizando o PostgreSQL. Estou fazendo as buscas diretamente pelo Script do Dbeaver...
07/04/2020
Gabriel Neves
select top 1 -- dependendo do banco pode ser first 1, ou outro comando, daí a importância do que o Mário Reis postou fun.matricula, fun.nome from funcionario fun left join dependentes dep on dep.matricula = fun.matricula group by fun.matricula, fun.nome order by count(dep.codigo) desc
-- Selecionar todos os funcionários (matrícula, nome do funcionário, data nascimento) que nasceram a partir de 2002, que tenha pelo menos um dependente e que não possui salário;
select fun.matricula, fun.nome, fun.datanascimento from funcionario fun where fun.datanascimento >= ''2002-01-01'' and exists(select dep.matricula from dependentes dep where dep.matricula = fun.matricula) and not exists(select sal.matricula from salario sal where sal.matricula = fun.matricula)
Muito obrigado acabei quebrando a cabeça aqui e realizando as mesmas querys mas com outros métodos.
Porem foi muito bom poder ter noção de quanto mais pratico poderia ter ficado, novamente muito obrigado!
-- f) Selecione o funcionário (matrícula e nome do funcionário) que tem o maior número de dependentes; select funcionario.matricula, funcionario.nome, count(dependentes.matricula) as qtd_dependentes from dependentes right join funcionario on funcionario.matricula = dependentes.matricula group by funcionario.matricula, funcionario.nome having count(dependentes.matricula)=(select max(A.CNT) from (Select count(dependentes.matricula) as CNT from dependentes group by (dependentes.matricula)) as A); -- g) Selecione todos os funcionários (matrícula, nome do funcionário, data nascimento) que nasceram a partir de 2002, que tenha pelo menos um dependente e que não possui salário; select funcionario.matricula, funcionario.nome, funcionario.datanascimento from dependentes left join funcionario on funcionario.matricula = dependentes.matricula left join salario on salario.matricula = dependentes.matricula group by funcionario.matricula, funcionario.nome, salario.salario having count(dependentes.matricula) >= 1 and funcionario.datanascimento > ''20020101'' and count(salario.salario) = 0;
Clique aqui para fazer login e interagir na Comunidade :)