Vous êtes sur la page 1sur 56

CM3 : Structured Query Language SQL

Safa BETTOUMI ZOGHLAMI

September 15, 2023

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 1 / 56
1 Introduction à SQL

2 Définition de shémas d’une BD

3 ORDRES LMD
Insert, update, delete

4 Interrogation de données sous SQL

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 2 / 56
Introduction à SQL

Le langage SQL

• SQL (Structured Query Language) est composé de cinq sous


ensembles standards qui permettent décrire et manipuler les BDR:
1 LDD (DDL:”Data Definition Language”): permet de créer des
bases de données, des tables, des index, des contraintes. Exp :
CREATE, ALTER, DROP...
2 LMD (DML:”Data Manipulation Language”): permet de
manipuler les données. Exp: INSERT, UPDATE, DELETE...
3 LID (DQL: ”Data Query Language”): permet d’extraire et
interroger des données. Exp: SELECT...
4 LCD(DCL ”Data Control Language”) : permet de gérer les droits
d’accès aux tables. Exp: GRANT, REVOKE...
5 LCT(TCL : ”Transacion Control Language”): permet de contrôler
la bonne exécution des transactions. Exp: COMMIT, ROLLBACK...

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 3 / 56
Définition de shémas d’une BD

Création de Tables

Syntaxe:
CREATE TABLE nom table
( colonne1 type1 [CONTRAINTE DE COLONNE1],
colonne2 type2 [CONTRAINTE DE COLONNE3],
colonne3 type3 [CONTRAINTE DE COLONNE3]
);

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 4 / 56
Définition de shémas d’une BD

Contraintes de colonnes

• Les contraintes de colonnes permettent de spécifier différentes


contraintes d’intégrité portant sur un seul attribut, y compris les
contraintes référentielles.
• Les différentes variantes possible sont :
• Valeur nulle impossible (syntaxe NOT NULL),
• Unicité de l’attribut (syntaxe UNIQUE ou PRIMARY KEY),
• Contrainte référentielle, permettant de spécifier quelles colonnes
référencent celles d’une autre table:
FOREIGN KEY (<colonne référençante>)] REFERENCES <table
référencée> [(<colonne référencée>)]
• Contrainte générale (syntaxe CHECK <condition>).La condition est
une condition pouvant spécifier des plages ou des listes de valeurs
possibles.

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 5 / 56
Définition de shémas d’une BD

