0% ont trouvé ce document utile (0 vote)
38 vues101 pages

2 SQL LMD

Transféré par

Roda Rodi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
38 vues101 pages

2 SQL LMD

Transféré par

Roda Rodi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

CHAPITRE 2

Systèmes de Gestion de Bases de


Données

SQL – Langage de Manipulation


de données(LMD)
CHAPITRE 2

Réaliser des requêtes SQL

Ce que vous allez apprendre dans ce


chapitre :

• Maîtriser les principales requêtes SQL


• Gérer les fonctions du SGBD
CHAPITRE 2
Réaliser des requêtes SQL

1. Requêtes LMD
2. Requêtes de sélection
3. Expression du SGBD
4. Fonctions d’agrégation du SGBD
5. Sous requêtes
6. Requêtes de l’union
7. Jointures
01- Requêtes LMD
INSERT :
La commande INSERT permet d'insérer une ou plusieurs lignes de données dans une table selon la
syntaxe suivante :
INSERT INTO nom_table(colonne1,colonne2,...)
VALUES (valeur1,valeur2,...);
On doit spécifier :
• Le nom de la table ainsi qu’une liste de ses colonnes séparées par des virgules entre parenthèses.
• La liste de valeurs à insérer dans ces colonnes, séparées par des virgules.
Il faut noter que :
• Le nombre de colonnes et de valeurs doit être le même. De plus, les positions des colonnes doivent correspondre aux positions de leurs
valeurs.
• Pour les colonnes qui ne figurent pas dans la liste spécifies MySQL insert les valeurs par default ou alors NULL si elles ne sont pas spécifiées.
• Si une colonne est définie comme une colonne AUTO_INCREMENT, MySQL génère un entier séquentiel chaque fois qu'une ligne est insérée
dans la table.

4
01- Requêtes LMD
INSERT : Insérer plusieurs lignes
Pour insérer plusieurs lignes dans une table à l'aide d'une seule instruction INSERT, on utilise la
syntaxe suivante :

INSERT INTO nom_table(c1,c2,...)


VALUES (v01,v02,...),
(v11,v22,...),
..
(vn1,vn2,...)
;

 Les lignes à ajouter dans la table sont séparées par des virgules dans la clause VALUES.

5
01- Requêtes LMD
INSERT : Exemples
• Soit la table « Produit » créée à partir de la requête suivante :
CREATE TABLE Produits (
Num_Produit VARCHAR(18) PRIMARY KEY,
description VARCHAR(40) DEFAULT ‘Non specifie’,
cout DECIMAL(10,2 ) NOT NULL CHECK (cout >= 0), prix DECIMAL(10,2) NOT
NULL CHECK (prix >= cout),
Date_ajout DATE
);

One veut ajouter le produit suivant : Numéro du Produit est P12, Son prix est 14 et le cout 12.
• Voici la commande à exécuter :

INSERT INTO Produits(num_produit,cout,prix)


VALUES (‘P12’,12,14);
6
01- Requêtes LMD
INSERT : Exemples
 Ajout de plusieurs lignes : One veut ajouter les produits suivants :
• Numéro du Produit est P13, Le cout: 120, le prix 140, ajouté le 01/01/2022.
• Numéro du Produit est P100, Description: Laptop, le cout: 120, le prix 140, ajouté aujourd’hui.

Voici la commande à exécuter :

INSERT INTO
Produits(num_produit,description,cout,prix,date_ajout)
VALUES (‘P13’,’’,120,140,’2022-01-01’),
(‘P100’,’Laptop’,5000,6000,CURRENT_DATE)
;
7
01- Requêtes LMD
INSERT : Exemples
Voici le contenu de la table après l’exécution de ces requêtes :

• On remarque que :
• La description non spécifiée dans le premier insert a été remplacée par la valeur par défaut : ‘Non
spécifié’
• Pour insérer une valeur de date dans une colonne, il faut utiliser le format ‘YYYY-MM-DD’ ou :
• YYYY représente une année à quatre chiffres.
• MM représente un mois à deux chiffres.
• DD représente un jour à deux chiffres.
• Nous avons utilisé la fonction CURRENT_DATE()qui retourne la date système.
8
01- Requêtes LMD
Ajout depuis une sélection:
Il s’agit de valeurs extraites d’une autre table.
Très utile dans le cas de migration de données.
On peut intégrer des fonctions de conversion et des calculs intermédiaires afin de modifier les
données de la source avant de les stocker dans la table cible.

Exemple: Ajout des pilotes qui ont le nom ‘BOST’

Bost

9
01- Requêtes LMD
UPDATE :
L'instruction UPDATE permet de mettre à jour les données d'une table. Elle sert à modifier les valeurs dans
une ou plusieurs colonnes d'une seule ligne ou de plusieurs lignes ,
UPDATE nom_table
SET
nom_colonne1 = expr1,
nom_colonne2 = expr2,
...
[WHERE
condition];
• On doit spécifier :
• Le nom de la table dont on souhaite mettre à jour les données.
• La colonne qui va être mise à jour et la nouvelle valeur dans la clause SET. Pour mettre à jour les valeurs dans plusieurs
colonnes, on utilise une liste d'affectations séparées par des virgules.
• En option, Définir une condition dans la clause WHERE. Si cette étape est omise, l'instruction UPDATE modifiera toutes les
lignes de la table. 10
01- Requêtes LMD
UPDATE :
• la syntaxe complète est :

UPDATE Nom de la table


SET Expression des MAJ : Attribut=Valeur, Attribut = Valeur
[FROM] Accès à d’autres tables pour récupérer valeurs des attributs
WHERE Condition pour mettre à jour les lignes

 Les modifications sont exprimées au niveau de la clause SET.


 Il ne peut y avoir plus d’une clause SET par opération UPDATE.
 On peut introduire une clause FROM pour éventuellement utiliser des attributs d’une autre table
dans la clause SET.
 Les modifications peuvent être conditionnées au moyen d’un groupe de conditions CASE.

11
01- Requêtes LMD

UPDATE : Exemples
• Rappelons la table Produits :

• Modifier la date d’ajout du produit P12 en 31/12/2021 :

UPDATE Produits
SET
Date_ajout ='2021-12-31'
WHERE Num_Produit='P12';
12
01- Requêtes LMD
UPDATE : Exemples
• Modifier les données de telle façon que Description =’Non specifie’ et Prix = 1.5*cout :

UPDATE Produits
SET
Description = 'Non specifie',
Prix = 1.5*Cout ;
WHERE Num_Produit='P12';

