Tout ce qu’il faut savoir en SQL – Partie 2 : WHERE, ORDER BY, LIMIT, OFFSET

Ce cours sur le SQL a pour but de donner des bases pour quiconque voudrait avoir une vision globale sur ce sujet.
SQL

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_socialenomprenomville
1DupontBaptisteParis
4DupontPaulParisis

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_socialenomprenomville
1DupontBaptisteParis

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_socialenomprenomville
1DupontBaptisteParis
2DurandJeanMarseille
4DupontPaulParisis
5DurandJacquesMarseille

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_socialenomprenomville
2DurandJeanMarseille
3DuchenePierreLyon
5DurandJacquesMarseille
6GirardBaptisteParis

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_socialenomprenomvillenaissance
1DupontBaptisteParis1953
2DurandJeanMarseille1985
3DuchenePierreLyon1968
4DupontPaulParisis1994
5DurandJacquesMarseille2002
6GirardBaptisteParis

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_socialenomprenomvillenaissance
2DurandJeanMarseille1985
4DupontPaulParisis1994
5DurandJacquesMarseille2002

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_socialenomprenomvillenaissance
2DurandJeanMarseille1985
4DupontPaulParisis1994

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_socialenomprenomvillenaissance
6GirardBaptisteParis

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

nomprenom
DupontBaptiste
DurandJean
DuchenePierre
DupontPaul
DurandJacques

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_socialenomprenomvillenaissance
2DurandJeanMarseille1985
3DuchenePierreLyon1968
5DurandJacquesMarseille2002

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_socialenomprenomville
3DuchenePierreLyon
4DupontPaulParisis
1DupontBaptisteParis
2DurandJeanMarseille
5DurandJacquesMarseille
6GirardBaptisteParis

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_socialenomprenomvillenaissance
1DupontBaptisteParis1953
2DurandJeanMarseille1985

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_socialenomprenomvillenaissance
3DuchenePierreLyon1968
4DupontPaulParisis1994

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 !

Total
0
Partages

Laisser un commentaire

Articles similaires