AccueilđŸ‡«đŸ‡·Chercher

Select (SQL)

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

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 :

col1col2col3
foobar42
foobaz84
RequĂȘteRĂ©sultatExplication
 SELECT * FROM my_table
col1col2col3
foobar42
foobaz84
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
col1col2
foobaz
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

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

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

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

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 :

col1col2col3
foobar1
foobaz2
barbar4
barbaz8
RequĂȘteRĂ©sultatExplication
SELECT col2, COUNT(1), AVG(col3) FROM my_table GROUP BY col2
col2COUNT(1)AVG(col3)
bar22.5
baz25
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)
26
21.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.

HAVING

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 :

col1col2col3
foobar1
foobaz2
barbar4
barbaz8
barfoo16
RequĂȘteRĂ©sultatExplication
SELECT col2, COUNT(1), AVG(col3) FROM my_table GROUP BY col2 HAVING COUNT(1) > 1
col2COUNT(1)AVG(col3)
bar22.5
baz25
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
col2countsum
baz210
Ici aussi trois groupes ont été créés, mais un seul a été conservé par la clause HAVING.

ORDER BY

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

Notes et références

    Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplĂ©mentaires peuvent s’appliquer aux fichiers multimĂ©dias.