Apprenez en lisant dans l'ordre

SELECT — extraire des données d'une table

Apprends l'instruction SQL SELECT depuis les bases. Couvre la sélection de toutes les colonnes ou de colonnes précises, l'alias AS, le filtrage de lignes avec WHERE, et la combinaison des opérateurs de comparaison avec AND / OR — tout s'exécute en direct dans ton navigateur.

À propos du SQL abordé dans ce cours

Ce cours enseigne la syntaxe SQL universelle qui fonctionne sur les principaux SGBDR — MySQL, Oracle, PostgreSQL, SQL Server, et plus encore. Les bases comme CREATE TABLE / SELECT / WHERE / JOIN / GROUP BY s'écrivent de la même manière, peu importe la base de données vers laquelle tu bascules.

Pour des raisons techniques, la console intégrée au navigateur fait tourner SQLite, mais chaque fois qu'une fonctionnalité diffère entre les bases (vérification de longueur sur les types, manière de lister les tables, etc.) tu verras une note comparative du type En MySQL, tu écrirais... pour savoir quoi utiliser ailleurs.

SELECT — extraire toutes les colonnes

Pour extraire des données d'une table, tu utilises l'instruction SELECT. SELECT est la construction la plus utilisée en SQL : génération de rapports, affichage à l'écran, analyse de données, traitements par lots — presque toute opération qui « lit » des données commence par SELECT.

Commençons par la forme qui extrait toutes les colonnes d'une table telles quelles. Le * (astérisque) dans SELECT * est un symbole pour « toutes les colonnes », et le FROM nom_table qui suit indique de quelle table extraire.

-- Extrait toutes les colonnes et toutes les lignes de la table user
SELECT * FROM user;
Structure d'une instruction SELECT
SELECTFROMWHEREListe de colonnes* / name, ageNom de tableuserCondition de ligneage >= 30Choisit les colonnesTable cibleFiltre les lignes
SELECT précise quelles colonnes prendre, FROM précise dans quelle table prendre, et WHERE précise quelles lignes garder. Visualise la position et le rôle de chacun.

Extrait toutes les colonnes et toutes les lignes de la table user mise en place en haut de l'article. (Exécute correctement et l'explication apparaîtra.)

① Écris et exécute SELECT * FROM user;.

② Confirme que le résultat renvoie 5 lignes avec les quatre colonnes id / name / age / city.

Éditeur SQL

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

Extraire seulement des colonnes précises

SELECT * est pratique, mais dans les vraies apps il vaut souvent mieux extraire seulement les colonnes dont tu as besoin. Le volume de données envoyées et reçues diminue, seules les colonnes que tu veux afficher reviennent, et les traitements en aval restent simples.

Pour choisir des colonnes, liste les noms de colonnes séparés par des virgules juste après SELECT. L'ordre dans lequel tu les écris est l'ordre dans lequel elles apparaissent dans le résultat.