• Résultat suivant les deux modifications :

13
01- Requêtes LMD

Opération de modification des données

Utilisation conditionnée avec CASE


Modification en fonction du montant du salaire pour les pilotes affectés à des vols.

14
01- Requêtes LMD

DELETE :
L’instruction DELETE permet de supprimer une ou plusieurs lignes d’une table en utilisant la
syntaxe suivante :

DELETE FROM nom_table


WHERE Conditions;
• Cette instruction permet d’utiliser ,en option, une condition pour spécifier les lignes à supprimer
dans la clause WHERE, si cette dernière est omise, l'instruction DELETE supprimera toutes les lignes
de la table.
• Pour une table qui a une contrainte de clé étrangère, lorsque vous supprimez des lignes de la table
parent, les lignes de la table enfant peuvent aussi être supprimées
automatiquement à l'aide de l'option ON DELETE CASCADE.
15
01- Requêtes LMD
DELETE : Exemples
• De la table Produit :

• On veut supprimer les Produits dont le cout <=12 .


DELETE FROM Produits
WHERE cout<=12;

• Voici la table après l’exécution de cette requête

16
TP1 : Requêtes LMD
Soit le schéma relationnel suivant :

AVIONS ( NumAv, TypeAv, CapAv, VilleAv)


PILOTES (NumPil, NomPil,titre, VillePil)
VOLS (NumVol, VilleD, VilleA, DateD, DateA, Numbi#, NumAv#)

Travail à réaliser : (Suite)


1) Ajouter un enregistrement à chaque table de la base de données.
2) Modifier la date d’arrivée des vols dont la ville d’arrivée est Tanger par la date actuelle.
3) Supprimer les vols du pilote numéro 1 dont la ville départ est Tanger ou casa
4) Supprimer la colonne VilleAv.
5) Supprimer la table PILOTE.

17
Solution
1-
INSERT INTO AVIONS (numav,TypeAv, CapAv, VilleAv)
VALUES (34,'Airbus',200,'Tanger');

INSERT INTO PILOTES (NomPil, titre, VillePil)


VALUES ('Ali','M','Rabat');

INSERT INTO VOLS (numvol,VilleD, VilleA, DateD, DateA, NumPil#,NumAv#)


VALUES ('2AR','Casa','Madrid', '2017-5-18', '2017-5-19', 1 ,34);
2-
UPDATE VOLS
SET DateA = CURRENT_DATE
WHERE VilleA = 'tanger';
3-
DELETE FROM VOLS
WHERE NumPil# = 1 AND (VilleD = 'Tanger' OR VilleD = 'Casa');
TP2: Écrire des requêtes de mise à jour.
Soit le modèle relationnel suivant:

Travail à faire:
Écrire les requêtes de mise à jour suivantes:
1) Créer la base de données.
2) La base est vierge. Réalisez l'insertion d'un jeu de données de 3
enregistrements dans les différentes tables. Les données
seront définies par vous-même à votre convenance.
3) Augmentez de 10% tous les prix des analyses.
4) Il a été défini un prix planché de 80 DHs pour toutes les
analyses ayant un prix inférieur à 80 DHs. Mettez à jour la
table ANALYSE.
5) Le client dont le code est "c1" vient de fournir son numéro de téléphone (0611111111). Mettre à jour la
table correspondante.
6) Suite à un bug informatique, des entrées ont été saisies le 01 février 2022 au lieu du 1er février 2021. Mettez à jour la
base.
7) Afin de préparer la nouvelle campagne, de nouvelles analyses ont été définies.
Ces nouvelles analyses sont disponibles dans une table ANALYSECOLYSTEROL dont la structure (champs, types de
donnée) est identique à TYPEANALYSE. Mettez à jour la table TYPEANALYSE à partir de la tableANALYSECOLYSTEROL.
CHAPITRE 2
Réaliser des requêtes SQL

1. Requêtes LMD
2. Requêtes de sélection
3. Expression du SGBD
4. Fonctions d’agrégation du SGBD
5. Sous requêtes
6. Requêtes de l’union
7. Jointures
02 - Requêtes de sélection

SELECT :
 L’instruction SELECT permet de consulter les données et de les présenter triées et/ou regroupées suivant certains
critères.
 L’instruction SELECT basique est comme suit :

SELECT [Liste_select]
FROM nom_table;
• Dans cette syntaxe, il faut :
• Spécifier une ou plusieurs colonnes à partir desquelles on veut sélectionner des données après le mot-clé SELECT :
Pour sélectionner toutes les colonnes de la table, on utilise « SELECT * » , Sinon on spécifie les noms des colonnes
séparés par une virgule (,).
• Spécifier le nom de la table à partir de laquelle on veut sélectionner des données après le mot-clé FROM.
• N.B : Lors de l'exécution de l'instruction SELECT, MySQL évalue la clause FROM avant la clause SELECT :

FROM SELECT
21
02 - Requêtes de sélection

SELECT :
• Exemples de requêtes SELECT simples :

22
02 - Requêtes de sélection

SELECT :
 Options de la Requête SELECT :
• La requête SQL plus avancées prend la forme suivante :

SELECT [DISTINCT] Liste_Select


FROM Liste_Tables
WHERE Liste_Conditions_Recherche
GROUP BY Liste_regroupement
HAVING Liste_Conditions_regroupement
ORDER BY liste_Tri
• MySQL exécute cette requête dans cet ordre :
GROUP DISTINCT ORDER
FROM WHERE HAVING SELECT
BY BY

23
02 - Requêtes de sélection

DISTINCT :
DISTINCT est une option qui permet de supprimer les lignes en double.

24
02 - Requêtes de sélection

WHERE :
 WHERE définit la liste de conditions que les données recherchées doivent vérifier. La condition de recherche
est une combinaison d'une ou plusieurs expressions utilisant l'opérateur logique AND, OR et NOT.
 L'instruction SELECT inclura toute ligne qui satisfait la condition de recherche dans le jeu de résultats.
 WHERE est aussi utilisé dans UPDATE ou DELETE pour spécifier les lignes à mettre à jour ou à supprimer.

25
02 - Requêtes de sélection

GROUP BY :
 La clause GROUP BY regroupe un ensemble de lignes dans un ensemble de lignes récapitulatives par valeurs de
colonnes ou d'expressions. La clause GROUP BY renvoie une ligne pour chaque groupe, ceci réduit le nombre
de lignes dans le jeu de résultats.
 En pratique, on utilise souvent la clause GROUP BY avec des fonctions d'agrégation telles que SUM, AVG,
