Vous êtes sur la page 1sur 19

BASES DE DONNÉES – SQL

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)

- sélectionner certaines lignes d’une table en fonction de leur contenu (SÉLÉCTION)

- combiner des informations venant de plusieurs tables (JOINTURE, UNION, INTERSECTION,


DIFFERENCE et DIVISION)

L’utilisation basique de cette commande s’effectue de la manière suivante:

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é

NOTE : Pour sélectionner toutes les colonnes


Utiliser « * » SELECT * 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

L’utilisation de cette commande consiste à effectuer la requête suivante:

SELECT DISTINCT nom_colonne


FROM nom_table

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.

La requête est la suivante :

SELECT id, p_nom_fr_fr AS nom, p_description_fr_fr AS description, p_prix_euro AS prix


FROM produit

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.

La syntaxe est la suivante :

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:

id nom nbr_commande ville


Question 1 : Donner la liste des clients qui habitent à Paris :
1 Paul 3 parisSolution 1 :
2 Maurice 0 rennes SELECT *
FROM client
3 Joséphine 1 toulouse WHERE ville = “paris”
4 Gérard 7 paris

id nom nbr_commande ville


1 Paul 3 paris
La requête va donner le résultat suivant :
4 Gérard 7 paris
A CONNAITRE

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

Une requête SQL peut être restreinte à l’aide de la condition WHERE.

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

Opérateur OR : vérifie que la condition1 OU la condition2 est vrai :

Syntaxe : Question 2 : Donner la liste des produits ordinateur ou clavier


SELECT nom_colonnes dispo en stock :
FROM nom_table Solution 2:
WHERE condition1 OR condition2 SELECT *
FROM produit
WHERE nom = “ordinateur” OR nom=”clavier”

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 »)

3 65 28 Avenue 27220 Bordeaux


de
Cornouaille
4 67 41 Rue 76430 Marseille
Marcel de
la Provoté
5 68 18 Avenue 75009 Paris
de Navarre

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

Permet de filtrer les résultats qui contiennent la valeur NULL


SYNTAXE : Pour filtrer les résultats et obtenir que les valeurs qui ne sont pas NULL
SELECT * SELECT *
FROM table FROM table
WHERE nom_colonne IS NULL WHERE nom_colonne IS NOT NULL

9. ORDER BY

Il est possible de trier les données par ordre ascendant (ASC) ou descendant (DESC)

SYNTAXE :

SELECT colonne1, colonne2 SELECT colonne1, colonne2, colonne3


FROM table FROM table
ORDER BY colonne1 ORDER BY colonne1 DESC, colonne2 ASC
User
id nom prenom date_inscription tarif_total Question 1 : Donner les enregistrement par ordre
1 Senar Maurice 2012-02-05 145 aloha du nom de famille
Solution 1 :
2 Pinot Fabrice 2012-02-07 65
SELECT *
3 Senar Fabienne 2012-02-13 90 FROM User
ORDER BY nom ASC
4 Dubois Chloé 2012-02-16 98
5 Dubois Simon 2012-02-23 27

Question 1 : Donner les enregistrement par ordre alpha du


nom de famille et par ordre décroissant d’inscription
Solution 1 :
SELECT *
FROM User
ORDER BY nom ASC, date_inscription DESC

II. FONCTIONS

- Il faut éviter la duplication des informations dans les bases de données


- On utilise des fonctions SQL à cet effet.

SELECT FONCTION(a) SELECT a SELECT a


FROM t; FROM t FROM t
WHERE FONCTION(b) = C; ORDER BY FONCTION(b);
A. FONCTIONS DE CHAINES DE CARACTERES

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'

Question 1 : Donner les enregistrement en majuscule


id prenom nom ville Solution 1 :
SELECT id, UPPER(prenom) as PRENOM, , UPPER(nom) as
1 Constant Laborde Toulouse
NOM, UPPER(ville) as VILLE
2 Benjamin Rolland Lyon From user
3 Cosette Tellier Bordeaux
4 Paul Duchemin Grenoble

2.CONCAT()

La fonction CONCAT() permet de concaténer les valeur de plusieurs colonnes pour former une seule chaîne de
caractère

La syntaxe est la suivante :


SELECT CONCAT(colonne1, colonne2 | 'Expression1', 'Expression2' )
FROM table

Exemple :
SELECT CONCAT('Hello',' ','World')  résultat : 'Hello World'

Question : Donner prénom et nom en une colonne


id prenom nom « nom complet »
Solution :
1 Blaise Marais
2 Rosette Guillet Select id, CONCAT(nom, ‘ ‘, prenom) as NOM COMPLET
3 Ferdinan Levy FROM user
d
4 Sabine Lemair
e
5 Delphine Devos
3.LENGTH()

La fonction LENGTH() permet de calculer la longueur d’une chaîne de caractères


La syntaxe est la suivante :

SELECT LENGTH(colonne 1 | 'Expression')


FROM table

Exemple :
SELECT LENGTH('Hello World')  résultat : 11
Question : Donner la taille du login
vill Solution :

id login e telephone SELECT id, LENGTH(login) AS login_length


