Série Infra One Kindle

SQL One

Perguntas certas para bancos de verdade

SQL do zero, dentro de uma rede de 48 farmácias do interior de Minas: uma planilha de 1,2 milhão de linhas que ninguém consegue abrir, um faturamento que dobrou por causa de uma junção, lotes vencidos escondidos por um NULL, um UPDATE sem WHERE e uma reunião com o banco marcada para 15 de março. Consultas, junções, agregações, janelas, modelagem, transações, índices, planos de execução e segurança — tudo rodado no PostgreSQL, com o mesmo conjunto de consultas comparado no MySQL, no SQLite, no SQL Server e no Oracle.

R$ 12,90 R$ 24,00 Promoção

Atenção: o idioma desta edição é português.

36capítulos
7partes
1projeto do início ao fim
Capa de SQL One: Perguntas certas para bancos de verdade, de Thiago Nogueira Edição Brasil
SQLPostgreSQLMySQLSQLiteSQL ServerOracle
código do livro

Menos teoria vazia.
Mais código que funciona.

Nada de exemplo solto com foo e bar. Todo trecho pertence ao mesmo projeto, que cresce capítulo a capítulo — e os erros aparecem como aparecem na sua tela, para serem lidos linha por linha.

lotes.sql
SELECT nome, validade, quantidadeFROM lotesWHERE validade < CURRENT_DATEORDER BY validade;
terminal
psql -d santa_rita -c "SELECT count(*) FROM lotes;"  count
-------
  18421
o projeto

Um sistema só, do primeiro arquivo ao deploy

README.md

Os números da Drogarias Santa Rita para a reunião com o banco.

Perguntas certas para bancos de verdade.

  • Um projeto só: os números da Drogarias Santa Rita para a reunião com o banco
  • Toda consulta rodada no PostgreSQL, com a saída conferida
  • Diagramas, planos de execução e os erros que custam dinheiro
  • PostgreSQL e MySQL lado a lado, mais SQLite, SQL Server e Oracle
  • Sem atalho: NULL, junções, janelas, transações e índices do jeito que a produção usa
leitura de amostra

Leia uma prévia gratuita de SQL One

Esta amostra contém os primeiros capítulos. O PDF completo continua protegido para compradores.

Abrir prévia em nova aba →
sumário

36 capítulos em 7 partes

Abra uma parte para ver os capítulos — e a frase que abre cada um.

parte 01 A planilha de 1,2 milhão de linhasQuarenta e oito farmácias, uma planilha que trava o Excel e um banco que alguém montou em 2011 para tirar relatório. 3 cap.
  1. 01
    A planilha de 1,2 milhão de linhasUma margem de 31% que ninguém consegue refazer, um arquivo que trava o Excel de quem abre, e um homem que diz que a resposta está numa tabela de três linhas.
  2. 02
    Uma linguagem de 1974Um matemático da IBM que achava que ninguém deveria precisar saber onde os dados ficam, dois pesquisadores que queriam uma linguagem que um contador conseguisse ler, e um nome que teve de mudar porque já era de uma fábrica de aviões.
  3. 03
    Montando a bancadaUm servidor de banco de dados no seu computador em dez minutos, dois scripts para criar a Santa Rita, e os seis comandos do psql que você vai usar todo dia.
parte 02 Perguntar a uma tabelaSelecionar, filtrar, ordenar, calcular e agrupar — e o NULL, que não é zero, nem vazio, nem falso. 8 cap.
  1. 04
    SELECT e FROMUma coluna chamada ?column?, uma loja de 260 m² que perde dois metros quadrados numa divisão, uma ficha que some por completo por causa de um campo vazio e as quatro formas de pagamento que a farmácia aceita.
  2. 05
    WHEREA Dra. Lúcia quer os lotes vencidos da loja do Centro, e recebe um da loja do Bom Pastor de brinde; o relatório da primeira semana de dezembro perde o dia 7 todo; e um cliente de Itaúna some porque a cidade foi digitada com letra minúscula.
  3. 06
    NULL, o valor que não é valorUma campanha para todos os clientes que não são do programa ouro que não chega a três deles, uma consulta que procura o vazio com um sinal de igual e não acha nada, e a lógica de três valores que explica as duas coisas.
  4. 07
    Ordenar e limitarO ranking das maiores lojas da rede começa pela única que não tem metragem, o top 3 de produtos sai diferente a cada execução, e a segunda página do relatório repete um cliente da primeira.
  5. 08
    Funções de linhaO jurídico quer o CPF escondido nos relatórios, a política de preços quer tudo terminado em noventa centavos e baixa o preço de um serviço sem querer, e um CPF guardado como número perde o zero da frente.
  6. 09
    Datas e horasQuantos dias faltam para cada lote vencer, uma receita que vale trinta dias e não um mês, um relatório em ordem de data que põe 2028 antes de 2025, e um painel que mostra vendas às onze da noite numa loja que fecha às nove.
  7. 10
    AgruparO desconto médio dos clientes é 5,2% ou 3,25%, dependendo de quem conta como cliente; o faturamento de dezembro cabe numa linha; e o PostgreSQL se recusa a mostrar uma forma de pagamento que ele não saberia qual escolher.
  8. 11
    Do resumo ao relatórioVendas por semana numa semana que começou em novembro, um quadro com as lojas nas linhas e as formas de pagamento nas colunas, um zero que não existia em lugar nenhum e uma linha de total que o GROUP BY sozinho não dá.