MAX, MIN et COUNT. La fonction d'agrégation qui apparaît dans la clause SELECT fournit les informations de
chaque groupe.

Exemple :

26
02 - Requêtes de sélection

HAVING :
La clause HAVING est utilisée dans l'instruction SELECT pour spécifier des conditions de filtre
pour un groupe de lignes ou d'agrégats. Elle est souvent utilisée avec GROUP BY pour filtrer les
groupes en fonction d'une condition spécifiée. Si la clause GROUP BY est omise, HAVING se
comporte comme la clause WHERE.

27
02 - Requêtes de sélection

ORDER BY :
 La clause ORDER BY est utilisée pour trier les lignes du jeu de résultats. Elle peut porter sur plusieurs
colonnes, chacune suivie, en option, de l’ordre de tri utilise croissant ASC ou décroissant DESC.
 L’ordre de tri par default étant ASC.

Exemple :

28
TP3: Requêtes de sélection sur une table
Objectifs:
 Créer des requêtes mettant en œuvre les opérations de projection et de sélection sur une table.
 Mettre en œuvre les opérations de tri ainsi que l’expression des conditions sur sélection.
Soit le schéma relationnel suivant :
EMPLOYEE (EMPNO, EMPNOM, FONCTION, DTAEEMB, CHEF# , SALAIRE, DEPTNO#)
DEPARTEMENT (DEPTNO, DEPTNOM, LIEU)
PROJET (PCODE, PNOM)
PARTICIPER (PCODE#, EMPNO#)
1. Donner le MCD de ce modèle relationnel
À l'aide de script SQL déterminer
2. Créer la base de données
3. Créer les tables de ce schéma en précisant les contraintes de clés aux tables de la base.
4. Réalisez l'insertion d'un jeu de données de 3 enregistrements dans les différentes tables
5. Les noms des départements
6. Les numéros et noms des départements en renommant les attributs par « Numéro département » et « Nom
département »
7. La liste de toutes les propriétés des employés
8. Les fonctions des employés
9. Les fonctions des employés sans double
CHAPITRE 2
Réaliser des requêtes SQL

1. Requêtes LMD
2. Requêtes de sélection
3. Expression du SGBD
4. Fonctions d’agrégation du SGBD
5. Sous requêtes
6. Requêtes de l’union
7. Jointures
03- Expression du SGBD

 Une expression se compose d’ensemble de colonnes, constantes et fonctions combinées au


moyen d'opérateurs. On trouve les expressions dans les différentes parties du SELECT : en
tant que colonne résultat, dans les clauses WHERE, HAVING, et ORDER BY.
 Il existe trois types d'expressions selon le type de données de SQL :
• Expressions arithmétiques
• Expressions de chaînes de caractères
• Expressions de dates.
 A chaque type correspondent des opérateurs et des fonctions spécifiques.
 Afin d’utiliser des données de types différents dans la même expression, on peut utiliser les
fonctions de conversion dont dispose le langage SQL, celle-ci permettent de convertir des
chaines de caractères en date ou en nombre selon le besoin.

31
03- Expression du SGBD

Les opérateurs MYSQL :


 Un opérateur est un symbole spécifiant une action exécutée sur une ou plusieurs
expressions. Nous trouvons en SQL, différentes catégories d’opérateurs.
 Voici les principaux utilisables dans les requêtes de sélection.
• Opérateurs arithmétiques
• Opérateurs de comparaison
• Opérateurs logiques

32
03- Expression du SGBD

Les opérateurs MYSQL : Opérateurs arithmétiques

 Les opérateurs arithmétiques présents dans SQL sont les suivants :


• + addition
• - soustraction
• * multiplication
• / division

Remarque : la division par 0 provoque une fin avec code d'erreur.

33
03- Expression du SGBD

Les opérateurs MYSQL : Opérateurs arithmétiques


Priorité des opérateurs :
 Une expression arithmétique peut comporter plusieurs opérateurs. Dans ce cas, le résultat
de l'expression peut varier selon l'ordre dans lequel sont effectuées les opérations. Les
opérateurs de multiplication et de division sont prioritaires par rapport aux opérateurs
d'addition et de soustraction. Des parenthèses peuvent être utilisées pour forcer
l'évaluation de l'expression dans un ordre différent de celui découlant de la priorité des
opérateurs.
 Au moyen des opérateurs arithmétiques + et - il est possible de construire les expressions
suivantes :
 date +/- nombre : le résultat est une date obtenue en ajoutant le nombre de jours
nombre à la date.
 date2 - date1 : le résultat est le nombre de jours entre les deux dates.
03- Expression du SGBD

Les opérateurs MYSQL : Opérateurs arithmétiques


Exemple : Calcul du Gain = Prix-Cout pour chacun des produits :

35
03- Expression du SGBD

Les opérateurs MYSQL : Opérateurs de comparaison


 Les opérateurs de comparaison testent si deux expressions sont identiques.
 Ils peuvent s'utiliser sur toutes les expressions composées de données
structurées.
 Ces opérateurs sont:
 = (Égal à)
 (Supérieur à),
 < (Inférieur à),
 >= (Supérieur ou égal à),
 <= (Inférieur ou égal à),
 <> (Différent de)
36
03- Expression du SGBD

Les opérateurs MYSQL : Opérateurs logiques


 Les opérateurs logiques testent la valeur logique d'une condition. Les opérateurs logiques, comme les
opérateurs de comparaison, retournent un type de données booléen de valeur TRUE ou FALSE.
 Un certain nombre d’entre eux (signalés par un * dans le tableau) sont utilisés pour comparer une
valeur scalaire (unique) avec une sous requête.

37
03- Expression du SGBD

Les opérateurs MYSQL : Opérateurs logiques Opérateur BETWEEN


 On utilise BETWEEN pour tester si une valeur est comprise entre une valeur minimale
et une autre maximale. La syntaxe de l'opérateur BETWEEN : valeur BETWEEN
Minimum AND Maximum

Exemple :

38
03- Expression du SGBD

Les opérateurs MYSQL : Opérateurs logiques Opérateur LIKE/NOT LIKE


 On Utilise l'opérateur LIKE pour tester si une valeur correspond à un modèle spécifique. l'opérateur NOT sert à
annuler l'opérateur LIKE.
 Le modèle est défini en utilisant les caractères génériques suivants :

Exemples :

La liste des produits dont la description La liste des produits qui ont ‘2’ dans la case
commence par ‘L’ avant dernière de leur Num_Produit.
39
03- Expression du SGBD

Les fonctions intégrées MYSQL :


 MYSQL, comme les autres SGBD, propose de nombreuses fonctions intégrées qui permettent de
manipuler les données utilisateurs ou les données du système. Il existe plusieurs catégories de
fonctions :
• Fonctions Mathématiques
• Fonctions de traitement de chaînes
• Fonctions de manipulation de dates
• Fonctions de conversion

 La liste exhaustive des fonctions MySQL est disponible sur le lien :


https://dev.mysql.com/doc/refman/8.0/en/functions.html
03- Expression du SGBD

Les fonctions intégrées MYSQL : Fonctions Mathématiques


Ce sont des fonctions ayant un ou plusieurs nombres comme arguments, et qui renvoient une valeur
numérique.
Voici quelques exemples :
Fonction Description
ABS(n) Retourne la valeur absolue d’un nombre.
CEIL(n) Renvoie la plus petite valeur entière supérieure ou égale au nombre d'entrée.
FLOOR(n) Renvoie la plus grande valeur entière non supérieure au nombre d'entrée.
MOD(n) Renvoie le reste d'un nombre divisé par un autre
ROUND(n) ROUND(n, d) arrondit au nombre à d décimales le plus
proche. ROUND(n) équivaut à écrire ROUND(n, 0), donc arrondit à l'entier le plus
proche..
TRUNCATE() Tronque un nombre à un nombre spécifié de places décimales.
03- Expression du SGBD
Les fonctions intégrées MYSQL : Fonctions de traitement de chaînes
 Voici une liste contenant les fonctions de chaîne MySQL les plus utilisées qui permettent de manipuler efficacement les données de chaîne de caractères.
Name Description
CONCAT (chaine1, chaine2,…) Concaténer deux ou plusieurs chaînes en une seule chaîne
INSTR (chaine, chainerech) Renvoie la position de la première occurrence d'une sous-chaîne dans une chaîne
LENGTH (chaine) Obtenir la longueur d'une chaîne en octets et en caractères
LEFT (chaine, long) Obtient un nombre spécifié de caractères les plus à gauche d'une chaîne
RIGHT (chaine, long) retourne un nombre spécifié de caractères les plus à droite d'une chaîne
REPEAT (c, n) retourne le texte c, n fois.
UPPER (chaine) Convertir une chaîne en majuscule
LOWER (chaine) Convertir une chaîne en minuscule
STRCMP (chaine1, chaine2) compare les deux chaînes passées en paramètres et retourne 0 si les chaînes sont les mêmes, -1 si la première chaîne est classée avant
dans l'ordre alphabétique et 1 dans le cas contraire.
LTRIM (chaine) Supprimer tous les espaces du début d'une chaîne
RTRIM (chaine) Supprime tous les espaces de la fin d'une chaîne
TRIM (chaine) Supprime les caractères indésirables d'une chaîne
REVERSE (chaine) renvoie chaine en inversant les caractères.
REPLACE (chaine, ancCaract, nouvCaract) Recherche et remplace une sous-chaîne dans une chaîne
SUBSTRING (chaine, pos, long) Extraire une sous-chaîne à partir d'une position avec une longueur spécifique.
SUBSTRING_INDEX (expr, delim, count) Renvoie une sous-chaîne à partir d'une chaîne avant un nombre spécifié d'occurrences d'un délimiteur
FIND_IN_SET (chaine, chaine_list) Rechercher une chaîne dans une liste de chaînes séparées par des virgules
03- Expression du SGBD

Les fonctions intégrées MYSQL : Fonctions de traitement de chaînes


Exemple :
• Pour chaque produit, Retourner les valeurs suivantes :
• Num_Produit
• Une colonne « resultat » qui contient : Num_Produit ‘Ajoute le’ Date_ajout
• Une colonne « nouveau » qui contient : Remplacer ‘P’ dans Num_Produit par ‘NP’.
03- Expression du SGBD

Fonctions de traitement de chaînes


Liste des noms des pilotes formatés.
Le premier caractère de gauche est mis en majuscules Les autres caractères en minuscules

SELECT Upper(Substring(Nom,1,1)) + Lower(Substring(Nom,2,Len(Nom)-1)) FROM PILOTE


03- Expression du SGBD

Fonctions de traitement de chaînes


Remplacement de l’occurrence Toulouse par Ville Rose dans l’attribut Ville de la Table Pilote.

SELECT REPLACE(VILLE, 'Toulouse', 'Ville Rose')


FROM PILOTE
WHERE VILLE LIKE 'TOUL%'
03- Expression du SGBD

Les fonctions i
ntégrées
Name MYSQL : Fonctions les plus utilisées de manipulation de dates
Description
CURDATE () Renvoie la date actuelle.
CURRENT_DATE() Renvoie la date actuelle.
NOW () Renvoie la date et l'heure actuelles d'exécution de l'instruction.
SYSDATE () Renvoie la date et l'heure actuelles
La différence avec NOW() est que SYSDATE() retourne l'heure à laquelle elle est effectivement appelée, alors que
NOW() retourne l'heure de début de script.
DAY (date) Obtient le jour du mois d'une date spécifiée.
MONTH (date) Renvoie un entier qui représente un mois d'une date spécifiée.
YEAR (date) Renvoie l'année pour une date spécifiée
LAST_DAY (date) Renvoie le dernier jour du mois d'une date spécifiée
DAYNAME (date) Obtient le nom d'un jour de la semaine pour une date spécifiée.
WEEK (date) Renvoie le numéro de semaine d'une date
WEEKDAY (date) Renvoie un index des jours de la semaine pour une date.
DAYOFWEEK (date) Renvoie l'index des jours de la semaine pour une date.
DATEDIFF (date1,date2) Calcule le nombre de jours entre deux valeurs DATE.
DATE_SUB (date, INTERVAL nb uniteDeTemps) Soustrait une valeur d'heure d'une valeur de date.
TIMEDIFF (heure1, heure2) Calcule la différence entre deux valeurs TIME ou DATETIME.
TIMESTAMPDIFF (unité,expr1,expr2) Calcule la différence entre deux valeurs DATE ou DATETIME.
46
03- Expression du SGBD

Les fonctions intégrées MYSQL : Fonctions les plus utilisées de manipulation de dates
Name Description
DATE_ADD (date, INTERVAL nb uniteDeTemps) Ajoute une valeur de temps à la valeur de date.
DATE( ) Extrait une date à partir d’une chaîne contenant une valeur au format DATE ou DATETIME [MySQL]
EXTRACT (part FROM date) Extrait une partie à partir d'une date donnée.
DATE_FORMAT (date, format) Formate une valeur de date en fonction d'un format de date spécifié.
Voici quelques-uns des spécificateurs de format :
%%  Le caractère '%'
%d  Jour du mois, numérique (00..31)
%m  Mois de l'année, numérique (01..12)
%Y  Année, sur 4 chiffres (YYYY)
%H  Heures, sur 24 heures (00..23)
%i  Minutes (00..59)
%s  Secondes (00..59)
%T  Heure complète (hh:mm:ss)
STR_TO_DATE (chaine, format) Convertit une chaîne en une valeur de date et d'heure basée sur un format spécifié.
FROM_DAYS() Convertit un nombre de jour en une date [MySQL]
SEC_TO_TIME( secondes ) Convertir un nombre de secondes en une heure et minutes au format HH:MM:SS
TO_DAYS( ) Retourne le nombre de jour à partir d’une date

47
03- Expression du SGBD

Les fonctions intégrées MYSQL : Fonctions de manipulation de dates


Exemple :
La liste des produits, leur date d’ajout, l’année d’ajout, Le jour de la semaine, et depuis combien de jours
ils ont été ajoutés.

48
03- Expression du SGBD

Les fonctions intégrées MYSQL : Fonctions de conversion

Convertir une chaîne en format de date dans MySQL


STR_TO_DATE()
 Cette fonction convertit la str (chaîne) en valeur DATE. Le format de DATE sera en fonction de
votre format de chaîne.
 Par exemple, vous souhaitez convertir MM/DD/YYYY du type chaîne vers le type DATE, alors
la DATE sera également au format MM/DD/YYYY.
 La fonction STR_TO_DATE() peut renvoyer la valeur DATE, DATETIME ou TIME en fonction
de l’entrée ainsi que du format de chaîne.

Exemple
03- Expression du SGBD

Les fonctions intégrées MYSQL : Fonctions de conversion


Fonction MySQL CONVERT()
La fonction Convert peut convertir la valeur donnée en un jeu de caractères ou un type de données
spécifié.
Exemple

Production :

50
03- Expression du SGBD

Les fonctions intégrées MYSQL : Fonctions de conversion


Fonction CAST() de MySQL
Cette fonction convertit l’entrée de n’importe quel type (il peut s’agir d’une chaîne, d’un entier ou
de quelque chose d’autre) en n’importe quel type de données spécifié
Exemple

Production

51
TP3 (suite): Expression du SGBD

Objectifs:
 Créer des requêtes mettant en œuvre les opérations de projection et de sélection
sur une table.
 Mettre en œuvre les opérations de tri ainsi que l’expression des conditions sur
sélection.

Soit le schéma relationnel suivant :


EMPLOYEE (EMPNO, EMPNOM, FONCTION, DTAEEMB, CHEF# , SALAIRE, DEPTNO#)
DEPARTEMENT (DEPTNO, DEPTNOM, LIEU)
PROJET (PCODE, PNOM)
PARTICIPER (PCODE#, EMPNO#)
À l'aide de script SQL déterminer :

1. Liste des employés dont le nom commence par M ou N et se termine par A ou L


2. Liste des employés dont le nom commence par M et ne se termine par A.
3. Liste des employés dont le nom commence par M et ne se termine pas par un caractère entre A et L
4. Noms des départements dont la troisième lettre est un « d »
5. Les numéros et noms des employés du département 20
6. Les noms des vendeurs du département 30 dont le salaire est supérieur à 2000
7. Les noms, fonctions et salaires des directeurs et des employés qui ont un salaire supérieur à 5000
8. Les noms, fonctions et numéros des départements des employés qui ne sont pas ni ouvrier ni directeur
9. Les noms, fonctions et salaires des employés qui gagnent entre 2000 et 7000
10. Liste des employés dont le chef n’est pas connu
11. Les noms, fonctions et salaires des employés du département 20 selon l’ordre croissant des salaires
12. Liste des employés triés selon l’ordre croissant des fonctions et l’ordre décroissant des salaires
CHAPITRE 2

Réaliser des requêtes SQL

1. Requêtes LMD
2. Requêtes de sélection
3. Expression du SGBD
4. Fonctions d’agrégation du SGBD
5. Sous requêtes
6. Requêtes de l’union
7. Jointures
04- Fonctions d’agrégation du SGBD
 Une fonction d'agrégation effectue un calcul sur plusieurs valeurs et renvoie une seule valeur.
 Les fonctions d’agrégation les plus utilisés : SUM, AVG, COUNT, MAX et MIN.
 Les fonctions d'agrégation sont souvent utilisées avec la clause GROUP BY pour calculer une valeur agrégée
pour chaque groupe, par exemple la valeur moyenne par groupe ou la somme des valeurs dans chaque
groupe.
La fonction SUM() :
• La fonction SUM() retourne la somme des valeurs d’une colonne.
• L'image suivante illustre l'utilisation de la fonction d'agrégation SUM() avec une clause GROUP BY :

Nom
A
Valeur
10

SELECT Nom SUM
A 20 Nom, (Valeur)
B 40 SUM(Valeur) A 30
FROM
C 20 Sample_table B 40
C 50 GROUP BY C 70
Nom;
55
04- Fonctions d’agrégation du SGBD

La fonction SUM() :

Exemple :

56
04- Fonctions d’agrégation du SGBD

La fonction AVG() :
La fonction AVG() retourne la moyenne des valeurs d’une colonne.

Exemple :

57
04- Fonctions d’agrégation du SGBD

La fonction COUNT() :
La fonction COUNT() retourne le nombre d’enregistrements sélectionnés.

Exemple :

58
04- Fonctions d’agrégation du SGBD

La fonction MAX/MIN :
Les fonctions MAX() et MIN() retournent respectivement le maximum et le minimum
des valeurs des enregistrements sélectionnés.

Exemple :

MAX (Prix) MIN (Prix)

59
TP 3 (suite): Fonctions d’agrégation du SGBD
Objectifs :
 Créer des requêtes manipulant des chaînes de caractères
 Créer des requêtes manipulant des dates
 Créer des requêtes manipulant des fonctions de calculs
EMPLOYEE (EMPNO, EMPNOM, FONCTION, DTAEEMB, CHEF# , SALAIRE, DEPTNO#)
DEPARTEMENT (DEPTNO, DEPTNOM, LIEU)
PROJET (PCODE, PNOM)
PARTICIPER (PCODE#, EMPNO#)
1) Les noms des employés (les deux premières lettres du nom en majuscule, les autres lettres en minuscules).
2) La date d’embauche des employés (afficher le jour de la semaine en lettres, le mois en lettres et l’année).
3) Augmenter le salaire des employés ayant plus de 10 ans d’ancienneté par 20%.
4) Afficher les départements en remplaçant les valeurs de l’attribut LIEU Assilah par Tanger.
5) Afficher les départements en remplaçant les valeurs NULL de l’attribut LIEU par Tanger.
6) La moyenne des salaires de tous les employés
7) La moyenne des salaires des ouvriers
8) Le plus haut salaire et le plus bas salaire des employés
9) Le nombre des employés du département 10
10) Le nombre de différentes fonctions occupées par les employés du département 10
11) La moyenne des salaires par département
12) Pour chaque département le salaire annuel moyen des employés qui ne sont ni directeurs ni présidents
13) Pour chaque fonction de chaque département le nombre d’employés et le salaire moyen
14) Les salaires moyens pour les fonctions comportant plus de 2 employés
15) Les numéros des départements avec au moins deux secrétaires
16) Pour chaque projet le nombre des employés qui y participent
CHAPITRE 2
Réaliser des requêtes SQL

