Skip to content

Instantly share code, notes, and snippets.

@sebastianwebber
Last active May 16, 2017 18:23
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save sebastianwebber/ec691951c510c111ff59a6a6c7a9a379 to your computer and use it in GitHub Desktop.
Save sebastianwebber/ec691951c510c111ff59a6a6c7a9a379 to your computer and use it in GitHub Desktop.
Guia pra facilitar da vida de quem lê as suas consultas

Guia pra facilitar da vida de quem lê as suas consultas

Consulta original

SELECT e.ID_USUARIO, u.NOME_COMPLETO USUARIO, e.ID_USUARIO_SOLICITANTE , us.NOME_COMPLETO USUARIO_SOLICITANTE, e.DATA_EMPRESTIMO DATA_EMPRESTIMO, e.DATA_DEVOLUCAO DATA_DEVOLUCAO,
         e.STATUS STATUS, l.TITULO
         FROM emprestimo e
         INNER JOIN usuario u ON e.ID_USUARIO = u.ID
         INNER JOIN usuario us ON e.ID_USUARIO_SOLICITANTE = us.ID
         INNER JOIN livro l ON e.ID_LIVRO = l.ID
         WHERE e.id = 1 OR l.TITULO = 'LIVRO TESTE'
         ORDER BY e.DATA_EMPRESTIMO DESC;

