« Structured Query Language/Requêtes SELECT » : différence entre les versions
Contenu supprimé Contenu ajouté
Aucun résumé des modifications |
Aucun résumé des modifications |
||
Ligne 378 :
==== BETWEEN ====
On aurait pu écrire la requête du dernier exemple différemment, les mots-clefs BETWEEN ... AND ... permettent de sélectionner des valeurs comprises entre deux bornes. Voici une requête qui renverra le même résultat qu'au
<source lang="sql">SELECT id, nom FROM test WHERE id BETWEEN 2 AND 7 AND ( nom = 'shepard' OR nom = 'somebody' );</source>
Ligne 559 :
HAVING, par contre, s'effectue après. C'est pourquoi il permet, contrairement à WHERE, de filtrer les données calculées.
<source lang="sql">SELECT points AS score FROM test WHERE score > 100;</source>
Une façon de contourner ce problème
<source lang="sql">SELECT score FROM (SELECT points AS score FROM test) s WHERE score > 100;</source>
Ligne 569 :
Le "s" après le FROM est un alias de table, il est obligatoire dans le cas d'une sous-requête (c'est la requête entre parenthèses).
La requête suivante
<source lang="sql">SELECT points AS score FROM test HAVING score > 100;</source>
Ligne 667 :
|}
Vous constatez qu'en effet,
<source lang="sql">SELECT * FROM test ORDER BY nom, points;</source>
Ligne 725 :
|}
Si vous voulez trier une colonne par ordre inverse, il vous suffit d'ajouter le mot-clef DESC après le nom de la colonne concernée. Par exemple la même requête qu'au
<source lang="sql">SELECT * FROM test ORDER BY nom, points DESC;</source>
Ligne 783 :
|}
<source lang="sql">SELECT id, nom FROM test ORDER BY quand;</source>
== Une clause à part : LIMIT ou TOP ==
Une clause {{Abréviation|S.Q.L.|Structured Query Language}} implémentée par la plupart des SGBDR permet de limiter le nombre de lignes retournées. Pour certains (PostGreSQL, MySQL, SQLite par exemple), c'est LIMIT à la fin de l'ordre SELECT, pour d'autres (Microsoft Access, Microsoft {{Abréviation|S.Q.L.|Structured Query Language}} Server), c'est TOP au début de ce même ordre.
Ces clauses ne font absolument pas partie du standard {{Abréviation|S.Q.L.|Structured Query Language}}, en effet le {{Abréviation|S.Q.L.|Structured Query Language}} suit une logique ensembliste, et limiter un ensemble est contraire à cette logique. N'hésitez cependant pas à les utiliser car dans beaucoup de cas ces clauses sont très pratiques
==== Un exemple avec LIMIT ====
Ligne 826 :
|}
Les 5 premières lignes insérées sont renvoyées. Suite à certaines requêtes le SGBDR pourrait tout aussi bien vous renvoyer les lignes dans un ordre totalement aléatoire, {{Abréviation|S.Q.L.|Structured Query Language}} n'admet
Les SGBDR qui proposent la clause LIMIT proposent généralement un complément nommé OFFSET qui permet de dire de prendre
▲Suite à certaines requêtes le SGBDR pourrait tout aussi bien vous renvoyer les lignes dans un ordre totalement aléatoire, {{Abréviation|S.Q.L.|Structured Query Language}} n'admet aucune sorte "d'ordre par défaut", si vous voulez être sur d'obtenir le même résultat à chaque requête sur les mêmes données, vous devez utiliser ORDER BY.
▲Les SGBDR qui proposent la clause LIMIT proposent généralement un complément nommé OFFSET qui permet de dire de prendre x lignes à partir de la ligne y :
<source lang="sql">SELECT * FROM test ORDER BY id LIMIT 3 OFFSET 2;</source>
Ligne 853 ⟶ 851 :
|}
==== Le même exemple avec TOP ====
<source lang="sql">SELECT TOP 5 * FROM test;</source>
{| class="wikitable"
Ligne 920 ⟶ 917 :
== Application de l'[[algèbre relationnelle]] ==
=== Sélection ===
À partir d'un ensemble A, obtenir un ensemble B dont les valeurs des
<source lang="sql">
</source>
=== Projection ===
À partir d'un ensemble A, obtenir un ensemble B dont les
<source lang="sql">
</source>
=== Intersection ===
À partir des ensembles A et B, obtenir un ensemble C qui contient les
<source lang="sql">
INTERSECT
</source>
=== Union ===
À partir des ensembles A et B, obtenir un ensemble C qui contient les
<source lang="sql">
UNION ALL
</source>
Sans les doublons :
<source lang="sql">
UNION
</source>
=== Différence ===
À partir des ensembles A et B, obtenir un ensemble C qui contient les
<source lang="sql">
</source>
En {{Abréviation|S.Q.L.|Structured Query Language}} 2 :
<source lang="sql">
EXCEPT
</source>
=== Produit cartésien ===
À partir des ensembles A et B, obtenir un ensemble C qui contient des
<source lang="sql">
</source>
=== Jointure ===
À partir des ensembles A et B, obtenir un ensemble C qui est
<source lang="sql">
</source>
=== Division cartésienne ===
À partir des ensembles A et B, obtenir un ensemble C, où la combinaison de chaque
<source lang="sql">
</source>
|