Toutes les colonnes vs. colonnes précises — le choix de colonnes change le volume de données
SELECT *SELECT name, age4 colonnes(id / name / age / city)2 colonnes(name / age)Toutes les colonnes apparaissentSeules les colonnes utilesCoup d'œil rapide aux donnéesApps de production & rapportsRéduit les colonnesRéduit la sortieChoisis selon l'usage
SELECT renvoie chaque colonne (bien pour l'inspection), et une liste de colonnes ne renvoie que ce dont tu as besoin (bien pour la production). Les flèches de chaque ligne comparent « gauche (SELECT ) vs. droite (SELECT name, age) » sur la même dimension.
-- Extrait juste name et age (2 colonnes)
SELECT name, age FROM user;

-- Tu peux aussi réordonner les colonnes
SELECT city, name FROM user;

Imagine un écran de liste d'utilisateurs qui ne devrait afficher que « nom et âge ».

① Depuis la table user, extrais juste les colonnes name et age dans cet ordre.

② Confirme que le résultat est 5 lignes × 2 colonnes et que id et city ne sont pas inclus.

Éditeur SQL

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

AS — donner un alias à une colonne

Par défaut, l'en-tête de colonne dans le résultat d'un SELECT affiche le nom d'origine de la colonne. Avec colonne AS alias, tu peux changer le nom de colonne côté résultat pour ce que tu veux. Cela ne change pas le nom de colonne dans la table sous-jacente — c'est juste « comment cette colonne devrait s'appeler dans ce résultat de SELECT ».

Les alias sont aussi pratiques quand tu veux nommer une expression. Une opération arithmétique comme age + 1 ou un résultat de fonction d'agrégation comme SUM(price) n'ont pas de nom de colonne par défaut, donc sans AS l'en-tête serait l'expression brute — gênant à afficher ou à manipuler depuis ton code applicatif.

Comment fonctionne AS — réécrire l'en-tête de colonne du résultat
Instruction SELECTEn-tête du résultatExemples de valeursSELECT name FROM username(nom d'origine)Alice / Bob /...SELECT name AS user_name FROM useruser_name(alias)Alice / Bob /...(valeurs inchangées)SELECT age + 1 AS next_year FROM usernext_year(nom pour une expression)31 / 26 /...(age + 1)Seul l'en-tête prend l'aliasNomme une expression
AS ne change que l'en-tête côté résultat ; le nom réel de la colonne dans la table ne change pas. Les opérations arithmétiques et les résultats de fonctions d'agrégation n'ont pas de nom par défaut, donc les nommer avec AS est l'approche standard.
-- Donne un alias aux colonnes
SELECT name AS user_name, age AS user_age FROM user;

-- Donne un alias à une expression (calcule l'âge de l'année prochaine)
SELECT name, age + 1 AS next_year_age FROM user;

AS peut être omis

SELECT name AS user_name FROM user; et SELECT name user_name FROM user; (avec AS supprimé) ont le même sens. Cela dit, écrire AS rend explicite « c'est désormais un alias » pour le lecteur, donc ce cours écrit toujours AS de façon explicite.

Si tu as besoin d'espaces ou de caractères non-ASCII dans l'alias, entoure-le de guillemets doubles : AS "Âge de l'année prochaine".

Imagine un écran de liste d'utilisateurs qui doit afficher « âge actuel » à côté de « âge de l'année prochaine ».

① Depuis la table user, extrais name, age et age + 1.

② Utilise AS pour donner à la troisième colonne (age + 1) l'alias next_year_age.

③ Confirme que le résultat est 5 lignes × 3 colonnes et que l'en-tête de la troisième colonne est next_year_age.

Éditeur SQL

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

WHERE — filtrer les lignes par condition

Jusqu'ici tu as appris à choisir des colonnes. Voyons maintenant comment filtrer des lignes. En ajoutant WHERE condition après SELECT cols FROM table, seules les lignes qui satisfont la condition se retrouvent dans le résultat.

Il est utile de voir SELECT comme un choix vertical (colonnes) et WHERE comme un choix horizontal (lignes).

SELECT réduit les colonnes ; WHERE réduit les lignes
SELECT name, age (réduit verticalement)WHERE id = 2 (réduit horizontalement → 1 ligne)idnameagecity1Alice30Tokyo2Bob25Osaka3Carol35Tokyo
SELECT name, age (la bande verticale verte) réduit 4 colonnes à 2 ; WHERE id = 2 (la bande horizontale bleue) réduit 3 lignes à 1. Leur intersection — name et age de Bob — donne le résultat final de 1 ligne × 2 colonnes.

Opérateurs de comparaison

À l'intérieur de WHERE, les conditions utilisent des opérateurs de comparaison (symboles qui comparent des valeurs et renvoient vrai/faux). Les opérateurs de comparaison de SQL ressemblent beaucoup à ceux des autres langages, avec un piège : l'égalité est un seul =, et non ==.

OpérateurSignificationExemple
=Égalage = 30
<>Différent (!= fonctionne aussi)city <> 'Tokyo'
<Strictement inférieurage < 30
>Strictement supérieurage > 30
<=Inférieur ou égalage <= 30
>=Supérieur ou égalage >= 30
-- Extrait les utilisateurs de 30 ans et plus
SELECT * FROM user WHERE age >= 30;

-- Extrait les lignes où city vaut Tokyo (les chaînes vont entre apostrophes)
SELECT * FROM user WHERE city = 'Tokyo';

-- Extrait les lignes où city est autre chose que Tokyo
SELECT * FROM user WHERE city <> 'Tokyo';

La comparaison de chaînes avec `=` est sensible à la casse

Dans la console de ce cours, la comparaison de chaînes avec `=` est sensible à la casse. WHERE name = 'alice' ne correspondra pas à 'Alice' — le résultat est 0 ligne. En MySQL, le collation rend souvent cette comparaison insensible à la casse par défaut, donc la même requête peut renvoyer 1 ligne.

`WHERE colonne = NULL` ne fait pas ce que tu attends

Écrire WHERE name = NULL n'extraira pas « les lignes où name vaut NULL ». En SQL, NULL est traité comme « inconnu », et = NULL s'évalue toujours à NULL — ce que WHERE filtre. Pour extraire des lignes NULL, utilise le WHERE colonne IS NULL dédié. On couvre ça en détail dans l'article d'approfondissement WHERE — pour l'instant, retiens juste « ne pas utiliser = NULL ».

Imagine une exigence : « afficher tous les utilisateurs de 30 ans et plus ».

① Depuis la table user, extrais toutes les lignes où age est supérieur ou égal à 30.

② Confirme que le résultat fait 3 lignes (Alice / Carol / Eve) et que Bob et Dave ne sont pas inclus.

Éditeur SQL

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

AND / OR — combiner plusieurs conditions

Au quotidien, tu as souvent besoin de combiner des conditions : « utilisateurs à Tokyo de 30 ans et plus », « membres de rang or ou platine ». SQL combine les conditions avec AND (les deux vraies) et OR (l'une ou l'autre vraie).

Un autre opérateur utile est NOT (négation de la condition). NOT (city = 'Tokyo') veut dire « pas Tokyo ». <> fait le même travail, donc pour l'instant concentre-toi sur AND et OR.

Opérateur logiqueSignificationExemple
ANDLes deux conditions sont vraiesage >= 30 AND city = 'Tokyo'
ORL'une ou l'autre est vraiecity = 'Tokyo' OR city = 'Osaka'
NOTNégation de la conditionNOT (city = 'Tokyo')
-- Utilisateurs à Tokyo de 30 ans et plus
SELECT name, age, city FROM user WHERE city = 'Tokyo' AND age >= 30;

-- Utilisateurs à Tokyo ou Osaka
SELECT name, city FROM user WHERE city = 'Tokyo' OR city = 'Osaka';

Utilise des parenthèses quand tu mélanges AND et OR

Quand AND et OR apparaissent dans le même WHERE, AND est évalué avant OR. A OR B AND C veut en réalité dire A OR (B AND C) — pas l'ordre que tu as écrit.

Pour éviter les surprises, rends l'ordre d'évaluation explicite avec des parenthèses quand tu mélanges AND et OR. Par exemple, « (Tokyo ou Osaka) et 30 ans et plus » s'écrit WHERE (city = 'Tokyo' OR city = 'Osaka') AND age >= 30. Les parenthèses rendent aussi ton intention claire au lecteur — en cas de doute, ajoute-les.

Imagine une exigence : « lister le nom et la ville des utilisateurs qui vivent à Tokyo ou Osaka, ont 25 ans ou plus, et ne sont pas Carol ». Cet exercice met en pratique la combinaison de AND, OR et NOT.

① Depuis la table user, extrais name et city.

② Utilise un WHERE qui combine trois conditions avec AND : `city` vaut `'Tokyo'` ou `'Osaka'`, `age` est >= 25, et `name` n'est pas `'Carol'`. Rends l'ordre d'évaluation de la partie OR explicite avec des parenthèses.

③ Confirme que le résultat fait 3 lignes (Alice Tokyo / Bob Osaka / Eve Tokyo), avec Carol (Tokyo / 35) et Dave (Kyoto / 28) exclus.

É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 1Que signifie * dans SELECT * FROM user; ?

Question 2Lequel décrit le mieux les rôles de SELECT et WHERE ?

Question 3Que signifie l'opérateur de comparaison SQL <> ?