Question 1Laquelle des propositions suivantes décrit correctement IIF(condition, X, Y) ?
Fonctions ④ — IF / IIF pour un branchement à une condition
Le 4e article sur les fonctions SQL. Brancher une valeur sur une seule condition vrai/faux avec IF / IIF, en quoi cela diffère de WHERE, la combinaison avec LIKE et AND, et l'empilement de ORDER BY / LIMIT — sur des données staff au format CSV.
Données utilisées dans cet article — la table staff
Nous avons couvert les fonctions dans trois articles jusqu'ici ; celui-ci et les deux suivants traitent de changer ce qui est affiché selon une condition. À partir de la même valeur de colonne, tu peux attacher des libellés de classification comme « High » ou « Normal » selon qu'une condition est vraie, ou replier plusieurs valeurs en une seule colonne de résultat.
IF / IIF — Changer une valeur selon une condition
La fonction la plus basique pour changer la valeur affichée selon une condition est IF / IIF. La syntaxe est ci-dessous, et les deux ont exactement le même sens.
- MySQL : IF(condition, valeur si vrai, valeur si faux)
- Console de ce cours / SQL Server : IIF(condition, valeur si vrai, valeur si faux)
La console de ce cours n'a pas de fonction IF, donc les exercices utilisent IIF. Contrairement à WHERE, elle ne filtre pas les lignes — elle change seulement la valeur de la colonne de résultat, donc tu l'utilises quand tu veux « garder chaque ligne mais changer le libellé d'affichage selon la valeur de colonne ».
-- 1) Vérification rapide avec des littéraux
SELECT IIF(100 < 200, 'T', 'F'); -- 'T'
SELECT IIF(500 > 1000, 'T', 'F'); -- 'F'
-- 2) Avec une colonne — 'HQ' si city est Tokyo, sinon 'Branch'
SELECT name, city,
IIF(city = 'Tokyo', 'HQ', 'Branch') AS office
FROM staff;
-- Référence : sous MySQL, utilise IF()
-- SELECT IF(city = 'Tokyo', 'HQ', 'Branch') FROM staff;
La différence entre WHERE et IF — Retirer des lignes vs changer des valeurs
WHERE et IF prennent tous deux une condition, mais l'effet sur le résultat est complètement différent.
- `WHERE` : garde seulement les lignes où la condition est TRUE, et retire les lignes FALSE / NULL
- `IF` / `IIF` : garde chaque ligne et échange seulement la valeur de la colonne selon la condition
Les deux se combinent. Un motif typique est « afficher seulement le personnel basé à Tokyo, et répartir le rang de paie de chacun en High / Normal » : d'abord restreindre les lignes avec WHERE, puis transformer l'affichage avec IIF dans la liste de colonnes SELECT.
-- Combiner WHERE et IIF
-- 1) Utiliser WHERE pour garder seulement le personnel basé à Osaka
-- 2) Utiliser IIF pour classer un salaire de 6 000 000 ou plus en 'Senior'
SELECT name, salary,
IIF(salary >= 6000000, 'Senior', 'General') AS grade
FROM staff
WHERE city = 'Osaka';
Combiner avec LIKE et AND, et empiler ORDER BY / LIMIT
Comme la condition de IIF accepte les mêmes expressions que WHERE, tu peux la combiner avec LIKE (correspondance de motif) ou AND / OR (conditions composées). Des branchements comme « libeller en nom de famille Tanaka si le nom contient Tanaka » ou « as si 30+ et basé à Tokyo » tiennent sur une ligne.
L'AS alias de la colonne de résultat peut aussi être une cible de `ORDER BY`, donc trier par la colonne de libellé produite par IIF puis limiter les lignes avec LIMIT est un motif de base pour la sortie de rapports en pratique.
-- 1) IIF + LIKE : libeller 'Tanaka' si le nom de famille est Tanaka
SELECT name,
IIF(name LIKE '%Tanaka', 'Tanaka', 'Other') AS surname_check
FROM staff;
-- 2) IIF + AND : condition composée sur l'âge équivalent + la ville
SELECT name, birthday, city,
IIF(strftime('%Y', birthday) <= '1989' AND city = 'Osaka',
'Osaka senior', 'Other') AS tag
FROM staff;
Vérification des connaissances
Répondez à chaque question une par une.
Question 2Quelle est la bonne différence entre WHERE et IIF ?
Question 3Quelle est la bonne réécriture pour exécuter le IF(salary >= 5000000, 'High', 'Normal') de MySQL dans la console de ce cours ?