Vous êtes sur la page 1sur 21

Université Abderrahmane Mira - Bejaia Année universitaire : 2020/2021

Faculté des Sciences Exactes Niveau : L3 Recrutement National


Département d'informatique Module : Bases de données

CHAPITRE 4 – Le langage SQL

1. Introduction
Le langage SQL (Structured Query Langage) est un langage structuré basé sur des
requêtes que le SGBD doit exécuter pour interagir avec la base de données. Les requêtes SQL
sont exécutées soit pour définir les données, ce qui correspond au Langage de Définition de
Données (LDD), soit pour manipuler les données, par le Langage de Manipulation de données
(LMD).

2. Objectifs du langage SQL


Le langage SQL permet de :
 Créer la structure de la base de données et de ses tables.
 Gérer la base de données en exécutant des tâches telles que l’insertion, la modification et
la suppression de données des tables.
 Effectuer des requêtes simples ou complexes.

3. Exemple d'une base de données à créer


Soit le schéma relationnel de la base de données "AgenceImmo" composé des relations
suivantes :

PERSONNES (IdPersonne : entier, Nom : chaine de caractères, Prénom : chaine de caractères,


Tel : entier, Adresse : chaine de caractères)

APPARTEMENTS (IdAppart : chaine de caractères, Propriétaire, Localité : chaine de caractères,


Type :{ F1, F2, F3, F4, F5}, Etat : chaine de caractère) où Propriétaire est la clé étrangère faisant
référence à IdPersonne de la table PERSONNES.

1
Université Abderrahmane Mira - Bejaia Année universitaire : 2020/2021
Faculté des Sciences Exactes Niveau : L3 Recrutement National
Département d'informatique Module : Bases de données

LOCATIONS (# Locataire,# IdAppart, Date_début : date, Date_fin : date, Montant : réel) où


Locataire et IdAppart sont des clés étrangères faisant respectivement référence aux schémas
des relations PERSONNES et APPARTEMENTS.

Nous allons utiliser cette base de données avec ses tables pour illustrer les exemples de
requêtes SQL de définition et de manipulation de données de ce cours.

4. Langage de définition de données


Le langage de définition de données permet de créer les structures telles que la base de
données, les tables, les colonnes, les contraintes, …etc.

4.1. Création d'une base de données


La requête CREATE DATABASE permet de créer une base de données relationnelle. La syntaxe
de cette requête est la suivante : CREATE DATABASE IF NOT EXISTS nom_bdd ;

Remarque : L’option IF NOT EXISTS est facultative. Elle permet d’éviter une erreur si la base
nom_bdd existe déjà. Si elle existe, cette base sera supprimée et créée de nouveau.

Exemple : Création de la base de données AgenceImmo


CREATE DATABASE IF NOT EXISTS AgenceImmo;

4.2. Création d'une table


La requête CREATE TABLE permet de créer une table dans la base de données. La syntaxe de
cette requête est la suivante : CREATE TABLE IF NOT EXISTS nom_table {Colonne1 type1,
Colonne2 type2 ,…., Colonnen typen } ;

Exemple : Création de la table PERSONNES


CREATE TABLE IF NOT EXISTS PERSONNES {
IdPersonne INT PRIMARY KEY,
Nom VARCHAR(15),
Prénom VARCHAR (15),
Tel INT,
Adresse VARCHAR (50) } ;

2
Université Abderrahmane Mira - Bejaia Année universitaire : 2020/2021
Faculté des Sciences Exactes Niveau : L3 Recrutement National
Département d'informatique Module : Bases de données

Dans la création de la table PERSONNES, nous avons défini chacune des colonnes de la relation
avec leurs types (domaines) respectifs. Le type VARCHAR correspond aux chaines de
caractères et sa taille doit être précisée contrairement à celle du type entier INT qui, par
défaut est égale à 11. L'expression PRIMARY KEY, définie pour la colonne IdPersonne indique
que cette dernière est une clé primaire.

4.3. Ajout d'une colonne


Pour ajouter une colonne à une table préalablement créée, on utilise la syntaxe suivante :

ALTER TABLE nom_table ADD COLUMN colonne type ;

Exemple : Ajout de la colonne Profession à la table PERSONNES


ALTER TABLE PERSONNES ADD COLUMN Profession VARCHAR(30) ;
Remarque : Le mot-clé COLUMN est facultatif.

4.4. Contraintes d'intégrité


4.4.1. Contrainte de clé primaire PRIMARY KEY
La contrainte de clé primaire peut concerner une seule colonne ou plusieurs. Une clé primaire
doit être unique et renseignée (ne doit pas être nulle).
Exemple : On reprend l'exemple de la création d'une table (4.3) où il est possible de définir
autrement la contrainte de clé primaire, comme dans la commande suivante :
CREATE TABLE IF NOT EXISTS PERSONNES {
IdPersonne INT,
Nom VARCHAR(15),
Prénom VARCHAR (15),
Tel INT,
Adresse VARCHAR (50),
PRIMARY KEY (IdPersonne) };

Remarque : En cas d'oubli de définition de clé primaire lors de la création d'une table, il est
possible d'ajouter cette contrainte dans une requête à part, comme suit :

ALTER TABLE PERSONNES ADD CONSTRAINT PK PRIMARY KEY (IdPersonne) ;

3
Université Abderrahmane Mira - Bejaia Année universitaire : 2020/2021
Faculté des Sciences Exactes Niveau : L3 Recrutement National
Département d'informatique Module : Bases de données

Où PK est le nom de la contrainte à ajouter.

4.4.2. Contrainte d'intégrité référentielle (clé étrangère FOREIGN KEY)


La commande suivante permet de définir une contrainte de clé étrangère lors de la création
d'une table.

FOREIGN KEY (Coli ) REFERENCES nom_table (Colj );

Remarques :
1. Il est possible que la clé étrangère et la clé primaire à laquelle elle fait référence
portent le même nom de colonne (Au lieu de "Propriétaire", la colonne de la table
APPARTEMENTS serait définie comme "IdPersonne")
2. La clé étrangère doit être du même type que la clé primaire référencée.

 Mode de gestion de l'intégrité référentielle :


Le mode de gestion de l'intégrité consiste à préciser au SGBD ce qui doit être fait dans le
cas où l'on tente de briser une intégrité référentielle (suppression ou modification d'une
valeur référencée par une autre table). Il existe deux options :
 ON DELETE : lors de la suppression : ON DELETE {CASCADE | SET NULL | RESTRICT}
 ON UPDATE : lors de la modification : ON UPDATE {CASCADE | SET NULL | RESTRICT}
Pour chacune des options il y'a 3 types d'actions à exécuter :
 CASCADE : en cas de suppression d'une valeur dans un tuple, toutes les autres qui
lui font référence vont être supprimées. Il en est de même pour la modification.
 SET NULL : en cas de suppression d'une valeur, toutes celles qui lui font référence
vont être mises à NULL (champ vide). Il en est de même pour la modification, si on
modifie la valeur dans une table, la valeur qui lui fait référence va être mise à NULL.
 RESTRICT : en cas de suppression ou de modification, rien ne doit être fait dans les
deux tables (la table qui fait référence et la table référencée).

Exemple : Création de la table APPARTEMENTS


CREATE TABLE APPARTEMENTS {

4
Université Abderrahmane Mira - Bejaia Année universitaire : 2020/2021
Faculté des Sciences Exactes Niveau : L3 Recrutement National
Département d'informatique Module : Bases de données

IdAppart VARCHAR(15) PRIMARY KEY,


Propriétaire INT,
Localité VARCHAR(45),
Etat VARCHAR (15),
Type VARCHAR (6),
FOREIGN KEY (Propriétaire) REFERENCES PERSONNES (IdPersonne) ON
DELETE RESTRICT ON UPDATE CASCADE} ;

Si la contrainte de clé étrangère n'a pas été définie lors de la création de la table, elle peut
être ajoutée dans une requête de modification à part, comme suit :

ALTER TABLE APPARTEMENTS ADD CONSTRAINT FK FOREIGN KEY (Propriétaire)


REFERENCES PERSONNES (IdPersonne);
Où FK est le nom de la contrainte à ajouter.
Il est possible aussi d'ajouter les options d'intégrité référentielle avec la commande suivante :
ALTER TABLE APPARTEMENTS ADD CONSTRAINT FK FOREIGN KEY (Propriétaire)
REFERENCES PERSONNES (IdPersonne) ON DELETE RESTRICT ON UPDATE CASCADE ;

Exemple : Les options d'intégrité référentielle

PERSONNES
IdPersonne Nom Prénom Tel Adresse
0129 SALMI Riad 5552356 Bejaia
0546 ATTIL Mohamed 5558795 Bejaia

APPARTEMENTS
IdAppart Propriétaire Localité Etat Type
ABE9856 0129 Bejaia Libre F3
CFK7431 0546 Sétif Occupé F5
SAJ2987 0129 Alger Occupé F4

Sachant que Propriétaire fait référence à IdPersonne, on considère les options d'intégrité
référentielle définies pour la clé étrangère "Propriétaire".
SUPPRESSION : On décide de supprimer la personne "SALMI Riad"

5
Université Abderrahmane Mira - Bejaia Année universitaire : 2020/2021
Faculté des Sciences Exactes Niveau : L3 Recrutement National
Département d'informatique Module : Bases de données

 ON DELETE RESTRICT (Aucun changement dans les deux tables)


PERSONNES
IdPersonne Nom Prénom Tel Adresse
0129 SALMI Riad 5552356 Bejaia
0546 ATTIL Mohamed 5558795 Bejaia

APPARTEMENTS
IdAppart Propriétaire Localité Etat Type
ABE9856 0129 Bejaia Libre F3
CFK7431 0546 Sétif Occupé F5
SAJ2987 0129 Alger Occupé F4

 ON DELETE SET NULL


PERSONNES
IdPersonne Nom Prénom Tel Adresse
0546 ATTIL Mohamed 5558795 Bejaia

APPARTEMENTS
IdAppart Propriétaire Localité Etat Type
ABE9856 NULL Bejaia Libre F3
CFK7431 0546 Sétif Occupé F5
SAJ2987 NULL Alger Occupé F4

 ON DELETE CASCADE (Suppression dans les deux tables)


PERSONNES
IdPersonne Nom Prénom Tel Adresse
0546 ATTIL Mohamed 5558795 Bejaia

APPARTEMENTS
IdAppart Propriétaire Localité Etat Type
CFK7431 0546 Sétif Occupé F5

6
Université Abderrahmane Mira - Bejaia Année universitaire : 2020/2021
Faculté des Sciences Exactes Niveau : L3 Recrutement National
Département d'informatique Module : Bases de données

MODIFICATION : On met à jour l'IdPersonne de "SALMI Riad" à 7790


 ON UPDATE RESTRICT (Aucun changement)
PERSONNES
IdPersonne Nom Prénom Tel Adresse
0129 SALMI Riad 5552356 Bejaia
0546 ATTIL Mohamed 5558795 Bejaia

APPARTEMENTS
IdAppart Propriétaire Localité Etat Type
ABE9856 0129 Bejaia Libre F3
CFK7431 0546 Sétif Occupé F5
SAJ2987 0129 Alger Occupé F4

 ON UPDATE CASCADE
PERSONNES
IdPersonne Nom Prénom Tel Adresse
7790 SALMI Riad 5552356 Bejaia
0546 ATTIL Mohamed 5558795 Bejaia

APPARTEMENTS
IdAppart Propriétaire Localité Etat Type
ABE9856 7790 Bejaia Libre F3
CFK7431 0546 Sétif Occupé F5
SAJ2987 7790 Alger Occupé F4

 ON UPDATE SET NULL


PERSONNES
IdPersonne Nom Prénom Tel Adresse
7790 SALMI Riad 5552356 Bejaia
0546 ATTIL Mohamed 5558795 Bejaia

APPARTEMENTS
IdAppart Propriétaire Localité Etat Type
ABE9856 NULL Bejaia Libre F3
CFK7431 0546 Sétif Occupé F5
SAJ2987 NULL Alger Occupé F4

7
Université Abderrahmane Mira - Bejaia Année universitaire : 2020/2021
Faculté des Sciences Exactes Niveau : L3 Recrutement National
Département d'informatique Module : Bases de données

4.4.3. Contrainte d'unicité UNIQUE


La contrainte d'unicité garantit que deux tuples d'une table ne peuvent en aucun cas avoir les
mêmes valeurs pour les colonnes définies comme UNIQUE.

Exemple : Création de la table LOCATIONS avec le montant de chaque location qui doit être
unique
CREATE TABLE LOCATIONS {
IdAppart VARCHAR(15),
Locataire INT,
Date_début DATE,
Date_fin DATE,
Montant FLOAT UNIQUE,
PRIMARY KEY (IdAppart, Locataire),
FOREIGN KEY (IdAppart) REFERENCES APPARTEMENTS (IdAppart) ON DELETE RESTRICT ON
UPDATE CASCADE,
FOREIGN KEY (Locataire) REFERENCES PERSONNES (IdPersonne) ON DELETE RESTRICT ON
UPDATE CASCADE} ;

4.4.4. Contrainte de vérification CHECK


La contrainte CHECK permet de vérifier qu'une colonne satisfait une certaine condition
Colonne type CHECK (Colonne Condition) ;

Exemple : Nous allons créer la table APPARTEMENTS avec la contrainte CHECK


CREATE TABLE APPARTEMENTS {
IdAppart VARCHAR (15) PRIMARY KEY,
Propriétaire INT,
Localité VARCHAR(45),
Etat VARCHAR (15) CHECK (Etat in ('libre','occupé')),
Type VARCHAR (6) CHECK (Type in ('F1','F2','F3','F4','F5')),
FOREIGN KEY (Propriétaire) REFERENCES PERSONNES (IdPersonne) ON DELETE RESTRICT ON
UPDATE CASCADE} ;

8
Université Abderrahmane Mira - Bejaia Année universitaire : 2020/2021
Faculté des Sciences Exactes Niveau : L3 Recrutement National
Département d'informatique Module : Bases de données

En cas d'oubli, la contrainte CHECK peut être ajoutée avec la commande suivante :
ALTER TABLE APPARTEMENTS ADD CONSTRAINT CHK CHECK (Etat in ('libre', 'occupé'));

4.4.5. Contrainte de non nullité NOT NULL


La contrainte NOT NULL permet d'imposer à une colonne d'être renseignée (il doit y'avoir une
valeur et le champ ne doit pas rester vide). Si lors de l'insertion de données dans une table on
ne saisit aucune valeur pour une colonne définie NOT NULL, une erreur s'affichera.

Colonne type NOT NULL,
Remarque : Il ne faut pas confondre la notion NOT NULL et le chiffre 0, qui est une valeur.

Exemple : La localité d'un appartement doit être renseignée. On reprend la table


