Volver a la lista de artículos Artículos
Lectura de 7 minutos

Cómo organizar las consultas SQL cuando son largas

Es probable que la primera consulta SQL larga con la que tengas que lidiar te resulte difícil de estructurar y entender. Estos cinco consejos te enseñarán la mejor manera de organizar las consultas SQL, es decir, de escribirlas y darles formato.

Como todos sabemos, las consultas SQL son esenciales para la gestión de bases de datos. Sin ellas, sería extremadamente difícil encontrar y trabajar con la información de una base de datos.

La longitud de las consultas depende del tipo de información que necesitemos y del tamaño de la base de datos. Cuando leemos un trozo sencillo de código SQL, solemos ser capaces de entenderlo con bastante facilidad. Pero, ¿qué ocurre si se trata de una consulta de 1.500 líneas? Si queremos entender lo que hemos hecho (o que otros lo entiendan), tenemos que saber cómo organizar las consultas SQL. Afortunadamente, recordar sólo cinco consejos útiles te ayudará a lidiar con todas las consultas SQL largas que escribas. .

Cómo organizar las consultas SQL

Consejo 1: Sangrar el código

La sangría ayuda a mantener limpia su larga consulta SQL al identificar dónde comienza cada bloque de código. Esto hace que la estructura del programa sea más comprensible y permite a los desarrolladores encontrar fácilmente una instrucción específica. Cuando se indenta correctamente el código, se puede ver rápidamente lo que se está seleccionando, qué tablas proporcionan los datos y qué restricciones se aplican (es decir, las cláusulas WHERE y GROUP BY ).

Veamos un ejemplo de consulta SQL relativamente larga:

SELECT column1
       ,column2
FROM table1
WHERE column3 IN
(
    SELECT TOP(1) column4
    FROM table2
    INNER JOIN table3
    ON table2.column1 = table3.column1
)

Compare el código anterior con este ejemplo:

SELECT column1, column2 FROM table1 WHERE column3 IN ( SELECT TOP(1) column4 FROM table2 INNER JOIN table3 ON table2.column1 = table3.column1)

Ahora, imagine que también hay 100 instrucciones similares. Sin la indentación, un ejemplo de consulta SQL tan largo será muy difícil de leer y entender.

No existe un único estilo de indentación aceptado. Cada empresa o programador suele desarrollar el suyo propio. Aun así, tu estilo de indentación debería tener sentido para los demás. Para ayudarte a empezar, he proporcionado enlaces a guías de estilo de ApexSQL y Simon Holywell.

La indentación es lo primero que debes hacer cuando empiezas a escribir código. Si heredas un trozo de código sin sangrar, hay muchos sitios que te permiten formatear tu consulta SQL larga de forma gratuita.

Consejo 2: Utiliza la cláusula WITH

La cláusula WITH le permite nombrar un bloque de subconsulta y tratarlo como una tabla normal. En este caso, la cláusula WITH es básicamente un sustituto de una subconsulta normal.

Observe el ejemplo de consulta SQL larga que aparece a continuación. Su tarea es mostrar el número de hospitales de Los Ángeles en los que los pacientes cuya última visita fue hace más de 14 días recibieron una dosis media de medicamentos superior a 1.000 unidades.

WITH patient_data AS (
	SELECT patient_id, patient_name, hospital, drug_dosage
	FROM hospital_registry
	WHERE (last_visit > now() - interval '14 days' OR last_visit IS NULL) 
	AND city = "Los Angeles"
)

WITH average_dosage AS (
	SELECT hospital, AVG(drug_dosage) AS Average
	FROM patient_data
	GROUP BY hospital
)

SELECT count(hospital) 
FROM average_dosage;
WHERE AVG(drug_dosage) > 1000

Voy a explicar todos los elementos de esta consulta.

El primer elemento es la cláusula WITH. Con ella, podemos especificar dos subconsultas como patient_data y average_dosage y utilizarlas como tablas normales. La subconsulta patient_data se utilizó para crear la subconsulta average_dosage. Así, average_dosage se convierte en la fuente de datos final de la sentencia SELECT.

Este arreglo es mucho más limpio que escribir todo en una consulta y poner todas las subconsultas en las instrucciones de WHERE.

Dado que facilita la lectura del código, la cláusula WITH es posiblemente la mejor manera de organizar las consultas SQL.

Consejo 3: Explícate con comentarios

El código dice cómo, pero los comentarios explican por qué. Los comentarios son una de las características útiles más importantes en cualquier código, desde un proyecto de programación en Java hasta una consulta SQL. Permiten a los programadores expresar sus procesos de pensamiento y sus resultados deseados.

Añade siempre comentarios a tu código. Te alegrarás de haberlo hecho, y también lo harán los demás programadores que trabajen en tu SQL. Incluso si te tomas un descanso, añade comentarios: te ayudarán a continuar donde lo dejaste.