1. Requêtes LMD
2. Requêtes de sélection
3. Expression du SGBD
4. Fonctions d’agrégation du SGBD
5. Sous requêtes
6. Requêtes de l’union
7. Jointures
05- Une sous-requête

 Une sous-requête est une requête imbriquée dans une autre requête telle que SELECT, INSERT,
UPDATE ou DELETE.
 Une sous-requête est appelée « requête interne » tandis que la requête qui contient la sous-
requête est appelée une requête externe. La requête dite interne est évaluée pour chaque ligne
de la requête externe.
 Une sous-requête peut être utilisée partout où une expression est utilisée et doit être fermée
entre parenthèses.

Exemples :
• La table Produits :

62
05- Une sous-requête

Sous-Requête Mono-ligne :
 On utilise des opérateurs de comparaison, par exemple =, >, < pour comparer une seule valeur renvoyée
par la sous-requête avec l'expression dans la clause WHERE.

Afficher le Produit ayant le Prix minimale :


Select Num_produit, Description, Prix from Produits
where Prix = (Select Min(prix) from Produits)

63
05- Une sous-requête

Sous-Requête avec IN/NOT IN:


 Si une sous-requête renvoie plusieurs valeurs, on peut utiliser d'autres opérateurs tels que l'opérateur
IN ou NOT IN dans la clause WHERE.

