You are on page 1of 50

Université Abdelmalek Essaâdi

Faculté des Sciences et Techniques d’Al-Hoceima


Département de Physique
Année universitaire : 2022 - 2023
MST : Systèmes Embarqués et Robotique (MST-SER) – S2

Cours du Module M44 : « Bases de données avancées »

Chapitre 3 : Langage SQL

Pr. A. El Mhouti FSTH


Plan: Langage SQL

 Introduction au langage SQL

 Langage de Définition des Données (LDD)

 Langage de Manipulation des Données (LMD)

 Langage d'Interrogation de Données (LID)

Pr. A. El Mhouti 2 FSTH


Introduction

Pr. A. El Mhouti 3 FSTH


Langage SQL
Introduction

 SQL : Structured Query Language (Langage de requête structurée).


 Conçu par IBM dans les années 70.
 SQL est un langage informatique normalisé servant à exploiter des BD
relationnelles : rechercher, ajouter, modifier, supprimer, ….. des données
dans la BD.
 SQL est l'interface logiciel/logiciel entre les applications et les BDR.

Pr. A. El Mhouti 4 FSTH


Langage SQL
Introduction

 SQL :
 SQL-86 (ou SQL-87) : Version d'origine

 SQL-89 (ou SQL-1) : Améliorations mineures

 SQL-92 (ou SQL-2) : Extensions fonctionnelles majeures (types de


données, opérations relationnelles, instruction LDD, transactions, etc.
 SQL-99 (ou SQL-3) : Introduction du Relationnel-Objet

 SQL-2003 : Extensions XML

 SQL-2006 : Améliorations mineures (pour XML notamment)

 SQL-2008 : Améliorations mineures (pour le RO notamment)

Pr. A. El Mhouti 5 FSTH


Langage SQL
Catégories d’instructions SQL

 SQL est à la fois un :


 Langage de Définition des Données (LDD) : CREATE, ALTER, DROP
◼ définition des éléments d’une DB : tables, colonnes, clefs, …

 Langage de Manipulation de Données (LMD) : INSERT, UPDATE, DELETE


◼ manipulation des données stockées dans la BD : insertion,
suppression, modification, …

 Langage d'Interrogation de Données (LID) : SELECT


◼ Affichage des données de la BD, …

 …

Pr. A. El Mhouti 6 FSTH


Langage de Définition des Données (LDD)

Pr. A. El Mhouti 7 FSTH


Langage de Définition des Données
Créer/supprimer une base de données

 Créer une base de données :


 La commande SQL utilisée est CREATE DATABASE avec le nom de la
base.
 Exemple : CREATE DATABASE ma_base;

 Suppression de base de données :


 La commande SQL utilisée est DROP DATABASE avec le nom de la base.

 Exemple : DROP DATABASE ma_base;

 Voir la liste des bases de données :


 La commande SQL utilisée est SHOW DATABASES.

 Exemple : SHOW DATABASES;

Pr. A. El Mhouti 8 FSTH


Langage de Définition des Données
Créer une table : CREATE TABLE

 Syntaxe :
CREATE TABLE nom_table (nom_col1 TYPE1, nom_col2 TYPE2, ...);

 Exemple : Créer la table Employes (numemp, nom, dateNaiss, salaire) :


CREATE TABLE Employes ( numemp INTEGER,
nom VARCHAR(30),
dateNaiss DATE,
salaire NUMBER,
);

Pr. A. El Mhouti 9 FSTH


Langage de Définition des Données
Créer une table

 Types alphanumériques
 CHAR Un caractère
 CHAR(n) Chaîne de n caractères. (1 par défaut)
 VARCHAR(n), VARCHAR2(n) Chaîne dynamique d’au plus n caractères
 Text, LONG Chaîne pouvant atteindre jusqu’a 65000 caractères.

 Types numériques
 INT∗, INTEGER Nombre entier signé
 SMALLINT, INT2∗ entier codé sur 2 octets
 MEDIUMINT, INT4∗ entier 4 octets
 BIGINT, INT8∗ entier 8 octets
 NUMBER[ (n[,d])] Nombre de n chiffres dont éventuellement d après la virgule.
 REAL, FLOAT, FLOAT4∗ Réels 4 octets
 DOUBLE PRECISION, FLOAT8∗ Réels 8 octets
 NUMERIC[(m,e)], DECIMAL[(m [,e])] nombre réel de mantisse à m chiffres et d’exposant e
 RAW (n) Binaire de longueur n (pour stocker des images par exemple).
Pr. A. El Mhouti 10 FSTH
Langage de Définition des Données
Créer une table

 Autres types
 DATE structure composée de champs et stockant le jour, mois, année
 TIME structure composée de champs et stockant l’heure, les min et les sec.
 TIMESTAMP permet de stocker des données constituées d’une date et d’une heure
 INTERV AL∗ intervalle de dates
 ROWID Pointeur de ligne
 MONEY permet de stocker des valeurs monétaires.
 BOOLEAN permet de stocker des valeurs Booléenne.

 Remarque
 Indépendamment des types, la valeur NULL est une valeur spéciale qui dénote
l’absence de valeurs.

Pr. A. El Mhouti 11 FSTH


Langage de Définition des Données
Créer une table : Contraintes d’intégrité

 Contrainte d’unicité : PRIMARY KEY :


 Désigne l’attribut comme clé primaire de la table.

 Exemples :
 Clé primaire non composée :

CREATE TABLE T1( num NUMBER PRIMARY KEY,


nom VARCHAR(10));
 Clé primaire composée :
CREATE TABLE T2(nump NUMBER,
code NUMBER,
PRIMARY KEY(nump, code),
...);
Pr. A. El Mhouti 12 FSTH
Langage de Définition des Données
Créer une table : Contraintes d’intégrité

 Contrainte de référence : FOREIGN KEY :


 Désigne l’attribut comme clé étrangère de la table.
 Syntaxe: FOREIGN KEY (attribut, ...) REFERENCES table(attribut,...)
ON DELETE (ON UPDATE) valeur ;

 valeur peut prendre l’une des valeurs suivantes :


 CASCADE : l’opération (DELETE ou UPDATE) exécutée sur la table référencée est
lancée sur les attributs de même valeur de la table référençant.
 SET NULL : donne à l’attribut référençant la valeur NULL lorsque l’on manipule la
valeur correspondante de l’attribut référencé.
 SET DEFAULT : impose une valeur par défaut à l’attribut référençant.
 NO ACTION : inhibe le processeur d’intégrité. L’opération menée sur la table
référencée est sans objet sur la table référençant.
Clients Commandes

13
Langage de Définition des Données
Créer une table : Contraintes d’intégrité

 Contrainte de référence : FOREIGN KEY :


 Exemple : CREATE TABLE Commandes(
Numero NUMBER PRIMARY KEY,
NumCli NUMBER,
Produit VARCHAR(10),
Quantite INTEGER,
CONSTRAINT FK_ref FOREIGN KEY (NumCli) REFERENCES Clients(NumCli)
ON DELETE SET NULL
ON UPDATE CASCADE);

Clients Commandes
 ON DELETE SET NULL : quand le tuple contenant la clé primaire référencée est supprimé dans
la table Clients, il y aura mise à NULL des tuples dépendants dans la table Commandes
 ON UPDATE CASCADE : quand le tuple contenant la clé primaire référencée est modifié dans la
table Clients, il y aura modification des tuples dépendants dans la table Commandes
Langage de Définition des Données
Renommer/Supprimer une table : DROP TABLE

 Renommer une table : ALTER TABLE


 Syntaxe :

ALTER TABLE nom_table RENAME TO nouveau_nom;


 Exemple:
Renommer la table Employés avec le nom Salariers
ALTER TABLE Employes RENAME TO Salariers;

 Supprimer une table : DROP TABLE


 Syntaxe : DROP TABLE nom_table;

 Exemple : Supprimer la table Produits(ref, nom, prix, dateAchat):


DROP TABLE Produits;
Pr. A. El Mhouti 15 FSTH
Langage de Manipulation des Données (LMD)

Pr. A. El Mhouti 16 FSTH


Langage de Manipulation des Données
Insertion de tuples : INSERT INTO

 Syntaxe : INSERT INTO nom_table (nom_col_1, nom_col_2, ...)


VALUES (val_1, val_2, ...);
 Remarques :
 La liste des noms des colonnes est optionnelle. Si elle est omise, la liste des colonnes
sera par défaut l’ensemble des colonnes de la table dans l’ordre de la création.
 Si une liste de colonnes est spécifiée, les colonnes ne figurant pas dans la liste auront
la valeur NULL.

 Exemples : soit la table DEPT suivante :

 A. Insérer la ligne (10, 'FINANCES‘, 'PARIS‘) dans la table DEPT:


INSERT INTO DEPT VALUES (10, 'FINANCES', 'PARIS') ;

 B. Insérer la ligne ('GRENOBLE', 'RECHERCHE', 20) dans la table DEPT:


INSERT INTO DEPT (LIEU, NOMD, DEPT)
VALUES ('GRENOBLE', 'RECHERCHE', 20);
Pr. A. El Mhouti 17 FSTH
Langage de Manipulation des Données
Modification de tuples : UPDATE

 Syntaxe : UPDATE table


SET col1 = exp1,
col2 = exp2,
...
WHERE prédicat;
◼ table : nom de la table mise à jour ;
◼ col1, col2, ...: sont les noms des colonnes qui seront modifiées ;
◼ exp1, exp2,... : sont des expressions.
◼ WHERE est facultative. Si elle est absente, toutes les lignes sont mises à jour.

 Exemple : soit la table Employes(nuemp, numdept, nome, job, salaire, comm):


 Affecter l’employé numéro 506 comme Directeur dans la table :
UPDATE Employes
SET job= 'DIRECTEUR' WHERE nuemp = 506;
Langage de Manipulation des Données
Suppression de tuples : DELETE

 Syntaxe : DELETE FROM nom_table


WHERE predicat ;
 Toutes les lignes pour lesquelles predicat est évalué à vrai sont supprimées.
 En l’absence de clause WHERE, toutes les lignes de la table sont supprimées.

 Exemple : soit la table Employes(nuemp, numdept, nome, job, salaire, comm):


nuemp numdept nome job salaire comm
1231 10 Ali Technicien 5000 60
2589 25 Badr Ingénieur 10000 55
4785 10 Sara Administrateur 6000 15

 Supprimer de la table Employes les départements 10 :


DELETE FROM Employes
WHERE numdept = 10;
Langage d'Interrogation de Données (LID)

Pr. A. El Mhouti 20 FSTH


Langage d'Interrogation de Données (LID)
La clause SELECT

 Le SELECT est la commande de base du langage SQL destinée à extraire des


données d'une base ou calculer de nouvelles données à partir de données existantes.
 Elle retourne des enregistrements dans un tableau de résultat.
 La commande SELECT permet de :
 sélectionner certaines colonnes d’une table (projection).
 sélectionner certaines lignes d’une table (sélection).
 combiner des informations venant de plusieurs tables (jointure, union, intersection ..).
 Syntaxe simplifiée : SELECT attributs
FROM nom_table
WHERE condition;

 Exemple : Sélectionner le nom et le prénom des clients ayant le numéro 3:


SELECT Nom, Prenom
Clients FROM Clients
WHERE NumCli=3;

Pr. A. El Mhouti 21 FSTH


Langage d'Interrogation de Données (LID)
La clause SELECT : Syntaxe

 En fait l'ordre SQL SELECT est composé de 6 clauses dont 4 sont optionnelles.
 Syntaxe générale : SELECT liste d'attributs projetés
FROM liste de relations
WHERE liste de critères de restriction et de jointure
GROUP BY ………
HAVING ……
ORDER BY……
 De manière synthétique, on peut dire que la clause :
▪ SELECT : spécifie les colonnes qui doivent apparaıtre dans les résultats : projection
▪ FROM : spécifie la table ou les tables à utiliser : produit cartésien
▪ WHERE : filtre les lignes selon une condition donnée : sélection
▪ GROUP BY : forme des groupes de lignes de même valeur de colonne
▪ HAVING : filtre les groupes sujets a une certaine condition
▪ ORDER BY : spécifie l’ordre d’apparition des données dans le résultat
Pr. A. El Mhouti 22 FSTH
Langage d'Interrogation de Données
La clause SELECT : Opérateurs

 Les opérateurs DISTINCT et ALL :


 ALL : permet d’afficher toutes les lignes qui satisfont la requête même si ces lignes sont
en double ( par défaut).
 DISTINCT : permet d’éliminer les doublons dans la réponse.
 Exemple: soit la table Employes(nuemp, numdept, nome, job, salaire, comm) :
Afficher la liste des noms des employés sans doublons :
SELECT DISTINCT nome nuemp numdept nome job salaire comm
FROM Employes; 01245 1250 Kamal Secrétaire 3500 10%
12035 1422 Hicham Ingénieur 9800 15%
12574 1482 Kamal Sécurité 2500 5%
 Les opérations mathématiques :
 Les opérateurs mathématiques (+, -, *, /) permettent de générer de nouvelles colonnes
à partir de colonnes existantes.
 Exemple : afficher le nom, le job et le salaire annuel des employés :
SELECT nome, job, salaire*12
FROM Employes;
Pr. A. El Mhouti 23 FSTH
Langage d'Interrogation de Données
La clause SELECT : Opérateurs

 L’opérateur AS :
 permet de nommer une colonne créée dans la requête.
 Exemple: soit la table Employes(nuemp, numdept, nome, job, salaire, comm) :
Afficher le nom, le prénom et le salaire annuel des employés,:
SELECT nome , prenom, salaire*12 AS Salaire_annuel
FROM Employes; nuemp numdept nome job salaire comm
01245 1250 Kamal Secrétaire 3500 10%
12035 1422 Hicham Ingénieur 9800 15%
 L’opérateur de concaténation || : 12574 1482 Kamal Sécurité 2500 5%

 L’opérateur || permet de concaténer des champs de type caractères.


 Exemple : afficher le nom et le prénom sur une colonne, puis le salaire annuel des
employés sur une colonne :
SELECT prenome || ' ' || nome AS NOM, salaire*12 AS salaire_anuel
FROM Employes;
Pr. A. El Mhouti 24 FSTH
Langage d'Interrogation de Données
La clause SELECT : Délimiteurs

 Utilisation des délimiteurs : '…' :


 Une chaîne de caractères doit être délimitée par des apostrophes.

 Exemple : sélectionner les employés ayant pour nom Salah :

SELECT * FROM Employes WHERE nome='Salah';

 Les dates doivent également être entourées d’apostrophes.


 Par exemple : ’17/01/2019’.

Pr. A. El Mhouti 25 FSTH


Langage d'Interrogation de Données
La clause SELECT : Opérateurs relationnels

 Projection :
 Opération sur une relation R1 produisant une relation R2 en enlevant de R1
tous les attributs non mentionnés en opérandes.
 Elle se traduit en SQL par la requête :
SELECT DISTINCT A1, ..., An
FROM Relation;

 Exemple : soit la relation T suivante :

SELECT DISTINCT nom, âge


FROM T;

Pr. A. El Mhouti 26 FSTH


Langage d'Interrogation de Données
La clause SELECT : Opérateurs relationnels
 Sélection :
 Opération sur une relation R1 produisant une relation R2 de même schéma, mais
comportant seulement les lignes qui vérifient la condition précisée en argument.
 Elle se traduit en SQL par la requête :
SELECT *
FROM Relation
WHERE condition ;

 Exemple : soit la relation T suivante :

SELECT *
FROM T
WHERE adr='Lyon';
Pr. A. El Mhouti 27 FSTH
Langage d'Interrogation de Données
La clause SELECT : Opérateurs relationnels

 Produit cartésien :
 Opération portant sur deux relation R1 et R2, consistant à construire une
relation R3 ayant pour schéma la concaténation de R1 et R2 et pour lignes
toutes les combinaisons des lignes des relations opérandes.
 Il se traduit en langage SQL par la requête :
SELECT *
FROM Relation1, Relation2;
 Exemple : soit les relations homme et ville suivantes :

SELECT *
FROM homme, ville;

Pr. A. El Mhouti 28 FSTH


Langage d'Interrogation de Données
La clause SELECT : Opérateurs relationnels

 Jointure :
 Opération portant sur deux relations et consiste en un produit cartésien suivi
d’une sélection.
 Elle se traduit en SQL par la requête :
SELECT *
FROM Relation1, Relation2
WHERE Relation1.A1 = Relation2.A2;
 Exemple : soit les relations homme et ville suivantes :

SELECT *
FROM homme, ville
WHERE homme.adr= ville.nomV;

Pr. A. El Mhouti 29 FSTH


Langage d'Interrogation de Données
Les fonctions : Fonctions de groupes (d’aggrégation)

 AVG moyenne
 SUM somme
 MIN plus petite des valeurs
 MAX plus grande des valeurs
 VARIANCE variance
 STDDEV écart type (déviation standard)
 COUNT(*) nombre de lignes
 COUNT(col ) nombre de valeurs non nulles de la colonne
 COUNT(DISTINCT col ) nombre de valeurs non nulles différentes
Exemples : soit la table Employes(nuemp, numdept, nome, job, salaire, comm) :
 a) SELECT COUNT(*) FROM Employes;
 b) SELECT SUM(comm) FROM Employes WHERE numdept = 10;
