Ce cours sur le SQL a pour but de donner des bases pour quiconque voudrait avoir une vision globale sur ce sujet. Il permet d’avoir une vision globale sur comment lire une base de données et faire des requêtes. Cet article est le deuxième d’une série de 5 articles et a pour vocation à terminer présenter les commandes de base.
Ce cours est la suite de la partie 1, il va terminer la présentation des commandes de base
La commande WHERE
- La commande WHERE permet de filtrer des lignes à l’aide de contraintes
- Ces contraintes peuvent être sous diverses formes (OR, AND, ‘=’, IN, LIKE, …)
- Nous allons voir comment manipuler tous ces opérateurs.
- WHERE apparaît après FROM dans la requête
Exemple
On veut sélectionner tous les gens qui ont pour nom de famille Dupont :
SELECT
*
FROM
personnes
WHERE
nom = ‘Dupont’
Pour une chaine de caractères, on va mettre des guillemets. De plus, la casse est importante.
Voici le résultat de la requête SQL. On prend encore une fois la table de la partie 1.
secu_sociale | nom | prenom | ville |
1 | Dupont | Baptiste | Paris |
4 | Dupont | Paul | Parisis |
L’opérateur AND
On veut par exemple sélectionner tous les gens qui ont pour nom de famille Dupont et pour prénom Baptiste. Pour cela, on utilise la commande AND :
SELECT
*
FROM
personnes
WHERE
nom = ‘Dupont’ AND prenom = ‘Baptiste’
Ce qui nous donne ce résultat :
secu_sociale | nom | prenom | ville |
1 | Dupont | Baptiste | Paris |
L’opérateur OR
On veut cette fois sélectionner tous les gens qui ont pour nom de famille Dupont ou qui sont nés à Marseille :
SELECT
*
FROM
personnes
WHERE
nom = ‘Dupont’
OR
ville = ‘Marseille’
On obtient alors :
secu_sociale | nom | prenom | ville |
1 | Dupont | Baptiste | Paris |
2 | Durand | Jean | Marseille |
4 | Dupont | Paul | Parisis |
5 | Durand | Jacques | Marseille |
L’opérateur !=
On veut sélectionner tous les gens qui n’ont pas pour nom de famille Dupont. Pour cela, on utilise l’opérateur != ou bien <>. En terme de code, cela donne :
SELECT
*
FROM
personnes
WHERE
nom != ‘Dupont’
Et on obtient comme donc résultat de requête :
secu_sociale | nom | prenom | ville |
2 | Durand | Jean | Marseille |
3 | Duchene | Pierre | Lyon |
5 | Durand | Jacques | Marseille |
6 | Girard | Baptiste | Paris |
On a bien toutes les tables ne contenant pas Dupont.
L’opérateur IN
On veut sélectionner tous les gens qui ont un nom de famille parmi une liste de données. On utilise pour cela l’opérateur IN. Il est équivalent à un OR quand on met des conditions sur la même colonne mais peut s’avérer utile si la liste est longue. Si on a n conditions sur la même colonne, on devrait mettre n-1 OR alors qu’un seul IN suffit.
Mettons qu’on veuille par exemple tous les numéros de sécurité sociale des personnes dont le prénom est Pierre, Jean ou Jacques. La requête SQL est alors la suivante :
SELECT
secu_sociale
FROM
personnes
WHERE
prenom IN (‘Pierre’,’Paul’,’Jacques’)
Ce qui va nous donner comme résultat :
secu_sociale |
3 |
4 |
5 |
Remarque : On affiche la colonne secu_sociale. On a mis une contrainte sur la colonne prenom. On peut donc mettre des contraintes sur les contenus de colonne que l’on affiche pas.
L’opérateur LIKE
On veut sélectionner toutes les villes qui commencent par “Par”. Pour cela on utilise la commande LIKE
SELECT DISTINCT
ville
FROM
personnes
WHERE
ville LIKE ‘Par%’
Voici le résultat :
ville |
Paris |
Parisis |
Voici quelques autres exemples avec LIKE pour être sûr de comprendre ce que fait cet opérateur :
- Si ou voulait les villes qui se terminent par “par”, on utiliserait ville LIKE ‘%par’
- ville LIKE ‘%par%’ signifie les villes contenant ‘par’
- ville LIKE ‘par%par’ signifie les villes qui commencent et finissent par “par”
Pour la liste de conditions suivantes, on va rajouter une colonne “naissance” correspondant à la date de naissance et une ligne contenant un terme vide.
secu_sociale | nom | prenom | ville | naissance |
1 | Dupont | Baptiste | Paris | 1953 |
2 | Durand | Jean | Marseille | 1985 |
3 | Duchene | Pierre | Lyon | 1968 |
4 | Dupont | Paul | Parisis | 1994 |
5 | Durand | Jacques | Marseille | 2002 |
6 | Girard | Baptiste | Paris |
Les opérateurs >,<,>=,<=
On veut sélectionner les personnes nées strictement après 1980. On va utiliser “>”
SELECT
*
FROM
personnes
WHERE
naissance > 1980
Voici le résultat :
secu_sociale | nom | prenom | ville | naissance |
2 | Durand | Jean | Marseille | 1985 |
4 | Dupont | Paul | Parisis | 1994 |
5 | Durand | Jacques | Marseille | 2002 |
On peut utiliser < (strictement inférieur), <= (inférieur ou égal), >= (supérieur ou égal) et != (différent)
Ces opérateurs fonctionnent aussi pour l’ordre alphabétique (lexicographique) des chaînes de caractère.
L’opérateur BETWEEN
On veut sélectionner les personnes nées entre 1980 et 2000. Dans ce cas de figure, on a 2 choix possibles :
- Ce sont les personnes nées après 1980 (naissance >= 1980) et (AND) avant 2000 (naissance <= 2000)
- On utilise l’opérateur BETWEEN : naissance BETWEEN 1980 AND 2000
Voici donc la requête que l’on peut faire :
SELECT
*
FROM
personnes
WHERE
naissance BETWEEN 1980 AND 2000
On obtient alors le résultat suivant :
secu_sociale | nom | prenom | ville | naissance |
2 | Durand | Jean | Marseille | 1985 |
4 | Dupont | Paul | Parisis | 1994 |
Cet opérateur fonctionne aussi pour l’ordre alphabétique des chaînes de caractère ou pour les dates.
L’opérateur NULL
On veut sélectionner les personnes dont la date de naissance est inconnue. D’un point de vue base de données, cela veut dire que ce champ n’est pas rempli. Pour ce faire, on va utiliser l’opérateur NULL
SELECT
*
FROM
personnes
WHERE
naissance is NULL
Ce qui nous donne cette fois le résultat
secu_sociale | nom | prenom | ville | naissance |
6 | Girard | Baptiste | Paris |
L’opérateur NOT
On veut sélectionner les personnes qui ne vérifient pas un critère donné. Pour cela on utilise l’opérateur NOT. Par exemple, on peut chercher les noms et prénoms des personnes dont la date de naissance est remplie, ce qui est la condition contraire de la requête d’au dessus.
SELECT
nom, prenom
FROM
personnes
WHERE
naissance is NOT NULL
Voici alors le résultat
nom | prenom |
Dupont | Baptiste |
Durand | Jean |
Duchene | Pierre |
Dupont | Paul |
Durand | Jacques |
Voici un autre exemple : On veut sélectionner les personnes dont la date de naissance ne commence pas par “Par”, ce qui nous donne cette requête :
SELECT
nom, prenom
FROM
personnes
WHERE
ville not LIKE ‘Par%’
Et ce résultat de requête :
secu_sociale | nom | prenom | ville | naissance |
2 | Durand | Jean | Marseille | 1985 |
3 | Duchene | Pierre | Lyon | 1968 |
5 | Durand | Jacques | Marseille | 2002 |
L’opérateur ORDER BY
3 points à retenir :
- La commande ORDER BY permet d’ordonner des lignes selon une ou plusieurs colonnes
- On peut ordonner dans l’ordre croissant “ORDER BY Colonne” ou “ORDER BY colonne ASC”. Par défaut, ORDER BY ordonne donc par ordre croissant.
- On peut ordonner dans l’ordre décroissant grâce à “ORDER BY Colonne DESC”
Exemple
On veut ordonner les personnes par nom de famille croissant puis prénom décroissant en cas d’égalité. On va donc utiliser la commande ORDER BY
SELECT
*
FROM
personnes
ORDER BY
nom, prenom DESC
Voici le résultat de requête obtenu :
secu_sociale | nom | prenom | ville |
3 | Duchene | Pierre | Lyon |
4 | Dupont | Paul | Parisis |
1 | Dupont | Baptiste | Paris |
2 | Durand | Jean | Marseille |
5 | Durand | Jacques | Marseille |
6 | Girard | Baptiste | Paris |
Les opérateurs LIMIT et OFFSET
Voici les quatre points importants à retenir :
- La commande LIMIT permet de limiter le nombre de lignes affichées : LIMIT 5 permet de limiter l’affichage aux 5 premières lignes
- La commande OFFSET permet de de récupérer les lignes à partir d’un certain rang. Exemple : OFFSET 2 permet d’occulter les 2 premières lignes et de démarrer à la troisième
- LIMIT apparait après ORDER BY
- OFFSET apparait après LIMIT
LIMIT
On veut garder seulement les deux premières lignes de la base, pour voir un extrait de la table. On va donc utiliser la commande LIMIT
SELECT
*
FROM
personnes
LIMIT 2
On obtient le résultat suivant :
secu_sociale | nom | prenom | ville | naissance |
1 | Dupont | Baptiste | Paris | 1953 |
2 | Durand | Jean | Marseille | 1985 |
OFFSET
On veut garder seulement les lignes 3 et 4 de la table, pour en voir un extrait. On va donc utiliser la commande OFFSET mais uassi LIMIT pour garder seulement 2 lignes.
SELECT
*
FROM
personnes
LIMIT 2
OFFSET 2
Ce qui permet d’obtenir le résultat voulu :
secu_sociale | nom | prenom | ville | naissance |
3 | Duchene | Pierre | Lyon | 1968 |
4 | Dupont | Paul | Parisis | 1994 |
Un peu d’entrainement
Pour vous entrainer sur ce qui a été vu lors des parties 1 et 2, je vous conseille d’aller faire les exercices des leçons 1 à 5 de SQLBolt :
https://sqlbolt.com/lesson/select_queries_introduction
Au prochain article : les jointures !