21st Jul 2022 Lectura de 8 minutos 8 consejos que los principiantes absolutos pueden utilizar para arreglar las consultas SQL Marcos Pierri cómo cómo en SQL Índice 1. Coloca primero los paréntesis de apertura y cierre 2. No ponga una coma al final de una columna o secuencia de tabla 3. Utilice la evaluación parcial de consultas para depurar consultas SQL largas 4. Preste atención a los nombres de columnas y tablas 5. Comparar sólo tipos de datos compatibles 6. Utilice IS NULL cuando compare valores nulos 7. Incluya siempre la condición JOIN 8. Incluir columnas no agregadas de la lista SELECT en columnas GROUP BY ¡Pruebe usted mismo! Los errores de código son comunes y frustrantes. Y cuando apenas estás aprendiendo SQL, puede ser muy desafiante encontrar y arreglar tus errores. En este post, te mostraremos ocho formas de resolver o eliminar errores comunes de codificación SQL. Hoy hablaremos de algunos consejos que el principiante de SQL puede utilizar para evitar varios errores comunes. Estos consejos funcionan en cualquier entorno de base de datos. A medida que avancemos, mostraremos algunos mensajes de error. La redacción exacta de los mensajes de error puede ser un poco diferente, pero no te preocupes; cada motor de base de datos tiene sus propias variantes, pero el significado es el mismo. 6 errores de sintaxis comunes que todos los estudiantes de SQL cometenhttps://t.co/owxdMv9UNT#sql #LearnSQL #BaseDeDatos - Vertabelo (@Vertabelo) 3 de enero de 2017 Dicho esto, no nos centraremos en los mensajes de error. En su lugar, señalaremos la causa real del problema (como olvidar un paréntesis o una comilla). De este modo, aprenderás a eludir el problema desde el principio. ¿Preparado? Comencemos. 1. Coloca primero los paréntesis de apertura y cierre Recordar el carácter de cierre es la clave para eliminar los paréntesis, las comillas, las dobles comillas o los corchetes desequilibrados. Las mejores prácticas sugieren escribir primero ambos caracteres (apertura y cierre) y luego escribir lo que va dentro. El siguiente ejemplo muestra un error cuando los paréntesis no están 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 ; Ejemplo 1: Paréntesis no equilibrados 2. No ponga una coma al final de una columna o secuencia de tabla Las comas actúan como separadores en SQL. No debe haber comas entre FROM y el primer nombre de la tabla o después del nombre final de la tabla. La misma idea se aplica a la definición de las columnas: cuando crees una tabla, asegúrate de no escribir una coma extra después del nombre final de la columna. Este es un error muy común. SELECT * FROM employee, department, ERROR: syntax error at or near "," LINE 1: SELECT * FROM employee, department Ejemplo 2: Una coma de más 3. Utilice la evaluación parcial de consultas para depurar consultas SQL largas Muchos clientes SQL como Navicat o pgAdmin permiten la ejecución parcial de una consulta. Puede hacerlo utilizando el ratón para resaltar parte del código. Usando esta técnica de "divide y vencerás", puedes aislar y corregir errores fácilmente. Obviamente, la parte marcada debe ser un SQL válido. La siguiente consulta tiene dos errores. Si ejecutamos la línea inicial de la consulta, podemos ver el primer problema. (Pista: la columna "llastname" no 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 Ejemplo 3: Un nombre de columna incorrecto Sin embargo, si ejecutamos la sentencia SQL completa, obtenemos un error relacionado con paréntesis no balanceados: 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 ; Ejemplo 4: Subconsulta con paréntesis incorrectos También podemos marcar una subconsulta y ejecutarla individualmente, como en el siguiente ejemplo: 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 Ejemplo 5: Nombre de función incorrecto 4. Preste atención a los nombres de columnas y tablas Preste mucha atención cuando escriba los nombres de las columnas o de las tablas. Si es posible, intente copiar y pegar el nombre de un comando que sepa que es correcto, preferiblemente uno que ya se haya ejecutado correctamente. Las mejores prácticas sugieren copiar y pegar los nombres incluso si crees que es más lento que escribirlos. Tener un nombre de columna mal escrito o referirse a una columna en una tabla que no está en la cláusula FROM es muy común. Busque siempre los errores tipográficos en el nombre de la columna, asegúrese de que la tabla en el FROM tiene esta columna, y asegúrese de que la tabla se menciona en FROM. SELECT llastname, firstname FROM employees ERROR: table "employees" does not exist LÍNEA 1: SELECT llastname, firstname FROM employees Ejemplo 6: Nombre de tabla incorrecto Otra buena práctica es utilizar un alias de tabla o un nombre de tabla como prefijo de columna. Esto es doblemente importante cuando se tienen dos o más tablas en la cláusula <>FROM. El siguiente error puede aparecer si se hace referencia a dos columnas con nombres idénticos en tablas 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 Ejemplo 7: Nombres de columna ambiguos SELECT lastname, name FROM department, employee WHERE department.depto_id = employee.depto_id Ejemplo 8: Nombres de columna prefijados Para solucionar estos errores, añada el nombre de la tabla antes del nombre de la columna. (En el ejemplo anterior, sería employee.depto_id y department.depto_id en lugar de sólo depto_id.) 5. Comparar sólo tipos de datos compatibles Cuando escriba condiciones de comparación en la cláusula WHERE, asegúrese de que ambos tipos de datos son compatibles con el operador de comparación y entre sí. Si esto no es posible, es posible que tenga que fundir uno de los tipos de datos. La regla general es comparar números con números, cadenas de caracteres con cadenas de caracteres, etc. Algunos sistemas de bases de datos convierten automáticamente los tipos de datos cuando es posible; otros ofrecen conversiones de tipos de datos mejoradas (por ejemplo, un valor TIMESTAMP puede convertirse automáticamente en DATE antes de las comparaciones). Otros servicios de bases de datos no ofrecen ningún tipo de conversión. Por lo tanto, lo mejor es que busques tú mismo estos posibles problemas. De todos modos, el siguiente código SQL obtiene un error de incompatibilidad de datos porque se está comparando una cadena CHAR con un valor entero: SELECT lastname, salary FROM employee WHERE depto_id = firstname ERROR: operator does not exist: integer = character varying LINE 3: WHERE depto_id = firstname Ejemplo 9: Tipos de datos no coincidentes Ningún operador coincide con el nombre y el tipo de argumento dados. Es posible que tengas que añadir fundiciones de tipo explícitas para resolver esto. 6. Utilice IS NULL cuando compare valores nulos Si sólo necesita verificar si una columna tiene un valor NULL, preste especial atención a las expresiones que utiliza. Un error común es utilizar = NULL o <> NULL, pero estas expresiones no son válidas sintácticamente. Utilice en su lugar las cláusulas IS NULL y IS NOT NULL. Veamos los ejemplos incorrectos y correctos: SELECT firstname, lastname FROM employee WHERE depto_id = NULL Ejemplo 10: Comparación NULL incorrecta SELECT firstname, lastname FROM employee WHERE depto_id is NULL Ejemplo 11: Comparación NULL correcta 7. Incluya siempre la condición JOIN Hay más de una forma válida de hacer una unión en SQL. La forma tradicional es listar todas las tablas a unir en la cláusula FROM y poner las condiciones de unión en la cláusula WHERE para construir pares de registros. La otra forma (más declarativa) es utilizar la cláusula JOIN y enumerar las condiciones de unión después de la cláusula ON. Ambas son sintácticamente equivalentes, pero debe saber cómo identificar la condición de unión para ambas. Aquí tenemos dos uniones 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 Ejemplo 12: Dos uniones equivalentes Sin embargo, el consejo es: No olvide la condición de unión. Cada vez que une dos o más tablas, debe escribir una condición de unión para enlazar ambas tablas. Si no la especifica, no recibirá un mensaje de error, sino que obtendrá resultados incorrectos. Estos serán incorrectos porque cada registro de la primera tabla se unirá con todos los registros de la segunda tabla. Este tipo de conjunto de resultados se llama producto cartesiano de dos tablas, y normalmente no es un resultado esperado. SELECT lastname, name FROM department, employee Ejemplo 13: Un producto cartesiano - normalmente no es el resultado que se desea 8. Incluir columnas no agregadas de la lista SELECT en columnas GROUP BY Cuando se utilizan funciones de agregación, existen algunas restricciones sobre las columnas que pueden incluirse en la lista SELECT (es decir, los nombres de las columnas después de la cláusula SELECT ). Sólo puede incluir las columnas especificadas en la cláusula GROUP BY, además de las funciones de agregación y las constantes. Si selecciona sólo columnas agregadas, cualquier otra columna generará un error. Puede ver esto en el siguiente ejemplo. 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 Ejemplo 14: Columnas extra en la lista SELECT SELECT department.depto_id, name , count(*) employees FROM department, employee WHERE department.depto_id = employee.depto_id GROUP BY department.depto_id Ejemplo 15: No hay columnas extra en la lista SELECT A veces necesitamos filtrar los datos utilizando una función de agregación. Uno de los errores más comunes es poner una condición usando la función de agregación en la cláusula WHERE. Esto se muestra a continuación: 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 Ejemplo 16: Función de agregación incorrecta en el WHERE Recuerde que si necesita filtrar utilizando una función de agregado, la forma correcta es poner la condición utilizando el agregado en la cláusula HAVING, como en el siguiente ejemplo: 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 Ejemplo 17: La función agregada está en la cláusula HAVING ¡Pruebe usted mismo! LearnSQL es un gran lugar para empezar con SQL. Hay varios cursos orientados a los principiantes. Puedes probar los consejos de este artículo en los ejercicios de este curso de SQL. Tags: cómo cómo en SQL