Afficher la liste des produits de la table Produits qui existent sur la table Sales :
Select * from Produits
where Num_produit IN (Select Num_produits from Sales)

64
05- Une sous-requête

Sous-Requête avec ALL/ANY


 On peut utiliser les opérateurs ANY, ou ALL pour comparer la valeur d’une expression avec les valeurs
d’un attribut d’une requête interne.
 Le mot-clé ALL spécifie tous les éléments retournés tandis que le mot-clé ANY spécifie l’un d’entre eux.

Afficher les produits dont le cout est Inferieur à tous les prix des produits.
Select Num_produit, Description from Produits where cout < ALL (Select Prix from Produits)

65
05- Une sous-requête

Sous-Requête avec ALL/ANY


 On peut utiliser les opérateurs ANY, ou ALL pour comparer la valeur d’une expression avec les valeurs d’un
attribut d’une requête interne.
 Le mot-clé ALL spécifie tous les éléments retournés tandis que le mot-clé ANY spécifie l’un d’entre eux.

Afficher les Produits dont le prix est inferieur à un des couts de produits :
Select Num_produit, Description from Produits
where prix < ANY (Select cout from Produits)

66
05- Une sous-requête

Sous-Requête avec EXISTS/NOT EXISTS


 Lorsqu'une sous-requête est utilisée avec l'opérateur EXISTS ou NOT EXISTS, une sous-requête renvoie une
