Voltar para a lista de artigos Artigos
8 minutos de leitura

Erros SQL: Cinco Erros SQL Comuns

Ao aprender SQL, cuidado com estes erros de codificação comuns

Você escreveu algum código SQL e está pronto para consultar seu banco de dados. Você inseriu o código e .... nenhum dado é retornado. Ao invés disso, você recebe uma mensagem de erro.

Não se desespere! Os erros de codificação são comuns em qualquer linguagem de programação, e SQL não é exceção. Neste artigo, vamos discutir cinco erros comuns que as pessoas cometem ao escrever SQL.

A melhor maneira de evitar erros em SQL é a prática. LearnSQL.com.br oferece mais de 30 cursos interativos de SQL. Experimente nosso Trilha de Práticas em SQL pista com 5 cursos e mais de 600 exercícios práticos.

Cuidado com sua linguagem (e sintaxe)

O erro SQL mais comum é um erro de sintaxe. O que significa sintaxe? Basicamente, significa uma disposição definida de palavras e comandos. Se você usar uma sintaxe inadequada, o banco de dados não sabe o que você está tentando dizer.

Para entender como a sintaxe funciona, podemos pensar em uma linguagem falada. Imagine dizer a uma pessoa "Nice dof" quando você quer dizer "Nice dog". A pessoa não sabe o que significa "dof". Então, quando você diz ao seu banco de dados para encontrar uma TABELA em vez de uma TABELA, o banco de dados não sabe o que precisa fazer.

As pessoas tendem a cometer os mesmos tipos de erros de sintaxe, portanto, seus erros são geralmente fáceis de detectar e muito parecidos. Depois de ler este artigo, você deve ser capaz de lembrar e evitar (ou corrigir) estes erros comuns. Saber quais erros procurar é muito importante para os codificadores SQL novatos, especialmente no início. Os novos codificadores tendem a cometer mais erros e passar mais tempo procurando por eles.

Os tipos de erros SQL que vamos analisar são:

  1. Comandos de erro ortográfico
  2. Esquecimento de Suportes e Citações
  3. Especificação de uma ordem de declaração inválida
  4. Omitindo aliases da tabela
  5. Usando Nomes Sensíveis a Casos

Pronto? Vamos começar.

Erros SQL:

1. Comandos de erro ortográfico

Este é o tipo mais comum de erro SQL entre desenvolvedores iniciantes e experientes. Vamos ver o que parece. Examine a simples declaração SELECT abaixo e veja se você pode detectar um problema:

SELECT *
FORM dish
WHERE NAME = 'Prawn Salad';

Se você executar esta consulta, você receberá um erro que declara:

Syntax error in SQL statement "SELECT * FORM[*] dish WHERE NAME = 'Prawn Salad';"; 
SQL statement: SELECT * FORM dish WHERE NAME = 'Prawn Salad'; [42000-176]

Cada versão do banco de dados lhe dirá a palavra ou frase exata que não entende, embora a mensagem de erro possa ser ligeiramente diferente.

O que está errado aqui? Você escreveu errado como FORMULÁRIO. Os erros de ortografia são normalmente encontrados em palavras-chave (como SELECT, FROM, e WHERE), ou em nomes de tabelas e colunas.

Os erros ortográficos SQL mais comuns são devidos a:

  • "Dedos rechonchudos" onde se bate uma letra perto da direita: SELEVT ou FTOM ou WJIRE
  • "Reckless typing" onde você digita as letras certas na ordem errada: SELETC ou FORMULÁRIO ou WHEER

Solução:

Usar um editor SQL que tenha destaque de sintaxe: as palavras-chave SELECT e WHERE serão destacadas, mas o FORMULÁRIO mal soletrado não será destacado.

Se você estiver aprendendo com cursos SQL interativos em LearnSQL.com.br o editor de código coloca cada palavra-chave de declaração SELECT em púrpura clara. Se a palavra-chave for preta, como acontece com qualquer outro argumento, você sabe que há um problema. (Em nosso exemplo, FORMULÁRIO é preto).

Portanto, se corrigimos nossa declaração, obtemos:

SELECT *
FROM dish
WHERE NAME = 'Prawn Salad'

A palavra-chave é agora a cor certa e a declaração é executada sem erro.

2. Esquecimento de parênteses e aspas

Os suportes agrupam as operações e orientam a ordem de execução. Em SQL (e em todas as linguagens de programação que utilizo), a seguinte ordem de operações ...

SELECT *
FROM artist
WHERE first_name = 'Vincent' and last_name = 'Monet' or last_name = 'Da Vinci';

... não é o mesmo que:

SELECT *
FROM artist
WHERE first_name = 'Vincent' and (last_name = 'Monet' or last_name = 'Da Vinci');

Você consegue descobrir por quê?

Um erro SQL muito comum é esquecer o colchete de fechamento. Portanto, se olharmos para esta afirmação equivocada :

