Questão de Banco de Dados — PostgreSQL — PROGEP FURG 2017
- Código
- qg947288
- Banca
- PROGEP FURG
- Órgão
- FURG
- Ano
- 2017
- Cargo
- PROGEP - - Tec ( )
A sequência de queries SQL abaixo cria a estrutura base de um banco de dados PostgreSQL que será utilizada na questão.
CREATE SCHEMA clube;
CREATE TABLE clube.socio (
id SERIAL,
primeiro_nome VARCHAR(40) NOT NULL,
sobrenome VARCHAR(200) NOT NULL,
endereco VARCHAR(200) NOT NULL,
telefone VARCHAR(20) NOT NULL,
recomendado_por INTEGER,
data_cadastro TIMESTAMP WITHOUT TIME ZONE NOT NULL,
CONSTRAINT socio_data_cadastro_key UNIQUE(data_cadastro),
CONSTRAINT socio_pkey PRIMARY KEY(id)
) WITH (oids = false);
CREATE TABLE clube.instalacao (
id SERIAL,
nome VARCHAR(200) NOT NULL,
custo_por_socio NUMERIC(10,2),
custo_por_convidado NUMERIC(10,2),
custo_inicial NUMERIC(10,2),
CONSTRAINT instalacao_pkey PRIMARY KEY(id)
) WITH (oids = false);
CREATE TABLE clube.agendamento (
id SERIAL,
id_socio INTEGER NOT NULL,
id_instalacao INTEGER NOT NULL,
inicio TIMESTAMP WITHOUT TIME ZONE NOT NULL,
fim TIMESTAMP WITHOUT TIME ZONE,
CONSTRAINT agendamento_pkey PRIMARY KEY(id),
CONSTRAINT agendamento_fk FOREIGN KEY (id_socio)
REFERENCES clube.socio(id)
ON DELETE RESTRICT ON UPDATE CASCADE
NOT DEFERRABLE,
CONSTRAINT agendamento_fk1 FOREIGN KEY (id_instalacao)
REFERENCES clube.instalacao(id)
ON DELETE RESTRICT ON UPDATE CASCADE
NOT DEFERRABLE
) WITH (oids = false);
Qual das queries SQL abaixo busca corretamente todos os campos dos agendamentos futuros, mostrando também o telefone de quem recomendou o sócio que agendou a instalação, quando existente?
- ASELECT agendamento.*, socio_pai.telefone FROM clube.agendamento INNER JOIN clube.socio ON socio.id = agendamento.id_socio LEFT JOIN clube.socio AS socio_pai ON socio_pai.id = socio.recomendado_por WHERE NOW() < inicio;
- BSELECT * FROM clube.agendamento LEFT JOIN clube.socio ON socio.id = agendamento.id_socio LEFT JOIN clube.socio AS socio_pai ON socio_pai.id = socio.recomendado_por WHERE NOW() BETWEEN inicio AND fim;
- CSELECT agendamento.*, socio_pai.telefone FROM clube.agendamento INNER JOIN clube.socio ON socio.id = agendamento.id_socio INNER JOIN clube.socio AS socio_pai ON socio_pai.id = socio.recomendado_por WHERE NOW() > fim;
- DSELECT agendamento.*, socio.telefone FROM clube.agendamento INNER JOIN clube.socio ON socio.id = agendamento.id_socio WHERE NOW() > fim;
- ESELECT agendamento.*, socio.telefone FROM clube.agendamento LEFT JOIN clube.socio ON socio.id = agendamento.id_socio WHERE NOW() < inicio;