valeur booléenne TRUE ou FALSE.

Afficher les produits avec une colonne supplémentaire indiquant si le produit est présent la table Sales :
Select P.Num_produit, P.Description,
EXISTS(Select * from Sales S Where P.Num_produit = S.Num_Produit) as existe
From Produits P

67
TP3 (suite): les sous-requêtes
Soit le schéma relationnel suivant :
EMPLOYEE (EMPNO, EMPNOM, FONCTION, DTAEEMB, CHEF# , SALAIRE, DEPTNO#)
DEPARTEMENT (DEPTNO, DEPTNOM, LIEU)
PROJET (PCODE, PNOM)
PARTICIPER (PCODE#, EMPNO#)

Travail à réaliser :

1) Les noms des employés qui gagnent plus que ‘ALAMI’ (Sans utiliser une jointure)
2) Les salaires moyens pour les fonctions comportant plus de 2 employés
3) Les noms des départements avec au moins deux secrétaires.
4) Le nom du département qui a le maximum d’employés.
5) Nom des employés travaillant dans un département avec au moins un ingénieur.
6) Nom des départements où ne travaillent que des ingénieurs
7) La liste des employés qui ont participé dans tous les projets
8) Les noms des employés qui ont un nom en commun. Autrement dit pour qu'un employé soit
sélectionné, il faut qu'un autre employé porte le même nom.
CHAPITRE 2
Réaliser des requêtes SQL

1. Requêtes LMD
2. Requêtes de sélection
3. Expression du SGBD
4. Fonctions d’agrégation du SGBD
5. Sous requêtes
6. Requêtes de l’union
7. Jointures
06- Requêtes de l’union

 La combinaison des résultats des requêtes consiste à transformer


deux ou plusieurs jeux de résultat en un seul.
 Les jeux de résultats combinés doivent tous avoir la même structure :
Même nombre de colonnes et même types de données.
 Il existe trois types de combinaison : UNION (UNION All), INTERSECT,
MINUS.
06- Requêtes de l’union

Opérateur UNION
L'opérateur UNION permet de combiner deux ou plusieurs ensembles de résultats de
requêtes en un seul ensemble de résultats. Voici la syntaxe d’utilisation de l'opérateur
UNION :

SELECT column_list1
UNION [DISTINCT | ALL]
SELECT column_list2
UNION [DISTINCT | ALL]
SELECT column_list3
...
06- Requêtes de l’union

Opérateur UNION
Le diagramme de Venn suivant illustre l'union de deux ensembles de résultats provenant
des tables Group1 et Group2 :

72
06- Requêtes de l’union

Opérateur UNION
 Par défaut, l'opérateur UNION supprime les lignes en double même si on ne spécifie pas
