Aprende leyendo en orden

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.

Antes de los ejercicios, confirmemos las definiciones de columnas y una muestra de datos de la tabla staff.

① Usa PRAGMA table_info(staff); para revisar los nombres de columna, los tipos y la clave primaria.

② Usa SELECT * FROM staff LIMIT 5; para previsualizar las primeras 5 filas.

Editor SQL

Ejecutar una consulta para ver el 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".

Estructura de IF / IIF — cambiar el valor en verdadero vs falso
LlamadaResultadoIIF(100 < 200, 'T', 'F')'T'(condición TRUE)IIF(500 > 1000, 'T', 'F')'F'(condición FALSE)IIF(salary >= 5000000, 'High', 'Normal')evalúa salary por fila→ 'High' o 'Normal'
Si la condición es TRUE se devuelve el 2.º argumento, si es FALSE el 3.º. En vez de eliminar filas como WHERE, imagínalo como intercambiar el valor de la columna de resultado.
-- 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;

Imagina una lista de personal para una reunión de dirección donde quieres "etiquetar como High los salarios de 5,000,000 o más y como Normal el resto". (La explicación aparece cuando lo ejecutas correctamente).

① De la tabla staff, toma name, salary y `IIF(salary >= 5000000, 'High', 'Normal')` con el alias `rank` — 3 columnas en total.

Editor SQL

Ejecutar una consulta para ver el resultado

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.

La diferencia entre WHERE e IIF
WHEREIIFconserva solo filascon la condición TRUEconserva todas, solocambia el valor de columna→ cambia el nº de filas(eliminación vertical)→ nº de filas igual(transform. horizontal)
WHERE acota filas (eliminación vertical); IIF intercambia valores de columna (transformación horizontal). Tienen roles independientes y se combinan bien.
-- 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';

Imagina el requisito "listar los rangos salariales de los miembros con base en Tokyo".

① De la tabla staff, toma name, salary y `IIF(salary >= 5000000, 'High', 'Normal')` con el alias `rank` — 3 columnas.

② Acota a las filas donde `city` sea `'Tokyo'`.

Editor SQL

Ejecutar una consulta para ver el resultado

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;

Imagina el requisito "adjuntar una etiqueta especial solo al personal de apellido Tanaka con base en Tokyo". Probarás a escribir una condición compuesta como `name LIKE '%Tanaka'` AND `city = 'Tokyo'` en un solo IIF.

① De la tabla staff, toma name, city y `IIF(name LIKE '%Tanaka' AND city = 'Tokyo', 'Tokyo Tanaka', 'Other')` con el alias `tag` — 3 columnas.

Editor SQL

Ejecutar una consulta para ver el resultado

Imagina el requisito "mostrar el top 3 por salario y a la vez anotar a cada persona con una etiqueta de rango".

① De la tabla staff, toma name, salary y `IIF(salary >= 5000000, 'High', 'Normal')` con el alias `rank` — 3 columnas.

② Ordena por `salary` descendente y limita a las primeras 3 filas.

Editor SQL

Ejecutar una consulta para ver el resultado
QUIZ

Verificación de conocimientos

Responde cada pregunta una a una.

Pregunta 1¿Cuál de las siguientes describe correctamente IIF(condición, X, Y)?

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?