Apprenez en lisant dans l'ordre

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.

Avant les exercices, confirmons les définitions de colonnes et un échantillon de données de la table staff.

① Utilise PRAGMA table_info(staff); pour vérifier les noms de colonnes, les types et la clé primaire.

② Utilise SELECT * FROM staff LIMIT 5; pour prévisualiser les 5 premières lignes.

Éditeur SQL

Exécutez une requête pour voir les résultats

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 ».

Structure de IF / IIF — Changer la valeur selon vrai ou faux
AppelRésultatIIF(100 < 200, 'T', 'F')'T'(condition TRUE)IIF(500 > 1000, 'T', 'F')'F'(condition FALSE)IIF(salary >= 5000000, 'High', 'Normal')évalue salary par ligne→ 'High' ou 'Normal'
Si la condition est TRUE le 2e argument est renvoyé, si FALSE le 3e. Plutôt que de retirer des lignes comme WHERE, imagine un échange de la valeur de la colonne de résultat.
-- 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;

Imagine une liste de personnel pour un comité de direction où tu veux « libeller les salaires de 5 000 000 ou plus en High et le reste en Normal ». (L'explication apparaît une fois que tu l'exécutes correctement.)

① Depuis la table staff, prends name, salary, et `IIF(salary >= 5000000, 'High', 'Normal')` avec l'alias `rank` — 3 colonnes au total.

Éditeur SQL

Exécutez une requête pour voir les résultats

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.

La différence entre WHERE et IIF
WHEREIIFgarde seulement les lignesoù la condition est TRUEgarde toutes les lignes,change juste la valeur→ le nb de lignes change(suppression verticale)→ nb de lignes inchangé(transformation horiz.)
WHERE restreint les lignes (suppression verticale) ; IIF échange les valeurs de colonnes (transformation horizontale). Ils ont des rôles indépendants et se combinent bien.
-- 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';

Imagine l'exigence « lister les rangs de paie pour les membres basés à Tokyo ».

① Depuis la table staff, prends name, salary, et `IIF(salary >= 5000000, 'High', 'Normal')` avec l'alias `rank` — 3 colonnes.

② Restreins aux lignes où `city` vaut `'Tokyo'`.

Éditeur SQL

Exécutez une requête pour voir les résultats

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;

Imagine l'exigence « attacher un libellé spécial seulement au personnel de nom Tanaka basé à Tokyo ». Tu vas essayer d'écrire une condition composée comme `name LIKE '%Tanaka'` AND `city = 'Tokyo'` dans un seul IIF.

① Depuis la table staff, prends name, city, et `IIF(name LIKE '%Tanaka' AND city = 'Tokyo', 'Tokyo Tanaka', 'Other')` avec l'alias `tag` — 3 colonnes.

Éditeur SQL

Exécutez une requête pour voir les résultats

Imagine l'exigence « afficher le top 3 par salaire en annotant aussi chaque personne d'un libellé de rang ».

① Depuis la table staff, prends name, salary, et `IIF(salary >= 5000000, 'High', 'Normal')` avec l'alias `rank` — 3 colonnes.

② Trie par `salary` décroissant et limite aux 3 premières lignes.

Éditeur SQL

Exécutez une requête pour voir les résultats
QUIZ

Vérification des connaissances

Répondez à chaque question une par une.

Question 1Laquelle des propositions suivantes décrit correctement IIF(condition, X, Y) ?

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 ?