Select (SQL)

est une commande SQL qui permet d'extraire des données des tables d'une base de données relationnelle.

Une commande  peut obtenir zéro ou plusieurs tuples provenant de tables et de vues. En raison de la nature déclarative du langage SQL, une commande  décrit un jeu de résultats voulus, et non la manière de les obtenir. La base de données transforme donc la requête en un plan d’exécution de requête, qui peut varier dans le temps, en fonction de la version du serveur, ou du serveur utilisé.

Forme basique
La commande  a, classiquement, la syntaxe suivante :
SELECT expr [, expr ...]
    FROM tables
    WHERE conditions
    GROUP BY expr
    HAVING conditions
    ORDER BY expr
    LIMIT

Chaque implémentation de base de données relationnelle ajoute des fonctionnalités et variations spécifiques, cette syntaxe est donc particulièrement incomplète. Il est nécessaire de se référer à la documentation de l'implémentation utilisée afin d'obtenir une syntaxe détaillée.

Exemples de requête utilisant la table  contenant :

SELECT
La première partie de la syntaxe d'une requête  permet de définir quelles colonnes doivent être extraites des tables, et éventuellement comment les valeurs de ces colonnes doivent être agrégées. Il est possible d'appliquer des opérateurs mathématiques à cette sélection, ou encore des fonctions proposées par le moteur de base de données tel que, par exemple, SUM, ou AVG. Enfin, lors d'un select, il est possible d'utiliser le joker '*' permettant de sélectionner toutes les colonnes d'une table. Lors d'une requête effectuée sur plusieurs table, il est possible de préciser sur quelles tables le joker s'applique, en préfixant le joker d'un nom de la table, par exemple : .

FROM
Le mot-clé  permet de définir quelles tables, vues, ou sous requêtes serviront de sources de données. C'est aussi dans la clause  qu'il est possible de définir des jointures entre tables.

Exemples :
SELECT * FROM table1, table2
Cette requête renvoie toutes les combinaisons possibles des tuples des tables table1 et table2, c'est-à-dire que si table1 contient 1000 tuples et que table2 en contient 2000, le résultat sera de  tuples. Il est donc plus commun de joindre les tables grâce au mot-clé JOIN, permettant d'appliquer des conditions à la jointure entre les deux tables.
SELECT table1.a, table2.b FROM table1 JOIN table2 ON table1.a = table2.a
Avec cette requête, seuls les tuples respectant la condition table1.a = table2.a seront sélectionnés.

WHERE
Le mot-clé  permet de définir les conditions de sélection des tuples. Différentes conditions peuvent être exprimées, et une équation peut ainsi être créée en reliant les différentes conditions par les mots clefs AND ou OR. Des parenthèses sont utilisables afin de déterminer l'ordre d'application des différentes conditions.

Exemple :
SELECT field1 FROM table1 WHERE table1.field2 > 42 AND table1.field3 = "Gonzo"

GROUP BY
Le mot-clé  permet de définir, via des noms de colonnes ou des expressions, comment les résultats doivent être groupés. La présence d'un GROUP BY dans une requête implique généralement la présence de fonctions d’agrégation, tel que ,  ou  dans le .

Exemple en utilisant la table my_table contenant :

HAVING
Le mot-clé  permet de définir des conditions sur les résultats, agrégés, d'un . Il se différencie donc du  par le fait que le  est utilisé à la sélection des tuples avant le  et que le  est utilisé pour la sélection des tuples après agrégation par le .

Exemple en utilisant la table my_table contenant :

ORDER BY
Le mot-clé  permet de trier les résultats. Le tri est par défaut croissant, mais peut être décroissant en utilisant le mot-clé DESC. Il est possible de tirer sur plusieurs champs, en cas d'égalité sur le premier champ, le second est utilisé et ainsi de suite.

Exemple :
SELECT * FROM my_table ORDER BY field1 ASC, field2 DESC;

Limiter le nombre de résultats
La manière de limiter le nombre de résultats d'une requête est dépendante du moteur utilisé, cependant la norme SQL:2008 définit la syntaxe suivante :
SELECT * FROM table1 FETCH FIRST 10 ROWS ONLY

Voir aussi

Articles connexes
 Update (SQL)
 Insert (SQL)
 Delete (SQL)

Notes et références 

Base de données