SQL Esencial: Joins, Subconsultas y Cláusulas de Filtrado Avanzadas
Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 6,8 KB
Tipos de JOIN en SQL
El comando JOIN
se emplea para obtener información de dos o más tablas y combinar dicha información en una única salida.
Combinaciones Externas
LEFT JOIN
(oLEFT OUTER JOIN
): Se emplea una combinación externa izquierda para mostrar todos los registros de la tabla de la izquierda. Si no se encuentra coincidencia con la tabla de la derecha, el registro muestra los campos de la segunda tabla establecidos aNULL
.RIGHT JOIN
(oRIGHT OUTER JOIN
): Una combinación externa derecha opera del mismo modo, solo que la tabla derecha es la que localiza los registros en la tabla izquierda. Si no se encuentra coincidencia, los campos de la tabla izquierda se establecen aNULL
.
Subconsultas en SQL
Las subconsultas son consultas anidadas dentro de otra consulta SQL. Permiten realizar operaciones complejas de filtrado y selección.
Subconsultas en la Cláusula WHERE
Las subconsultas en la cláusula WHERE
se utilizan para filtrar los resultados de la consulta principal basándose en los resultados de la subconsulta. A continuación, se describen los tipos de tests más comunes:
Test de Comparación: Compara el valor de una expresión con el valor único producido por una subconsulta y devuelve un resultado
TRUE
si la comparación es cierta.Test de Pertenencia al Conjunto
IN
: Compara un único valor de datos con una columna de valores producida por una subconsulta y devuelve un resultadoTRUE
si el valor coincide con uno de los valores de la columna.Test de Existencia
EXIST
: El test de existenciaEXIST
comprueba si una subconsulta produce alguna fila de resultados. DevuelveTRUE
si la subconsulta devuelve al menos una fila, yFALSE
en caso contrario.Test Cuantificado
ANY
: Se utiliza con uno de los seis operadores de comparación (=
,<>
,<
,<=
,>
,>=
) para comprobar el valor del test con cada valor de datos en la columna de la subconsulta, uno a la vez. Si alguna de las comparaciones individuales produce un resultadoTRUE
, el testANY
devuelve un resultadoTRUE
.Test Cuantificado
ALL
: Se utiliza también con uno de los seis operadores de comparación. Funciona igual queANY
, con la diferencia de que si todas las comparaciones individuales producen un resultadoTRUE
, el testALL
devuelve un resultadoTRUE
.
Consideraciones para Subconsultas en WHERE
Una subconsulta debe devolver una única columna como resultado (es decir, en la sentencia
SELECT
de la subconsulta solo se especifica un elemento).La cláusula
ORDER BY
no puede usarse directamente en una subconsulta dentro deWHERE
.Las subconsultas se utilizan para realizar comparaciones que implican condiciones como 'alguno', 'todas', 'nunca', 'más o menos que', 'superior a', 'inferior a'.
Subconsultas en la Cláusula HAVING
También pueden utilizarse subconsultas en la cláusula HAVING
y funcionan como parte de la selección de un grupo de filas efectuada por esta cláusula. Se aplican después de la agrupación.
Debe estar asociada a una cláusula
GROUP BY
.Permite comparar agregados (que algo sea más o menos que algo), donde la condición se especifica en la subconsulta.
Ejemplos de Condiciones Comunes en la Cláusula WHERE
La cláusula WHERE
es fundamental para filtrar registros en SQL. A continuación, se presentan ejemplos de su uso:
Igualdad exacta:
WHERE APELLIDO = 'ALVAREZ'
Comienza con:
WHERE APELLIDO LIKE 'A%'
(para apellidos que comienzan con 'A')Termina con:
WHERE APELLIDO LIKE '%Z'
(para apellidos que terminan con 'Z')Contiene:
WHERE APELLIDO LIKE '%Z%'
(para apellidos que contienen 'Z')Empieza con un rango de caracteres:
WHERE APELLIDO LIKE '[A-B]%'
(para apellidos que empiezan con 'A' o 'B')Dentro de un rango alfabético:
WHERE APELLIDO LIKE '[A-F]%'
(para apellidos que empiezan con una letra entre 'A' y 'F')Coincidencia con patrón de caracteres:
WHERE APELLIDO LIKE 'PERE_'
(para 'Perez' o 'Perea', donde '_' representa un solo carácter)Rango numérico o de fecha:
WHERE VALOR BETWEEN 1 AND 5
(para valores entre 1 y 5, ambos inclusive)Pertenencia a un conjunto de valores:
WHERE COD_CLIENTE IN (12345, 67890)
(para códigos de cliente específicos)Facturas del año actual:
WHERE YEAR(FECHA) = YEAR(GETDATE())
Facturas del año pasado:
WHERE YEAR(FECHA) = YEAR(GETDATE()) - 1
Exclusión de un valor:
WHERE NRO_FACTURA NOT IN (1)
(para número de factura diferente de 1)
Consideraciones Generales en Consultas SQL
En la cláusula
SELECT
solo se especifican las columnas que se desean listar o mostrar en el resultado de la consulta. Si se utilizaGROUP BY
, las columnas seleccionadas deben ser parte de la agrupación o funciones de agregado.Si se requiere una condición de filtrado para algo que no se necesita mostrar en el resultado final, esta condición se incluye en la cláusula
WHERE
oHAVING
, no necesariamente enSELECT
.