parte 03 Juntar tabelasChaves, junções que acham, junções que perdem, junções que multiplicam, subconsultas e funções de janela. 8 cap.
  1. 12
    ChavesUma loja nova que o banco recusa porque o número já tem dono, uma venda numa loja que não existe, um CPF que não serve para identificar ninguém e a primeira vez que a Bruna segue um fio de uma tabela até outra — à mão.
  2. 13
    JOINQuinze vendas que ganham o nome da loja, uma coluna chamada id que o banco não sabe de qual tabela é, o faturamento em reais que a Cláudia pediu numa consulta só, e quatro cupons que somem quando entram os clientes.
  3. 14
    As linhas que faltamQuatro cupons que voltam com o cliente em branco, uma loja que vendeu zero em débito e aparece com um, a mesma condição que dá três linhas no ON e duas no WHERE, um pacote de fraldas que nunca foi vendido e três caixas de dipirona que não deviam ter saído.
  4. 15
    O faturamento que dobrouUm relatório de 2019 que vende o dobro de losartana que a farmácia vendeu, um serviço que some do faturamento por categoria, uma tabela juntada com ela mesma para achar o chefe e trinta combinações de loja e produto, das quais nove nunca aconteceram.
  5. 16
    SubconsultasUma consulta dentro da outra para achar os produtos acima da média, a fatia de cada loja no faturamento, a última compra de cada cliente e um relatório de lotes parados que responde nenhum — porque, no meio de uma lista de doze números, havia um NULL.
  6. 17
    ConjuntosAs cidades em que a Santa Rita está presente, contadas uma vez e contadas quinze; os produtos que o Centro e o Bom Pastor vendem em comum, e os que só o Centro vende; e um ORDER BY que o banco recusa porque não sabe a que consulta ele pertence.
  7. 18
    WITHUma consulta de quarenta linhas que vira três consultas com nome, os cupons acima do ticket médio calculados sem repetir a conta, uma árvore de categorias percorrida até as folhas e o organograma da Santa Rita montado por uma consulta que chama a si mesma.
  8. 19
    Funções de janelaCada cupom ao lado do total da sua loja sem perder nenhuma linha, um empate de 90,72 que a numeração resolve no cara ou coroa, o maior cupom de cada loja, os dias entre uma compra e outra e a curva do faturamento de dezembro somada dia a dia.
parte 04 ModelarDo balcão da farmácia ao diagrama, dos tipos às restrições, e o esquema que muda sem fechar a loja. 5 cap.
  1. 20
    Do balcão ao diagramaUma tabela de 214 colunas que é, na verdade, seis tabelas; uma loja que fica em duas cidades; um laboratório escrito de dois jeitos; e o desenho, feito com consultas, do banco que a Rede Bem-Estar nunca teve.
  2. 21
    Tipos de dadosDez moedas de dez centavos que somam 0,9999999999999999, um contador que estoura no número 2.147.483.648, uma cidade que perde o fim do nome sem ninguém avisar e o 1º de dezembro que vira 12 de janeiro porque o servidor lê datas como um americano.
  3. 22
    NormalizaçãoUma loja que muda de cidade em três linhas e esquece uma, um laboratório que desaparece do cadastro quando dois cupons são cancelados, uma loja nova que não pode ser cadastrada antes de vender alguma coisa — e as seis tabelas que tornam os três erros impossíveis.
  4. 23
    RestriçõesMenos duas caixas de dipirona vendidas e aceitas, uma regra que não pode nascer enquanto houver uma linha que a desobedece, um laboratório cadastrado duas vezes por causa das maiúsculas e um cupom cancelado que leva os itens junto.
  5. 24
    O esquema mudaUma coluna nova que não pode ser obrigatória numa tabela que já tem linhas, um nome trocado que derruba o painel do Diego num sábado, uma tabela que o banco se recusa a apagar e outra que volta depois de apagada — e o caderno de mudanças que impede a mesma alteração de ser feita duas vezes.
