Subconsulta con una fila y una columna
En esta lección vamos a ver con más detalle la subconsulta que devuelve una fila y una columna. Este tipo de subconsulta también se conoce como subconsulta escalar.
Se puede usar en distintas partes de la consulta SQL principal, pero lo más habitual es encontrarla en las condiciones que filtran el resultado con operadores de comparación (=, <>, >, <).
Ejemplos
La siguiente consulta, muy sencilla, muestra un único valor (el nombre de una compañía). Tal cual no tiene mucho sentido, pero tus consultas pueden ser mucho más complejas.
MySQL 8.4SELECT (SELECT name FROM company LIMIT 1) AS company_name;
Del mismo modo, puedes usar subconsultas escalares para filtrar filas con WHERE mediante operadores de comparación.
MySQL 8.4SELECT * FROM FamilyMembers WHERE birthday = (SELECT MAX(birthday) FROM FamilyMembers);
Con esta consulta se obtiene el miembro más joven de la familia. Aquí la subconsulta hace falta para obtener la fecha de nacimiento máxima, que después se usa en la consulta principal para filtrar las filas.
La importancia de que el operador encaje con el resultado de la subconsulta
Cuando usas el resultado de una subconsulta con operadores de comparación, como en nuestro ejemplo, es importante que la subconsulta devuelva exactamente un valor escalar (1 fila y 1 columna).
Si esta subconsulta devolviera varios valores, el SGBD daría un error indicando que se esperaba que la subconsulta devolviera un solo registro: «ER_SUBQUERY_NO_1_ROW: Subquery returns more than 1 row».
Si esta subconsulta devolviera varios valores, el SGBD daría un error indicando que se esperaba que la subconsulta devolviera un solo registro: «ERROR: more than one row returned by a subquery used as an expression».
Por eso conviene tener cuidado al escribir subconsultas y saber qué resultado devolverá la subconsulta y qué operadores podemos usar con ese conjunto de resultados.