SQL: Subconsultas vs JOIN

Dec 19 2022
Las subconsultas y las uniones son dos conceptos importantes en SQL, el lenguaje de programación estándar para administrar y manipular bases de datos. En este blog, exploraremos qué son las subconsultas y combinaciones, en qué se diferencian y cuándo usar cada una en sus consultas SQL.

Las subconsultas y las uniones son dos conceptos importantes en SQL, el lenguaje de programación estándar para administrar y manipular bases de datos. En este blog, exploraremos qué son las subconsultas y combinaciones, en qué se diferencian y cuándo usar cada una en sus consultas SQL.

¿Qué son las subconsultas?

Una subconsulta es una consulta dentro de una consulta. Es una forma de anidar una sentencia SELECT dentro de otra sentencia SELECT, INSERT, UPDATE o DELETE, o dentro de una sentencia CREATE VIEW. Las subconsultas se pueden utilizar para realizar una variedad de tareas, tales como:

  • Filtrado de filas en función de una condición
  • Cálculo de valores para usar en la consulta externa
  • Devolver un valor único o varios valores como parte de la consulta externa

Una combinación es una forma de combinar filas de dos o más tablas en función de una columna relacionada entre ellas. Hay varios tipos de combinaciones, incluidas INNER JOIN, OUTER JOIN y CROSS JOIN.

Un INNER JOIN devuelve solo las filas que coinciden con la condición de unión.

Un OUTER JOIN devuelve todas las filas de ambas tablas, incluidas las que no coinciden con la condición de combinación. Hay dos tipos de uniones externas: LEFT JOIN y RIGHT JOIN. A LEFT JOIN devuelve todas las filas de la tabla de la izquierda (la primera tabla de la consulta) y las filas coincidentes de la tabla de la derecha. A RIGHT JOIN devuelve todas las filas de la tabla de la derecha (la segunda tabla de la consulta) y las filas coincidentes de la tabla de la izquierda.

A CROSS JOIN devuelve el producto cartesiano de las dos tablas, que es una combinación de todas las filas de ambas tablas.

Ejemplo práctico:

En este escenario, tenemos una base de datos de Hogwarts y las siguientes tablas se enumeran a continuación:

  • Course_table: esta tabla contiene datos sobre los nombres de los cursos y se identifica mediante una clave principal única
  • student_table: esta tabla contiene datos sobre los nombres de los estudiantes que se identifican mediante una clave principal única
  • enrolamiento_tabla: Esta tabla es la tabla JOIN que establece la relación entre estudiantes y cursos. Cada vez que un alumno se matricula en un curso se crea un nuevo registro. el id_del_curso es la clave externa para identificar un curso de la tabla_del_curso, y el id_del_estudiante es una clave externa para identificar a un estudiante de la tabla_del_estudiante.
  • course: 
    +─────+────────────────────────────────+
    | id  | course                         |
    +─────+────────────────────────────────+
    | 1   | Defense against the dark arts  | 
    | 2   | Potions                        | 
    | 3   | History of magic               | 
    +─────+────────────────────────────────+
    
    
    student:
    +─────+────────────────────────────────+
    | id  | student                        |
    +─────+────────────────────────────────+
    | 1   | Harry Potter                   | 
    | 2   | Hermione Granger               | 
    | 3   | Ron Weasly                     |
    | 4   | Voldemort                      |   
    | 5   | Draco Malfoy                   |
    +─────+────────────────────────────────+
    
    enrollment:
    +─────+────────────+─────────────+
    | id  | course_id  | student_id  | 
    +─────+────────────+─────────────+
    | 1   | 1          | 1           | 
    | 2   | 2          | 1           |  
    | 3   | 3          | 2           |  
    | 4   | 2          | 3           | 
    | 5   | 3          | 4           | 
    | 6   | 1          | 5           |
    | 7   | 3          | 1           |   
    | 8   | 1          | 4           |  
    +─────+────────────+─────────────+
    
    
    

A continuación se muestra un ejemplo del enfoque Subquery.

SELECT * FROM enrollment
WHERE enrollment.course_id IN (SELECT * FROM courses WHERE course_id = 1);

UNIRSE

A continuación se enumera el enfoque Join.

SELECT * FROM course AS c 
  LEFT JOIN enrollment AS e ON c.id = e.course_id
WHERE e.course_id = 1

Cuándo usar subconsultas y uniones

Tanto las subconsultas como las uniones se pueden usar para recuperar datos de varias tablas, pero tienen diferentes casos de uso. Las subconsultas generalmente se usan cuando desea usar los resultados de la consulta interna en la cláusula WHERE o HAVING de la consulta externa. También son útiles cuando desea devolver un valor único o varios valores como parte de la consulta externa.

Las uniones generalmente se usan cuando desea recuperar datos de varias tablas en función de una columna relacionada entre ellas. También son útiles cuando desea devolver todas las filas de ambas tablas, incluidas las que no coinciden con la condición de combinación.

En general, las subconsultas tienden a ser más eficientes cuando solo necesita devolver algunas filas, mientras que las uniones son más eficientes cuando necesita devolver una gran cantidad de filas. Sin embargo, la diferencia de rendimiento entre los dos puede variar según el tamaño de las tablas y la complejidad de las consultas.

En conclusión, las subconsultas y las uniones son dos herramientas importantes para recuperar datos de varias tablas en SQL. Las subconsultas son útiles para filtrar filas y devolver valores como parte de la consulta externa, mientras que las uniones son útiles para combinar filas de varias tablas en función de una columna relacionada. Ambos se pueden usar para lograr objetivos similares, pero la elección de cuál usar depende de los requisitos específicos de su consulta.