Soluções da Delegacia SQL

Inquérito 002, "O vidro da São Roque": solução passo a passo

O boletim

Às duas e quarenta da madrugada de quarta-feira alguém quebrou o vidro da porta da Farmácia São Roque, no Centro, com uma pedra do canteiro da praça. A porta não foi aberta: o buraco tem um palmo e meio e dá no balcão da frente.

Hermínio Lugão, farmacêutico e dono, conferiu a farmácia inteira com a Lidiane, a balconista, e levou duas horas. O caixa estava fechado com sessenta reais dentro, e os sessenta reais estavam lá. Não faltava perfume, não faltava fralda, não faltava leite em pó — e o leite em pó é o que sempre some.

Faltava uma cartela de captopril de 25 miligramas, remédio de pressão. Uma. Quatro reais.

Ocorrência 213, categoria dano.

O doutor quer o nome de quem quebrou o vidro, e quer até sexta, porque o farmacêutico é primo do vereador. Seu Jaime quer outra coisa: quer saber por que alguém arrisca cadeia por quatro reais. Quatro nomes deram depoimento no balcão.

O que o caso ensina: WHERE.

Pergunta 1

O estrago primeiro. Traga do livro de prejuízos, a tabela `prejuizo`, o que a ocorrência 213 custou, item por item.

Ver as dicas do jogo
  1. O livro de prejuízos da delegacia é a tabela `prejuizo`: cada folha é um item que uma ocorrência custou. Traga o `item` e o `valor` das folhas da ocorrência 213.
  2. A condição é sobre a coluna `ocorrencia_id`, que diz a que ocorrência cada folha pertence. Número vai sem aspas.
  3. Escreva: `SELECT item, valor FROM prejuizo WHERE ocorrencia_id = 213;`
Ver a consulta que resolve
SELECT item, valor FROM prejuizo WHERE ocorrencia_id = 213;

WHERE não serve só para achar uma linha pelo id: a condição pode ser sobre qualquer coluna da tabela.

Resultado

item valor
vidro da porta 180
uma cartela de captopril 25mg 4

Pergunta 2

Agora o livro de prejuízos inteiro, e não só a 213: traga todo prejuízo que custou menos de dez reais.

Ver as dicas do jogo
  1. Traga da tabela `prejuizo` o `ocorrencia_id`, o `item` e o `valor` de toda folha com `valor` menor que 10.
  2. Menor se escreve com o sinal `<`, e número vai sem aspas.
  3. Escreva: `SELECT ocorrencia_id, item, valor FROM prejuizo WHERE valor < 10;`
Ver a consulta que resolve
SELECT ocorrencia_id, item, valor FROM prejuizo WHERE valor < 10;

A condição também compara: o sinal de menor deixa passar o que é menor que o número, e o de maior faz o contrário.

Resultado

ocorrencia_id item valor
84 uma lata de tinta de 900 ml para cobrir a pichação 9
168 um cadeado arrebentado do portão dos fundos 8
213 uma cartela de captopril 25mg 4

Pergunta 3

Traga tudo o que o arquivo registrou na Farmácia São Roque, desde a primeira folha. O arquivo conhece a farmácia como o lugar número 4.

Ver as dicas do jogo
  1. A Farmácia São Roque é o `local_id` 4 do arquivo. Traga da tabela `ocorrencia` o `id`, a `data`, a `hora`, a `categoria` e o `resumo` de tudo o que aconteceu lá.
  2. É uma condição de igual sobre a coluna `local_id`, com o número sem aspas.
  3. Escreva: `SELECT id, data, hora, categoria, resumo FROM ocorrencia WHERE local_id = 4;`
Ver a consulta que resolve
SELECT id, data, hora, categoria, resumo FROM ocorrencia WHERE local_id = 4;

Um número numa coluna costuma apontar para outra tabela: `local_id` 4 é a linha de `id` 4 da tabela `local`.

Resultado