l'opérateur DISTINCT. GROUP1 GROUP2
ID ID
Soient les deux tables : 1 2
2 3
3 4

La requête UNION :
06- Requêtes de l’union

Opérateur UNION

• La requête UNION ALL :

Si on utilise UNION ALL explicitement, les lignes dupliquées, sont affichées dans le résultat.
Du fait que UNION ALL ne gère pas les doublons, il s'exécute plus rapidement que UNION
DISTINCT.
06- Requêtes de l’union

Opérateur INTERSECT
 L'opérateur INTERSECT compare les ensembles de résultats de deux requêtes ou plus et
renvoie les lignes distinctes générées par les deux requêtes.
 MySQL ne prend pas en charge l'opérateur INTERSECT. Cependant, On peut l’émuler en
utilisant les jointures.

Le schéma suivant illustre l'opérateur INTERSECT :


06- Requêtes de l’union

Opérateur INTERSECT
 Contrairement à l'opérateur UNION, l'opérateur INTERSECT renvoie l'intersection entre
deux cercles.

Donc la requête : ID
(SELECT ID FROM Group1) 2
Retourne :
INTERSECT [ALL | DISTINCT] 3
(SELECT ID FROM Group2)

Notez que MySQL prend en charge INTERSECT l'opérateur dans MySQL 8.0.31
06- Requêtes de l’union

Opérateur MINUS (EXCEPT)


 L’opérateur MINUS compare les résultats de deux requêtes et renvoie des lignes distinctes du
jeu de résultats de la première requête qui n'apparaissent pas dans le jeu de résultats de la
deuxième requête.

Le schéma suivant illustre l'opérateur MINUS :


Donc la requête :
(SELECT ID FROM Group1)
MINUS
(SELECT ID FROM Group2)

ID
Retourne : 1
77
06- Requêtes de l’union

Opérateur MINUS (EXCEPT)


 MySQL ne prend pas en charge l'opérateur MINUS. Cependant, On peut l’émuler en utilisant
les jointures (voir partie suivante).
 Veuillez noter que MySQL prend en charge l' EXCEPT opérateur à partir de la version 8.0.31.
 L' EXCEPT est équivalent à l' MINUS opérateur.
 L'opérateur MySQL EXCEPT vous permet de récupérer les lignes d'une requête qui
n'apparaissent pas dans une autre requête.

Syntaxe: (SELECT ID FROM Group1)


EXCEPT
(SELECT ID FROM Group2)

78
TP3 (suite): Requêtes de l’union
Soit le schéma relationnel suivant :
EMPLOYEE (EMPNO, EMPNOM, FONCTION, DTAEEMB, CHEF# , SALAIRE, DEPTNO#)
DEPARTEMENT (DEPTNO, DEPTNOM, LIEU)
PROJET (PCODE, PNOM)
PARTICIPER (PCODE#, EMPNO#)

Travail à réaliser : Afficher

1) Les Fonctions des employés ayant le nom ‘ALAMI’ et ayant salaire inferieur à 10000
2) Les départements sauf de la ville casa
3) Les noms des employés sauf qui ont le chef 2
4) La liste des employés qui ont participé dans les projets
5) Les noms des projets en cours ( affectés aux employés)
6) Les noms des départements avec au moins deux secrétaires.
7) Nom des départements où ne travaillent que des ingénieurs
CHAPITRE 2
Réaliser des requêtes SQL

1. Requêtes LMD
2. Requêtes de sélection
3. Expression du SGBD
4. Fonctions d’agrégation du SGBD
5. Sous requêtes
6. Requêtes de l’union
7. Jointures
07- Jointures

 Une base de données relationnelle se compose de plusieurs tables liées entre elles à
l'aide de colonnes communes, appelées clés étrangères.
 Dans l’exemple Centre de Formation déjà présenté dans ce cours nous trouvons que
les deux tables « Etudiant » et « Inscription » sont liées a l’aide de la colonne :
numCINEtu

Afin d’avoir plus d’information sur les étudiants ou les inscriptions, on a besoin de chercher dans les deux
tables à la fois. D’où la nécessité des jointures.
81
07- Jointures

Requêtes intégrant plusieurs tables


Deux méthodes sont à notre disposition, la méthode ensembliste et la méthode
prédicative. Ces deux méthodes réalisent des jointures.

 La jointure consiste à rechercher entre deux tables ayant un attribut commun (même
type et même domaine de définition) tous les tuples (toutes les lignes) pour lesquels
ces attributs ont la même valeur.

 la méthode ensembliste réalise l’intersection de deux ensembles et s’exprime sous


forme de requêtes imbriquées.

 la méthode prédicative vérifie l’égalité de deux attributs et s’exprime sous la forme


d’une seule sélection conditionnelle.
07- Jointures

méthode ensembliste
Schéma de construction :

SELECT liste d’attributs


FROM table1
WHERE attribut de jointure
IN (SELECT attribut de jointure
FROM table2
WHERE condition)

La requête à l’intérieur des parenthèses est dite requête interne ou sous-requête. Elle
est évaluée en premier, constituant ainsi un premier ensemble dont on réalisera
l’intersection (IN) avec l’ensemble issu de l’évaluation de la requête externe.
07- Jointures

méthode ensembliste

Les attributs sélectionnés, et retenus dans le jeu de résultat, sont nécessairement


issus de la requête externe. Il s’agit donc d’une méthode assez restrictive.

D’une manière générale, l’exécution des requêtes construites selon la méthode


ensembliste demande plus de ressources au système et donc de temps de
traitement. Elles peuvent toutefois être plus faciles à réaliser et bien adaptées à
certains cas.
07- Jointures

Méthode prédicative
 La requête comporte une seule instruction SELECT qui traite plusieurs tables dont la liste apparaît
dans la clause FROM.
 La traduction de la jointure se fait par une équation de jointure (égalité entre 2 attributs) exprimée au
niveau de la clause FROM.
 MySQL prend en charge les types de jointures suivants :
• INNER JOIN (Jointure interne)
• LEFT JOIN (Joindre gauche)
• RIGHT JOIN (Joindre à droite)
• CROSS JOIN (Jointure croisée)
 Pour joindre des tables, On utilise la clause de jointure dans l'instruction SELECT après la clause FROM.
 Notez que MySQL ne prend pas en charge la jointure FULL OUTER JOIN.
07- Jointures

INNER JOIN
 INNER JOIN joint deux tables en fonction d'une condition connue sous le nom de prédicat de