parte 05 Mudar os dadosInserir, alterar, apagar, e fazer tudo isso sem que a madrugada das três horas trave. 4 cap.
  1. 25
    INSERT, UPDATE, DELETEUm produto novo que diz o próprio número de volta, um reajuste de 4,5% que mostra o preço de antes e o de depois, o sábado de 2019 em que 3.104 produtos passaram a custar zero real e a baixa dos lotes vencidos, apagada com uma junção.
  2. 26
    TransaçõesCinco caixas de dipirona que aparecem em Itaúna sem ter saído do Centro, uma transferência que para no meio e não deixa rastro, um COMMIT que responde ROLLBACK e dois terminais olhando a mesma linha ao mesmo tempo.
  3. 27
    A madrugada das 3hUma soma que muda no meio da mesma transação, uma fotografia do estoque que não muda nem quando o estoque muda, um pedido automático que grava um número velho, e o deadlock que derrubava o job das três da manhã duas vezes por semana.
  4. 28
    CargasUm arquivo de sete linhas que o banco recusa por completo por causa da palavra dois, uma loja BE-04 que não existe, um cupom que chega pela segunda vez, um preço que entra ou atualiza conforme já exista e uma tabela de preços sincronizada num comando só.
parte 06 Desempenho e operaçãoÍndices, planos de execução, visões, gatilhos, permissões e o backup que ninguém tinha testado. 5 cap.
  1. 29
    ÍndicesTrezentas mil vendas lidas para achar seis, um índice que transforma catorze milissegundos em menos de um, uma função em volta da coluna que faz o banco ignorar o índice, uma pergunta larga demais para ele valer a pena e o preço que todo índice cobra a cada INSERT.
  2. 30
    Ler um planoUm banco que acha que vai encontrar uma linha e encontra cem mil, três jeitos diferentes de juntar as mesmas duas tabelas, um ranking que ordena trezentas mil vendas para mostrar cinco e o roteiro de cinco perguntas que a Bruna colou no monitor.
  3. 31
    Visões, funções e gatilhosCinco pessoas que calculavam o faturamento de cinco jeitos e passam a ler a mesma visão, um resumo que fica velho até alguém mandar atualizar, a margem que vira uma função, o preço que deixa rastro quando muda e a regra da Dra. Lúcia que não cabia num CHECK.
  4. 32
    Quem pode ver o quêUma planilha de receitas de controlados com o CPF de cada cliente, mandada por e-mail para o financeiro todo; um usuário que pode ler as vendas e não pode apagá-las; uma gerente que só enxerga a própria loja; e a busca por cidade que devolve todos os clientes quando alguém digita uma aspa.
  5. 33
    BackupA foto do UPDATE 3104 de 2019 e as três horas de vendas que se perderam para consertá-lo; uma cópia do banco num arquivo; a mesma cópia devolvida num banco de ensaio; os preços de ontem trazidos de volta sem perder as vendas de hoje; e o backup que só vale depois do primeiro ensaio.
parte 07 Os bancos que você vai encontrarPostgreSQL, MySQL, SQLite, SQL Server e Oracle — e a reunião de 15 de março. 3 cap.
  1. 34
    PostgreSQL e MySQLUma chave estrangeira que o MySQL aceita e ignora, uma cidade digitada sem acento que ele encontra assim mesmo, um operador || que vira zero, uma divisão de inteiros com quatro casas, um ROLLBACK que não desfaz o CREATE TABLE — e as mesmas consultas da Santa Rita, rodadas nos dois bancos.
  2. 35
    SQLite, SQL Server e OracleUm banco completo dentro de um arquivo, que aceita a loja de metragem 'a combinar' e uma venda numa loja que não existe; uma soma de preços que não é igual a ela mesma; e a mesma consulta da Santa Rita escrita nos dialetos dos dois bancos comerciais que a Bem-Estar e o banco do financiamento usam.
  3. 36
    Quinze de marçoO estoque lote por lote, com o que venceu e o que vai vencer; a margem de cada loja, com a conta que dá para refazer; uma consulta que confere a si mesma; e a reunião em que o analista do banco pede para rodar os números ali, na frente de todo mundo.
avaliações verificadas

O que leitores dizem sobre SQL One

Carregando avaliações deste livro…

Ver todas as avaliações deste livro →
git commit -m "primeiro capítulo"

SQL One

Perguntas certas para bancos de verdade. O projeto começa a rodar no primeiro capítulo — e não para mais.

Atenção: o idioma desta edição é português.