SELECT *
FROM artist
WHERE first_name = 'Vincent' and (last_name = 'Monet' or last_name = 'Da Vinci';

obtemos um código de erro com a posição do erro (o 102º caractere desde o início):

ERROR: syntax error at or near ";" Position: 102

Lembre-se: os parênteses sempre vêm em pares.

O mesmo acontece com aspas simples ( ' ' ) ou aspas duplas ( " " ). Não há nenhuma situação em SQL onde encontraríamos uma cotação (seja uma cotação simples ou uma cotação dupla) sem sua companheira. Valores de texto de coluna podem conter uma citação ( por exemplo, exp.last_name = "O'Reilly") e nestas situações devemos misturar dois tipos de aspas ou usar caracteres de escape. ( Em SQL, usar caracteres de escape significa simplesmente colocar outra citação perto do caractere que se deseja desativar - por exemplo, exp.last_name = 'O'’Reilly.)

Solução:

Pratique, pratique, pratique. Escrever mais código SQL lhe dará a experiência necessária para evitar estes erros. E lembre-se que as pessoas geralmente esquecem o colchete de fechamento ou a aspas. Raramente elas deixam de fora o de abertura. Se você estiver encontrando problemas, dê uma olhada de perto em toda sua pontuação de fechamento!

3. Ordem de declaração inválida

Ao escrever declarações SELECT, tenha em mente que há uma ordem de palavras-chave predefinida necessária para que a declaração seja executada corretamente. Aqui não há margem de manobra.

Vejamos um exemplo de uma declaração ordenada corretamente:

SELECT name
FROM dish
WHERE name = 'Prawn Salad'
GROUP BY name
HAVING count(*) = 1
ORDER BY name;

Não há atalho aqui; basta lembrar a ordem correta da palavra-chave para a declaração SELECT:

  • SELECT identifica nomes de colunas e funções
  • FROM especifica o nome ou nomes da tabela (e JOIN condições se você estiver usando várias tabelas)
  • WHERE define as instruções de filtragem
  • GROUP BY mostra como agrupar colunas
  • HAVING filtra os valores agrupados
  • ORDER BY define a ordem na qual os resultados serão exibidos

Você não pode escrever uma palavra-chave WHERE antes de um FROM, e não pode colocar um HAVING antes de um GROUP BY. A declaração seria inválida.

Vejamos o que acontece quando você confunde a ordem da declaração. Neste caso, vamos usar o erro SQL comum de colocar ORDER BY antes de GROUP BY:

SELECT name
FROM dish
WHERE name = 'Prawn Salad'
ORDER BY name
GROUP BY name
HAVING count(*) = 1

A mensagem de erro que vemos é bastante intimidante!

Syntax error in SQL statement "SELECT name FROM dish WHERE name = 'Prawn Salad' 
ORDER BY name GROUP[*] BY name HAVING count(*) = 1;"; SQL statement: 
SELECT name FROM dish WHERE name = 'Prawn Salad' ORDER BY name GROUP BY 
name HAVING count(*) = 1; [42000-176]

Solução:

Não se desencoraje! Você pode ver que todas as palavras-chave estão destacadas corretamente e todas as citações e parênteses estão fechados. Portanto, agora você deve verificar a ordem das declarações. Quando você está apenas começando seus estudos SQL, sugiro que utilize uma lista de verificação de pedidos SELECT. Se você encontrar um problema, consulte sua lista para obter a ordem correta.

4. Omitindo aliases de tabela

Ao unir mesas, a criação de pseudônimos de mesas é uma prática popular. Esses pseudônimos distinguem entre colunas com o mesmo nome entre tabelas; assim, o banco de dados saberá quais valores de coluna devem retornar. Isto não é obrigatório quando estamos unindo tabelas diferentes, uma vez que podemos usar os nomes completos das tabelas. Mas é obrigatório se unirmos uma tabela a si mesma.

Suponha que estejamos escrevendo uma declaração SQL para encontrar a localização atual de uma exposição e a localização do ano anterior:

SELECT *
FROM exhibit
    JOIN exhibit ON (id = previous_id);

O banco de dados retornaria um erro:

Ambiguous column name "id"; SQL statement: SELECT * FROM exhibit JOIN exhibit ON (id = previous_id); [90059-176]

Nota: Sempre que você encontrar "nome de coluna ambíguo" em sua mensagem de erro, você certamente precisará de apelidos de tabela.

A declaração correta (com pseudônimos) seria:

SELECT ex.* , exp.name
FROM exhibit
    JOIN exhibit ON (ex.id = exp.previous_id);

Solução:

Pratique usando pseudônimos de tabela para declarações de mesa única SELECT. Use aliases com freqüência - eles tornam seu SQL mais legível.

5. Usando Nomes Sensíveis a Casos

Este erro só ocorre quando é necessário escrever nomes não-padronizados para tabelas ou objetos de banco de dados.

Digamos que você precisa ter uma tabela chamada LargeClient e por alguma razão você adiciona outra tabela chamada LARGECLIENT. Como você já sabe, os nomes dos objetos em bancos de dados geralmente não são sensíveis a maiúsculas e minúsculas. Portanto, quando você escreve uma consulta para a tabela LargeClient, o banco de dados irá realmente consultar LARGECLIENT.

Para evitar isto, você deve colocar aspas duplas ao redor do nome da tabela. Por exemplo, o nome do banco de dados:

SELECT * FROM
"LargeClient"
 WHERE cust_name = 'Mijona';

Ao criar uma tabela, você precisará usar aspas duplas se:

  • A tabela terá um nome sensível a maiúsculas e minúsculas.
  • O nome da tabela conterá caracteres especiais. Isto inclui o uso de um espaço em branco, como "Grande Cliente".

Solução:

Evite usar estes nomes se você puder. Caso contrário, lembre-se de suas aspas duplas!

Todos Cometem Erros SQL

Esses são os cinco erros mais comuns no código SQL. Você provavelmente os comete muitas vezes à medida que aprende esta linguagem. Lembre-se, todos cometem erros ao escrever código. Na verdade, cometer erros é uma parte normal e previsível do desenvolvimento de software.

Portanto, não se desencoraje. Quando você cometer erros no futuro, tente analisar seu código de uma forma estruturada. Com uma análise estruturada, você pode encontrar e corrigir seus erros mais rapidamente.

Se você gostaria de aprender sobre alguns outros erros sintáticos que eu não incluí aqui, por favor, me avise. Em um próximo artigo, analisaremos os erros não sintáticos. Estes retornam ou modificam dados e, portanto, são muito mais perigosos. Inscreva-se em nosso blog para que você não perca!