Création de Tables-Exemples
• Pilote(numpil, nompil,adr,sal)
• Avion((numav,nomav,cap,loc)
• Vol(numvol,#numpil,#numav,villedep,datedep,datearr,villearr,hdep,harr)
CREATE TABLE Pilote (
numpil INT constraint pk numpil primary key,
nompil CHAR(20) NOT NULL,
adr CHAR(50) NOT NULL,
sal DEC(8,3) DEFAULT 0 );
CREATE TABLE Avion (
numav INT constraint pk numav primary key,
nomav CHAR(20) NOT NULL,
cap INT NOT NULL,
loc CHAR(20) );
CREATE TABLE Vol (
numvol INT constraint pk numvol primary key,
numpil INT constraint fk numpil references Pilote(numpil),
numav INT constraint fk numav references Avion(numav),
villedep CHAR(30) NOT NULL,
villearr CHAR(30) NOT NULL,
hdep DEC(2,2) CHECK (hdep BETWEEN 1 AND 24),
harr DEC(2,2) CHECK (harr BETWEEN 1 AND 24));
Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 6 / 56
Définition de shémas d’une BD

Suppression d’une Table

• Syntaxe:
DROP TABLE nom table ;
• Exemple:
• DROP TABLE Avion;

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 7 / 56
Définition de shémas d’une BD

Modification d’un schéma

Syntaxe:
ALTER TABLE Nom Table Altération;
• Différents types d’altérations sont possibles :
• Ajout d’une colonne (ADD COLUMN).
• Modification de la définition d’une colonne (ALTER COLUMN).
• Suppression d’une colonne (DROP COLUMN).
• Ajout d’une contrainte (ADD CONSTRAINT).
• Suppression d’une contrainte (DROP CONSTRAINT).

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 8 / 56
Définition de shémas d’une BD

Modification d’un schéma

Exemples:
ALTER TABLE Employe ADD Adresse VARCHAR(50);

ALTER TABLE Employe ADD Adresse VARCHAR(50),


Téléphone NUMBER(40);

ALTER TABLE Employe DROP COLUMN Adresse;

ALTER TABLE Employe


ADD CONSTRAINT pk emp PRIMARY KEY (Num emp);

ALTER TABLE Employe DROP COLUMN Adresse;

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 9 / 56
ORDRES LMD Insert, update, delete

INSERT

• Permet d’insérer des données dans une table.


INSERT INTO nom table (col1,col2,..)VALUES
(valeur1,valeur2,..);

• Dans le cas où la liste de colonnes n’est pas spécifiée, tous les
attributs de la relation doivent être fournis dans l’ordre de déclaration.
Si seulement certaines colonnes sont spécifiées, les autres sont
insérées avec la valeur nulle.

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 10 / 56
ORDRES LMD Insert, update, delete

INSERT

• Exemple:
INSERT INTO PILOTE (NUMPIL, NOMPIL, ADR, SAL)
VALUES (12345, ”Martin”, ”Pascal”, 5000);

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 11 / 56
ORDRES LMD Insert, update, delete

UPDATE

• Permet de modifier les données dans une table.


Syntaxe:
UPDATE NOM DE TABLE
SET NOM DE COLONNE = (EXPRESSION DE VALEUR | NULL)
WHERE CONDITION DE RECHERCHE
• Exemple: modifier l’adresse du pilote n◦ 12345 à Paris
UPDATE Pilote SET adr=”Paris”
WHERE numpil= 12345;
• Exemple: diminuer de 10 la capacité de des avions Boeing 747 et
dont la localisation= Nice
UPDATE Avion SET cap=cap-10
WHERE nomav LIKE ”boeing747”
AND loc LIKE ”Nice”;
Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 12 / 56
ORDRES LMD Insert, update, delete

DELETE

• Permet de supprimer des données dans une table.


Syntaxe:
DELETE FROM NOM DE TABLE
[WHERE CONDITION DE RECHERCHE];
• S’il n’y a pas de clause WHERE, toutes les lignes sont supprimées

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 13 / 56
ORDRES LMD Insert, update, delete

DELETE

• Exemple: supprimer de la table avion les tuples de capacité nulle


(=0).
DELETE FROM Avion
WHERE cap=0;
• Exemple: Supprimer de la table avion les tuples de capacité nulle
(=0) et qui ne figurent pas dans la table vol:
DELETE FROM Avion
WHERE cap=0
AND numav NOT IN (SELECT numav FROM vol);

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 14 / 56
Interrogation de données sous SQL

Requêtes simples

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 15 / 56
Interrogation de données sous SQL

Expression des projections


• SQL permet d’appliquer des fonctions de calculs(+−, ∗et/) sur les
colonnes extraites.
• Exemple: Afficher, les num des pilotes et leurs salaires multipliés par
1,1:
SELECT numpil, (sal*1,10) AS salP
FROM Pilote;
• SQL n’élimine pas les doublons, à moins que cela soit explicitement
demandé par le mot clé DISTINCT, l’option par défaut étant ALL.
• DISTINCT a un coût, donc ne pas utiliser lorsque c’est inutile
• Lorsque la table résultat contient un attribut (ou un ensemble
d’attributs) qui pourrait être clé primaire, il est inutile d’utiliser
DISTINCT.
• Si l’on veut éliminer les lignes identiques de la table résultat et si cette
table ne possède pas d’attribut (ou d’ensemble d’attributs) pouvant
servir de clé primaire, alors l’utilisation de DISTINCT est obligatoire.
Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 16 / 56
Interrogation de données sous SQL

Expression des projections

• Exemple:

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 17 / 56
Interrogation de données sous SQL

Restriction sur les données

• Exemple:

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 18 / 56
Interrogation de données sous SQL

Restriction sur les données: Prédicats de restriction

• Une condition de recherche élémentaire est appelée prédicat en SQL.


• Un prédicat de restriction permet de comparer deux expressions de
valeurs.
• La première contenant des spécifications de colonnes est appelée terme.
• La seconde contenant seulement des constantes est appelée constante.
• Il existe une grande diversité de prédicats en SQL. On trouve en effet:
• Un prédicat de comparaison {”=”, ”6=”, <, ”>”,”<=”,”>=”};
• Un prédicat d’intervalle BETWEEN
• Un prédicat de comparaison de texte LIKE
• Un prédicat de test de nullité (IS NULL/IS NOT NULL)
• Un prédicat d’appartenance IN

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 19 / 56
Interrogation de données sous SQL

Restriction sur les données: Prédicats de restriction

• AND: renvoie TRUE si les deux conditions sont vraies.


• OR: renvoie TRUE si l’une des conditions est vraie
• NOT: renvoie TRUE si la condition qui suit est FALSE et inversement.

SELECT nom
FROM employés
WHERE salaire>= 1000 AND ville LIKE ”A%”;

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 20 / 56
Interrogation de données sous SQL

Restriction sur les données: Prédicats IN

• Vérifie l’appartenance d’une données à une série de valeurs.


• Exemple:

SELECT nom
FROM employés
WHERE ville IN (”TOULOUSE”, ”MARSEILLE”);

SELECT nom
FROM employés
WHERE ville = ’TOULOUSE’ OR ville=’MARSEILLE’;
NOT IN sera équivalent à
WHERE Ville !=’TOULOUSE’ AND ville !=’MARSEILLE’;

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 21 / 56
Interrogation de données sous SQL

Restriction sur les données: Prédicats LIKE

• Recherche de chaı̂ne de caractère valide à l’aide de caractères


génériques.
• % représente une chaı̂ne de 0 à n caractères.
• : représente un seul caractère.
SELECT nom
FROM employés
WHERE ville LIKE ”T%”;

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 22 / 56
Interrogation de données sous SQL

Restriction sur les données: Prédicats NULL

• La vérification de la valeur NULL est effectuée par les opérateurs IS


NULL et IS NOT NULL.
• Recherche des valeurs non attribuées.
• Exemple: rechercher les noms d’employés (table employés) dont la ville
n’est pas attribuée.
SELECT nom
FROM employés
WHERE ville IS NULL;

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 23 / 56
Interrogation de données sous SQL

Expression des jointures

• Permettent d’afficher des données de plusieurs tables.


• NB: Si on mentionne pas la condition de jointure : elle est
équivalente à un produit cartésien.
• Exemple:
SELECT nom, libel
FROM employés, services;

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 24 / 56
Interrogation de données sous SQL

Expression des jointures

• La condition de jointure est exprimée dans la clause WHERE:


• Exemple:
SELECT liste colonnes
FROM liste tables
WHERE table1.colonne1=table2.colonne2;
• Le nom de table est nécessaire si le nom des colonnes est identique.
• Exemple:
SELECT nom, libel
FROM employés, services
WHERE employés.numService = services.numService;

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 25 / 56
Interrogation de données sous SQL

Expression des jointures

Alias de Table:
• Utilisation de préfixes désignant les tables.
• Permet de simplifier les interrogations.
• Améliore les performances.
• Evite les ambiguı̈tés sur les noms de colonnes.
• Exemple:
SELECT e.nom, s.libel
FROM employés e, services s
WHERE e.numService = s.numService;

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 26 / 56
Interrogation de données sous SQL

Tri des lignes

• Permet de trier les lignes dans un résultat d’une requête SQL.


• Syntaxe:
SELECT liste colonnes
FROM liste tables
[WHERE condition]
[ORDER by liste colonnes2 [ASC |DESC]];
• Par défaut les résultats sont classés par ordre croissant.
• Exemple: afficher les noms des employés ayant un salaire supérieur ou
égale à 1000 par ordre décroissant du salaire.
SELECT Numemp,nom
FROM employés
WHERE salaire>=1000
ORDER BY salaire DESC;
Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 27 / 56
Interrogation de données sous SQL

Requêtes imbriquées sous-interrogation

• Requête imbriquée dans la clause WHERE d’une requête externe:


SELECT ...
FROM ...
WHERE [Opérande] Opérateur (SELECT ..
FROM...
WHERE...);
• Opérateurs ensemblistes:
• Appartenance ensembliste: (A1 ,...,An ) IN <sous-req>
• Test d’existence: EXISTS <sous-req>
• Comparaison avec quantificateur (ANY par défaut):
(A1 ,...,An ) <comp> [ALL | ANY] <sous-req>

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 28 / 56
Interrogation de données sous SQL

Requêtes imbriquées sous-interrogation

• La sous-requête peut renvoyer soit:


• Une ligne.
• Soit plusieurs
• L’opérateur IN.
• Les opérateurs obtenus en ajoutant ANY ou ALL à la suite d’un
opérateur de comparaison classique (=,<>, >, >=, <, <=).
• OU bien (=,<>, >, >=, <, <=) suivis par des sous requêtes SELECT.
• Si la sous-requête renvoie plusieurs lignes, nous avons deux cas,selon
que la sous-requête est:
• Indépendante de la requête principale.
• Ou synchronisée avec elle.
• Si la sous-requête est synchronisée avec la requête principale, on parle
de requête corrélée.
• Besoin de jointure entre requête et la sous-requête.

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 29 / 56
Interrogation de données sous SQL

L’opérateur logique ALL


• Sert à comparer une valeur à toutes les valeurs d’un ensemble
retourné par une sous-requête.
• La comparaison est vraie si elle est vraie pour tous les éléments de
l’ensemble.
• Exemple:
Personne (idpers, nompers, adr, poste, salaire, date emp,#idserv)
service (idsev, nomserv, ville)
→ Chercher le salarié ayant un salaire supérieur à tous les salaires du
service n◦ 10.
• SELECT idpers, nompers FROM personne
WHERE salaire> ALL(SELECT DISTINCT salaire
FROM personne
WHERE idserv=10);
→ La comparaison se fait avec tous les éléments (un par un) retournés
par la sous-requête.
→ Comparaison VRAI si ”valeur” est (<>=) à toutes les valeurs
de la liste.
Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 30 / 56
Interrogation de données sous SQL

L’opérateur logique ALL

• Ceci est équivalent à:


• SELECT idpers, nompers FROM personne
WHERE salaire> (SELECT Max (salaire)
FROM personne
WHERE idserv=10);
• Si on veut chercher le salarié ayant un salaire inférieur à tous les
salaires du service n◦ 10.
• SELECT idpers, nompers FROM personne
WHERE salaire< ALL ( SELECT (ou min) salaire
FROM personne
WHERE idserv=10);

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 31 / 56
Interrogation de données sous SQL

L’opérateur logique ANY


• Sert à comparer une valeur à toute valeur applicable d’un ensemble
retourné par une sous-requête.
• La comparaison est vraie si elle est vraie pour au moins un élément de
l’ensemble.
• Exemple:
Personne (idpers, nompers, adr, poste, salaire, date emp,#idserv)
Service (idpers, nompers, ville)
→ Chercher s’il y a un(e) secrétaire ayant un salaire supérieur à un ou
plusieurs ingénieurs de la société.
→ SELECT idpers, nompers FROM personne
WHERE poste=”SECRETAIRE”
AND salaire> ANY (SELECT salaire
FROM personne
WHERE poste=”INGENIEUR”);
→ La condition est vraie dès qu’on rencontre une ligne vérifiant la
condition.
→ Comparaison VRAI si ”valeur” est (<>=) à au moins une valeur
de la liste.
Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 32 / 56
Interrogation de données sous SQL

L’opérateur EXISTS

• Permet de chercher la présence d’une ligne répondant à certains


critères dans une table spécifique:
• Elle est vérifiée si une sous-requête retourne au moins une ligne.

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 33 / 56
Interrogation de données sous SQL

L’opérateur EXISTS

• Exemple:
Personne (idpers, nompers, adr, poste, salaire, date emp,#idserv)
Service (idpers, nompers, ville)
• Donner les noms des services ayant au moins un employé embauché
après le 01/01/05.
• SELECT nomserv
FROM service S
WHERE EXISTS (SELECT∗
FROM personne P
WHERE date emb>”01/01/05”
AND S. idserv=P.idserv);

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 34 / 56
Interrogation de données sous SQL

L’opérateur EXISTS

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 35 / 56
Interrogation de données sous SQL

L’opérateur EXISTS

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 36 / 56
Interrogation de données sous SQL

L’opérateur NOT EXISTS


• Exemple: Donner les noms des projets dont aucun employé
n’appartient au service FINANCE.
• Personne (idpers, nompers, adr, poste, salaire, date emp, #idserv)
• Service (idsev, nomserv, ville)
• Projet (idproj, titreproj, #respproj)
• Persprojet (#idpers,#idproj)
• SELECT DISTINCT titreproject
FROM projet pj
WHERE NOT EXISTS (SELECT∗
FROM personne p, persprojet pp
WHERE pj.idproj=pp.idproj
AND pp.idpers=p.idpers
AND idserv = (SELECT idserv
FROM service
WHERE nomserv LIKE
”FINANCE”));
→L’opérateur NOT EXISTS permet de tester l’absence de données dans la sous
requête. La condition est vrai si la sous reqûete ne ramène pas de lignes.
Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 37 / 56
Interrogation de données sous SQL

Les requêtes composées

• Une requête composée est l’association de plusieurs requêtes par le


biais d’un opérateur de combinaison.
• Syntaxe:
SELECT colonne1, colonne2 FROM TABLE1
WHERE conditions...
operateur
(SELECT colonne1, colonne2 FROM TABLE2
WHERE conditions...);
• Opérateur :
UNION,
INTERSECT,
MINUS

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 38 / 56
Interrogation de données sous SQL

L’opérateur UNION

• Permet de combiner les résultats de deux instructions SELECT ou


plus, sans retourner des lignes en double. Les colonnes sélectionnées
des différentes requêtes doivent être de même nombre, de même type
et de même ordre.
Personne (idpers, nompers, adr, poste, salaire, date emp, #idserv)
Projet (idproj, titreproj, #respproj)
Persprojet (#idproj, #idpers)
• Exemple: Donner la liste des salariés travaillant sur des projets
comme étant employés ou responsables de projets.

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 39 / 56
Interrogation de données sous SQL

L’opérateur INTERSECT

• Permet de combiner les résultats de deux instructions SELECT ou


plus, mais ne retourne que les lignes en commun.
• Exemple: Donner la liste des salariés qui sont à la fois affectés à des
projets et responsables de projets.

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 40 / 56
Interrogation de données sous SQL

L’opérateur MINUS

• Permet de retourner les lignes d’une première instruction SELECT qui


ne sont pas retournées par la deuxième instruction SELECT. Les
colonnes sélectionnées des différentes requêtes doivent être de même
nombre, de même type et de même ordre.
• Exemple 24: Donner la liste des salariés qui sont responsables de
projets mais qui ne sont pas affectés à des projets comme étant
employés.

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 41 / 56
Interrogation de données sous SQL

Les fonctions de multi-lignes

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 42 / 56
Interrogation de données sous SQL

Précision sur les requêtes imbriquées

• L’utilisation de ”IN” vs ”=”


• Lorsque la sous-requête peut rendre plusieurs lignes on ne peut pas
utiliser ”=” c’est ”IN” qui doit être utilisée
• Exemple:
select distinct a1.nom
From agence a1
where a1.actif>(select Max(Actif) From agence a2
where a2.ville=’Paris’);
• Cette sous-requête ne rend qu’une ligne
→ on peut précéder la requête par : =
<
>
>=
<=

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 43 / 56
Interrogation de données sous SQL

Agrégats

• L’objectif est de donner des informations statistiques sur un ensemble


de ligne.
• Les lignes seront regroupées grâce à la clause GROUP BY.
• Les groupes pourront être exclus à l’aide de la clause HAVING;
• Les fonctions de groupe donneront des résultats par groupe.

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 44 / 56
Interrogation de données sous SQL

Création de groupes: GROUP BY

• Syntaxe:

• Exemple: Chercher le nombre des employés dans chaque service?

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 45 / 56
Interrogation de données sous SQL

Création de groupes

Prenons en considération une table ”achat” qui résume les ventes


d’une boutique:

• Exemple:
Pour obtenir le coût total de chaque client en regroupant les
commandes des mêmes clients, il faut utiliser la requête suivante:
SELECT client, SUM(tarif)
FROM achat GROUP BY client;

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 46 / 56
Interrogation de données sous SQL

Exclure des groupes: HAVING

• Syntaxe:

• Exemple: Chercher les services dont le nombre d’employés est


supérieur à 10.

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 47 / 56
Interrogation de données sous SQL

Exclure des groupes


Pour utiliser un exemple concret, imaginons une table ”achat” qui contient
les achats de différents clients avec le coût du panier pour chaque achat.

• Exemple: on souhaite récupérer la liste des clients ayant commandé


plus de 40E, toute commandes confondu alors, il est possible d’utiliser
la requête suivante

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 48 / 56
Interrogation de données sous SQL

Exclure des groupes: HAVING

• Lister les salaires totaux par service. Et garder ceux dont le salaire
moyen dépasse 900:
SELECT nomserv,SUM(salaire)
FROM personne p, services s
WHERE p.idserv=s.idserv
GROUP BY nomserv
HAVING AVG(salaire)>900;

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 49 / 56
Interrogation de données sous SQL

Exclure des groupes: HAVING

• Lister, par service, les salaires totaux et le salaire moyen. Et garder


ceux dont le salaire minimum dépasse 400:
SELECT nomserv,SUM(salaire),AVG(salaire)
FROM personne p, services s
WHERE p.idserv=s.idserv
GROUP BY nomserv
HAVING MIN(salaire)>400;

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 50 / 56
Interrogation de données sous SQL

Synthèse

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 51 / 56
Interrogation de données sous SQL

Division en SQL

• Quels sont les articles qui sont disponibles dans toutes les couleurs?
• Extraire les couleurs manquants pour les articles.
• Ne pas sélectionner les articles ayant des couleurs manquant.

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 52 / 56
Interrogation de données sous SQL

Division en SQL
1) Extraire les couleurs manquants pour l’article T-shirt par exemple?

(Select *
FROM couleur cl
WHERE NOT EXISTS
( SELECT *
FROM article ar
WHERE ar.designation=”T-shirt”
AND cl.couleur=ar.couleur));
⇒ Si la requête ne fournit pas d’enregistrement. Alors, la condition est vraie.
Dans ce cas, la couleur sur la quelle on pointe va être sélectionnée.
Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 53 / 56
Interrogation de données sous SQL

Division en SQL
2) Ne pas sélectionner les articles ayant des couleurs manquant.

SELECT DISTINCT designation


FROM article ar1
WHERE NOT EXISTS
(Select *
FROM couleur cl
WHERE NOT EXISTS
( SELECT *
FROM article ar2
WHERE ar2.designation=ar1.designation
AND cl.couleur=ar2.couleur));
Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 54 / 56
Interrogation de données sous SQL

Division en SQL

• Pas de Divide en SQL!!!


• D est alors le résultat de la question suivante:
⇒Donner les ai de R qui sont en relation avec tous les bi de S?
• On peut reformuler cette question d’une autre manière:
⇒ Donner chaque ai de R tel qu’il n’existe aucun bi de S qui ne soit
pas en relation avec ai .
SELECT A FROM R R1
WHERE NOT EXISTS (SELECT B FROM S
WHERE NOT EXISTS (SELECT A,B FROM R R2
WHERE R2.A=R1.A AND R2.B=S.B);
Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 55 / 56
Interrogation de données sous SQL

Exercice

• Soit le le shéma relationnel ci-dessous:

Safa BETTOUMI ZOGHLAMI CM3 : Structured Query Language SQL September 15, 2023 56 / 56

Vous aimerez peut-être aussi