La commande SELECT pour lire les lignes d'une table
Toute requête SQLite commence par SELECT. La logique est simple : donne-moi ces colonnes, dans cette table, pour les lignes qui remplissent ces conditions. Pour aujourd'hui, on se concentre sur les deux premiers éléments — les colonnes et la table. Le filtrage, ce sera pour le prochain doc.
Voici la requête SQLite la plus basique qui soit :
SELECT * veut dire « toutes les colonnes ». FROM products indique la table. On obtient une ligne par enregistrement, avec les quatre colonnes. Le point-virgule termine l'instruction.
Voilà la structure générale : SELECT <colonnes> FROM <table>;.
Sélectionner des colonnes spécifiques en SQLite
L'étoile * est pratique quand on explore une base. Mais dans du vrai code, on préfère presque toujours nommer explicitement les colonnes qui nous intéressent :
Vous récupérez deux colonnes, dans l'ordre demandé. C'est l'ordre de la liste SELECT qui détermine l'ordre dans le résultat — il n'a aucune raison de coller à l'ordre des colonnes dans la table.
Pourquoi privilégier cette approche plutôt qu'un SELECT * ? Deux raisons. D'abord, moins de données transitent (ou sont lues sur le disque), ce qui devient vite critique sur des tables larges. Ensuite, votre requête reste stable si quelqu'un ajoute une colonne à la table le mois prochain. Avec SELECT *, le résultat s'élargit en silence, et ça peut casser un code applicatif qui déballe les lignes par position.
SELECT ne se contente pas de lire : il calcule aussi
Les éléments de la liste SELECT ne sont pas forcément de simples noms de colonnes. Ce peut être n'importe quelle expression sqlite : un calcul arithmétique, un appel de fonction, une concaténation de chaînes, une constante. SQLite évalue l'expression pour chaque ligne.
La quatrième colonne n'existe pas dans la table — SQLite l'a calculée ligne par ligne. Vous pouvez faire pareil avec des fonctions de chaîne, des dates, des expressions conditionnelles, vraiment tout ce que vous voulez. La liste du SELECT sert à façonner les données, pas seulement à les récupérer.
On peut même faire un SELECT sans clause FROM, en utilisant SQLite comme une simple calculatrice :
Une seule ligne, trois colonnes. Pratique pour tester ce que fait une expression avant de la glisser dans une vraie requête.
Renommer les colonnes avec AS
Quand vous calculez une colonne, SQLite lui attribue un nom par défaut — souvent l'expression elle-même, du genre price * stock. C'est moche et instable. Donnez-lui un vrai nom avec AS :
L'alias devient le nom de la colonne dans le jeu de résultats. C'est utile pour la lisibilité quand on lit la sortie, et ça compte vraiment pour le code applicatif qui récupère les valeurs par nom de colonne (row["inventory_value"] plutôt que row[1]).
Le mot-clé AS est facultatif — price * stock inventory_value fonctionne pareil — mais autant l'écrire explicitement. L'intention est plus claire, et ça évite les confusions avec une virgule oubliée qui pourrait passer pour un alias.
Donner aussi un alias à la table
Vous pouvez également attribuer un alias court à la table elle-même. Ça n'a pas grand intérêt avec une seule table, mais l'habitude paie dès que vous commencez à faire des jointures :
p devient un raccourci pour products. La notation pointée p.name indique clairement de quelle table provient une colonne. Avec une seule table, c'est un détail superflu ; mais dès qu'on jongle avec trois tables jointes, c'est ce qui sauve la lisibilité de la requête.
Littéraux et constantes dans le résultat
Rien ne vous empêche de mélanger de vraies colonnes avec des valeurs constantes. Pratique pour étiqueter des lignes ou injecter une valeur par défaut :
Chaque ligne renvoie le même 'USD' et le même 1. Ce pattern revient souvent quand on combine plusieurs requêtes avec UNION et qu'il faut une colonne « marqueur » pour distinguer la provenance des résultats.
Petit aparté sur NULL
Certaines colonnes restent vides : soit aucune valeur n'a été insérée, soit la colonne n'a pas de valeur par défaut. SQLite représente cette absence de valeur par NULL. Dans les résultats d'un SELECT, NULL apparaît sous forme de cellule vide ou du mot NULL lui-même, selon l'outil que vous utilisez.
Regardez la deuxième ligne. price vaut NULL, et price * 2 vaut aussi NULL — toute opération arithmétique impliquant NULL renvoie NULL. C'est l'une des sources de confusion les plus fréquentes en SQL, et une page entière y est consacrée plus loin. Pour l'instant, retiens simplement que NULL se propage à travers les expressions.
Ce qu'il faut retenir
SELECT <colonnes> FROM <table>;est la forme de toute requête SQLite.- En vrai code, liste les colonnes explicitement ; garde
SELECT *pour l'exploration. - La liste du
SELECTaccepte n'importe quelle expression, pas uniquement des noms de colonnes. - Utilisez
ASpour donner un nom propre aux colonnes calculées et aux tables aliasées. NULLse propage dans les calculs arithmétiques — pensez-y quand un résultat te paraît bizarre.
La suite : filtrer avec WHERE
Pour le moment, chaque requête renvoie toutes les lignes de la table. La clause WHERE permet de restreindre ça — sélectionner des lignes par prix, par nom, par date, ou via toute expression qui s'évalue à vrai ou faux. C'est l'objet du prochain document.
Questions fréquentes
Quelle est la syntaxe de base d'un SELECT en SQLite ?
SELECT <colonnes> FROM <table>;. Les colonnes peuvent être listées séparées par des virgules (SELECT name, email FROM users), remplacées par * pour tout récupérer, ou être n'importe quelle expression du genre price * quantity. La clause FROM indique la table à lire, et le point-virgule clôt l'instruction.
Faut-il utiliser SELECT * en SQLite ?
Pour explorer une table en CLI, aucun souci. En revanche, dans le code applicatif, listez toujours explicitement les colonnes dont vous avez besoin. SELECT * couple votre code au schéma actuel : ajoutez une colonne demain, et toutes vos requêtes renverront silencieusement plus de données — de quoi casser un code qui lit les lignes par position.
Comment renommer une colonne dans le résultat d'un SELECT ?
Avec AS, qui donne un alias à une colonne ou à une expression : SELECT price * quantity AS total FROM orders. L'alias devient le nom de la colonne dans le résultat, ce qui compte pour la lisibilité et pour le code qui lit les résultats par nom. Le mot-clé AS est facultatif, mais le garder rend les choses plus claires.