id data hora categoria resumo
52 2001-02-20 11:20 furto Furto de frascos de perfume da prateleira da frente da Farmácia São Roque
118 2001-12-11 16:40 furto Furto de uma lata de leite em pó do balcão da Farmácia São Roque
160 2002-07-05 15:10 perturbacao Cliente alterado no balcão da Farmácia São Roque por causa de preço
195 2002-12-19 20:40 outros Pessoa passou mal na calçada da Farmácia São Roque e foi socorrida
203 2003-01-28 10:05 perturbacao Discussão no balcão da Farmácia São Roque: cliente exige remédio sem receita
213 2003-03-19 02:40 dano Vidro da porta da Farmácia São Roque quebrado durante a madrugada

Pergunta 4

Traga do fichário todo mundo que mora na Estrada do Café, o bairro que o arquivo numera como 7.

Ver as dicas do jogo
  1. Traga da tabela `pessoa` o `id`, o `nome`, o `apelido`, o `nascimento`, a `ocupacao`, o `bairro_id` e o `telefone` de todo morador do `bairro_id` 7, a Estrada do Café.
  2. É uma condição de igual sobre a coluna `bairro_id`. Sai mais de uma linha, e é para sair.
  3. Escreva: `SELECT id, nome, apelido, nascimento, ocupacao, bairro_id, telefone FROM pessoa WHERE bairro_id = 7;`
Ver a consulta que resolve
SELECT id, nome, apelido, nascimento, ocupacao, bairro_id, telefone FROM pessoa WHERE bairro_id = 7;

WHERE não existe para sobrar uma linha só: passa toda linha em que a condição é verdadeira, sejam onze ou seja uma.

Resultado

id nome apelido nascimento ocupacao bairro_id telefone
19 Genésio Quirino da Mata Seu Genésio 1942-03-07 lavrador aposentado 7 3452-5028
20 Doralice Quirino da Mata Dona Dora 1944-08-26 do lar, hipertensa 7 3452-5029
24 Osmar Trentini 1951-11-21 dono do Posto Trentini 7 3452-5041
26 Joel Bontempo 1959-04-04 frentista do Posto Trentini 7 3452-5066
34 Elias Vasques Lió 1965-10-10 caseiro da Cooperativa 7 3452-5133
49 Ubirajara Sartori Zeca 1959-02-01 marceneiro 7 3452-9147
77 Divina Galvão Tita 1962-03-04 secretária 7 3452-1367
94 Milton Fiorini Nenê 1942-03-13 sapateiro 7 3452-2484
96 Percival Sartori 1942-04-02 pescador 7 3452-2876
98 Adelaide Panegassi 1984-09-09 telefonista 7 3452-9703
104 Benedito Venturini 1966-01-13 aposentado 7 3452-7893

Pergunta 5, a que o caso puxa no meio do caminho

A papelada do mês, que o Seu Jaime não confere desde que quebrou os óculos: traga tudo o que o arquivo registrou depois de 11 de março de 2003.

Ver as dicas do jogo
  1. Traga da tabela `ocorrencia` o `id`, a `data`, a `categoria` e o `resumo` de tudo o que o arquivo registrou depois de 11 de março de 2003.
  2. Data se compara como texto, entre aspas simples e escrita ano-mês-dia: depois de um dia é o sinal de maior, `>`.
  3. Escreva: `SELECT id, data, categoria, resumo FROM ocorrencia WHERE data > '2003-03-11';`
Ver a consulta que resolve
SELECT id, data, categoria, resumo FROM ocorrencia WHERE data > '2003-03-11';

Data escrita em ano-mês-dia se compara como texto e dá certo: o dia que veio depois é sempre o maior dos dois.

Resultado

id data categoria resumo
211 2003-03-12 furto Bicicleta de uso do carteiro subtraída da frente da padaria
213 2003-03-19 dano Vidro da porta da Farmácia São Roque quebrado durante a madrugada
214 2003-03-20 perturbacao Discussão entre vendedores ambulantes na praça

