Académique Documents
Professionnel Documents
Culture Documents
Objectif :
• Maîtriser le langage SQL et les principales commandes pour lire, insérer, modifier,
supprimer des données dans une base et les expressions de contraintes
d’intégrité.
54
Contenue:
• Contraintes d’intégrité
• Les prédicats
• La jointure
55
Langage SQL
• Le langage SQL signifie « langage de requêtes structurées» est un langage basé sur
l’algèbre relationnelle qui permet de définir le modèle de données, de le contrôler et
enfin de le manipuler.
56
Langage SQL
Ce langage permet l’accès aux données et se compose de quatre sous-ensembles :
57
CREATE DATABASE
Pour créer une base de données qui sera appelé « mon_base » il suffit d’utiliser la requête
suivante qui est très simple :
Avec MySQL, si une base de données porte déjà ce nom, la requête retournera une erreur.
Pour éviter d' avoir cette erreur, il convient d' utiliser la requête suivante pour MySQL :
58
Gestion Des Utilisateurs
59
CREATE TABLE
Syntaxe:
CREATE TABLE nom_table (
- - définition des colonnes
Col1 TYPE (taille) [NULL | NOT NULL | UNIQUE | DEFAULT valeur | PRIMARY KEY ],
Col2 TYPE (taille) ,
...,
- - contraintes de table
[PRIMARY KEY (liste de colonnes) ],
[FOREIGN KEY (nom colonne) REFERENCES table],
[CHECK condition ] );
60
CREATE TABLE
Contraintes d’intégrité :
• FOREIGN KEY : indique que la colonne que l’on définit est une clé étrangère qui fait
référence à la colonne de la table tableref.
• CHECK : donne une condition que les colonnes de chaque ligne devront vérifier (plage
ou liste de valeurs).
61
Les Types De Données Utilisables
• INTEGER = Entier.
62
CREATE TABLE
Exemple:
CREATE TABLE Clients (
idClient CHAR(6) PRIMARY KEY ,
nom VARCHAR(30) NOT NULL,
adresse VARCHAR(30) ,
numeroTelephone INTEGER);
63
CREATE TABLE
referenceProduit CHAR(6) ,
idClient CHAR(6) ,
64
CREATE TABLE
CREATE TABLE clients (
idClient CHAR(6),
Age INTEGER,
etat_civil VARCHAR(20),
PRIMARY KEY(idClient),
65
ALTER TABLE
La commande ALTER TABLE en SQL permet de modifier une table existante. Il est ainsi
possible d'ajouter, supprimer ou modifier une colonne existante, par exemple pour
changer le type.
Syntaxe de baxe:
D' une manière générale, la commande s'utilise de la manière suivante :
66
ALTER TABLE
67
ALTER TABLE
68
ALTER TABLE
Exemple :
69
INSERT INTO
Ou bien on complète tous les champs dans le même ordre comme dans la table :
Exemple:
• INSERT INTO client (prenom, nom, ville, age) VALUES ('Ali' , ' Fallah' , ' Fes' , 24);
• INSERT INTO client VALUES ('Leila' , ' Hadi' , ' Fes' , 24);
70
UPDATE
La commande UPDATE permet d' effectuer des modifications sur des lignes existantes.
Très souvent cette commande est utilisée avec WHERE pour spécifier sur quelles lignes
doivent porter la ou les modifications.
Syntaxe :
UPDATE table
SET colonne1 = valeur1 [, colonne2 = valeur2]
[WHERE condition] ;
Exemple :
• Remplacer tous les client habitent à la rue FARRAH par la rue OULFA :
UPDATE client
SET rue = ‘rue OULFA’
WHERE rue =‘rue FARRAH' ;
• Remplacer pour le client N° 5 en ville par ' Tanger ' :
UPDATE client
SET ville = ' Tanger'
WHERE id = 5;
71
DELETE
La commande DELETE en SQL permet de supprimer des lignes dans une table. En utilisant
cette commande associé à WHERE.
Syntaxe :
DELETE FROM table
WHERE condition;
Exemple :
• Si l' ont souhaite supprimer les utilisateurs qui se sont inscrit avant le 15/03/2010, il va
falloir effectuer la requête suivante :
72
SELECT
La commande SELECT permet de rechercher des données à partir d'un ou plusieurs tables; le
résultat est présenté sous forme d' une table réponse.
Syntaxe :
SELECT [ALL ou DISTINCT] ( nom_colonne1, [nom_colonne2,…] ) | *
FROM nom_table ,
[ WHERE condition ],
[ GROUP BY condition ],
[ HAVING condition ],
[ ORDER BY nom-attribut ] [ASC/DESC];
[…] optionnel
73
SELECT
Exemple :
• Liste des numéros et noms d' employés :
SELECT ename, empno FROM emp ;
• Liste de tous les employés :
SELECT * FROM emp ;
• Liste de tous les employés habitent à oujda :
74
Opérateurs De Comparaisons
Opérateur Description
= Égale
<> , != Different de
> Supérieur à
< Inférieur à
>= Supérieur ou égale à
<= Inférieur ou égale à
IN Liste de plusieurs valeurs possibles
BETWEEN Valeur comprise dans un intervalle donnée (utile pour
les nombres ou dates)
LIKE Recherche un expression en spécifiant le début,
milieu ou fin d’un mot
IS NULL Valeur est nulle
IS NOT NULL Valeur n est pas nulle
75
Les opérateurs logiques AND et OR
Pour filtrer les données on peut ajouter dans la condition WHERE des opérateurs qui
peuvent être combinés. L' opérateur AND permet de s'assurer que la condition1 ET la
condition2 sont vrai.
Syntaxe :
SELECT nom_colonne
FROM nom_table
WHERE condition1 AND condition2;
L' opérateur OR vérifie quant à lui que la condition1 OU la condition2 est vrai :
SELECT nom_colonne FROM nom_table
WHERE condition1 OR condition2;
76
AND et OR
Exemple :
• Afficher les produits de la catégorie informatique et dont le stock est inférieur à 50 :
SELECT * FROM produit
WHERE categorie = ' informatique' AND stock < 50 ;
• Afficher le nom et prénom des employés qui ont 1 enfant ou 2 enfants :
SELECT nom,prenom FROM emp
WHERE nbenfants = 1 OR nbenfants = 2 ;
• Afficher les employés qui ont 1 enfant ou 2 enfants et un âge supérieur à 38 ans :
SELECT * FROM emp
WHERE (nbenfants = 1 OR nbenfants = 2 ) AND ( age >= 38) ;
77
IN
L'opérateur IN permet de sélectionner les enregistrements dont le champ spécifié
contient une valeur apparaissant dans la liste de valeurs possible.
SELECT nom_colonne
FROM table
WHERE nom_colonne IN ( valeur1, valeur2, valeur3, ... );
Exemple :
• Donner les produits dont la marque appartient au valeurs suivantes
(TOYOTA,BMW, MERCEDES) :
SELECT * FROM produit
WHERE marque IN ('TOYOTA' ,'BMW' ,'MERCEDES');
• Lister les employés habitent à Oujda , Fes et Meknass :
SELECT * FROM emp
WHERE location IN ('Oujda' , 'Fes' , 'Meknass') ;
78
BETWEEN
L’opérateur BETWEEN ... AND … permet de sélectionner les enregistrements dont le
champ spécifié contient une valeur dans un intervalle déterminé.
Syntaxe :
SELECT * FROM table
WHERE nom_colonne BETWEEN valeur1 AND valeur2 ;
Exemple :
• N° des comptes dont le solde est compris entre 600 et 1000 :
SELECT NumC FROM Compte
WHERE solde BETWEEN 600 AND 1000;
• Obtenir les membres qui se sont inscrit entre le 1 avril 2020 et le 20 avril 2020:
SELECT * FROM utilisateur
WHERE date_inscription BETWEEN ‘2020/04/01' AND ‘2020/04/20' ;
• Afficher les noms des clients qui ont de 1 à 3 enfants :
SELECT nom FROM client
WHERE nbenfants BETWEEN 1 AND 3 ;
79
LIKE
• LIKE ‘%a’ : Chercher toutes les lignes de ' colonne ‘ qui se terminent par un ‘a’.
• LIKE ‘a%’ : Chercher toutes les lignes de ' colonne ’ qui commencent par un ‘a’.
• LIKE ‘%a%’ : Chercher toutes les lignes de ' colonne ‘ qui contiennent un ‘a’.
80
IS NULL / IS NOT NULL
Pour filtrer les résultats où les champs d’une colonne sont à NULL .
Syntaxe :
SELECT * FROM table
WHERE nom_colonne IS NULL ;
A l’inverse, pour filtrer les résultats et obtenir uniquement les enregistrements qui ne sont
pas NULL.
Syntaxe :
SELECT * FROM table
WHERE nom_colonne IS NOT NULL ;
81
NOT
Exemple :
• Afficher les noms des clients qui n’ont pas de 1 à 3 enfants :
SELECT nom FROM client
WHERE nbenfants NOT BETWEEN 1 AND 3 ;
• Afficher les étudiants qui n’ont pas des noms entre Ali , Salma , Sara :
SELECT * FROM etudiant
WHERE nom NOT IN ('Ali' , 'Salma' , ' Sara' ) ;
82
ORDER BY
La commande ORDER BY permet de classer les résultats d’une requête dans un ordre alphabétique,
numérique ou chronologique croissant (ASC) ou décroissant (DESC). Le tri se fait par défaut par ordre
croissant.
Syntaxe :
SELECT colonne1, colonne2, colonne3,..
FROM table
ORDER BY colonne1 [ DESC | ASC ], ...
Exemple :
• Récupérer la liste de ces utilisateurs par ordre alphabétique du nom de famille :
SELECT * FROM utilisateur
ORDER BY nom;
ou bien
SELECT nom,prenom FROM utilisateur
ORDER BY nom ASC;
• Récupérer la liste de ces utilisateurs par ordre alphabétique du nom de famille ,les trier par ordre
décroissant d’inscription :
SELECT * FROM utilisateur
ORDER BY nom ASC, date_inscription DESC;
83
GROUP BY
Syntaxe :
SELECT colonne1, fonction(colonne2)
FROM table
GROUP BY colonne1;
84
GROUP BY
Exemple :
idclient tarif date
1 105 2022/10/11
2 15 2022/10/11
3 87 2022/10/11
1 160 2022/10/11
2 100 2022/10/11
• Donner le coût total de chaque client en regroupant les commandes des mêmes clients :
85
GROUP BY
Il existe plusieurs fonctions qui peuvent être utilisées pour manipuler plusieurs
enregistrements :
• COUNT() : compte le nombre d’occurrences du colonne.
86
HAVING
La condition HAVING en SQL est presque similaire à WHERE à la seule différence que
HAVING permet de filtrer en utilisant des fonctions telles que SUM(), COUNT(), AVG(), MIN()
ou MAX().
Syntaxe :
SELECT colonne1, SUM(colonne2)
FROM nom_table
GROUP BY colonne1
HAVING fonction(colonne2) operateur valeur;
Exemple :
• Récupérer la liste des clients qui ont commandé plus de 100DH :
SELECT idclient, SUM(tarif)
FROM achat
GROUP BY idclient
HAVING SUM(tarif) > 100 ;
87
HAVING
Exemple :
• Récupérer la liste des clients qui ont commandé plus de 100DH :
88
Exercice
89
La Jointure
La jointure permet de fusionner les enregistrements de plusieurs tables possédant un
domaine commun
Syntaxe :
SELECT attribut1, attribut2,……
FROM table1 [alias], table2 [alias],……
WHERE table1.attribut= table2.attribut;
Exemple :
• Jointure de la table commande et client.
SELECT * FROM client, commande
WHERE commande.numcli = client.numcli ;
90
La Jointure
Exemple :
Jointure de la table commande et client
commande client
numc numcli solde date numcli nom ville
1 1 105 2022/10/11 1 Ali oujda
2 2 15 2022/10/17 2 Hamza Fes
3 3 87 2022/10/11
3 Salma oujda
4 1 160 2022/10/15
5 2 100 2022/10/11
91
La Jointure
Exemple :
• Donner le total de soldes des comptes des clients de la ville de oujda.
oujda 380
92
L’ALIAS
ville soldeVille
oujda 380
93
Fonctions D'agregation
• COUNT (*) : Permet de compter le nombre de lignes résultant d'un résultat. On peut
nommer la colonne correspondante avec AS.
Exemple :
• Compte le nombre d'élève habitant Fes et appelle le résultat Nb_Fes.
94
Fonctions D'agregation
• SUM (colonne) : Permet d'additionner les valeurs d'une colonne numérique pour
les lignes sélectionnées.
Exemple :
• Calcul le cumul (la somme) de tous les opérations de débit du compte 1259
le 09/01/2020.
95
Fonctions D'agregation
• AVG (colonne) : Permet d'afficher la moyenne des valeurs d'une colonne numérique
pour les lignes sélectionnées.
Exemple :
96
Fonctions D'agregation
• MAX (colonne), MIN (colonne) : Permet d'obtenir la valeur maximale (ou minimale)
d'une colonne pour un ensemble de lignes sélectionnées
Exemple :
97
Operateurs Ensemblistes
• UNION : Il est possible de faire l’union des résultats de deux requêtes. Cet opérateur
permet d'effectuer une union des lignes sélectionnées par deux clauses SELECT (les
deux tables sur lesquelles on travaille devant avoir le même schéma).
• Par défaut les doublons sont automatiquement éliminés. Pour conserver les doublons, il
est possible d'utiliser une clause UNION ALL.
Syntaxe :
SELECT * FROM table1
UNION
SELECT * FROM table2
Exemple :
• La liste des villes où habitent des élèvent et des professeurs :
SELECT VilleE FROM ELEVES
UNION
SELECT VilleP FROM PROFS ;
98
Operateurs Ensemblistes
Syntaxe :
SELECT * FROM table1
INTERSECT
SELECT * FROM table2
Exemple :
• La liste des villes où habitent à la fois des élèves et des professeurs :
SELECT DISTINCT VilleE FROM ELEVES
INTERSECT
SELECT DISTINCT VilleP FROM PROFS ;
99
Operateurs Ensemblistes
Syntaxe :
SELECT * FROM table1
MINUS
SELECT * FROM table2
Exemple :
• La liste des villes où habitent seulement des élèves et pas de professeurs :
SELECT DISTINCT VilleE FROM ELEVES
MINUS
SELECT DISTINCT VilleP FROM PROFS
100
La Clause GRANT
Syntaxe :
GRANT Liste_Privilège ON Table/ Vue TO Utilisateur;
Exemple :
• Donner à l’utilisateur user1 la privilège de sélection sur la table client.
GRANT SELECT ON client TO user1;
101
La Clause GRANT
102
La Clause REVOKE
Syntaxe :
REVOKE Liste_Privilège ON Table/Vue FROM Utilisateur;
Exemple:
REVOKE SELECT ON Produit FROM User1;
103
VUE
Une vue est une table virtuelle créer à partir des tables de base par une requête. Une vue
comporte également des lignes et des colonnes telles qu'elles se trouvent dans une vraie table
de la base de données. Nous pouvons créer une vue en sélectionnant des champs dans une
ou plusieurs tables présentes dans la base de données. Une vue peut avoir toutes les lignes
d'une table ou des lignes spécifiques en fonction de certaines conditions.
Syntaxe :
CREATE VIEW view_name
AS SELECT column1, column2.....
FROM table_name WHERE condition;
Aussi avec :
CREATE VIEW nom_vue (colonneA,colonneB,colonneC,colonneD)
AS SELECT colonne1,colonne2,colonneI,colonneII
FROM Nom_table1 Alias1,Nom_tableII AliasII
WHERE Alias1.colonne1 = AliasII.colonneI
AND Alias1.colonne2 = AliasII.colonneII
Pour supprimer une vue en utilise :
DROP VIEW nom_vue ;
104
VUE
Exemple :
CREATE VIEW DetailsView
AS SELECT NAME, ADDRESS
FROM Etudiant
WHERE ID_etudiant < 5;
105
INDEX
L’index est utile pour accélérer l’exécution d’une requête SQL qui lit des données et ainsi
améliorer les performances d’une application utilisant une base de données. Les index peuvent
être créés ou supprimés sans effet sur les données.
Syntaxe :
CREATE INDEX index_nom ON table_nom (colonne1,..);
106