Académique Documents
Professionnel Documents
Culture Documents
I. INTRODUCTION
1. SELECT
L’utilisation la plus courante de SQL consiste à lire des données issues de la base de données.
Cela s’effectue grâce à la commande SELECT, qui retourne des enregistrements dans un tableau de
résultat.
Cette commande permet de :
- sélectionner une ou plusieurs colonnes d’une table (PROJECTION)
SELECT nom_du_champ
FROM nom_du_tableau
Exemple 1 : Imaginons une base de données appelée “employé” qui contient des informations sur les
clients d’une entreprise.
ID PRENOM NOM SALAIRE VILLE Question 1 : Donner la liste de toutes les villes des clients :
Solution 1 :
1 Pierre Dupond 200 Paris SELECT ville
2 Sabrina Durand 50 Nantes FROM employé
3 Julien Martin 320 Lyon
Question 2 : Donner la liste des noms et prénoms des clients :
4 David Bernard 135 Marseille Solution 2 :
SELECT prénom, nom
5 Marie Leroy 80 Grenoble
FROM employé
REMARQUE : Une requête SQL utilisant le caractère * à moins de chance d’échouer si les tables évoluent
Puisque les noms des champs ne sont pas spécifiés ; la requête va continuer de fonctionner si un champ et
supprimé ou son nom est modifié
Il est conseillé de ne pas l’utilisé dans une application ; ce caractère doit par conséquent être réservé́ à un
usage ponctuel lorsqu’un développeur souhaite lire rapidement le contenu d’une base
NOTE : On peut utiliser des opérations mathématique de base ; pour générer de nouvelles colonnes à
partir de celles déjà présentes dans le tableau.
Exemple :
SELECT * , salaire * 12
FROM employé
2. DISTINCT
ID PRENOM NOM SALAIRE VILLE REMARQUE : Le prénom Pierre se répète dans le tableau
Si on utilise que la commande SELECT on aura 2 fois Pierre
1 Pierre Dupond 200 Paris
dans le résultat.
2 Sabrina Durand 50 Nantes
3 Julien Martin 320 Lyon Ainsi l’usage de DISTINCT va filtrer les prénoms et n’afficher
qu’une seule fois Pierre (ne va pas le supprimer)
4 Pierre Bernard 135 Marseille
5 Marie Leroy 80 Grenoble SELECT DISTINCT prenom
FROM employé
On peut utiliser DISTINCT avec plusieurs colonnes. Dans ce cas, les enregistrements ayant le même nom
SELECT DISTINCT nom, Prenom et prénom, en double sont éliminé dans le tableau
FROM employé de résultat rendu.
3. AS (ALIAS)
Cette commande permet de renommer le nom d’une colonne dans les résultats d’une requête SQL.
Cela peut aider à avoir des noms plus court, plus simple et plus facilement compréhensible.
Elle modifiera le nom des champs qui seront affiché dans le résultat.
4. WHERE
La commande WHERE dans une requête SQL permet d’extraire les lignes d’une table respectant une
condition.
Cela permet d’obtenir uniquement les informations désirées.
SELECT nom_colonnes
FROM nom_table
WHERE condition
Exemple 2 : Imaginons une base de données appelée “client” qui contient le nom des clients, le nombre
de commandes qu’ils ont effectués et leur ville:
Opérateur Description
= Égale
<> Pas égale
!= Pas égale
> Supérieur à
< Inférieur à
>= Supérieur ou égale à
<= Inférieur ou égale à
IN Liste de plusieurs valeurs possibles
BETWEEN Valeur comprise dans un intervalle donnée (utile pour les nombres ou
dates)
LIKE Recherche en spécifiant le début, milieu ou fin d'un mot.
IS NULL Valeur est nulle
IS NOT NULL Valeur n'est pas nulle
4. WHERE
a. AND & OR
Les opérateurs logiques AND et OR peuvent être utilisées au sein de la commande WHERE pour combiner
des conditions
Opérateur AND : permet de joindre plusieurs conditions dans une requête assure que la condition1 ET la
condition2 soient vrai
Syntaxe :
SELECT nom_colonnes
FROM nom_table
WHERE condition1 AND condition2
produit
id nom categorie stock prix Question 1 : Donner la liste des produits informatiques qui ont
moins de 20 produits dispo en stock :
1 ordinateur informatique 5 950 Solution 1:
2 clavier informatique 32 35 SELECT *
FROM produit
3 souris informatique 16 30
WHERE catégorie = “informatique” AND stock < 20
4 crayon fourniture 147 2
REMARQUE: On peut combiner AND et OR : Question 3 : Donner la liste des produits informatique avec un
stock inf a 20 et les fournitures avec stock inf a 200 dispo en
Syntaxe :
stock :
Solution 2:
SELECT nom_colonnes
FROM nom_table SELECT *
WHERE condition1 AND (condition2 OR condition3) FROM produit
WHERE (catégorie = “informatique” AND stock <20) OR
(catégorie=”fourniture” AND stock < 200)
5. IN
L’opérateur logique IN s’utilise avec la commande WHERE pour vérifier si une colonne est égale à une des
valeurs comprise dans un set de valeurs déterminées
Pour chercher toutes les lignes où la colonne « nom_colonne » est égale à ‘valeur 1′ OU ‘valeur 2′ ou
‘valeur 3′, utiliser la syntaxe suivante :
REMARQUE :
SELECT nom_colonne
On peut utiliser NOT pour rech les lignes qui ne sont pas
FROM table égales aux valeurs stipulées
WHERE nom_colonne IN (valeur1, valeur2, valeur3, ... )
Adresse
addr_code
id id_utilisateur addr_rue _postal addr_ville
1 23 35 Rue 25250 Nice Question 1 : Donner les enregistrement de Paris et
Madeleine de Marseille
Pelletier Solution 1 :
2 43 21 Rue du 75006 Paris SELECT *
Moulin FROM Adresse
Collet WHERE ville IN (« Paris », « Marseille »)
6. BETWEEN
L’opérateur BETWEEN est utilisé́ pour sélectionner un intervalle de données dans la commande WHERE
L’intervalle peut être constitue de chaines de caractères, de nombres ou de dates.
SELECT *
FROM table
WHERE nom_colonne BETWEEN 'valeur1' AND 'valeur2'
id nom date_inscription Question 1 : Donner la liste des membre inscrits entre le 01/04/12 et
1 Maurice 2012-03-02 20/04/12
User
Solution 1 :
2 Simon 2012-03-05 7. LIKE
SELECT *
3 Chloé 2012-04-14 FROM User
Cet opérateur permet d’effectuer une recherche sur un modèle
WHERE date_inscription BETWEEN “01/04/2012” AND “20/04/2012”
4 Marie 2012-04-15 particulier.
Il est par exemple possible de rechercher les enregistrements dont la
5 Clémentine 2012-04-26 SELECT *
valeur d’une colonne commence par telle ou telle lettre
FROM User
WHERE Id NOT BETWEEN 4 AND 10
La syntaxe à utiliser pour utiliser l’opérateur LIKE est la suivante :
SELECT *
FROM table
WHERE colonne LIKE modele
- LIKE ‘%a’ : le caractère “%” est un caractère joker qui remplace tous les autres caractères. Ainsi, ce
modèle permet de rechercher toutes les chaines de caractère qui se termine par un “a”.
- LIKE ‘a%’ : ce modèle permet de rechercher toutes les lignes de “colonne” qui commence par un
“a”.
- LIKE ‘%a%’ : ce modèle est utilisé pour rechercher tous les enregistrement qui utilisent le
caractère “a”.
- LIKE ‘pa%on’ : ce modèle permet de rechercher les chaines qui commence par “pa” et qui se
terminent par “on”, comme “pantalon” ou “pardon”.
- LIKE ‘a_c’ : peu utilisé, le caractère “_” peut être remplacé par n’importe quel caractère, mais un
seul caractère uniquement (alors que le symbole pourcentage “%” peut être remplacé par un
nombre incalculable de caractères . Ainsi, ce modèle permet de retourner les lignes “aac”, “abc”
ou même “azc”.
Client Question 1 : Donner la liste des clients des villes qui commencent par N
Solution 1 :
id nom ville
SELECT *
1 Léon Lyon FROM Client
2 Odette Nice WHERE ville LIKE “N%”
3 Vivien Nantes Question 2 : Donner la liste des clients des villes qui terminent par e
4 Etienne Lille Solution 2 :
SELECT *
FROM Client
WHERE ville LIKE “%e”
8. IS NULL / IS NOT NULL
9. ORDER BY
Il est possible de trier les données par ordre ascendant (ASC) ou descendant (DESC)
SYNTAXE :
II. FONCTIONS
1. UPPER() / LOWER()
La fonction UPPER() / LOWER() permet de transformer toute la chaîne de caractère en majuscules / minuscule.
La syntaxe est la suivante :
SELECT LOWER(colonne 1 | 'Chaine')
SELECT UPPER(colonne 1 | 'Chaine')
FROM table
FROM table
Exemple : Exemple :
SELECT UPPER('sql'); résultat : 'SQL' SELECT LOWER(‘SQL’); résultat : 'sql'
2.CONCAT()
La fonction CONCAT() permet de concaténer les valeur de plusieurs colonnes pour former une seule chaîne de
caractère
Exemple :
SELECT CONCAT('Hello',' ','World') résultat : 'Hello World'
Exemple :
SELECT LENGTH('Hello World') résultat : 11
Question : Donner la taille du login
vill Solution :
4.REPLACE()
La fonction REPLACE() permet de remplacer des caractères dans une chaîne de caractère.
Exemple :
SELECT REPLACE('Hello tout le monde', 'Hello', 'Bonjour'); Résultat : 'Bonjour tout le monde'
5.SUBSTRING()
La fonction SUBSTRING() permet d’extraire une partie d’une chaîne de caractère en commençant à une position
donnée (et sur une longueur donnée)
Question : sortir les 2 premiere lettres du nom On veut les 2 premières lettres.
id nom_fr Solution :
6.LEFT() / RIGHT()
Donc on prend : position = 1
1 FRANCE ere
La fonction LEFT() permet d’extraire le début/la fin d’une chaîne1de lettre
SELECT id, SUBSTRING(nom_fr,1,2) Car et onenveut
caractères les 2
définissant
2 ESPAGNE From Table premières lettres donc
la longueur souhaitée
3 ALLEMAGNE Exemple la: longueur = 2
La syntaxe est la suivante : SELECT LEFT( 'Chaîne initiale', longueur );
4 CHINE
SELECT RIGHT('abcdefghij', 3);
Exemple : résultat : 'hij'
SELECT LEFT('abcdefghij', 2); résultat : 'ab'
SELECT RIGHT('abcdefghij', 20);
résultat : 'abcdefghij'
SELECT LEFT('abcdefghij', 20); résultat : 'abcdefghij'
7.TRIM()
La fonction TRIM() permet de supprimer des caractères au début et en fin d’une chaîne de caractères
Le plus souvent ce sont des caractères invisibles (espace, tabulation et retour à la ligne)
Cette fonction est utile pour économiser de l’espace dans une base de données ou pour afficher proprement des
données
Exemple :
La syntaxe est la suivante :
SELECT TRIM('caractères' from 'Chaîne initiale' );
SELECT TRIM(' abcd '); résultat : ‘abcd’
SELECT TRIM('a' from 'abcda'); résultat : ‘bcd’
8. LOCATE()
La fonction LOCATE() permet de chercher la position d’un ou des caractères dans une chaîne de caractères
La fonction retourne zéro si le caractères n’a pas été trouvé
B. FONCTIONS NUMÉRIQUES
1. ABS()
La fonction ABS() permet de retourner la valeur absolue d’un nombre.
La syntaxe est la suivante : SELECT ABS(colonne | nombre );
id Prenom Nom l
1 CONSTA LABORDE 12
NT
2 BENJAMI ROLLAND -5
N
3 COSETTE TELLIER -30
4 PAUL DUCHEMI 36
N
ACCOUNT
3. POW()
1. CURDATE()
La fonction CURDATE()permet de récupérer la date courante sous la forme yyyy-mm-dd
La syntaxe est la suivante : SELECT CURDATE();
2. CURTIME()
La fonction CURTIME() permet de récupérer l’heure actuelle sous la forme hh:mm:ss
La syntaxe est la suivante : SELECT CURTIME();
3. NOW()
La fonction NOW() permet de récupérer la date et l’heure actuelle sous la forme yyyy-mm-dd hh:mm:ss
La syntaxe est la suivante : SELECT NOW();
4. YEAR()
La fonction YEAR() permet de retourner l’année d’une date sous la forme yyyy
La syntaxe est la suivante : SELECT YEAR(date);
Exemple :
SELECT YEAR ('2023-01-27'); résultat : 2023
La fonction DAY() permet de retourner le jour du mois dans la date (le résultat est de 1 à 31)
La fonction DAYOFYEAR() permet de retourner le jour de l’année (1 a 366)
La fonction DAYNAME() permet de retourner le nom du jour correspondant
La fonction MONTH() permet de retourner le numéro du mois
La fonction MONTHNAME() permet de retourner le nom du mois
Exemple :
SELECT DAY('2023-01-27'); résultat : 27
FONCTION DESCRIPTION
AVG() Valeur moyenne (les valeurs NULL sont ignorées)
Nombre de lignes (toutes les lignes sélectionnées sont comptées avec *, y compris les
COUNT()
doublons et les lignes avec des valeurs NULL)
MAX() Valeur maximale (les valeurs NULL sont ignorées)
MIN() Valeur minimale (les valeurs NULL sont ignorées)
SUM() Somme des valeurs (les valeurs NULL sont ignorées)
La syntaxe est la suivante : On peut utiliser les fonctions MAX et MIN pour
les valeurs numériques
SELECT group_fonction(colonne),... les valeurs de type caractère (ordre
FROM table alpha)
et les valeurs de type date
Exemple :
SELECT AVG(note), MAX(note), MIN(note), SUM(note) Les fonctions AVG et SUM ne peuvent être
FROM étudiant utilisées qu'avec
• les données de type numérique
- COUNT()
COUNT(*) renvoie le nombre de lignes d'une table y compris les lignes en double et celles qui
contiennent des valeurs NULL
COUNT(DISTINCT colonne) renvoie le nombre de valeurs non NULL uniques présentes dans la
colonne
- IFNULL()
Pour que par exemple AVG() calcule les valeurs sur la base de toutes les lignes de la table, que des valeurs
NULL soient stockées ou non dans la colonne
Il faut utiliser la fonction IFNULL qui force les fonctions de groupe à inclure les valeurs NULL
La syntaxe est : IFNULL(colone,0) si la colonne contient une valeur NULL, remplacer-la par 0
SELECT AVG(IFNULL(`Note`,0))
- GROUP BY
Parfois il est intéressant de diviser la table en groupes d’infos plus petits (GROUP BY)
- CASE WHEN
Elle permet d’utiliser des conditions de type if/else. Peut etre utilisé dans n’importe quelle instruction ou clause, telle que
SELECT, UPDATE, DELETE, WHERE, ORDER BY ou HAVING
“achat” :
Imaginons maintenant que l’application propose des réductions selon le nombre de produits achetés:
1 produit acheté permet d’obtenir une réduction de -5% pour le prochain achat
2 produit acheté permet d’obtenir une réduction de -6% pour le prochain achat
3 produit acheté permet d’obtenir une réduction de -8% pour le prochain achat
Pour plus de produits achetés il y a un réduction de -10% pour le prochain achat
Pour effectuer une telle procédure, il est possible de comparer la colonne “quantite” aux différentes valeurs
spécifiée et d’afficher un message personnalisé en fonction du résultat. Cela peut être réalisé avec cette
requête SQL:
SELECT id, nom, surcharge, prix_unitaire, quantité,
CASE quantité
WHEN 0 THEN 'Erreur'
WHEN 1 THEN 'Offre de -5% pour le prochain achat'
WHEN 2 THEN 'Offre de -6% pour le prochain achat'
WHEN 3 THEN 'Offre de -8% pour le prochain achat'
ELSE 'Offre de -10% pour le prochain achat'
END
FROM `achat`
- JOINTURE
Dans cet exemple, on a la table mail par rapport a la table ville. 1 Marseille 1 Martin Lucas Lucas.martin@outlook.fr
Donc on recense toutes les lignes de la table mail. 2 Paris 2 Clavier Paul NULL
On fait la recherche selon l’id ; ainsi dans la table ville on récupère
les infos des id qui sont aussi dans la table mail 3 Lyon 3 Sauron Benoit NULL
SELECT *
FROM email
LEFT JOIN ville
ON email.id_client = ville.id_client
id prenom nom email Ville
c. RIGHT JOIN
1 Martin Lucas Lucas.martin@outlook.fr Marseille
Cette commande permet de lister tous SELECT *
2 Clavier Paul NULL
les résultats de la tableParis
de droite même FROM table_1
3 Sauron Benoit s’il n’y a pas de correspondance
NULL Lyon dans la RIGHT JOIN table_2
deuxième table. ON table_2.colonne2 = table_1.colonne1;
4 Oron Louis Louis.oron@yahoo.fr NULL
5 Poiret Michel michel@hotmail.com NULL SELECT *
7 NULL NULL NULL Montpellier FROM email
RIGHT JOIN ville
8 NULL NULL NULL Levallois
ON ville.id_client = email.id_client
Cette jointure s’effectue à la condition qu’il y ai des colonnes du même nom et de même type dans les 2 tables. Le
résultat d’une jointure naturelle est la création d’un tableau avec autant de lignes qu’il y a de paires correspondant à
l’association des colonnes de même nom.
SELECT * SELECT *
FROM table1 FROM ville
NATURAL JOIN table2 NATURAL JOIN email
f. SELF JOIN
g. UNION JOIN
La syntaxe est la suivante :
Elle réalise le même travail que FULL JOIN mais :
SELECT * FROM table1
s’utilise avec des tables qui ont les mêmes colonnes
UNION
la table résultat n’a pas de doublons
SELECT * FROM table2
Cette jointure
ne cherche pas la correspondance entre les lignes des tables,
mais crée plutôt une table unique qui contient l’union des deux tables sources
SELECT et FROM permettent de choisir quelles informations sont extraites depuis la deuxième table