21st Jul 2022 8 minutos de leitura 8 Dicas que os Iniciantes Absolutos podem usar para corrigir consultas SQL Marcos Pierri como como fazer em sql Índice 1. Colocar Parênteses Abertos e Fechados em primeiro lugar 2. Não coloque uma vírgula no final de uma coluna ou tabela seqüencial 3. Use Partial Query Evaluation to Debug Long SQL Queries (Avaliação Parcial de Consulta para Depurar Consultas Longas SQL) 4. Preste atenção aos nomes das colunas e das mesas 5. Comparar apenas tipos de dados compatíveis 6. Uso É Nulo ao comparar os valores NULL 7. Sempre incluir a condição de união 8. Incluir colunas não agregadas da lista SELECT em GROUP BY Colunas Experimente você mesmo! Os erros de código são comuns - e frustrantes. E quando você está apenas aprendendo SQL, pode ser muito desafiador encontrar e corrigir seus erros. Neste post, lhe mostraremos oito maneiras de resolver ou eliminar erros comuns de codificação SQL. Hoje, vamos falar sobre algumas dicas que o iniciante em SQL pode usar para evitar vários erros comuns. Estas dicas funcionam em qualquer ambiente de banco de dados. À medida que formos avançando, estaremos mostrando algumas mensagens de erro. O texto exato de suas mensagens de erro pode ser um pouco diferente, mas não se preocupe; cada mecanismo de banco de dados tem suas próprias variantes, mas o significado é o mesmo. 6 Erros comuns de sintaxe Todos os aprendizes de SQL fazemhttps://t.co/owxdMv9UNT#sql #LearnSQL #Database de dados - Vertabelo (@Vertabelo) 3 de janeiro de 2017 Dito isto, não estaremos nos concentrando em mensagens de erro. Em vez disso, identificaremos a verdadeira causa do problema (como esquecer um parêntese ou uma aspas). Desta forma, você aprenderá como contornar o problema em primeiro lugar. Pronto? Vamos começar! 1. Colocar Parênteses Abertos e Fechados em primeiro lugar Lembrar o caráter de fechamento é fundamental para eliminar parênteses desequilibrados, aspas, aspas duplas ou colchetes. As melhores práticas sugerem digitar primeiro os dois caracteres (abrir e fechar) e depois digitar o que quer que vá dentro. O exemplo a seguir mostra um erro quando os parênteses não são equilibrados: SELECT lastname, firstname FROM employee WHERE salary >= (select AVG(salary) from employee ; ERROR: syntax error at or near ";" LINE 2: WHERE salary >= (select AVG(salary) from employee ; Exemplo 1: Parênteses não equilibrados 2. Não coloque uma vírgula no final de uma coluna ou tabela seqüencial O Commas atua como um separador em SQL. Não deve haver nenhuma vírgula entre FROM e o nome da primeira tabela ou após o nome final da tabela. A mesma idéia se aplica à definição da coluna: quando você criar uma tabela, certifique-se de não digitar uma vírgula extra após o nome final da coluna. Este é um erro realmente comum. SELECT * FROM employee, department, ERROR: syntax error at or near "," LINE 1: SELECT * FROM employee, department Exemplo 2: Uma vírgula extra 3. Use Partial Query Evaluation to Debug Long SQL Queries (Avaliação Parcial de Consulta para Depurar Consultas Longas SQL) Muitos clientes SQL como Navicat ou pgAdmin permitem a execução parcial de uma consulta. Você pode fazer isso usando seu mouse para destacar parte do código. Usando esta técnica de dividir e conquistar, você pode facilmente isolar e corrigir erros. Obviamente, a parte marcada deve ser SQL válida. A próxima consulta tem dois erros. Se executarmos a linha de abertura da consulta, podemos ver o primeiro problema. (Dica: a coluna "llastname" não existe). SELECT llastname, firstname FROM employee WHERE salary >= (select MAXI(salary) from employee ; ERROR: column "llastname" does not exist LINE 1: SELECT llastname, firstname FROM employee Exemplo 3: Um nome de coluna incorreto Entretanto, se executarmos a declaração SQL completa, obtemos um erro relacionado a parênteses desequilibrados: SELECT llastname, firstname FROM employee WHERE salary >= (select MAXI(salary) from employee; ERROR: syntax error at or near ";" LINE 2: WHERE salary >= (select MAX(salary) from employee ; Exemplo 4: Subconsulta com parênteses errados Também podemos marcar uma subquisição e executá-la individualmente, como no próximo exemplo: SELECT llastname, firstname FROM employee WHERE salary >= (select MAXI(salary) from employee; ERROR: function maxi(numeric) does not exist LINE 1: select MAXI(salary) from employee Exemplo 5: Nome da função incorreta 4. Preste atenção aos nomes das colunas e das mesas Preste muita atenção ao digitar nomes de colunas ou nomes de tabelas. Se possível, tente copiar e colar o nome de um comando que você sabe que está correto - de preferência um que já tenha sido executado corretamente. As melhores práticas sugerem copiar e colar nomes, mesmo se você achar que é mais demorado do que datilografar. Ter um nome de coluna mal escrito ou se referir a uma coluna em uma tabela que não está na cláusula FROM é de fato muito comum. Sempre procure por erros de digitação no nome da coluna, certifique-se de que a tabela no FROM tenha esta coluna, e certifique-se de que a tabela seja mencionada em FROM. SELECT llastname, firstname FROM employees ERROR: table "employees" does not exist LÍNEA 1: SELECT llastname, firstname FROM employees Exemplo 6: Nome incorreto da tabela Outra boa prática é usar um pseudônimo de tabela ou um nome de tabela como prefixo de coluna. Isto é duplamente importante quando você tem duas ou mais tabelas na cláusula <>FROM. O erro a seguir pode aparecer se você se referir a duas colunas com nomes idênticos em tabelas diferentes: SELECT lastname, name FROM department, employee WHERE depto_id = depto_id ERROR: column reference "depto_id" is ambiguous LINE 3: WHERE depto_id = depto_id Exemplo 7: Nomes ambíguos de colunas SELECT lastname, name FROM department, employee WHERE department.depto_id = employee.depto_id Exemplo 8: Nomes de colunas prefixadas Para corrigir esses erros, acrescente o nome da tabela antes do nome da coluna. (No exemplo acima, isso seria employee.depto_id e department.depto_id em vez de apenas depto_id.) 5. Comparar apenas tipos de dados compatíveis Ao escrever as condições de comparação na cláusula WHERE, certifique-se de que ambos os tipos de dados sejam compatíveis com o operador de comparação e um com o outro. Se isso não for possível, você pode ter que lançar um dos tipos de dados. A regra geral é comparar números contra números, cadeias de caracteres contra cadeias de caracteres, etc. Alguns sistemas de banco de dados convertem automaticamente os tipos de dados sempre que possível; outros fornecem conversões aprimoradas de tipos de dados (ou seja, um valor TIMESTAMP pode ser convertido automaticamente para uma DATA antes das comparações). Ainda outros serviços de banco de dados não oferecem conversões de forma alguma. Por isso, é melhor você mesmo procurar por esses problemas potenciais. De qualquer forma, o código SQL a seguir recebe um erro de desajuste de dados porque uma string CHAR está sendo comparada com um valor inteiro: SELECT lastname, salary FROM employee WHERE depto_id = firstname ERROR: operator does not exist: integer = character varying LINE 3: WHERE depto_id = firstname Exemplo 9: Tipos de dados não correspondentes Nenhum operador corresponde ao nome dado e ao(s) tipo(s) de argumento(s). Talvez seja necessário acrescentar tipos explícitos de fundição para resolver este problema. 6. Uso É Nulo ao comparar os valores NULL Se você só precisa verificar se uma coluna tem um valor NULL, preste atenção especial a quais expressões você usa. Um erro comum é usar = NULL ou <> NULL, mas estas expressões não são sintaticamente válidas. Use as cláusulas IS NULL e IS NOT NULL em seu lugar. Vamos ver as amostras incorretas e corretas: SELECT firstname, lastname FROM employee WHERE depto_id = NULL Exemplo 10: Comparação NULL incorreta SELECT firstname, lastname FROM employee WHERE depto_id is NULL Exemplo 11: Comparação NULL correta 7. Sempre incluir a condição de união Há mais de uma maneira válida de fazer uma junção em SQL. A maneira tradicional é listar todas as tabelas a serem unidas na cláusula FROM e colocar as condições de união na cláusula WHERE para construir pares de registros. A outra maneira (mais declarativa) é usar a cláusula de join e listar as condições de join após a cláusula ON. Ambas são sintaticamente equivalentes, mas você deve saber como identificar a condição de junção para ambas. Aqui temos duas uniões válidas: SELECT lastname, name FROM department, employee WHERE department.depto_id = employee.depto_id SELECT lastname, name FROM department JOIN employee ON department.depto_id = employee.depto_id Exemplo 12: Duas uniões equivalentes No entanto, a dica é: Não se esqueça da condição de união! Toda vez que você juntar duas ou mais mesas, você deve escrever uma condição de junção para ligar as duas mesas. Se você não especificar isto, você não receberá uma mensagem de erro; você só receberá resultados incorretos. Estes estarão errados porque cada registro da primeira tabela será unido a todos os registros da segunda tabela. Este tipo de conjunto de resultados é chamado de um produto cartesiano de duas tabelas, e normalmente não é um resultado esperado. SELECT lastname, name FROM department, employee Exemplo 13: Um produto cartesiano - geralmente não é o resultado que você deseja 8. Incluir colunas não agregadas da lista SELECT em GROUP BY Colunas Ao utilizar funções agregadas, há algumas restrições sobre quais colunas podem ser incluídas na lista SELECT (ou seja, os nomes das colunas após a cláusula SELECT ). Você só pode incluir as colunas especificadas na cláusula GROUP BY, mais as funções agregadas e constantes. Se você selecionar apenas colunas agregadas, qualquer outra coluna irá gerar um erro. Você pode ver isto no exemplo a seguir. SELECT department.depto_id, name , count(*) employees FROM department, employee WHERE department.depto_id = employee.depto_id GROUP BY department.depto_id ERROR: column "department.name" must appear in the GROUP BY clause or be used in an aggregate function LINE 1: SELECT department.depto_id, name , count(*) employees Exemplo 14: Colunas extras na lista SELECT SELECT department.depto_id, name , count(*) employees FROM department, employee WHERE department.depto_id = employee.depto_id GROUP BY department.depto_id Exemplo 15: Nenhuma coluna extra na lista SELECT s vezes precisamos filtrar os dados usando uma função de agregação. Um dos erros mais comuns é colocar uma condição usando a função de agregação na cláusula WHERE. Isto é mostrado abaixo: SELECT department.depto_id, name , count(*) employees FROM department, employee WHERE department.depto_id = employee.depto_id AND count(*) > 1 GROUP BY department.depto_id ERROR: aggregate functions are not allowed in WHERE LÍNEA 4: AND count(*) > 1 Exemplo 16: Função de agregação incorreta no WHERE Lembre-se, se você precisar filtrar usando uma função agregada, a maneira correta é colocar a condição usando o agregado na cláusula HAVING, como no exemplo a seguir: SELECT department.depto_id, name , count(*) employees FROM department, employee WHERE department.depto_id = employee.depto_id HAVING count(*) > 1 GROUP BY department.depto_id Exemplo 17: A função agregada está na cláusula HAVING Experimente você mesmo! LearnSQL é um ótimo lugar para começar a usar SQL. Vários cursos são voltados para alunos iniciantes. Você pode testar as dicas contidas neste artigo sobre os exercícios deste curso SQL. Tags: como como fazer em sql