FROM utilisateur
1 aa Paris 123
2 paul Lyon 06.00.00.00.
00
3 leolebe Lyon 0600000000
au
4 john Lille 1

4.REPLACE()

La fonction REPLACE() permet de remplacer des caractères dans une chaîne de caractère.

La syntaxe est la suivante :

SELECT REPLACE('Chaîne initiale', ' Texte à remplacer', 'remplacement');


FROM table

Exemple :
SELECT REPLACE('Hello tout le monde', 'Hello', 'Bonjour'); Résultat : 'Bonjour tout le monde'

La syntaxe est la suivante :

SELECT colonne1, REPLACE(colonne2, 'expression1', 'expression2')


FROM table

Question : Remplacer dans le nom « Le » en « La »


Preno Solution :

id m Nom SELECT id, prenom, REPLACE(nom, « Le », « La ») as NOM


1 Blaise Marai FROM user
s
2 Rosette Guille
t
3 Ferdina Levy
nd
4 Sabine Lemai
re

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)

La syntaxe est la suivante :

SELECT SUBSTRING('Chaine initiale', Position, [Longueur]);

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'

 SELECT LEFT('abcdefghij', 0); résultat : ' '  SELECT RIGHT('abcdefghij', 0);


résultat : ' '
 SELECT LEFT('abcdefghij', -1); résultat : ' '

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é

La syntaxe est la suivante : SELECT LOCATE('Caractère recherché', 'Chaîne initiale', [position] );

Il est possible de commencer à chercher un caractères à partir d’une position

Exemple : SELECT LOCATE(‘a’ , ‘dane’) ; = 2 SELECT LOCATE(‘a’ , ‘andrea’ , 2) = 6

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 );

Question : Donner la valeur absolue des totaux


Solution :
Tota

id Prenom Nom l
1 CONSTA LABORDE 12
NT
2 BENJAMI ROLLAND -5
N
3 COSETTE TELLIER -30
4 PAUL DUCHEMI 36
N
ACCOUNT

2. CEIL() / FLOOR() / ROUND()


La fonction CEIL() permet d’obtenir la valeur entière supérieure / inférieur d’un nombre réel
La fonction ROUND() permet d’arrondir un nombre réel.

La syntaxe est la suivante : SELECT CEIL / FLOOR / ROUND (colonne | nombre );

Question : Donner la valeur entière supérieur des totaux


id Prenom Nom Total
Solution :
1 CONSTANT LABORDE 121,54
2 BENJAMIN ROLLAND 127,45 SELECT CONCACT(PRENOM,’ ‘, NOM) as Nom complet,
CEIL(Total)
3 COSETTE TELLIER 126.66 FROM ACCOUNT
4 PAUL DUCHEMIN 3400.00

3. POW()

La fonction POW() permet de retourner l’argument à la puissance spécifiée


La syntaxe est la suivante : SELECT POW(colonne | nombre, puisssane );

SELECT VALEUR, POW(Valeur,2)


id Prenom Nom Valeur FROM ACCOUNT
1 CONSTANT LABORDE 1
2 BENJAMIN ROLLAND 2
Valeur POW(Valeur,2)
3 COSETTE TELLIER 3
LABORDE 1
4 PAUL DUCHEMIN 4
ROLLAND 4
4. MOD() TELLIER 9
DUCHEMIN 16
La fonction MOD() permet de retourner le modulo d’un nombre, c.à.d. le
reste d'un nombre divisé par un autre nombre
La syntaxe est la suivante : SELECT MOD(colonne | nombre1, nombre2);

SELECT VALEUR, MOD(Valeur,2)


Valeur MOD(Valeur,2) FROM ACCOUNT
LABORDE 1
ROLLAND 0
TELLIER 1
DUCHEMIN 0
C. FONCTIONS DE DATES

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

5. DAY() / DAYOFYEAR() / DAYNAME() / MONTH() / MONTHNAME()

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

La syntaxe est la suivante : SELECT DAY(date);

Exemple :
SELECT DAY('2023-01-27'); résultat : 27

D. FONCTIONS MULTI LIGNES

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()

La fonction COUNT() présente trois formats :

 COUNT(*) renvoie le nombre de lignes d'une table y compris les lignes en double et celles qui
contiennent des valeurs NULL

 COUNT(colonne) renvoie le nombre de valeurs non NULL présentes dans la colonne

 COUNT(DISTINCT colonne) renvoie le nombre de valeurs non NULL uniques présentes dans la
colonne

- IFNULL()

Toutes les fonctions multi-lignes ignorent les valeurs NULL de la colonne

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)

SELECT group_fonction(colonne) - HAVING


FROM table
GROUP BY colonne Après la clause GROUP BY :

• on ne peut pas utiliser La clause WHERE (POUR


LIMITER LES LIGNES) pour limiter les groupes
retournés
• on doit utiliser la clause HAVING (LIMITER LES
GROUPES)
SELECT
group_fonction(colonne)
FROM table
GROUP BY colonne
HAVING condition

Exemple : Table etudiant