Guia baby-steps

  1. remova os alias das tabelas:

    SELECT emprestimo.ID_USUARIO, usuario.NOME_COMPLETO USUARIO, emprestimo.ID_USUARIO_SOLICITANTE , usuario_solicitante.NOME_COMPLETO USUARIO_SOLICITANTE, emprestimo.DATA_EMPRESTIMO DATA_EMPRESTIMO, emprestimo.DATA_DEVOLUCAO DATA_DEVOLUCAO,
            emprestimo.STATUS STATUS, livro.TITULO
    FROM emprestimo
    INNER JOIN usuario ON emprestimo.ID_USUARIO = usuario.ID
    INNER JOIN usuario AS usuario_solicitante ON emprestimo.ID_USUARIO_SOLICITANTE = usuario_solicitante.ID
    INNER JOIN livro ON emprestimo.ID_LIVRO = livro.ID
    WHERE emprestimo.id = 1 OR livro.TITULO = 'LIVRO TESTE'
    ORDER BY emprestimo.DATA_EMPRESTIMO DESC;

    Importante: Quando for necessário, deixe ele o mais claro possível. Veja usuario_solicitante por exemplo.

  2. deixe uma linha por coluna:

    SELECT 
    emprestimo.ID_USUARIO, 
    usuario.NOME_COMPLETO USUARIO, 
    emprestimo.ID_USUARIO_SOLICITANTE , 
    usuario_solicitante.NOME_COMPLETO USUARIO_SOLICITANTE, 
    emprestimo.DATA_EMPRESTIMO DATA_EMPRESTIMO, 
    emprestimo.DATA_DEVOLUCAO DATA_DEVOLUCAO,
            emprestimo.STATUS STATUS, 
            livro.TITULO
    FROM emprestimo
    INNER JOIN usuario ON emprestimo.ID_USUARIO = usuario.ID
    INNER JOIN usuario AS usuario_solicitante ON emprestimo.ID_USUARIO_SOLICITANTE = usuario_solicitante.ID
    INNER JOIN livro ON emprestimo.ID_LIVRO = livro.ID
    WHERE emprestimo.id = 1 OR livro.TITULO = 'LIVRO TESTE'
    ORDER BY emprestimo.DATA_EMPRESTIMO DESC;
  3. Ajuste a identação:

    SELECT 
        emprestimo.ID_USUARIO, 
        usuario.NOME_COMPLETO USUARIO, 
        emprestimo.ID_USUARIO_SOLICITANTE , 
        usuario_solicitante.NOME_COMPLETO USUARIO_SOLICITANTE, 
        emprestimo.DATA_EMPRESTIMO DATA_EMPRESTIMO, 
        emprestimo.DATA_DEVOLUCAO DATA_DEVOLUCAO,
        emprestimo.STATUS STATUS, 
        livro.TITULO
    FROM emprestimo
        INNER JOIN usuario ON emprestimo.ID_USUARIO = usuario.ID
        INNER JOIN usuario AS usuario_solicitante ON emprestimo.ID_USUARIO_SOLICITANTE = usuario_solicitante.ID
        INNER JOIN livro ON emprestimo.ID_LIVRO = livro.ID
    WHERE emprestimo.id = 1 
       OR livro.TITULO = 'LIVRO TESTE'
    ORDER BY 
        emprestimo.DATA_EMPRESTIMO DESC;

    Com a identação, cada linha parece pertencer a um bloco. SELECT, FROM, WHERE, ORDER BY são os "identificadores".

  4. faça quebra de linha pros filtros do JOIN:

    SELECT 
        emprestimo.ID_USUARIO, 
        usuario.NOME_COMPLETO USUARIO, 
        emprestimo.ID_USUARIO_SOLICITANTE , 
        usuario_solicitante.NOME_COMPLETO USUARIO_SOLICITANTE, 
        emprestimo.DATA_EMPRESTIMO DATA_EMPRESTIMO, 
        emprestimo.DATA_DEVOLUCAO DATA_DEVOLUCAO,
        emprestimo.STATUS STATUS, 
        livro.TITULO
    FROM emprestimo
        INNER JOIN usuario 
            ON emprestimo.ID_USUARIO = usuario.ID
        INNER JOIN usuario AS usuario_solicitante 
            ON emprestimo.ID_USUARIO_SOLICITANTE = usuario_solicitante.ID
        INNER JOIN livro 
            ON emprestimo.ID_LIVRO = livro.ID
    WHERE emprestimo.id = 1 
       OR livro.TITULO = 'LIVRO TESTE'
    ORDER BY 
        emprestimo.DATA_EMPRESTIMO DESC;
  5. Use a expressão AS pra declarar os ALIAS realmente necessários:

    SELECT 
        emprestimo.ID_USUARIO, 
        usuario.NOME_COMPLETO AS USUARIO, 
        emprestimo.ID_USUARIO_SOLICITANTE , 
        usuario_solicitante.NOME_COMPLETO AS USUARIO_SOLICITANTE, 
        emprestimo.DATA_EMPRESTIMO, 
        emprestimo.STATUS, 
        emprestimo.DATA_DEVOLUCAO,
        livro.TITULO
    FROM emprestimo
        INNER JOIN usuario 
            ON emprestimo.ID_USUARIO = usuario.ID
        INNER JOIN usuario AS usuario_solicitante 
            ON emprestimo.ID_USUARIO_SOLICITANTE = usuario_solicitante.ID
        INNER JOIN livro 
            ON emprestimo.ID_LIVRO = livro.ID
    WHERE emprestimo.id = 1 
       OR livro.TITULO = 'LIVRO TESTE'
    ORDER BY 
        emprestimo.DATA_EMPRESTIMO DESC;
  6. Deixe as instruções SQL em letras maiusculas e resto em minuscula

    SELECT 
        emprestimo.id_usuario, 
        usuario.nome_completo AS usuario, 
        emprestimo.id_usuario_solicitante, 
        usuario_solicitante.nome_completo  AS usuario_solicitante, 
        emprestimo.data_emprestimo, 
        emprestimo.status, 
        emprestimo.data_devolucao,
        livro.titulo
    FROM emprestimo
        INNER JOIN usuario 
            ON emprestimo.id_usuario = usuario.id
        INNER JOIN usuario AS usuario_solicitante 
            ON emprestimo.id_usuario_solicitante = usuario_solicitante.id
        INNER JOIN livro 
            ON emprestimo.id_livro = livro.id
    WHERE emprestimo.id = 1 
       OR livro.titulo = 'LIVRO TESTE'
    ORDER BY 
        emprestimo.data_emprestimo DESC;
@fabriziomello
Copy link

Recomendo usar o pgFormatter do Darold: http://sqlformat.darold.net/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment