Chapitre 3
Le langage SQL
© 2021-2022 \ S. HAIDRAR 1
Introduction
© 2021-2022 \ S. HAIDRAR 2
Introduction
© 2021-2022 \ S. HAIDRAR 3
Introduction
© 2021-2022 \ S. HAIDRAR 4
Principales catégories de SQL
1. Langage de Définition des Données (LDD):
Il permet la définition des structures globale des tables, colonnes et de
la BD :
- Créer une BD/table,
- Créer une colonne,
- Supprimer une BD/table,
- Modifier une BD/table
Principales instruction: CREATE, ALTER, DROP, TRUNCATE,RENAME
© 2021-2022 \ S. HAIDRAR 5
Principales catégories de SQL
2. Langage de Manipulation des Données (LMD):
- faire des mises à jour (ajout, suppression, modification de lignes) des données
de la base.
- Il permet de faire des recherches (sélection) et visualiser les données
contenues dans les tables et la base de données.
Principales instruction: INSERT, UPDATE,DELETE,SELECT
© 2021-2022 \ S. HAIDRAR 6
Principales catégories de SQL
3. Langage de Control des Données (LCD):
Gérer les droits sur les objets de base en affectant les droits aux utilisateurs.
- Droit de lecture des données de la BD X pour l’utilisateur A
- Droits de lecture et modification de la BD X pour l’utilisateur B
- Droits de suppression pour l’utilisateur C
Principales instruction: GRANT, REVOKE
© 2021-2022 \ S. HAIDRAR 7
SQL: LDD
Définition des schémas
Création de tables (relations)
CREATE TABLE nom_de_table ( colonnes et contraintes)
Exemple 1:
CREATE TABLE Emprunteurs
( Matricule INT NOT NULL PRIMARY KEY,
Nom_Prenom CHAR(60) NOT NULL,
Dat_Nais DATE )
© 2021-2022 \ S. HAIDRAR 8
SQL: LDD
Les contraintes
© 2021-2022 \ S. HAIDRAR 9
SQL: LDD
Création de tables (suite)
Exemple 2:
CREATE TABLE Livres
( Cote INTEGER NOT NULL PRIMARY KEY,
Titre CHAR(255) NOT NULL,
Auteur CHAR(255),
ISBN CHAR(100) )
© 2021-2022 \ S. HAIDRAR 10
SQL: LDD
Création de tables (suite)
Exemple 3:
CREATE TABLE Emprunt
( Matricule INTEGER NOT NULL REFERENCES Emprunteurs (Matricule),
Cote INTEGER NOT NULL,
Dat_Emprunt DATE NOT NULL,
Dat_Remise DATE,
PRIMARY KEY (Matricule, Cote, Dat_Emprunt),
FOREIGN KEY (Cote) REFERENCES Livres (Cote) )
© 2021-2022 \ S. HAIDRAR 11
SQL: LDD
Création de tables (suite)
Exemple 4:
CREATE TABLE Personne_Eau
( CIN CHAR(10) NOT NULL PRIMARY KEY,
Nom CHAR(50) NOT NULL,
Dat_B DATE,
Quantité INT DEFAULT 1,
CHECK (Quantité BETWEEN 1 AND 5) )
© 2021-2022 \ S. HAIDRAR 12
SQL: LDD
Exercice:
Donnez le code SQL permettant de créer les tables de la BD dont le
schéma conceptuel est le suivant:
Etudiant (Matricule, Nom, Prénom, DatN, Niveau)
Matière (CodMat, NomMat, Coefficient, VHoraire)
Notes(#Matricule, #CodMat, Note)
N.B:
Les coefficients sont entre 1 et 5 dont la valeur par défaut est 1
Les notes sont entre 0 et 20.
© 2021-2022 \ S. HAIDRAR 13
SQL: LDD
La commande DROP:
- Permet de supprimer une base de données :
DROP DATABASE <Nom_Base_De_Données>
- Supprimer une table:
DROP TABLE <Nom_Table>
© 2021-2022 \ S. HAIDRAR 14
SQL : LMD
Langage de Manipulation des données (LMD)
C'est un ensemble d'instructions permettant la recherche (sélection),
l'ajout, la modification et la suppression de données.
© 2021-2022 \ S. HAIDRAR 15
SQL: Mise à jours de données
Insertion de données: Ajouter une ligne dans une table.
Insertion d'une ligne complète
INSERT INTO Table VALUES (Val_Attr1, Val_Attr2, ….)
Respecter l’ordre et le type des colonnes définies à la création
Exemple: INSERT INTO Ville VALUES (234, 'Kenitra')
Insertion d'une ligne incomplète
INSERT INTO Table (Attr1, Attr2, …) VALUES (Val_Attr1, Val_Attr2, ….)
Les attributs non indiqués auront la valeur par défaut ou NULL.
Exemple: INSERT INTO Livres (Cote, Titre ) VALUES (100, 'XML')
© 2021-2022 \ S. HAIDRAR 16
SQL: Mise à jours de données
Modification de données: Modifier des lignes dans une table.
Modification de toutes les lignes
UPDATE table SET attr1 = expression1 , attr2 = expression2 , …
Exemple: Incrémenter de 1 le nombre de salles de toutes les écoles
UPDATE Ecole SET NbSalle = NbSalle +1
Modification des lignes satisfaisant une condition données
UPDATE table SET attr1 = expression1 , attr2 = expression2 , …
WHERE condition
Exemple: Doubler le nombre de salle de l'école dont le code est 23
UPDATE Ecole SET NbSalle = 2*NbSalle
WHERE Code_Ecole = 23
© 2021-2022 \ S. HAIDRAR 17
SQL: Mise à jours de données
Suppression de données: Supprimer des lignes d'une table.
Suppression de toutes les lignes
DELETE FROM table
Exemple: Vider la table Ville
DELETE FROM Ville
Suppression des lignes satisfaisant une condition données
DELETE FROM table
WHERE condition
Exemple: Supprimer les école dont le nombre de salles est <10
DELETE FROM Ecole
WHERE NbSalle <10
© 2021-2022 \ S. HAIDRAR 18
SQL: Recherche de données
Les instructions de recherche correspondent à des opérations de
l'algèbre relationnelle.
Les opérations traitées seront:
• Projection
• Restriction
• Jointure (Produit Cartésien)
© 2021-2022 \ S. HAIDRAR 19
Algèbre Relationnelle et SQL
Projection
Opération sur une relation R1 consistant à composer une relation R2
en relevant à la relation initiale (R1) tous les attributs non mentionnés
en opérandes, et en éliminant les éléments en double qui sont
conservés une seule fois.
© 2021-2022 \ S. HAIDRAR 20
Algèbre Relationnelle et SQL
Projection(suite)
Exemple:
Livres
Cote Titre Auteur ISBN
15 Le Langage C Claude Delanoy 2-266-0865-4
4 L'algèbre de base Frank Shin 2-123-2301-5
24 Bases de données Georges Gardarin 2-212-11281-5
PROJECT(Livres ,Titre, Auteur)
Titre Auteur
Le Langage C Claude Delanoy
L'algèbre de base Frank Shin
Bases de données Georges Gardarin
© 2021-2022 \ S. HAIDRAR 21
Algèbre Relationnelle et SQL
Projection en SQL:
SELECT Attributs
FROM Table
Exemple 1: Sélection des titres et auteurs de tous les livres disponibles
SELECT Titre, Auteur
FROM Livres
Remarque: Pour ne pas avoir des tuples en double, on utilise DISTINCT
Exemple: Sélection de tous les auteurs
SELECT DISTINCT Auteur
FROM Livres
© 2021-2022 \ S. HAIDRAR 22
Algèbre Relationnelle et SQL
Projection en SQL (suite)
Si on veut sélectionner toutes les colonnes (attributs) d'une table
(relation)
SELECT *
FROM Table
Exemple 2: Sélection de tous les attributs de tous les livres disponibles
SELECT Cote,
* Titre, Auteur, ISBN
FROM Livres
© 2021-2022 \ S. HAIDRAR 23
Algèbre Relationnelle et SQL
Restriction
Opération sur une relation R1 produisant une relation R2 de même
schéma (mêmes attributs), mais comportant seulement les tuples
qui vérifient une condition précisée en argument.
© 2021-2022 \ S. HAIDRAR 24
Algèbre Relationnelle et SQL
Restriction (suite)
Exemple: Emprunts
Cote Matricule Date_Emprunt Date_Remise
15 12308 11/10/2007 2/11/2007
4 12308 1/11/2007
30 12408 4/11/2007 11/11/2007
24 12308 12/10/2007 7/11/2007
Restrict (Emprunts,
Matricule = 12308 Matricule=12308)
(Emprunts)
Cote Matricule Date_Emprunt Date_Remise
15 12308 11/10/2007 2/11/2007
4 12308 1/11/2007
24 12308 12/10/2007 7/11/2007
© 2021-2022 \ S. HAIDRAR 25
Algèbre Relationnelle et SQL
Restriction en SQL:
SELECT *
FROM table
WHERE Condition
Exemple 1: Sélection des emprunts dont le matricule de l'emprunteur
est 12308.
SELECT *
FROM Emprunts
WHERE Matricule = 12308
© 2021-2022 \ S. HAIDRAR 26
Algèbre Relationnelle et SQL
Restriction en SQL (Suite)
La condition de la clause WHERE peut être exprimée en fonction de:
Opérateurs de comparaison: =, <=, >=, <, >, <>
Opérateurs logiques: AND, OR, NOT
Les mots clés:
- BETWEEN pour tester si une la valeur d'une expression est
comprise entre deux valeurs constantes.
- IN pour tester si la valeur d'une expression appartient à une
liste de constantes.
- LIKE pour tester si une expression de type chaîne de
caractères contient une sous-chaîne.
© 2021-2022 \ S. HAIDRAR 27
Algèbre Relationnelle et SQL
Restriction en SQL (Suite)
Exemple 2: Sélection des livres dont la cote est entre 130 et 160.
SELECT *
Cote BETWEEN 130 AND 160
FROM Livres
WHERE Cote >= 130 AND Cote<=160
Exemple 3: Sélection des livres dont la cote n'est pas entre 130 et 160.
SELECT * NOT(Cote >= 130 AND Cote<=160)
FROM Livres
WHERE Cote < 130 OR Cote>160
© 2021-2022 \ S. HAIDRAR 28
Algèbre Relationnelle et SQL
Restriction en SQL (Suite)
Exemple 4: Sélection des livres dont la cote est 130, 140, 145 et 160.
SELECT *
FROM Livres
WHERE Cote IN (130, 140, 145, 160)
Exemple 5: Sélection des livres dont le titre contient "BD".
SELECT *
FROM Livres
WHERE Titre LIKE '*BD*'
© 2021-2022 \ S. HAIDRAR 29
Algèbre Relationnelle et SQL
Restriction en SQL (Suite)
Exemple 6: Sélection des livres dont le titre commence par "Algèbre".
SELECT *
FROM Livres
WHERE Titre LIKE 'Algèbre*'
Exemple 7: Sélection des livres dont le titre se termine par "BD".
SELECT *
FROM Livres
WHERE Titre LIKE '*BD'
© 2021-2022 \ S. HAIDRAR 30
Algèbre Relationnelle et SQL
Restriction en SQL (Suite)
Exemple 8: Livres dont le titre commence par un caractère suivi de "BD":
SELECT *
FROM Livres
WHERE Titre LIKE '?BD*'
Remarque: En SQL standard: *% , ? _ et # un chiffre
Exemple 9: Sélection des emprunts dont la date de remise est
indéterminé. SELECT *
FROM Livres
WHERE Dat_Remise IS NULL
© 2021-2022 \ S. HAIDRAR 31
Algèbre Relationnelle et SQL
Restriction en SQL (Suite)
Exemple: Livres dont le titre contient deux chiffres qui se suivent:
SELECT *
FROM Livres
WHERE Titre LIKE '*##*'
Exemple : Livres dont le titre ne contient pas le mot "algèbre"
SELECT *
FROM Livres
WHERE Titre NOT LIKE '*algèbre*'
© 2021-2022 \ S. HAIDRAR 32
Algèbre Relationnelle et SQL
Combiner Projection et Restriction en SQL
Sélectionner d'une relations R1 certains attributs des tuples vérifiant
une condition.
Syntaxe en SQL:
SELECT Attributs
FROM Table
WHERE Condition
© 2021-2022 \ S. HAIDRAR 33
Algèbre Relationnelle et SQL
Combiner Projection et Restriction en SQL (Suite)
Exemple 10: Sélection du titre des livres de "Claude Delanoy".
SELECT Titre
FROM Livres
WHERE Auteur = "Claude Delanoy"
Exemple 11: Sélection du titre et de l'auteur des livres dont le titre
contient "Algèbre" ou dont le nom de l'auteur contient "Gardarin".
SELECT Titre , Auteur
FROM Livres
WHERE Tite LIKE "*Algèbre*" OR Auteur LIKE "*Gardarin*"
© 2021-2022 \ S. HAIDRAR 34
Algèbre Relationnelle et SQL
Produit Cartésien
Opération portant sur deux relation R1 et R2, consistant à construire
une troisième relation ayant pour schéma la concaténation de ces
deux relations et pour tuples toutes les combinaisons des tuples
des relations R1 et R2.
Notations possibles:
R1 R2
PRODUCT (R1, R2)
© 2021-2022 \ S. HAIDRAR 35
Algèbre Relationnelle et SQL
Produit Cartésien (Suite)
Exemple 12: Département
Code Nom_Dept
1 Informatique
2 Civil
3 Électrique
Étudiant
Matricule Nom_Prenom Code_Dept
12308 Alami Samir 1
12408 Semah Amal 3
© 2021-2022 \ S. HAIDRAR 36
Algèbre Relationnelle et SQL
Produit Cartésien (Suite)
Département Étudiant
Code Nom_Dept Matricule Nom_Prenom Code_Dept
1 Informatique 12308 Alami Samir 1
1 Informatique 12408 Semah Amal 3
2 Civil 12308 Alami Samir 1
2 Civil 12408 Semah Amal 3
3 Électrique 12308 Alami Samir 1
3 Électrique 12408 Semah Amal 3
© 2021-2022 \ S. HAIDRAR 37
Algèbre Relationnelle et SQL
Produit Cartésien en SQL
SELECT *
FROM Table1 , Table2 , … , TableN
Exemple 13:
SELECT *
FROM Départements, Étudiants
© 2021-2022 \ S. HAIDRAR 38
Algèbre Relationnelle et SQL
La Jointure
Consiste à combiner deux relations R1 et R2 tuple à tuple (ligne à
ligne) en vérifiant la concordance entre certains attributs (colonnes) des
deux relations (en général: une clé primaire avec une clé étrangère).
C'est une projection d'une restriction sur un produit cartésien entre
plusieurs relations afin de: sélectionner certains attributs des tuples
du produit cartésien vérifiant une condition donnée.
Notations possibles: R1 R2 (Condition)
Join (R1,R2,Condition)
© 2021-2022 \ S. HAIDRAR 39
Algèbre Relationnelle et SQL
La Jointure (Suite)
Exemple: Join (Département , Étudiant, Code = Code_Dept)
ou
Join (Département, Étudiant, Département.Code=Étudiant.Code_Dept)
Join (Département , Étudiant, Code = Code_Dept)
Code Nom_Dept Matricule Nom_Prenom Code_Dept
1 Informatique 12308 Alami Samir 1
3 Électrique 12408 Semah Amal 3
© 2021-2022 \ S. HAIDRAR 40
Algèbre Relationnelle et SQL
La Jointure (Suite)
Exemple 14:
Project
( Join (Département, Étudiant, Code=Code_Dept), Nom_Dept,Nom_Prenom)
SELECT Nom_Dept , Nom_Prenom
FROM Département , Étudiant
WHERE Département.Code
Code_Dept = Code = Étudiant.Code_Dept
Résultat? ……………………………………………………………………..
……………………………………………………………………..
© 2021-2022 \ S. HAIDRAR 41
Algèbre Relationnelle et SQL
La Jointure (Suite)
S'il y des attributs de même nom dans les relations de la jointure, on
doit préfixer ces attributs par les noms de leurs tables respectives
comme suit: Table.Attribut
Exemple 15: Ville (Code_V, Nom_Ville)
Ecole (Code_E, Nom_Ecole, #Code_V)
Ville Ecole
Code_V Nom_Ville Code_E Nom_Ecole NbSalle Code_V
1 Rabat 120 Mohammed V 20 1
2 Casa 130 Imam Malek 15 1
3 Tanger 140 Al Massira 25 3
© 2021-2022 \ S. HAIDRAR 42
Algèbre Relationnelle et SQL
Exemple 15 (Suite)
Ville Ecole
Code_V Nom_Ville Code_E Nom_Ecole NbSalle Code_V
1 Rabat 120 Mohammed V 20 1
1 Rabat 130 Imam Malek 15 1
1 Rabat 140 Al Massira 25 3
2 Casa 120 Mohammed V 20 1
2 Casa 130 Imam Malek 15 1
2 Casa 140 Al Massira 25 3
3 Tanger 120 Mohammed V 20 1
3 Tanger 130 Imam Malek 15 1
3 Tanger 140 Al Massira 25 3
© 2021-2022 \ S. HAIDRAR 43
Algèbre Relationnelle et SQL
Exemple 15 (Suite)
Sélectionner le nom de l'école suivi du nom et du code de ville
SELECT Nom_Ecole , Nom_Ville, Ville. Code_V
FROM Ville , Ecole
WHERE Ville. Code_V =Ecole. Code_V
© 2021-2022 \ S. HAIDRAR 44
Algèbre Relationnelle et SQL
Les Jointures (Suite)
On peut utiliser des alias comme préfixes des attributs au lieu
des noms de tables.
Exemple 16: Ville (Code_V, Nom_Ville)
Ecole (Code_E, Nom_Ecole, #Code_V)
SELECT Code_V, Nom_Ville, Nom_Ecole
V.
FROM Ville V , Ecole E
WHERE Code_V = Code_V
V. E.
© 2021-2022 \ S. HAIDRAR 45
Algèbre Relationnelle et SQL
Les Jointures (Suite)
Utilisation d'une table plusieurs fois dans la clause FROM.
Exemple: Joueur(IdJ, NomJ)
Compétition (IdC, NomC, #IdJ1, #IdJ2, #IdJ3)
Chercher le nom de chaque compétition ainsi que les noms des gagnants.
SELECT NomC, J1.NomJ, J2.NomJ, J3.NomJ
FROM Compétition, Joueur J1, Joueur J2, Joueur J3
WHERE J1.IdJ = C.IdJ1 and J2.IdJ = C.IdJ2 and J3.IdJ = C.IdJ3
© 2021-2022 \ S. HAIDRAR 46
Autojointure
EMP Deptno NOM sal
Liste des employés ayant un salaire 10 toto 5000
égale à celui de « titi »
10 tata 1500
10 titi 1250
20 ta 2975
20 to 3000
20 ti 1100
30 tan 2850
30 ton 1250
30 tin 1600
30 tato 1500
30 toti 950
30 tutu 1250
© 2021-2022 \ S. HAIDRAR 47
47
Requêtes sur plusieurs tables: la jointure
Autojointure
SELECT expr
FROM table1 Alias1, table1 Alias 2
WHERE Alias1.col1= Alias2.col1
tab1 col1
© 2021-2022 \ S. HAIDRAR 48
48
Autojointure
EMP Deptno NOM sal
Liste des employés ayant un salaire 10 toto 5000
égale à celui de « titi »
10 tata 1500
10 titi 1250
20 ta 2975
20 to 3000
20 ti 1100
SELECT *
FROM EMP E1, EMP E2 30 tan 2850
WHERE E1.sal=E2.sal 30 ton 1250
and E1.Nom =‘titi’;
30 tin 1600
30 tato 1500
30 toti 950
30 tutu 1250
© 2021-2022 \ S. HAIDRAR 49
49
Autojointure
EMP Deptno NOM sal
Liste des employés ayant un salaire 10 toto 5000
<= à celui de « titi »
10 tata 1500
10 titi 1250
20 ta 2975
20 to 3000
20 ti 1100
SELECT *
FROM EMP E1, EMP E2 30 tan 2850
WHERE E1.sal<=E2.sal 30 ton 1250
and E1.Nom =‘titi’;
30 tin 1600
30 tato 1500
30 toti 950
30 tutu 1250
© 2021-2022 \ S. HAIDRAR 50
50
Algèbre Relationnelle et SQL
Classement des tuples
On peut classer les lignes d'une requête de sélection dans l'ordre
croissant ou décroissant selon un ou plusieurs attributs.
Syntaxe: SELECT Attribut(s)
FROM Table(s)
WHERE Condition
ORDER BY Attribut1 DESC, Attribut2 ASC, …
L'ordre par défaut: Croissant (ASC).
© 2021-2022 \ S. HAIDRAR 51
Algèbre Relationnelle et SQL
Classement des tuples (Suite)
Exemple 17:
SELECT Nom_Ecole, Nom_Ville
FROM Ville V , Ecole E
WHERE V.Code_V = E.Code_V
ORDER BY Nom_Ecole, Nom_Ville DESC
Exemple 18:
SELECT Nom_Ecole, Nom_Ville
FROM Ville V , Ecole E
WHERE V.Code_V = E.Code_V
ORDER BY 1, 2 DESC
© 2021-2022 \ S. HAIDRAR 52
Algèbre Relationnelle et SQL
Fonctions de Calcul (Fonctions d’agrégation)
Elles prennent le nom d'un attribut comme argument.
Elles fournissent une seule valeur en résultat. Cette valeur est
calculée avec toutes les valeurs de l'attribut (colonne) spécifié.
Fonctions de calcul:
COUNT: Nombre de valeurs d'une colonne.
AVG : Moyenne des valeurs d'une colonne.
SUM : Somme des valeurs d'une colonne.
MIN : Minimum des valeurs d'une colonne.
MAX : Maximum des valeurs d'une colonne.
© 2021-2022 \ S. HAIDRAR 53
Algèbre Relationnelle et SQL
Fonctions de Calcul (Suite)
Exemple 19: Nombre d'écoles
SELECT COUNT(Nom_Ecole) SELECT COUNT(*)
FROM Ecole FROM Ecole
Remarque: Le résultat est composé d'une seule colonne sans nom
explicite. On peut donner un nom explicite à une colonne
comme suit:
SELECT COUNT(Nom_Ecole) AS [Nombre d'écoles]
FROM Ecole
© 2021-2022 \ S. HAIDRAR 54
Algèbre Relationnelle et SQL
Fonctions de Calcul (Suite)
Exemple 20: Nombre d'écoles à Rabat
SELECT COUNT(Nom_Ecole) AS [Nombre d'écoles à Rabat]
FROM Ville V , Ecole E
WHERE V.Code_V = E.Code_V AND Nom_Ville = "Rabat"
Exemple 21: Moyenne des salles par école.
SELECT AVG(NbSalle) AS [Moyenne des salles]
FROM Ecole
© 2021-2022 \ S. HAIDRAR 55
Algèbre Relationnelle et SQL
Fonctions de Calcul (Suite)
Exemple 22: Le minimum de nombre de salles des écoles
SELECT MIN(NbSalle) AS [Minimum de nombre de salles]
FROM Ecole
Exemple 23: Le nombre total de salles de toutes les écoles.
SELECT SUM(NbSalle) AS [Nombre total de salle]
FROM Ecole
© 2021-2022 \ S. HAIDRAR 56
Algèbre Relationnelle et SQL
Regroupement (ou agrégat): (Suite)
Partitionnement des lignes d'une table en plusieurs groupes selon les
valeurs d'un ou de plusieurs attributs afin d'appliquer des fonctions de
calcul.
Regroupement réalisé en utilisant le mot-clé GROUP BY suivi d'une
liste d'attributs.
Exemple 24: Nom de ville et nombre de ses écoles
SELECT Nom_Ville, COUNT(Nom_Ecole)
FROM VILLE V, ECOLE E
WHERE V.Code_V = E.Code_V
GROUP BY V.Code_V
© 2021-2022 \ S. HAIDRAR 57
Algèbre Relationnelle et SQL
Regroupement (Suite)
Remarque:
En ACCESS, les attributs de regroupement (ceux devant Group By)
doivent apparaître dans la clause SELECT.
Dans la requête précédente: On doit faire un groupement par Nom_Ville
ou inclure V.Code_V dans la clause SELECT.
Exercices:
- Nom de ville suivi du nombre total des salles de ses écoles.
- Titre du livre et le nombre d'emprunteurs qui l'ont emprunté.
© 2021-2022 \ S. HAIDRAR 58
Algèbre Relationnelle et SQL
Regroupement (Suite)
Clause HAVING
Pour considérer seulement les groupes satisfaisant une condition.
La condition doit comporter des fonctions d'agrégation.
Remarque: La condition de la clause WHERE ne doit pas comporter des
fonctions d'agrégation.
© 2021-2022 \ S. HAIDRAR 59
Algèbre Relationnelle et SQL
Regroupement (Suite)
Exemple 25: Les villes ayant plus qu'une école
SELECT Nom_Ville, COUNT(Nom_Ecole)
FROM Ville V, Ecole E
WHERE V.Code_V = E.Code_V
Nom_Ville
GROUP BY V.Code_V
HAVING COUNT(Nom_Ecole) >= 2
© 2021-2022 \ S. HAIDRAR 60
Langage SQL
La clause GROUP BY
EMP Deptno sal
Question:
10 5000
Table EMP 10 1500
salaire moyen pour
Chaque département de
10 1300 la table EMP
20 2975
20 3000
20 1100
30 2850
30 1250
30 1600
30 1500
30 950
30 1250
© 2021-2022 \ S. HAIDRAR 61
Langage SQL
La clause GROUP BY
SELECT column, group_fonction
FROM table
[ WHERE condition ]
[ GROUP BY group_by_expression ]
[ ORDER BY column];
Remarque :
Les attributs du select ne peuvent être que
– L’attribut qui crée le groupe
– Une fonctions de groupe.
© 2021-2022 \ S. HAIDRAR 62
Langage SQL
La clause GROUP BY
Exemples :
SELECT deptno, AVG( sal )
FROM emp
GROUP BY deptno;
EMP Deptno sal
10 2600
20 2175
30 1566.7
© 2021-2022 \ S. HAIDRAR 63
Langage SQL
La clause GROUP BY
EMP Deptno job sal
10 Dir technique 5000
10 Chef projet 1500 Question
10 programmeur 1300
20 Chef projet 2975 Somme des salaires pour
chaque poste, regroupés
20 Analyste 3000 par département
20 programmeur 1100
30 Chef projet 2850
30 commercial 1250
30 commercial 1600
30 commercial 1500
30 programmeur 950
30 commercial 1250
© 2021-2022 \ S. HAIDRAR 64
Langage SQL
La clause GROUP BY
SELECT deptno, job, SUM( sal )
FROM emp
GROUP BY deptno, job;
Deptno job SUM(sal)
10 programmeur 1300
10 Chef projet 1500
10 Dir technique 5000
20 Analyste 6000
20 programmeur 1900
20 Chef projet 2975
30 programmeur 950
30 Chef projet 2850
© 2021-2022 \ S. HAIDRAR 65
65
Langage SQL
La clause GROUP BY avec HAVING
SELECT column, group_fonction
FROM table
[ WHERE condition ]
[ GROUP BY group_by_expression
[ HAVING group_condition ] ]
[ ORDER BY column];
© 2021-2022 \ S. HAIDRAR 66
66
Langage SQL
La clause GROUP BY avec HAVING
SELECT deptno, MAX( sal ) EMP Deptno job sal
FROM emp
GROUP BY deptno 10 Dir technique 5000
HAVING MAX( sal ) > 2900; 10 Chef projet 1500
Deptno MAX(sal) 10 programmeur 1300
10 5000 20 Chef projet 2975
20 3000 20 Analyste 3000
30 2850 20 programmeur 1100
30 Chef projet 2850
30 commercial 1250
Deptno MAX(sal) 30 commercial 1600
10 5000 30 commercial 1500
20 3000 30 programmeur 950
© 2021-2022 \ S. HAIDRAR 67
30 commercial 1250