jointure.
 Elle spécifie ainsi toutes les paires correspondantes de lignes renvoyées et ignore les lignes
n'ayant pas de correspondance entre les deux tables. La clause INNER JOIN ne retient que les
lignes des deux tables pour lesquelles l'expression exprimée au niveau de ON se vérifie.
Exemple :
Produits Sales

86
07- Jointures

INNER JOIN
Afin d’avoir pour chaque produit vendu, son prix, sa description et la quantité qui a
été vendue, nous avons besoin de joindre les deux tables comme suit :

SELECT P.Num_Produit, P.Description, P.prix,


S.quantite
FROM. Produits P
INNER JOIN Sales S ON P.Num_Produit = S.Num_Produit;

87
07- Jointures

INNER JOIN

Résultat de la requête :
07- Jointures

INNER JOIN
 Dans cet exemple, INNER JOIN utilise les valeurs des colonnes de « Num_Produit » dans
les tables « Produits » et « Sales » pour faire la correspondance.
 Le diagramme de Venn suivant illustre la jointure interne :

89
07- Jointures

INNER JOIN
Si la colonne de jointure a le même nom dans les deux tables objets de la jointure, on
peut utiliser la syntaxe suivante :

SELECT
P.Num_Produit, P.Description, P.prix, S.quantite

FROM
Produits P
INNER JOIN Sales S USING (Num_Produit);

90
07- Jointures

LEFT JOIN
• Lors de la jointure de deux tables à l'aide d'une jointure gauche, les concepts de tables gauche et
droite sont introduits.
• La jointure gauche sélectionne les données à partir de la table de gauche. Pour chaque ligne de la
table de gauche, la jointure de gauche est comparée à chaque ligne de la table de droite.
• Si les valeurs des deux lignes satisfont la condition de jointure, la clause de jointure gauche crée
une nouvelle ligne dont les colonnes contiennent toutes les colonnes des lignes des deux tables
et inclut cette ligne dans le jeu de résultats.
• Si les valeurs des deux lignes ne correspondent pas, la clause de jointure gauche crée toujours
une nouvelle ligne dont les colonnes contiennent les colonnes de la ligne de la table de gauche et
NULL pour les colonnes de la ligne de la table de droite.
• En d'autres termes, la jointure gauche sélectionne toutes les données de la table de gauche, qu'il
existe ou non des lignes correspondantes dans la table de droite.
07- Jointures

LEFT JOIN

Exemple :
SELECT
P.Num_Produit, P.Description, P.prix, S.quantite

FROM
Produits P
LEFT JOIN Sales S ON P.Num_Produit=S.Num_Produit;

Ou Alors : LEFT JOIN Sales S USING(Num_Produit).

92
07- Jointures

LEFT JOIN

• Le résultat est le suivant :

• Le diagramme de Venn suivant illustre la


jointure gauche :
07- Jointures

RIGHT JOIN

 La clause de jointure droite est similaire à la clause de jointure gauche sauf que le
traitement des tables gauche et droite est inversé. La jointure droite commence à
sélectionner les données de la table de droite au lieu de la table de gauche : RIGHT
JOIN sélectionne toutes les lignes de la table de droite et fait correspondre les lignes
de la table de gauche.

 Si une ligne de la table de droite n'a pas correspondances dans la table de gauche, la
colonne de la table de gauche aura NULL dans le jeu de résultats final.

94
07- Jointures

RIGHT JOIN

Exemple :

SELECT
S.Num_Produit, S.Quantite, P.prix
FROM
Sales S
Right JOIN Produits P ON
P.Num_Produit=S.Num_Produit;

• Ou Alors : RIGHT JOIN Produits P USING(Num_Produit).

95
07- Jointures

RIGHT JOIN

• Le résultat est le suivant :

• Le diagramme de Venn suivant illustre la jointure


droite :

96
07- Jointures

CROSS JOIN Exemple :

Contrairement à autres types de


jointures, la jointure croisée n'a pas de
condition de jointure.
Elle crée le produit cartésien des lignes
des tables jointes. La jointure croisée
combine chaque ligne de la première
table avec chaque ligne de la table de
droite pour créer le jeu de résultats.

97
07- Jointures

SELF JOIN
 L'auto-jointure est souvent utilisée pour interroger des données hiérarchiques ou pour comparer une
ligne avec d'autres lignes dans la même table.
 Pour effectuer une auto-jointure, on utilise des alias de la table pour ne pas répéter deux fois le
même nom de table dans la même requête.
N.B : Référencer une table deux fois ou plus dans une requête sans utiliser d'alias de table provoquera
une erreur.

Exemple :
• La table « People » est définie ainsi :

• La colonne IdParent définit le père de chaque personne, qui est aussi un élément de la table » People »
07- Jointures

SELF JOIN
 Afin d’avoir la liste des personnes et leurs parents, il faut utiliser une auto-jointure.
 Au moyen de INNER JOIN :
SELECT c.Nom as Fils, p.nom as Pere FROM people c
INNER JOIN people p on c.idParent = p.idPersonne;

Le résultat nous donne uniquement les


Personnes ayant un parent définit :

99
07- Jointures

SELF JOIN
Afin d’avoir la liste des personnes et leurs parents, il faut utiliser une auto-jointure.
Au moyen de LEFT JOIN :

Le résultat comprend même les personnes qui n’ont pas un père défini.

Exemple :

100
TP3 (suite) : Jointures
Soit le schéma relationnel suivant :
EMPLOYEE (EMPNO, EMPNOM, FONCTION, CHEF#, SALAIRE, DEPTNO#)
DEPARTEMENT (DEPTNO, DEPTNOM, LIEU)
PROJET (PCODE, PNOM)
PARTICIPER (PCODE#, EMPNO#)
À l'aide de SQL déterminer :
1) Le nom de la ville dans laquelle travaille ‘ALAMI’
2) Les noms des employés, fonctions et les noms des départements 20 et 30
3) Les noms des employés et les noms de leur chef.
4) Les noms et salaires des employés qui gagnent moins que leurs chefs (afficher aussi les noms des
chefs)
5) Les noms des employés et les noms des projets auxquels ils participent
6) Liste des projets auxquels participent ‘BENNIS Ali’
7) Liste des ingénieurs qui participent au projet ‘Gestion pharmacie’
8) Les noms de tous les employés et les noms des projets auxquels ils participent (même s’ils ne
participent à aucun projet)
9) Les noms de tous les directeurs et les noms des projets auxquels ils participent (même s’ils ne
participent à aucun projet)

Vous aimerez peut-être aussi