Pr. A. El Mhouti 30 FSTH
Langage d'Interrogation de Données
La clause FROM : Jointure (équi-jointure)

 FROM spécifie la liste des tables participants à l'interrogation (produit cartésien).


 Une variante de la clause FROM est l'opération de jointure = produit cartésien, suivi
d’une sélection.
 Syntaxe : FROM table1 JOIN table2 ON table1.A1 = table2.A2;

 Exemple : soit les deux tables : Employes (nuemp, #numdept, nome, job, salaire, comm)
Departements (numdept, nomdept, nbemploye)
 Afficher la liste des employés avec le nom du département où ils travaillent :
SELECT nome, nomdept
FROM Employes JOIN Departements
ON Employes.numdept = Departements.numdept;

 Remarque : La jointure peut aussi être traduite par la clause WHERE :


SELECT nome, nomdept
FROM Employes, Departements
WHERE Employes.numdept = Departements.numdept;
Pr. A. El Mhouti 31 FSTH
Langage d'Interrogation de Données
La clause WHERE

 WHERE permet de filtrer les tuples (lignes) selon une condition : sélection
 Syntaxe : WHERE condition

 La condition peut être :


 simple : comparaison d’expressions au
moyen d'un opérateur.
 Les 3 types d'expressions exp :
◼ arithmétiques
◼ caractères
◼ Dates

 composée : Les conditions simples peuvent être combinées au sein d’expressions


logiques en utilisant les opérateurs logiques AND (et logique), OR (ou logique),
NOT (négation logique).
Pr. A. El Mhouti 32 FSTH
Langage d'Interrogation de Données
La clause WHERE

 Opérateurs de comparaison :

Pr. A. El Mhouti 33 FSTH


Langage d'Interrogation de Données
La clause WHERE

 Exemples : soit la table : Employes (nuemp, #numdept, nome, job, salaire, comm)

 1. Sélectionner les employés du département 30 ayant un salaire supérieur à 15000 DH.


SELECT nome FROM Employes
WHERE numdept = 30 AND salaire > 15000;

 2. Afficher une liste comprenant les employés du département 30 dont le salaire est
supérieur à 11000 DH ou les employés qui ne touchent pas de commission.
SELECT nome FROM Employes
WHERE numdept = 30 AND salaire > 11000 OR comm IS NULL;

Pr. A. El Mhouti 34 FSTH


Langage d'Interrogation de Données
La clause GROUP BY

 Notion de groupe :
 Un groupe est un sous-ensemble des lignes d’une table ayant la même valeur pour un
attribut.
 Exemple : soit la table Employes (nuemp, #numdept, nome, job, salaire, comm) :
nuemp numdept nome job salaire comm
1 10 Ali Technicien 4000 10
2 12 Salah Ingénieur 9000 15
3 10 Karima Secrétaire 5000 8
4 24 Imrane Ingénieur 8500 7,5
5 10 Maryem Technicien 3800 5

 Un groupe est déterminé par la clause GROUP BY suivie du nom du ou des attributs
sur lesquels s’effectuent le regroupement.
 Exemple : on peut grouper les employés en fonction de leur département.
 Syntaxe : GROUP BY exp1, exp2,...
Pr. A. El Mhouti 35 FSTH
Langage d'Interrogation de Données
La clause GROUP BY

 Cette clause :
 1) subdivise la table en groupes.
 2) produit une table résultat comportant une ligne pour chaque groupe.
 Cette clause se place juste après la clause WHERE ou après FROM si WHERE n'existe pas.
 Exemple 1 : Soient la table Etudiants(CNE, Nom, Prenom, Ville, Moyenne).
On veut le meilleur étudiant de chaque ville, en affichant sa moyenne et son prénom.
SELECT Ville, Prenom, MAX(Moyenne)
FROM Etudiants
GROUP BY Ville;
Ville Prenom Moyenne
Tanger Salah 17 Ville Prenom Max(Moyenne)
Tanger Brahim 13 Tanger Salah 17
Tanger Khadija 15
Al-Hoceima Rita 19
Al-Hoceima Karim 16
Al-Hoceima Rita 19 Fès Sara 14
Fès Sara 14
Table résultat comportant une ligne pour
Table divisée en groupes ayant la même chaque groupe + fonction de calcul
valeur pour l’attribut Ville
Pr. A. El Mhouti 36 FSTH
Langage d'Interrogation de Données
La clause HAVING

 La clause HAVING permet d'effectuer une seconde sélection après l'opération


d'agrégation (comme WHERE).

 Si WHERE permet de sélectionner certaines lignes dans un SELECT, alors HAVING permet
de sélectionner certaines groupes dans un SELECT comportant un GROUP BY.

Pr. A. El Mhouti 37 FSTH


Langage d'Interrogation de Données
La clause HAVING

 Exemple : Soient les tables Sociétés et Personnes suivantes :


◼ Sociétes (Nom, Dpt, Activité, Adresse)
◼ Personnes (NumSS, Nom, Age, #NomSoc)

Obtenir l'âge moyen du personnel pour chaque société comportant plus de 2 employés :
SELECT Societes.Nom, AVG(Personnes.Age)
FROM Personnes, Societes
WHERE Personnes.NomSoc = Societes.Nom
GROUP BY Societes.Nom
HAVING COUNT(Personnes.NumSS) > 2;
Nom Age
Oracle 45 Nom AVG (Age)
Nom AVG (Age)
Oracle 35 Oracle 40
IBM 25
IBM 20 IBM 25
IBM 25 Table comportant une ligne Table résultat : une 2ème sélection
IBM 30 pour chaque groupe. (condition de HAVING)
Table divisée en groupes selon le Nom (GROUP BY)
Pr. A. El Mhouti 38 FSTH
Langage d'Interrogation de Données
La clause ORDER BY

 Les lignes constituant le résultat d'un SELECT sont obtenues dans un ordre indéterminé.
 ORDER BY précise l'ordre dans lequel la liste des lignes sélectionnées sera donnée.
 Syntaxe : ORDER BY col ASC | DESC ;

 expression : spécifie une colonne, ou une opération mathématique sur les colonnes.
 ASC : spécifie l’ordre ascendant (valeur par défaut).
 DESC : spécifie l’ordre descendant.
 ORDER BY est la dernière clause de tout ordre SQL et ne doit figurer qu’une seule fois
dans le SELECT, même s’il existe des requêtes imbriquées.

Pr. A. El Mhouti 39 FSTH


Langage d'Interrogation de Données
La clause ORDER BY

 Exemple 1 : Soit la table Employes (nuemp, #numdept, nome, job, salaire, comm)
On veut la liste des employés, triée par numéro de département et dans chaque
département par ordre de salaire décroissant :
SELECT *
FROM Employes
ORDER BY numdept, salaire DESC ;

nuemp numdept nome job salaire comm


4 5 Salah Tech 12000 12
6 7 Karima Ing 5289 33
2 9 Rita Adm 9000 7
7 9 Saad Tech 5200 8
3 13 Saber Dev 8500 41
5 13 Jamila Sec 7000 50
1 13 Luna Ing 4500 32
Les tuples sont triés d'abord par le premier attribut spécifié dans ORDER BY, puis par le
second, etc ..

Pr. A. El Mhouti 40 FSTH


Langage d'Interrogation de Données
La clause ORDER BY

 Exemple 2 : Soit la table Employes (nuemp, #numdept, nome, job, salaire, comm)
On veut la liste des groupes de départements par ordre croissant du total des salaires :
SELECT numdept, SUM(Salaire) "Total salaires"
FROM Employes
GROUP BY numdept
ORDER BY 2 ;

numdept salaire
5 12000 numdept SUM(Salaire)
7 5289 7 5289
9 9000 5 12000
9 5200 9 14200
13 8500 13 20000
13 7000
Table comportant une ligne pour chaque groupe (GROUP BY).
13 4500
+
Table divisée en groupes selon le numdept Tri croissant du total des salaires (ORDER BY)

Pr. A. El Mhouti 41 FSTH


Langage d'Interrogation de Données
Opérateurs ensemblistes : UNION, INTERSECT et EXCEPT

 Les résultats de deux requêtes peuvent être combinés en utilisant les opérateurs
ensemblistes.

 Syntaxe générale : Requête_1 { UNION | INTERSECT | EXCEPT } Requête_2;

 UNION : permet de fusionner deux sélections de tables pour obtenir un ensemble de lignes égal à la
réunion des lignes des deux sélections.
 INTERSECT : permet d'obtenir l'ensemble des lignes communes à deux sélections.
 EXCEPT : permet d'ôter d'une sélection les lignes obtenues dans une deuxième sélection.

 Remarques :
 requête_1 et requête_2 doivent avoir le même schéma.
 Il est tout à fait possible de chaîner plusieurs opérations ensemblistes.
 le comportement par défaut des opérateurs ensemblistes élimine les doublons.

Pr. A. El Mhouti 42 FSTH


Langage d'Interrogation de Données
Les sous-requêtes (requêtes imbriquées)

 Une condition utilisée dans WHERE peut comporter un SELECT imbriqué (à droite d'un
opérateur de comparaison).
 Syntaxe : WHERE exp op (SELECT ...)
où :
▪ op est un des opérateurs : =, !=, <, >, <,=, >,=
▪ exp : toute expression légale.

 Exemple : Soit la table Employes (nuemp, #numdept, nome, job, salaire, comm).
On veut sélectionner les employés ayant même job que Karim:
SELECT nome FROM Employes
WHERE job= (SELECT job
FROM Employes
WHERE nome = 'Karim');

Pr. A. El Mhouti 43 FSTH


Langage d'Interrogation de Données
Sous-requête : Sous-interrogation ramenant plusieurs colonnes

 Il est possible de comparer le résultat d'un SELECT ramenant plusieurs colonnes à une
liste de colonnes.
 La liste de colonnes figurera entre parenthèses à gauche de l'opérateur de comparaison.
 Syntaxe : WHERE (exp, exp,...) op (SELECT ...)

 Exemple : soit la table : Employes (nuemp, #numdept, nome, job, salaire, comm)
Afficher les employés ayant même job et même salaire que PIERRE :
SELECT nome, job, Salaire
FROM Employes
WHERE (job, Salaire) = (SELECT job, Salaire FROM Employes
WHERE nome = ‘PIERRE')
Les expressions figurant dans la liste entre parenthèses seront comparées à celles qui sont
ramenées par le SELECT.

Pr. A. El Mhouti 45 FSTH


Langage d'Interrogation de Données
Sous-requête : Sous-interrogation ramenant plusieurs lignes

 Une sous-interrogation peut ramener plusieurs lignes à condition que l'opérateur de


comparaison admette à sa droite un ensemble de valeurs.

 Les opérateurs permettant de comparer une valeur à un ensemble de valeurs sont :


◼ opérateur d'existence IN
◼ opérateur d'existence NOT IN
◼ Opérateur d'existence EXISTS
◼ Opérateur de comparaison ALL
◼ Opérateur de comparaison ANY

Pr. A. El Mhouti 46 FSTH


Langage d'Interrogation de Données
Sous-requête d'existence IN

 IN permet de vérifier l’existance d'une valeur/tuple de la requête principale dans la


sous-requête.
 Syntaxe : WHERE exp IN (SELECT ...)

 Exemple : soit la table : Employes (nuemp, #numdept, nome, job, salaire, comm)
 Sous-requête IN à une colonne et plusieurs lignes :
Liste des employés ayant même job que quelqu'un du département 10 :
SELECT nome
FROM Employes
WHERE job IN (SELECT job FROM Employes
WHERE numdept=10);

 Remarque : NOT IN
On peut tester la non existence du tuple dans la sous requête en utilisant NOT IN à la
place de la clause IN.

Pr. A. El Mhouti 47 FSTH


Langage d'Interrogation de Données
Sous-requête d'existence EXISTS

 EXISTS permet de vérifier que la sous-requête contient au moins une valeur/tuple (le
résultat de la sous-requête n’est pas vide).
 Syntaxe : WHERE EXISTS (SELECT ...)

 Exemple : soit les tables Produits et Ventes :


Quels sont les marques dont aucun produit n’a été vendu le 1/01/2019 ?

SELECT Produits.marque FROM Produits


WHERE NOT EXISTS (SELECT Ventes.ref-produit
FROM Ventes, Produits P
WHERE Ventes.ref-produit = P.référence
AND P.marque = Produits.marque
AND date = 1/01/2019;)

Pr. A. El Mhouti 48 FSTH


Langage d'Interrogation de Données
Sous-requête de comparaison ALL

 ALL permet de comparer une valeur avec le résultat d’une sous-requête.


 La comparaison sera vraie si elle est vraie pour tous les éléments de l'ensemble (elle est
vraie si l'ensemble est vide).
 ALL s’utilise dans une clause conditionnelle juste après un opérateur conditionnel.
 Syntaxe : WHERE valeur op ALL (SELECT ...)
où op est un des opérateurs =, !=, <, >, <=, >=.

 Exemple : soit la table : Employes (nuemp, #numdept, nome, job, salaire, comm)
Liste des employés gagnant plus que tous les employés du département 30 :
SELECT nome, Salaire FROM Employes
WHERE Salaire > ALL (SELECT Salaire FROM Employes
WHERE numdept=30)

Pr. A. El Mhouti 49 FSTH


Langage d'Interrogation de Données
Sous-requête de comparaison ANY

 ANY permet de comparer une valeur avec le résultat d’une sous-requête.


 La comparaison sera vraie si elle est vraie pour au moins un élément de l'ensemble (elle
est donc fausse si l'ensemble est vide).
 ANY s’utilise dans une clause conditionnelle juste après un opérateur conditionnel.
 Syntaxe : WHERE valeur op ANY (SELECT ...)
où op est un des opérateurs =, !=, <, >, <=, >=.
 Exemple : soit la table Produits (numP, libellé, marque, prix-HT) :
Quelles sont les marques de produits qui n’ont pas le prix HT le plus élevé ?
SELECT marque
FROM Produits
WHERE Produits.prixHT < ANY (SELECT P.prixHT FROM Produits P;)

 Remarque : =ANY et IN sont équivalents.

Pr. A. El Mhouti 50 FSTH

You might also like