Este es el aspecto de una consulta SQL muy sencilla sin comentarios:

SELECT name, 
      student_group,
FROM course_marks
WHERE points < 300 OR points IS NULL;

¿Sabes realmente lo que significa el WHERE? Sin comentarios, es difícil entender lo que el programador quería conseguir.

Si te preguntas cómo organizar mejor las consultas SQL, acostúmbrate a dejar comentarios en tu código. Veamos esta misma consulta SQL larga, pero con comentarios y explicaciones:

/*Get the list of every student 
who failed or was absent on exam*/

SELECT name, 
      student_group,
FROM course_marks
WHERE points < 300 OR points IS NULL; --student fails when gets 300 or less points.
--When student was absent, instead of points there is NULL in column

Mejor, ¿no? Estos comentarios han explicado las acciones del desarrollador y nos han ayudado a entender lo que hace la consulta.

Consejo 4: Divida las consultas en pasos

Una consulta SQL larga es en realidad una colección de bloques de código, que son mucho más fáciles de controlar y de comprobar si hay errores. Construir tu consulta paso a paso es una de las mejores prácticas para el desarrollo de SQL. Esto le permitirá encontrar errores lógicos más rápidamente y estar más seguro de sus resultados.

Fíjate en lo fácil que es entender este largo ejemplo de consulta SQL porque se ha dividido en pasos lógicos:

WITH subject AS (
 SELECT 
 student_id, 
 subject_id,
 school_id,
 sum(exam_score) AS total_score 
 FROM subject_marks 
 GROUP BY student_id, subject_id, school_id
), 

student AS (
 SELECT 
 student_id,
 school_id,
 avg(total_score) AS average_student 
 FROM subject
 GROUP BY student_id, school_id
)

SELECT 
school_id, 
 avg(average_student) 
FROM student 
GROUP BY school_id;

Queremos que el resultado de esta consulta nos muestre la cantidad media de puntos de cada alumno de cada escuela. La primera etapa (la cláusula WITH subject ) encuentra la suma de puntos para cada asignatura. La segunda etapa (la cláusula WITH student ) promedia los puntos de cada estudiante. Cuando llegamos a SELECT, todo lo que tenemos que hacer es encontrar la cantidad media de puntos y agrupar los resultados por escuela.

Al construir una consulta SQL larga de esta manera, en realidad se escribe una consulta que no es muy larga ni complicada. Sólo depende de cómo decidas dividirla.

Consejo 5: Manténgase con una Convención de Nombres

También es muy importante utilizar una única convención de nomenclatura para las tablas, columnas y consultas. Esto hace que el código SQL sea más fácil de escribir y leer.

Cuando una base de datos heredada tiene tablas denominadas PRODUCT, users, USERS_other, y UserSECOND_NEW, el aspecto es muy poco profesional y la codificación se vuelve caótica. Sigue las reglas establecidas para las mayúsculas, los guiones bajos, los espacios, etc. Esto también se aplica a los estilos de consulta: mantén las mismas reglas de formato y patrones de sangría para toda la base de datos. Si empiezas una nueva línea después de un SELECT, hazlo siempre, especialmente cuando escribas una consulta SQL larga.

Las convenciones de nomenclatura pueden ser muy diferentes de una base de datos a otra. Al igual que ocurre con la indentación, no existe un estilo único reconocido por la industria. Te recomiendo que averigües cuáles son las convenciones más utilizadas y que modeles tu propio estilo a partir de ellas. Estos artículos de los blogs Vertabelo y Launch by Lunch son un buen punto de partida.

La mejor manera de entender la diferencia entre un buen y un mal estilo de consulta es verlo por uno mismo. A continuación, encontramos un ejemplo de estilo pobre:

SELECT name, SECONDNAME, Date_TIME, address, SecondAddress
FROM registry, other_USERSData
WHERE registry.id = other_USERSData.id;

Esta consulta, que utiliza un estilo constante, es mucho más legible:

SELECT name, second_name, date_time, address, second_address
FROM registry, other_users_data
WHERE registry.id = other_users_data.id;

La misteriosa y larga consulta SQL - Resumen

En resumen, estos consejos te ayudarán a escribir mejores consultas, independientemente de su longitud, pero es especialmente importante aplicarlos siempre que escribas una consulta SQL larga. Lo mejor que puedes hacer es practicar utilizando buenas técnicas. Si no sabes cómo desarrollar tus habilidades, nuestro SQL para principiantes curso es una gran solución. Hay muchas lecciones que te enseñarán a organizar las consultas SQL.

Llevará tiempo aprender a escribir consultas SQL limpias e inteligentes. Necesitarás entender las relaciones entre las tablas, la planificación del código y los datos, cómo identificar las partes de una consulta y qué resultados puedes esperar. La paciencia y el trabajo duro son las claves del éxito.