APPARTEMENTS
CREATE TABLE APPARTEMENTS {
IdAppart VARCHAR (15) PRIMARY KEY,
Propriétaire INT,
Localité VARCHAR(45) NOT NULL,
Etat VARCHAR (15) CHECK (Etat in ('libre,'occupé')),
Type VARCHAR (6) CHECK (Type in ('F1','F2','F3','F4','F5')),
FOREIGN KEY (Propriétaire) REFERENCES PERSONNES (IdPersonne) ON DELETE RESTRICT ON
UPDATE CASCADE} ;

En cas d'oubli, la contrainte NOT NULL peut être ajoutée avec la commande suivante :
ALTER TABLE APPARTEMENTS MODIFY Localité VARCHAR(45) NOT NULL ;

4.4.6. Contrainte de valeur par défaut DEFAULT


La contrainte DEFAULT permet de définir une valeur par défaut à une colonne au cas où celle-
ci ne serait pas renseignée. Il est à noter qu'on ne peut pas définir une contrainte DEFAULT et
NOT NULL pour une même colonne. La commande suivante permet de définir la valeur par
défaut d'une colonne :

9
Université Abderrahmane Mira - Bejaia Année universitaire : 2020/2021
Faculté des Sciences Exactes Niveau : L3 Recrutement National
Département d'informatique Module : Bases de données

Colonne type DEFAULT valeur ;

Exemple : Définir la colonne Adresse de la table PERSONNES par défaut à 'Oran'


CREATE TABLE IF NOT EXISTS PERSONNES {
IdPersonne INT PRIMARY KEY,
Nom VARCHAR(15),
Prénom VARCHAR (15),
Tel INT,
Adresse VARCHAR (50) DEFAULT 'Oran'} ;

Si la contrainte DEFAULT n'a pas été définie pendant la création de la table, elle peut être
ajoutée avec la commande suivante :
ALTER TABLE PERSONNES MODIFY Adresse VARCHAR(50) DEFAULT 'Oran';

4.5. Modification d'une colonne


On peut modifier les caractéristiques d'une colonne, soit lui changer de type ou lui changer de
nom.

4.5.1. Modification du type d'une colonne


La requête suivante permet de modifier le type d'une colonne :
ALTER TABLE nom_table MODIFY colonne nouveau_type ;

Exemple : Modifier le type de la colonne IdPersonne


ALTER TABLE PERSONNES MODIFY IdPersonne VARCHAR(25);

4.5.2. Changement de nom d'une colonne


La requête suivante permet de changer le nom d'une colonne :

ALTER TABLE nom_table CHANGE ancien_nom nouveau_nom type ;

Exemple : Remplacer le nom de la colonne "Profession" par "Métier".


ALTER TABLE PERSONNES CHANGE Profession Métier VARCHAR(30) ;

10
Université Abderrahmane Mira - Bejaia Année universitaire : 2020/2021
Faculté des Sciences Exactes Niveau : L3 Recrutement National
Département d'informatique Module : Bases de données

4.6. Suppression d'une colonne


Pour exécuter la suppression en SQL, on utilise le mot-clé DROP. La requête suivante permet
de supprimer la colonne d'une table :
ALTER TABLE nom_table DROP COLUMN nom_colonne ;

Exemple : Suppression de la colonne Profession


ALTER TABLE PERSONNES DROP COLUMN Profession ;

4.7. Suppression de tables


La suppression d'une table se fait par la requête suivante :
DROP TABLE nom_table;

Exemple : Suppression de la table PERSONNES


DROP TABLE PERSONNES ;

4.8. Suppression d'une base de données


La requête suivante permet de supprimer une base de données :
DROP DATABASE nom_bdd ;

Exemple : Suppression de la base de données AgenceImmo


DROP DATABASE AgenceImmo ;

5. Langage de manipulation de données


Une fois toutes les structures de la base créées, on procède à l'insertion des données, leur
mise à jour et suppression à l'aide des commandes suivantes : INSERT INTO, UPDATE, DELETE.
La manipulation de données inclut également l'interrogation de la base.

5.1. Insertion de données dans une table


L'insertion de tuples dans une table se fait avec la commande INSERT INTO comme indiqué
dans la requête suivante :
INSERT INTO nom_table (Col1 , Col2 , … , Coln) VALUES (Val1 , Val2 , … , Valn )

11
Université Abderrahmane Mira - Bejaia Année universitaire : 2020/2021
Faculté des Sciences Exactes Niveau : L3 Recrutement National
Département d'informatique Module : Bases de données

Remarques :

1. Il est possible d'insérer les données sans indiquer les colonnes (Col1 , Col2 , … , Coln).
L'insertion se fera selon l’ordre utilisé pour la création de la table. Si aucune valeur n'est
saisie pour une colonne, celle-ci se verra affectée la valeur NULL ou une valeur par défaut
préalablement précisée.
2. Lors de l'insertion d'une valeur de type VARCHAR ou DATE, celle-ci est mise entre
guillemets simples. Les valeurs de type INT ne sont pas mises entre guillemets.

Exemple : Insertion de la personne SALMI Riad, un enseignant ayant l'identifiant 0129 qui
habite à Bejaia et dont le numéro de téléphone est 5552356.
INSERT INTO PERSONNES VALUES (0129, 'SALMI', 'Riad', 5552356, 'Bejaia', 'Enseignant') ;

5.2. Mise à jour des données d'une table


La mise à jour d'une donnée dans une table consiste à modifier la valeur d'une colonne dans
un tuple. La requête suivante permet de mettre à jour une ou plusieurs valeurs dans un tuple.
La commande UPDATE permet la mise à jour comme suit :
UPDATE nom_table
SET Coli = Vali , Colj = Valj
WHERE [Condition]
Où Condition est une expression qui doit être vérifiée. Dans le cas où la clause WHERE n'est
pas mentionnée, toutes les colonnes Coli et Colj des tuples de la table vont être mises à jour.

Exemple : Changer l'adresse de la personne SALMI Riad à Alger


UPDATE PERSONNES
SET Adresse = 'Alger'
WHERE Nom = 'SALMI' and Prénom = 'Riad' ;

12
Université Abderrahmane Mira - Bejaia Année universitaire : 2020/2021
Faculté des Sciences Exactes Niveau : L3 Recrutement National
Département d'informatique Module : Bases de données

5.3. Suppression de tuples


La commande DELETE permet de supprimer des tuples d’une table vérifiant une condition
donnée ou elle peut être utilisée pour supprimer tous les tuples d’une table donnée.
DELETE FROM nom_table
WHERE Condition ;

Exemple : Supprimer toutes les personnes habitant à Bejaia


DELETE FROM PERSONNES
WHERE Adresse= 'Bejaia';

5.4. Interrogation de la base de données


La commande SELECT Coli FROM nom_table permet d'afficher les valeurs de la colonne Coli
de la table nom_table. Il s'agit de la commande de base pour toute interrogation de base de
données. Elle peut être simple ou avec une condition spécifique en utilisant la clause WHERE.

Exemple 1 : Afficher tous les tuples de la table PERSONNES


SELECT *
FROM PERSONNES ;
Remarque : L'étoile (*) signifie que toutes les colonnes de la table PERSONNES vont être
affichées.

Exemple 2 : Afficher les noms et prénoms des enseignants


SELECT Nom, Prénom
FROM PERSONNES
WHERE Profession='Enseignant' ;

5.4.1. Correspondance avec l'algèbre relationnelle


Le tableau suivant illustre l'implémentation des requêtes écrites en algèbre relationnelle avec
le langage SQL :

13
Université Abderrahmane Mira - Bejaia Année universitaire : 2020/2021
Faculté des Sciences Exactes Niveau : L3 Recrutement National
Département d'informatique Module : Bases de données

Opérateurs Algèbre relationnelle SQL


Projection 𝜋𝐴𝑖 ,.,𝐴𝑗 (R) SELECT Ai , … , Aj
FROM R ;
Exemple : Afficher les identifiants, les états et les types d'appartements.
SELECT IdAppart, Etat, Type
FROM APPARTEMENTS ;
Sélection σCond (R) SELECT *
FROM R
WHERE Cond ;
Exemple : Afficher tous les appartements de type F3.
SELECT *
FROM APPARTEMENTS
WHERE Type = 'F3';
Renommage d'attribut ρ [A1 :NouvNomA1 ] (R) SELECT A1 AS NouvNomA1
FROM R ;
Exemple : Afficher l'état des appartements et renommer la colonne en "Statut"
SELECT Etat AS Statut
FROM APPARTEMENTS ;
Union R∪S SELECT *
FROM R
UNION
SELECT *
FROM S ;
Exemple : Afficher toutes les personnes habitant à Bejaia ou dont la profession est
architecte
SELECT *
FROM PERSONNES
WHERE Adresse ='Bejaia'
UNION
SELECT *
FROM PERSONNES
WHERE Profession = 'Architecte' ;
Intersection R∩S SELECT *
FROM R
INTERSECT
SELECT *
FROM S ;
Exemple : Afficher les identifiants d'appartements dont l'état est occupé et dont la localité
est Alger
SELECT IdAppart
FROM APPARTEMENTS
WHERE Etat='occupé'
INTERSECT

14
Université Abderrahmane Mira - Bejaia Année universitaire : 2020/2021
Faculté des Sciences Exactes Niveau : L3 Recrutement National
Département d'informatique Module : Bases de données

SELECT IdAppart
FROM APPARTEMENTS
WHERE Localité='Alger';
Différence R−S SELECT *
FROM R
MINUS
SELECT *
FROM S ;
Exemple : Afficher les propriétaires (IdPersonne, Nom, Prénom) qui ne sont pas locataires
SELECT IdPersonne, Nom, Prénom
FROM PERSONNES, APPARTEMENTS
WHERE IdPersonne = Propriétaire
MINUS
SELECT IdPersonne, Nom, Prénom
FROM PERSONNES, LOCATIONS
WHERE IdPersonne = Locataire ;
Equi-jointure R ⟕𝐀𝐢=𝐁𝐢 S SELECT *
FROM R, S
WHERE R. Ai = S. B𝑖 ;
Exemple : Donner les identifiants des appartements loués par "Kemal SADI".
SELECT IdAppart
FROM LOCATIONS , PERSONNES
WHERE PERSONNES.Nom = 'SADI' AND PERSONNES.Prénom= 'Kemal' AND
LOCATIONS.Locataire = PERSONNES.IdPersonne ;

Tableau 1. Implémentation de requêtes en SQL

5.4.2. Expression de la jointure en SQL


La jointure peut être exprimée de deux manières :
 En utilisant la condition de jointure entre deux tables interrogées ou plus.
 En utilisant la clause IN.
Exemple : Afficher les noms et prénoms de propriétaires possédant des appartements de
type F4.
En utilisant la condition de jointure :
SELECT PERSONNES.Nom, PERSONNES.Prénom
FROM PERSONNES, APPARTEMENTS
WHERE PERSONNES.idPersonne = APPARTEMENTS.Propriétaire AND APPARTEMENTS.Type='F4';

15
Université Abderrahmane Mira - Bejaia Année universitaire : 2020/2021
Faculté des Sciences Exactes Niveau : L3 Recrutement National
Département d'informatique Module : Bases de données

En utilisant la clause IN :
SELECT Nom, Prénom
FROM PERSONNES
WHERE IdPersonne IN SELECT Propriétaire
FROM APPARTEMENTS
WHERE Type ='F4;
Remarque : Cette structure imbriquée correspond à la jointure des tables PERSONNES et
APPARTEMENTS sur la base des valeurs identiques des attributs IdPersonne et Propriétaire.

5.5. Autres opérateurs utilisés dans SQL


5.5.1. Les opérateurs IN / NOT IN
Les opérateurs IN et NOT IN sont utilisés pour définir l'appartenance ou pas d'une valeur de
colonne dans une liste de valeurs au choix.
Exemple 1 : Afficher les localités des appartements qui sont de type F3, F4 ou F5
SELECT Localité
FROM APPARTEMENTS
WHERE Type IN ('F3', 'F4', 'F5');

Exemple 2 : Afficher les localités des appartements qui ne sont pas de type F1 et F2
SELECT Localité
FROM APPARTEMENTS
WHERE Type NOT IN ('F1', 'F2');

5.5.2. L'opérateur BETWEEN


L'opérateur BETWEEN permet de définir un intervalle de valeurs avec une borne supérieure
et une borne inférieure dans une condition.
Exemple : Afficher les identifiants d'appartements loués dont le montant est compris entre
15.000 et 35.000 DA
SELECT IdAppart
FROM LOCATIONS
WHERE Montant BETWEEN 15000 AND 35000;

16
Université Abderrahmane Mira - Bejaia Année universitaire : 2020/2021
Faculté des Sciences Exactes Niveau : L3 Recrutement National
Département d'informatique Module : Bases de données

5.5.3. L'opérateur DISTINCT


L'opérateur DISTINCT est utilisé pour éviter de retourner des doublons (tuples en double).
Exemple : Afficher les noms des personnes qui habitent Bejaia en éliminant les doublons
SELECT DISTINCT Nom
FROM PERSONNES
WHERE Adresse = 'Bejaia' ;

5.5.4. Les opérateurs ANY/ALL


Les opérateurs ANY (ou SOME) et ALL permettent de comparer une valeur à celles d’un
ensemble défini par une sous-requête. ANY signifie qu’au moins un élément de l’ensemble
satisfait la comparaison et ALL signifie que tous les éléments la satisfont.

Exemple 1 : Trouver les numéros d'appartements dont le montant de location est le moins
élevé parmi tous les appartements de Bejaia
SELECT NumAppart
FROM LOCATIONS
WHERE Montant <= ALL (SELECT Montant
FROM LOCATIONS
WHERE NumAppart IN (SELECT NumAppart
FROM APPARTEMENTS
WHERE Localité = 'Bejaia'));

Remarque : Le montant est inférieur ou égal aux montants de location de tous les
appartements situés à Bejaia.

Exemple 2 : Trouver les numéros d'appartements dont le montant de location est moins élevé
que celui d'un appartement situé à Bejaia
SELECT NumAppart
FROM LOCATIONS
WHERE Montant < ANY (SELECT Montant
FROM LOCATIONS

17
Université Abderrahmane Mira - Bejaia Année universitaire : 2020/2021
Faculté des Sciences Exactes Niveau : L3 Recrutement National
Département d'informatique Module : Bases de données

WHERE NumAppart IN (SELECT NumAppart


FROM APPARTEMENTS
WHERE Localité = 'Bejaia')) ;
Remarque : Le montant de location est inférieur à au moins celui d'un appartement de Bejaia.

5.5.5. L'opérateur ORDER BY


L'opérateur ORDER BY permet de trier les tuples en fonction de l'ordre alphabétique de leurs
valeurs, soit par ordre ascendant (croissant) ASC ou par ordre descendant (décroissant) DESC.
Exemple : Afficher les propriétaires d'appartements par ordre croissant du nom
SELECT PERSONNES.Nom
FROM PERSONNES, APPARTEMENTS
WHERE PERSONNES.IdPersonne = APPARTEMENTS.Propriétaire
ORDER BY ASC PERSONNES.Nom ;

5.5.6. L'opérateur LIKE


L'opérateur LIKE permet de faire une recherche sur un modèle de chaine de caractères. Le
modèle de caractères est mis entre deux guillemets simples et peut comporter des caractères
spéciaux, le symbole de pourcentage (%) et le trait de soulignement (_). Le caractère % désigne
une chaine contenant plusieurs caractères alors que le caractère _ désigne un seul caractère.
LIKE ‘%a’ : le caractère “%” permet de rechercher toutes les chaines de caractère qui se
terminent par un “a”.
LIKE ‘a%’ : ce modèle permet de rechercher toutes les lignes de “colonne” qui commencent
par un “a”.
LIKE ‘%a%’ : ce modèle est utilisé pour rechercher tous les tuples contenant la lettre “a”.
LIKE ‘_a' : le modèle permet de rechercher les tuples qui contiennent la lettre "a" en deuxième
position.
Exemple : Trouver toutes les personnes dont le prénom contient la lettre "i"
SELECT *
FROM PERSONNES
WHERE Prénom LIKE '%i%';

18
Université Abderrahmane Mira - Bejaia Année universitaire : 2020/2021
Faculté des Sciences Exactes Niveau : L3 Recrutement National
Département d'informatique Module : Bases de données

5.6. Fonctions de calcul


5.6.1. La commande GROUP BY
La commande GROUP BY est utilisée pour grouper (rassembler) plusieurs résultats ayant la
même valeur pour une colonne.
Exemple : Lister le nombre d'appartements de chaque ville (localité)
SELECT Localité, COUNT (*) AS Nombre d'appartements
FROM APPARTEMENTS
GROUP BY Localité ;

Remarque : Pour la même valeur de la colonne Localité, on compte tous les appartements qui
y sont situés.

5.6.2. La commande HAVING


La condition HAVING est semblable à la condition WHERE, sauf que HAVING filtre en utilisant
des fonctions d'agrégation telles que SUM(), COUNT(), AVG(), MIN() ou MAX().
La commande HAVING permet de sélectionner également certains groupes issus de la
commande GROUP BY.

5.6.3. Fonctions d'agrégation


Les fonctions d’agrégation dans le langage SQL permettent d’effectuer des opérations
statistiques sur un ensemble de tuples. Parmi ces fonctions : COUNT, SUM, AVG, MIN, et MAX.

5.6.3.1. Les fonctions MIN et MAX


La fonction MIN(Colonne) permet de retourner la valeur minimale d'une colonne sur un
ensemble de lignes (tuples). La fonction MAX (Colonne) retourne la valeur maximale, de la
même façon.
Exemple : Lister les appartements ayant le montant de location le plus cher

SELECT *
FROM LOCATIONS
HAVING Montant = (SELECT MAX (Montant)
FROM LOCATIONS) ;

19
Université Abderrahmane Mira - Bejaia Année universitaire : 2020/2021
Faculté des Sciences Exactes Niveau : L3 Recrutement National
Département d'informatique Module : Bases de données

5.6.3.2. La fonction COUNT


La fonction COUNT(*) permet de compter le nombre de tuples dans une table y compris les
valeurs NULL. La fonction COUNT s'applique à tout type de colonnes.
Exemple : Quel est le nombre d’appartements de type F2 qui sont loués ?
SELECT COUNT (*)
FROM LOCATIONS, APPARTEMENTS
WHERE LOCATIONS.NumAppart = APPARTEMENTS.NumAppart AND
APPARTEMENTS.Type =' F2';

5.6.3.3. Les fonctions SUM et AVG


La fonction SUM (Colonne) permet de calculer la somme sur un ensemble de valeurs d'une
colonne sans considérer les valeurs NULL.
La fonction AVG (Colonne) permet de calculer la moyenne d'un ensemble de valeurs d'une
colonne.
Exemple 1 : Quel est le montant moyen d'une location ?
SELECT AVG (Montant)
FROM LOCATIONS;

Exemple 2 : Donner le montant payé par "Kemal SADI" pour toutes ses locations
SELECT SUM (LOCATIONS.Montant)
FROM PERSONNES, LOCATIONS
WHERE PERSONNES.IdPersonne= LOCATIONS.Locataire
AND PERSONNES.Nom = 'SADI' AND PERSONNES.Prénom= 'Kemal' ;

Exercice :
Soit le schéma de relations d’une base de données relative à la gestion de fourniture de
pièces à des projets.
Fournisseurs (numF, nomF, statut, villeF)
Pièces (numP, nomP, couleur, poids, villeP)
Projets (numProj, nomProj, villeProj)
Fournitures (numF, numP, numProj, Quantité)

20
Université Abderrahmane Mira - Bejaia Année universitaire : 2020/2021
Faculté des Sciences Exactes Niveau : L3 Recrutement National
Département d'informatique Module : Bases de données

Formuler en requêtes SQL les opérations suivantes :


1. Trouver les numéros et les noms des projets de la ville de Béjaia.

2. Avoir les numéros et les noms de pièces dont le poids ne dépasse pas 2 Kilogrammes.

3. Afficher les fournisseurs (numéros, noms et statuts) habitant la ville de Béjaia et ayant
effectué au moins une fourniture.

4. Obtenir les fournitures dont la quantité est dans l’intervalle [300, 750].

5. Obtenir les numéros des pièces fournies par un fournisseur de Béjaia à un projet d’Alger.

6. Les projets (numéro et nom) n’ayant reçu aucune fourniture.

7. Lister les projets (numéros et villes) fournis par tous les fournisseurs.

8. Trouver les numéros, les noms et les villes de fournisseurs ayant fourni tous les projets.

21

Vous aimerez peut-être aussi