Pergunta 6

Traga todo depoimento colhido nesta delegacia de 1º de janeiro de 2003 para cá.

Ver as dicas do jogo
  1. A tabela `depoimento` guarda o que cada pessoa disse, em que ocorrência e quando. Traga o `id`, o `ocorrencia_id`, o `pessoa_id`, o `momento` e o `texto` de todo depoimento colhido de 1º de janeiro de 2003 para cá.
  2. A data mora na coluna `momento`, junto com a hora. Mesmo assim ela se compara como texto: maior que '2003-01-01', entre aspas.
  3. Escreva: `SELECT id, ocorrencia_id, pessoa_id, momento, texto FROM depoimento WHERE momento > '2003-01-01';`
Ver a consulta que resolve
SELECT id, ocorrencia_id, pessoa_id, momento, texto FROM depoimento WHERE momento > '2003-01-01';

Data escrita em ano-mês-dia se compara como texto e dá certo: o que veio depois é sempre o maior. O `momento` tem a hora junto, e a comparação continua valendo.

Resultado

id ocorrencia_id pessoa_id momento texto
143 203 14 2003-01-28 11:30 eu estava no fundo aviando outra receita e ouvi da porta. O homem pedia um remédio de pressão com uma receita vencida e a moça do balcão explicou que não podia vender. Ele levantou a voz, mas não houve agressão e eu não quero representar contra ele.
144 203 19 2003-01-28 12:05 eu não gritei com ninguém, eu falei alto porque estava nervoso. A receita é a mesma há dois anos e o remédio é o mesmo, e eu moro a quatro quilômetros daqui.
145 203 11 2003-01-28 12:40 ele disse que a mulher ia ficar sem o remédio e eu disse que não podia, e ele foi embora sem falar nada.
146 206 41 2003-02-12 17:38 deixei tudo trancado quando saí e quando voltei estava aberto, foi isso que eu vi e é o que eu posso garantir.
147 209 92 2003-03-01 14:25 isso se repete todo fim de semana e ninguém dorme, não sei dizer mais nada sobre isso.
148 209 117 2003-03-02 10:53 eu liguei porque já passava das duas da manhã, não reconheço ninguém e não quero acusar ninguém.
149 209 69 2003-03-02 14:04 eu pedi para abaixar o som e a resposta não foi das melhores, e é só o que eu tenho a declarar.
150 210 110 2003-03-10 10:12 não é a primeira vez que acontece nesta rua e ninguém vê nada, não sei dizer mais nada sobre isso.
151 210 131 2003-03-10 18:15 ouvi o barulho e quando cheguei na rua não tinha mais ninguém, foi isso que eu vi e é o que eu posso garantir.

Quem foi

Ver o culpado e a prova

O culpado é Genésio Quirino da Mata.

As provas que fecham o caso:

  • O depoimento 144 é do Seu Genésio, na ocorrência 203, e a 203 é a discussão no balcão da Farmácia São Roque, em 28 de janeiro.

Seu Genésio veio a pé, de chapéu na mão, e sentou na cadeira antes de mandarem. Disse que tinha sido ele, que ia pagar o vidro em três vezes e que já tinha falado com o Hermínio antes de vir. Não pediu desculpa por ter quebrado; pediu desculpa por ter sujado o chão de vidro, porque quem varreu foi a menina.

O farmacêutico não quis representar. Disse que a receita vencida era regra dele, não da lei, e que ia rever a regra.

Dona Sirlei fez o termo, ofereceu café ao Seu Genésio e perguntou pela Dona Doralice pelo nome. Ela pergunta por todo mundo pelo nome.

Seu Jaime não disse nada enquanto ele falava. Depois que ele saiu, disse que o homem tinha ido buscar o remédio da mulher do jeito que sabia.

Antes de bater o carimbo, Seu Jaime passou o dedo na tela e parou no lugar onde devia estar o número 212. Ficou ali um tempo. Depois disse que era erro de digitação e mandou fechar.