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

Une commande SELECT 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 SELECT 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

modifier

La commande SELECT 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 my_table contenant :

col1 col2 col3
foo bar 42
foo baz 84
Requête Résultat Explication
 SELECT * FROM my_table
col1 col2 col3
foo bar 42
foo baz 84
Le joker '*' représente toutes les colonnes. La requête n'ayant pas de condition, toutes les lignes sont récupérées.
 SELECT col2 FROM my_table
col2
bar
baz
Tous les tuples de la colonne col2 sont récupérés.
 SELECT col1, col2 FROM my_table WHERE col3 > 50
col1 col2
foo baz
Cette requête utilise une condition, WHERE col3 > 50, seul le tuple (foo, baz, 84) est donc récupérés. Aussi, elle ne sélectionne que col1 et col2, ainsi col3 n'est pas affiché dans le résultat.
 SELECT SUM(col3) * 3 FROM my_table
SUM(col3) * 3
378
Il est possible d'appliquer des opérations et des fonctions sur les colonnes sélectionnées.

SELECT

modifier

La première partie de la syntaxe d'une requête SELECT 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 : SELECT T1.*, T2.foo.

Requête Résultat Explication
 SELECT 1
1
1
Cette requête n'utilise aucune table, mais directement une valeur, le résultat est donc composé d'un tableau d'une seule colonne nommée '1' : c'est la première ligne, et ayant une seule valeur, 1 : la seconde ligne.
 SELECT 1 AS "Colonne1"
Colonne1
1
Cette fois la colonne a reçu un alias, "Colonne1", le tableau de résultat est donc plus explicite.
 SELECT 1 * 2, 3 + 4, CONCAT("Hello ", "World")
1 * 2 3 + 4 CONCAT("Hello ", "World")
2 7 Hello World
Il est possible d'appliquer des opérations et des fonctions lors d'une requête SELECT.

FROM

modifier

Le mot-clé FROM permet de définir quelles tables, vues, ou sous requêtes serviront de sources de données. C'est aussi dans la clause FROM 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 2 000 000 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

modifier

Le mot-clé WHERE 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

modifier

Le mot-clé GROUP BY 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 SUM(expr), AGV(expr) ou COUNT(expr) dans le SELECT.

Exemple en utilisant la table my_table contenant :

col1 col2 col3
foo bar 1
foo baz 2
bar bar 4
bar baz 8
Requête Résultat Explication
SELECT col2, COUNT(1), AVG(col3) FROM my_table GROUP BY col2
col2 COUNT(1) AVG(col3)
bar 2 2.5
baz 2 5
Ici deux groupes ont été créés, le groupe pour la valeur bar et le groupe pour la valeur baz.
SELECT COUNT(1), AVG(col3) FROM my_table GROUP BY col3 < 3;
COUNT(1) AVG(col3)
2 6
2 1.5
Ici une expression a été utilisée pour grouper les tuples, deux groupes sont donc créés, l'un pour le cas où l'expression est vraie, l'autre pour le cas où l'expression est fausse.

WITH ROLLUP

modifier

Cette option du GROUP BY rajoute une ligne supplémentaire au résultat, avec une agrégation sur son ensemble[1]. Ex :

SELECT col2, COUNT(1), AVG(col3) FROM my_table GROUP BY col2 WITH ROLLUP
col2 COUNT(1) AVG(col3)
bar 2 2.5
baz 2 5
null 4 3.75

HAVING

modifier

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

Exemple en utilisant la table my_table contenant :

col1 col2 col3
foo bar 1
foo baz 2
bar bar 4
bar baz 8
bar foo 16
Requête Résultat Explication
SELECT col2, COUNT(1), AVG(col3) FROM my_table GROUP BY col2 HAVING COUNT(1) > 1
col2 COUNT(1) AVG(col3)
bar 2 2.5
baz 2 5
Ici trois groupes ont été créés, le groupe pour la valeur bar et le groupe pour la valeur baz, et le groupe pour la valeur foo, mais le HAVING n'a sélectionné que les deux premiers, car le groupe foo ne contient qu'un seul tuple.
SELECT col2, COUNT(1) AS count, SUM(col3) AS sum FROM my_table GROUP BY col2 HAVING sum = 10
col2 count sum
baz 2 10
Ici aussi trois groupes ont été créés, mais un seul a été conservé par la clause HAVING.

ORDER BY

modifier

Le mot-clé ORDER BY 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 trier 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

modifier

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

modifier

Articles connexes

modifier

Notes et références

modifier

📚 Artikel Terkait di Wikipedia

Injection SQL

La faille SQLi, abréviation de SQL Injection, soit injection SQL en français, est un groupe de méthodes d'exploitation de faille de sécurité d'une application

Structured Query Language

SQL SQL (sigle pour Structured Query Language, « langage de requêtes structurées ») est un langage informatique normalisé servant à exploiter des bases

Microsoft SQL Server

SQL Server modifier - modifier le code - voir Wikidata (aide) Microsoft SQL Server est un système de gestion de base de données (SGBD) en langage SQL

MySQL

MySQL modifier - modifier le code - voir Wikidata (aide) MySQL (prononcée [maj.ɛs.ky.ɛl]) est un système de gestion de bases de données relationnelles

Transact-SQL

T-SQL? Sur les autres projets Wikimedia : Transact-SQL, sur Wikiversity Adaptive Server Enterprise PL/pgSQL (PostgreSQL) PL/SQL (Oracle) SQL (ANSI) SQL

PostgreSQL

PostgreSQL modifier - modifier le code - voir Wikidata (aide) PostgreSQL PostgreSQL, aussi connu sous le nom de Postgres, est un système de gestion de

Insert (SQL)

pour initier des actions sur d'autres tables. Select (SQL) Update (SQL) Delete (SQL) (en) « Oracle PL/SQL: INSERT ALL », psoug.org (consulté le 2 septembre

Update (SQL)

syntaxe suivante : UPDATE table SET column1='value1' ,column2='value2' WHERE condition Select (SQL) Insert (SQL) Delete (SQL) Portail des bases de données