Le langage SQL
Introduction
SQL « Structured Query Language » c’est à dire
« langage d’interrogation structuré ».
SQL : langage de gestion de données relationnelles.
Page 1
Introduction
SQL :
◼ LDD (Langage de Définition des Données) : création,
modification et suppression des définitions des objets de la base
◼ LMD (Langage de Manipulation des Données) : ajout,
suppression, modification
◼ LID (Langage d’Interrogation de Données) : interrogation des
données
◼ LCD (Langage de Contrôle de l’accès aux Données) : gestion
des protections d’accès
Fin d’instruction : ; 3
Types de données
NUMBER(n): Entier à n chiffres (n<=38)
◼ Ex. Val NUMBER(2); → entier à 2 chiffres
◼ RQ : N NUMBER; équivalent à N NUMBER(38); !
NUMBER (n,m) : Réel à n chiffres au total, m (de -84 à 127) après la virgule
◼ Ex. Coef NUMBER(3,1);
Coef = 24,2 (accepté) mais Coef = 242,3 (non accepté)
VARCHAR2(n) : Chaîne variable de n (<2000) caractères
◼ Ex : Etat VARCHAR2(1);
Etat = ‘O’ (accepté) mais Etat = ‘Oui’ (non accpté)
CHAR (n) : Chaîne de longueur fixe
Date : format ‘JJ-MM-AAAA
Autres Types d’SQL-2 :INTEGER, REAL, DOUBLE,…mais convertit
4 au type
NUMBER pour compatibilité.
4
Page 2
Langage de Définition de Données (LDD) :
Création de table
CREATE TABLE nom_table (
Attribut1 Type1 [DEFAULT valeur1] [NOT NULL] [Contrainte d’attribut],
Attribut2 Type2 [DEFAULT valeur2] [NOT NULL] [Contrainte d’attribut],
…
Attributn Typen [DEFAULT valeur n] [NOT NULL] [Contrainte d’attribut],
[Contraintes de table] ,
…);
Langage de Définition de Données
(LDD)
Contraintes d’intégrité :
◼ NOT NULL
◼ UNIQUE
◼ PRIMARY KEY
◼ FOREIGN KEY…REFERENCES
◼ CHECK
Sauf la contrainte NOT NULL, peuvent être définies sur :
◼ Une colonne → Contrainte de colonne
◼ Une table → Contrainte de table 6
Page 3
LDD : Contrainte NOT NULL
Attribut type NOT NULL ;
C’est une contrainte sur un attribut.
Exemple:
Note NUMBER(2)NOT NULL;
LDD : Contrainte d’unicité (UNIQUE)
Contrainte sur une table :
CONSTRAINT Nom_contrainte
UNIQUE (attribut 1, attribut 2,….);
Contrainte sur un attribut :
att type UNIQUE ;
→ Interdit qu’un attribut (ou la concaténation de
plusieurs attributs) contienne(nt) deux valeurs
identiques. 8
Page 4
LDD : Contrainte de clé primaire
Contrainte sur une table :
CONSTRAINT Nom_contrainte
PRIMARY KEY (attribut 1, attribut 2,….);
Contrainte sur un attribut :
att type PRIMARY KEY;
LDD : Contrainte de clé étrangère
Contrainte sur une table:
CONSTRAINT Nom_contrainte
FOREIGN KEY (attribut 1, attribut 2,...)
REFERENCES tableref[(att 1, att 2,...)]
[ON DELETE CASCADE] | [ON DELETE SET NULL] ;
Contrainte sur un attribut:
Att type REFERENCES tableref[(att 1)]
[ON DELETE CASCADE] | [ON DELETE SET NULL];
10
10
Page 5
LDD : Contrainte de domaine (CHECK)
Contrainte sur une table:
CONSTRAINT Nom_contrainte
CHECK (condition) ;
Contrainte sur un attribut:
att type CHECK(condition);
11
11
Base de données exemple
Usine (NU, NomU, VilleU)
Produit (NP, NomP, Couleur, Poids, PU, Qt_Stock, #NFab)
Fabricant (NFab, NomFab, AdrFab)
Fournisseur (NF, NomF, VilleF)
Livraison (#NP, #NU, #NF, DateL, Quantité, Remise)
12
12
Page 6
Exemples
Écrire le script de création des tables de la base de
données exemple avec les clés primaires et étrangères
correspondantes et en respectant les conditions
suivantes:
◼ NomP ne peut pas prendre des valeurs nulles
◼ Le poids doit être positif.
◼ NomF ne peut pas avoir des valeurs redondantes
13
13
-- Table Fabricant -- Table Fournisseur
CREATE TABLE Fabricant ( CREATE TABLE Fournisseur (
NFab NUMBER(4) PRIMARY KEY, NF NUMBER(4) PRIMARY KEY,
NomF VARCHAR(20) UNIQUE,
NomFab VARCHAR(10),
VilleF VARCHAR(50)
AdrFab VARCHAR(20),
);
);
-- Table Usine
CREATE TABLE Usine (
NU NUMBER(4),
NomU VARCHAR(20),
VilleU VARCHAR(50),
CONSTRAINT PK_Usine PRIMARY KEY(NU)
);
14
14
Page 7
-- Table Produit
CREATE TABLE Produit (
NP NUMBER(4) PRIMARY KEY,
NomP VARCHAR(20) NOT NULL,
Couleur VARCHAR(20),
Poids NUMBER(10, 2) CHECK (Poids > 0),
PU NUMBER(10, 2),
Qt_Stock NUMBER(4),
NFab NUMBER(4) REFERENCES Fabricant(NFab)
);
15
15
-- Table Livraison
CREATE TABLE Livraison (
NP NUMBER(4) ,
NU NUMBER(4) ,
NF NUMBER(4) ,
DateL DATE,
Quantité NUMBER(4) ,
CONSTRAINT pk_liv PRIMARY KEY (NP, NU, NF, DateL),
CONSTRAINT fk_prod FOREIGN KEY (NP) REFERENCES Produit(NP),
CONSTRAINT fk_usine FOREIGN KEY (NU) REFERENCES Usine(NU),
CONSTRAINT fk_four FOREIGN KEY (NF) REFERENCES
Fournisseur(NF)
);
16
16
Page 8
LDD : Modification de la structure
d’une table
Ajout d’une colonne
ALTER TABLE nom_table
ADD (attribut1 type1, attribut2 type2,..) ;
Ex. Ajouter l’attribut seuil_min dans la table Produit
Modification d’une colonne
ALTER TABLE nom_table
MODIFY (attribut1 type1, attribut2 type2,..) ;
Ex. : Modifier la taille à 20 de l’attribut NomFab de la table
17
Fabricant.
17
LDD : Modification de la structure
d’une table
Suppression d’une colonne
ALTER TABLE nom_table
DROP COLUMN attribut ;
RQ : attribut ne doit pas appartenir à une vue, un index,
ou faire l’objet d’une CI
Renommer une colonne
ALTER TABLE nom_table
RENAME COLUMN ancien_nom TO nouveau_nom ; 18
18
Page 9
LDD : Modification de la structure
d’une table
Renommer une table
ALTER TABLE ancien_nom
RENAME TO nouveau_nom ;
Ajout d’une contrainte
ALTER TABLE nom_table
ADD CONSTRAINT nom_cont définition_cont;
Ex1. : Ajouter la contrainte de clé primaire sur l’attribut NU de la table
Usine.
EX2. Ajouter la contrainte de clé étrangère sur l’attribut NFab de la table
Produit.
EX3. Ajouter une contrainte dans la table Produit vérifiant Qt_Stock
19 >
seuil_min.
19
LDD : Modification de la structure
d’une table
Suppression d’une contrainte
ALTER TABLE nom_table
DROP CONSTRAINT nom_contrainte ;
Désactivation d’une contrainte
ALTER TABLE nom_table
DISABLE CONSTRAINT nom_cont ;
Activation d’une contrainte
ALTER TABLE nom_table
ENABLE CONSTRAINT nom_cont ;
Suppression d’une table 20
DROP TABLE nom_table;
20
Page 10
Langage de Manipulation des Données
(LMD)
Insertion de données
INSERT INTO nom_table [(att1, att2, …)]
VALUES (val1, val2, …);
Ex. Insérer la ligne (10, Delta, Sousse) dans la table Usine
21
21
Langage de Manipulation des Données
(LMD)
Modification de données
UPDATE nom_table
SET att1 = {expression1 | SELECT …}
[, att2 = {expression2 | SELECT …} …]
[WHERE condition ] ;
Ex1. Ajouter 15 unités à toutes les quantités en stock de tous les
produits.
Ex2. Augmenter le prix unitaire des produits de couleur rouge
22
5%.
22
Page 11
Langage de Manipulation des Données
(LMD)
Suppression de données
DELETE FROM nom_table
[WHERE condition ] ;
Ex1. Supprimer les produits de couleur ‘Violet’.
23
23
Langage d’Interrogation de Données
Syntaxe générale d’une requête SQL
SELECT [ALL] | [DISTINCT] <att1 [AS alias i],att2 [AS alias j],…> | *
FROM table1 [Alia1], table2 [Alia2],…
[WHERE <condition>]
[GROUP BY <att1, att2,…> ]
[HAVING <condition de groupement >]
[ORDER BY < att1, att2,…>] ;
24
24
Page 12
Projection
Syntaxe :
SELECT [ALL] | [DISTINCT] <liste des attributs> | *
FROM <la table> ;
Exemples :
DISTINCT permet d’éliminer les
1) Donner la liste des clients. duplications, par défaut on obtient tous
SELECT * les tuples (ALL).
FROM Client ;
2) Donner les numéros des produits qui ont été commandés.
SELECT NP SELECT DISTINCT NP
FROM Ligne_Cmd; FROM Ligne_Cmd;
25
25
Clause WHERE: Restriction
Syntaxe :
SELECT [ALL] | [DISTINCT] <liste des attributs> | *
FROM <la table>
WHERE <condition> ;
Opérateurs logiques : AND, OR, NOT
Opérateurs arithmétiques : =, !=, >, <, >=, <=
Prédicats : NULL, IN, BETWEEN, LIKE, ALL, SOME,
ANY, EXISTS
S’appliquent aux valeurs numériques, chaînes de caractères et
dates
26
26
Page 13
Opérateurs arithmétiques, logiques et
prédicats
WHERE exp1 = exp2 Condition est vraie si les deux expressions
exp1 et exp2 sont égales.
WHERE exp1 != exp2 Condition est vraie si les deux expressions
exp1 et exp2 sont différentes.
WHERE exp1 < exp2 Condition est vraie si exp1 est inférieure à exp2.
WHERE exp1 > exp2 Condition est vraie si exp1 est supérieure à
exp2.
27
27
Opérateurs arithmétiques, logiques et
prédicats
WHERE exp1 <= exp2 Condition est vraie si exp1 est inférieure
ou égale à exp2.
WHERE exp1 >= exp2 Condition est vraie si exp1 est supérieure
ou égale à exp2.
WHERE exp1 BETWEEN Condition est vraie si exp1 est comprise
exp2 AND exp3 entre exp2 et exp3, bornes incluses.
WHERE exp1 LIKE exp2 Condition est vraie si la sous chaîne exp2
est présente dans exp1.
«_ » remplace un caractère.
«% » remplace une chaîne de caractères
de longueur quelconque, y compris de
longueur nulle.
28
28
Page 14
Opérateurs arithmétiques, logiques et
prédicats
WHERE exp1 NOT LIKE Condition est vraie si la sous–chaîne exp2
exp2 n’est pas présente dans exp1.
WHERE exp1 IN (exp2, Condition est vraie si exp1 appartient à
exp3,...) l’ensemble (exp2, exp3, …).
WHERE exp1 NOT IN Condition est vraie si exp1 n’appartient pas à
(exp2, exp3,...) l’ensemble (exp2, exp3, …).
WHERE exp IS NULL Condition est vraie si exp1 est nulle.
WHERE exp IS NOT Condition est vraie si exp n’est pas nulle.
NULL
29
29
Opérateurs arithmétiques, logiques et
prédicats
WHERE exp1 Op ALL (exp2, Op représente un opérateur de comparaison (<, >,
exp3,…) =, !=, <=, >=)
Condition est vraie si la comparaison de l’exp1
est vraie avec toutes les valeurs de la liste (exp2,
exp3, …). Si la liste est vide, le résultat est vrai.
WHERE exp1 Op ANY (exp2, Op représente un opérateur de comparaison (<, >,
exp3,…) =, !=, <=, >=)
WHERE exp1 Op SOME Condition est vraie si la comparaison de l’exp1
(exp2, exp3,…) est vraie avec au moins une valeur de la liste
(exp2, exp3, …). Si la liste est vide, le résultat est
faux.
WHERE EXISTS sous- Condition est vraie si le résultat de la sous-
requête requête n’est pas vide.
30
30
Page 15
Exemples
1. Donner les numéros et noms des clients de la ville de Sousse.
2. Donner la liste des commandes dont la date est supérieure à
‘01/02/2025’.
3. Donner la liste des produits dont le prix est compris entre 20 et 50.
4. Donner la liste des clients dont les noms commencent par ‘B’.
5. Afficher les numéros des commandes qui ont été passées à l’une des
dates suivantes (16/04/2025, 25/04/2025, 06/03/2025).
6. Donner les libellés des produits dont le prix unitaire est supérieur à
50DT.
31
31
Alias
Permettent de renommer des attributs ou des tables.
SELECT attr1 AS aliasA1, attr2 AS aliasA2, …
FROM table1 aliast1, table2 aliast2… ;
Pour les attributs, l’alias correspond aux titres des colonnes
affichées dans le résultat de la requête. Il est souvent
utilisé lorsqu’il s’agit d’attributs calculés (expression)
32
32
Page 16
Jointure
Syntaxe
SELECT [ALL] | [DISTINCT] <liste_attributs> | *
FROM Table1, Table2, …..
WHERE Table1. Attj = [Link] AND ….
AND <Condition> ;
33
33
Exemples : Requêtes avec jointure
1. Donner les libellés des produits de la commande numéro
‘C002’.
2. Donner les produits (toutes les informations) commandés au
cours de l’année 2010 et qui sont vendus aux clients de Tunis.
34
34
Page 17
Fonctions d’agrégats
Nom fonction Effet
AVG (expression) Moyenne des valeurs d’une colonne
SUM (expression) Somme des valeurs d’une colonne
MIN (expression) Renvoie la plus petite des valeurs
MAX (expression) Renvoie la plus grande des valeurs
COUNT(*) Nombre de lignes du groupe
COUNT(expression) Nombre de lignes ayant une valeur non
NULL pour une expression
COUNT(DISTINCT Nombre de valeurs distinctes et non
expression) NULL pour une expression
35
35
Exemples
1. Afficher le nombre de produits dans la base de données.
2. Afficher le nombre de produits qui ont été vendus.
3. Afficher le poids du produit le plus lourd.
36
36
Page 18
Syntaxe générale d’une requête SQL
SELECT [ALL] | [DISTINCT] <att1 [AS alias i],att2 [AS alias j],…> | *
FROM table1 [Alia1], table2 [Alia2],…
[WHERE <condition>]
[GROUP BY <att1, att2,…> ]
[HAVING <condition de groupement >]
[ORDER BY < att1, att2,…>] ;
37
37
Groupement de données (GROUP BY)
Groupe :ensemble de lignes résultats d’une requête qui ont
une valeur commune dans une ou plusieurs colonnes.
Les fonctions d’agrégats peuvent être utilisées pour
effectuer des calculs sur les groupes.
Exemple
Afficher la quantité totale commandée par produit.
SELECT NP, SUM(Qte) QTot
FROM Ligne_Cmd
GROUP BY NP;
38
38
Page 19
Groupement de données (GROUP BY)
1. Donner la quantité totale commandée par produit.
SELECT NP, SUM(Qte)
FROM Ligne_Cmd
GROUP BY NP;
39
39
Clause HAVING
Pour exprimer une condition sur des caractéristiques du
groupe.
Un ordre SELECT peut contenir à la fois une clause
WHERE et une clause HAVING. Dans ce cas, la clause
WHERE doit être placée avant la clause GROUP BY.
La clause HAVING peut contenir une sous interrogation.
40
40
Page 20
Exemples
1. Afficher les libellés des produits dont on a commandé
plus que 10 unités.
SELECT [Link]
FROM Ligne_Cmd LC, Produit P
WHERE [Link]=[Link]
GROUP BY [Link]
HAVING SUM(Qte) > 10;
41
41
Clause ORDER BY
ORDER BY exp1 [DESC], exp2 [DESC], ...
NB : L’ordre de tri par défaut est croissant (ASC).
Exemples
Afficher les produits (NP, LibP, PU ) triés selon l’ordre croissant du prix
unitaire.
SELECT NP, LibP, PU Ou bien SELECT NP, NomP, PU
FROM Produit FROM Produit
ORDER BY PU ASC; ORDER BY 3 ASC;
42
42
Page 21