Pregunta 1¿Cuál de las siguientes describe correctamente IIF(condición, X, Y)?
Funciones ④ — IF / IIF para ramificación de una sola condición
El cuarto artículo sobre funciones SQL. Cómo ramificar un valor según una sola condición verdadero/falso con IF / IIF, en qué se diferencia de WHERE, su combinación con LIKE y AND, y cómo encadenar ORDER BY / LIMIT — usando datos staff cargados desde CSV.
Datos usados en este artículo — la tabla staff
Hasta ahora hemos cubierto las funciones en tres artículos; este y los dos siguientes tratan sobre cambiar lo que se muestra según una condición. A partir del mismo valor de columna, puedes adjuntar etiquetas de clasificación como "High" o "Normal" según se cumpla o no una condición, o reunir varios valores en una sola columna de resultado.
IF / IIF — cambiar un valor según una condición
La función más básica para cambiar el valor mostrado según una condición es IF / IIF. La sintaxis es la siguiente, y ambas son exactamente iguales en significado.
- MySQL: IF(condición, valor si es verdadero, valor si es falso)
- Consola de este curso / SQL Server: IIF(condición, valor si es verdadero, valor si es falso)
La consola de este curso no tiene la función IF, así que los ejercicios usan IIF. A diferencia de WHERE, no filtra filas — solo cambia el valor de la columna de resultado, por lo que la usas cuando quieres "conservar todas las filas pero cambiar la etiqueta mostrada según el valor de la columna".
-- 1) Comprobación rápida con literales
SELECT IIF(100 < 200, 'T', 'F'); -- 'T'
SELECT IIF(500 > 1000, 'T', 'F'); -- 'F'
-- 2) Usando una columna — 'HQ' si city es Tokyo, si no 'Branch'
SELECT name, city,
IIF(city = 'Tokyo', 'HQ', 'Branch') AS office
FROM staff;
-- Referencia: en MySQL, usa IF()
-- SELECT IF(city = 'Tokyo', 'HQ', 'Branch') FROM staff;
La diferencia entre WHERE e IF — eliminar filas vs cambiar valores
WHERE e IF ambos toman una condición, pero el efecto sobre el resultado es completamente distinto.
- `WHERE`: conserva solo las filas donde la condición es TRUE, y elimina las filas FALSE / NULL
- `IF` / `IIF`: conserva todas las filas y solo intercambia el valor de la columna según la condición
Las dos se combinan. Un patrón típico es "mostrar solo el personal con base en Tokyo, y dividir el rango salarial de cada persona en High / Normal": primero acota filas con WHERE, luego transforma lo mostrado con IIF en la lista de columnas del SELECT.
-- Combina WHERE e IIF
-- 1) Usa WHERE para conservar solo el personal con base en Osaka
-- 2) Usa IIF para clasificar salary de 6,000,000 o más como 'Senior'
SELECT name, salary,
IIF(salary >= 6000000, 'Senior', 'General') AS grade
FROM staff
WHERE city = 'Osaka';
Combinarlo con LIKE y AND, y encadenar ORDER BY / LIMIT
Como la condición de IIF acepta las mismas expresiones que WHERE, puedes combinarla con LIKE (coincidencia de patrones) o AND / OR (condiciones compuestas). Ramificaciones como "etiquetar como apellido Tanaka si el nombre contiene Tanaka" o "as si tiene 30+ y está basado en Tokyo" caben en una sola línea.
El AS alias de la columna de resultado también puede ser un objetivo de `ORDER BY`, así que ordenar por la columna de etiqueta producida por IIF y luego limitar filas con LIMIT es un patrón básico para la salida de informes en la práctica.
-- 1) IIF + LIKE: etiqueta 'Tanaka' si el apellido es Tanaka
SELECT name,
IIF(name LIKE '%Tanaka', 'Tanaka', 'Other') AS surname_check
FROM staff;
-- 2) IIF + AND: condición compuesta sobre edad equivalente + city
SELECT name, birthday, city,
IIF(strftime('%Y', birthday) <= '1989' AND city = 'Osaka',
'Osaka senior', 'Other') AS tag
FROM staff;
Verificación de conocimientos
Responde cada pregunta una a una.
Pregunta 2¿Cuál es la diferencia correcta entre WHERE e IIF?
Pregunta 3¿Cuál es la reescritura correcta al ejecutar el IF(salary >= 5000000, 'High', 'Normal') de MySQL en la consola de este curso?