Lorsqu’on utilise HAVING, les opérations suivantes sont effectuées :
1. Les lignes sont regroupées SELECT Numero, AVG(Note)
2. La fonction de groupe est appliquée au groupe FROM etudiant
3. Les groupes qui correspondent à la clause HAVING s’affichent GROUP BY (Numero)
HAVING AVG(Note)>14
E02 14.3
E03 14.25

 LES EXPRESSIONS CONDITIONNELLES

- 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

Son usage est possible de 2 manières :


- Comparer une colonne à un set de valeur possible
- Une série de conditions booléennes pour déterminer un résultat

SYNTAXE : Les valeurs contenues dans « colonne » sont comparées à


valeur1 / 2 / 3 | si la condition est vraie, alors l’expression
CASE colonne après le THEN sera retournée.
WHEN valeur1 THEN 'expression1'
WHEN valeur2 THEN 'expression2' La condition ELSE est facultative :
WHEN valeur3 THEN 'expression3' Si les conditions ne sont pas vraies ; alors la valeur du ELSE
ELSE 'autre' sera retournée
END

“achat” :

id nom surcharge prix_unitaire q u a n ti t e


1 Produit A 1.3 6 3 Il est possible d’effectuer une requête qui va afficher un
message personnalisé en fonction de la valeur de la marge. Le
2 Produit B 1.5 8 2 message sera différent selon que la marge soit égale à 1,
3 Produit C 0.75 7 4 supérieur à 1 ou inférieure à 1. La requête peut se présenter de
la façon suivante:
4 Produit D 1 15 2

SELECT id, nom, surcharge, prix_unitaire, quantite,


CASE
WHEN surcharge=1 THEN 'Prix ordinaire'
      WHEN surcharge>1 THEN 'Prix augmenté
  ELSE 'Prix moyen’
END
id nom surcharge prix_unitaire q u a n ti t e CASE
FROM `achat`
1 Produit A 1.3 6 3 Prix supérieur à la normale
2 Produit B 1.5 8 2 Prix supérieur à la normale
3 Produit C 0.75 7 4 Prix inférieur à la normale
4 Produit D 1 15 2 Prix ordinaire

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

Les jointures permettent de récupérer les données


id prenom nom email id Ville de différentes tables dans une même requête.
Elles consistent à associer : les lignes de deux tables
1 Martin Lucas Lucas.martin@outlook.fr 1 Marseille En associant l’égalité :
2 Clavier Paul NULL 2 Paris - Des valeurs d’une colonne d’une première
table
3 Sauron Benoit NULL 3 Lyon - Par rapport à la valeur d’une colonne d’une
4 Oron Louis Louis.oron@yahoo.fr NULL NULL seconde table
5 Poiret Michel michel@hotmail.com NULL NULL
a. INNER JOIN
Cette commande retourne les SELECT *
enregistrements lorsqu’il y’a au moins FROM table_1
une ligne dans chaque colonne qui INNER JOIN table_2
correspond à la condition. ON table_1.colonne1 = table_2.colonne2;

La requête se décompose en 3 parties :


- SELECT et FROM : choix des colonnes extraient de la table de référence
- INNER JOIN : le type de jointure utilisée (avec la table 2)
- ON : définit la condition (=) et la clé de jointure (col1, col2) SELECT *
FROM ville
EXEMPLE :
INNER JOIN email
Table ville montre les villes où vit le client
id Ville ON ville.id_client = email.id_client
id prenom nom email correspondant à l’id_client
1 Marseille Table email donne les informations sur des clients
1 Martin Lucas Lucas.martin@outlook.fr

2 Paris 2 Clavier Paul NULL

3 Lyon 3 Sauron Benoit NULL


4 Oron Louis Louis.oron@yahoo.fr
7 Montpellier
5 b.
Poiret Michel michel@hotmail.com LEFT JOIN
8 Levallois

Cette commande permet de lister tous SELECT *


les résultats de la table de gauche même FROM table_1
s’il n’y a pas de correspondance dans la LEFT JOIN table_2
deuxième table. ON table_1.colonne1 = table_2.colonne2;
id Ville id prenom nom email

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

id prenom nom email id Ville


1 Martin Lucas Lucas.martin@outlook.fr 1 Marseille
2 Clavier Paul NULL 2 Paris
3 Sauron Benoit NULL 3 Lyon
NULL NULL NULL NULL 7 Montpellier
NULL NULL NULL NULL 8 Levallois d. FULL JOIN

Cette commande permet de combiner SELECT *


les résultats des 2 tables, les associer FROM table_1
entre eux grâce à une condition et FULL JOIN table_2
remplir avec des valeurs NULL si la ON table_1.colonne1 = table_2.colonne2;
condition n’est pas respectée.
e. NATURAL JOIN

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

id prenom nom email Ville


1 Martin Lucas Lucas.martin@outlook.fr Marseille

2 Clavier Paul NULL Paris


3 Sauron Benoit NULL Lyon

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

La requête se décompose en 3 parties :


 SELECT et FROM permettent de choisir quelles informations sont extraites depuis la table de
référence
 UNION définit le type de jointure SQL

 SELECT et FROM permettent de choisir quelles informations sont extraites depuis la deuxième table

Vous aimerez peut-être aussi