Requêtes élémentaires
Une requête simple consiste à demander l’affichage des valeurs de certaines colonnes A
des lignes d’une table R
Equivalence en algèbre relationnelle : la projection notée R[A]
ou π A (R)
Une première requête
1SELECT numero, nom, ville FROM Clients ;
Cette requête SQL sélectionne les valeurs numero
, nom
, ville
des lignes de la table Clients
.
Clients | ||
---|---|---|
numero | nom | ville |
1 | Lebreton | Meylan |
2 | Vasseur | Grenoble |
3 | Da Costa | Paris |
4 | Rey | Vizille |
5 | Weiss | Lille |
6 | Berlioz | Paris |
7 | Lefevre | Lyon |
9 | Barda | Paris |
8 | Jacques | Paris |
L’astérisque
Si on souhaite sélectionner toutes les colonnes d’une table, plutôt que de les énumérer, on peut utiliser l’astérisque *
1SELECT * FROM Clients ;
Résultat :
Clients | ||||||||
---|---|---|---|---|---|---|---|---|
numero | nom | prenom | rue | codePostal | ville | telephone | categorie | compte |
1 | Lebreton | Éléonore | 6 avenue Françoise Olivier | 38240 | Meylan | 0776059929 | A1 | 10000 |
2 | Vasseur | Georges | 54, avenue Jean | 38000 | Grenoble | +33 1 44 68 49 74 | B2 | 1903 |
3 | Da Costa | Léon | 18, boulevard Brigitte Faivre | 75000 | Paris | 0568740044 | C3 | -1500 |
4 | Rey | Michel | 49, avenue de Adam | 38220 | Vizille | B1 | 3251 | |
5 | Weiss | Dominique | 98, boulevard Remy | 59000 | Lille | B2 | 0 | |
6 | Berlioz | Diane | 27 avenue de la Chartreuse | 75000 | Paris | 123094 | ||
7 | Lefevre | Jean | 12, rue de la République | 69000 | Lyon | C1 | -1000 | |
9 | Barda | Jérôme | 128 rue de la Paix | 75000 | Paris | C1 | -2000 | |
8 | Jacques | Chaoui | 1240 rue des Ateliers | 75001 | Paris | C1 | -1750 |
Requête minimale
À minima, une requête SQL de sélection doit :
- cibler des attributs (spécifiques ou bien en utilisant le caractère
*
pour tous les sélectionner) après le mot cléSELECT
- cibler une ou plusieurs tables après le mot
FROM
- se terminer par un point virgule (attention, le saut de ligne n’est pas pris en compte comme une nouvelle requête)
1SELECT * FROM nom_table ;
Sélection
- La sélection consiste à extraire les lignes d’une table respectant une certaine propriété
- Equivalence en algèbre relationnelle : La sélection notée
R : C
ouσ C (R)
- La condition de sélection utilise les opérateurs de comparaison suivants :
=
: l’égalité>
: plus grand que<
: plus petit que<>
,!=
ouNOT
= : différent de>=
: plus grand ou égal<=
: plus petit ou égal
- Remarques
- L’ordre naturel est utilisé dans les comparaisons
- Les chaînes de caractère doivent être entourées d’apostrophes
'
et'
- Un des formats de dates utilisés est :
'2013-09-01'
Exemple
Soit la requête :
1SELECT numero, nom, ville2FROM Clients3WHERE ville = 'Paris' ;
Cette requête SQL sélectionne les valeurs numero
, nom
, ville
des lignes de la table Clients
et ne conserve que les lignes qui vérifient la condition ville = 'Paris'
.
Clients | ||
---|---|---|
numero | nom | ville |
3 | Da Costa | Paris |
6 | Berlioz | Paris |
9 | Barda | Paris |
8 | Jacques | Paris |
Problème
- Une requête mono table peut contenir autant de lignes qu’il y a de ligne vérifiant la condition dans la table
- Il se peut, si la sélection ne contient aucune clé, que le résultat possède plusieurs lignes identiques
- Pour éviter cela, on peut utiliser le mot clé
DISTINCT
qui permet de ne pas afficher les lignes identiques
Exemple avec duplication
1SELECT ville2FROM Clients3WHERE ville = 'Paris' ;
Clients |
---|
ville |
Paris |
Paris |
Paris |
Paris |
Exemple sans duplication
1SELECT DISTINCT ville2FROM Clients WHERE ville = 'Paris' ;
Clients |
---|
ville |
Paris |
Autre exemple
- Supposons que l’on veuille la liste des numéros de clients ayant passé au moins une commande. On écrirait la requête suivante :
1SELECT numeroClient FROM Commandes;
Commandes |
---|
numeroClient |
1 |
1 |
3 |
4 |
5 |
5 |
4 |
Le nombre d’éléments du résultat de cette requête n’est pas égal à celui des clients qui ont passé une commande. Les numéros clients sont dupliqués autant de fois qu’ils ont passé de commandes. Il faut donc mieux écrire :
1SELECT DISTINCT numeroClient FROM Commandes;
Commandes |
---|
numeroClient |
1 |
3 |
4 |
5 |
Remarque
Si la clause SELECT
cite tous les composants d’un identifiant de la table, l’unicité des lignes résultats est garantie.
Il est donc inutile d’utiliser DISTINCT dans ce cas.
Exemple :
1SELECT numeroCommande, numeroProduit FROM Details;
Details | |
---|---|
numeroCommande | numeroProduit |
1 | 1 |
1 | 2 |
1 | 3 |
2 | 4 |
2 | 5 |
Ayant selectionné tous les composants de la clé primaire de la table Details
, les lignes sont uniques.
Conclusion
- Les requêtes de sélection SQL
SELECT FROM WHERE (SFW)
permettent d’extraire des données d’une table en fonciton d’une condition - On peut sélectionner toutes les colonnes d’une table avec l’astérisque
*
- On peut éviter les doublons avec le mot clé
DISTINCT