Question 1Laquelle des propositions suivantes décrit correctement IIF(condition, X, Y) ?
Fonctions ④ — IF / IIF pour un branchement à une condition
Cet article fait partie du Cours de SQL, qui vous permet de maîtriser à partir de zéro des compétences SQL concrètes, des bases jusqu'aux requêtes complexes et à l'optimisation SQL.
IF / IIF pour brancher une valeur sur une condition vrai / faux, la différence avec WHERE qui supprime des lignes, et la combinaison avec LIKE ou AND — démontré sur des données staff 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 ?