BDCH 03 SQL
BDCH 03 SQL
2022-2023
Sommaire
Introduction
Langage de Définition de
Données (LDD)
Langage d’Interrogation de
Données (LID)
Langage de Modification de
Données (LMD)
Langage de Contrôle de
Données (LCD)
Bibliographie
2
I. Introduction
Objectifs :
Comprendre les concepts de base
des langages de manipulation des
BD relationnelles.
Savoir écrire une requête en
utilisant le langage de
manipulation des BD
relationnelles SQL.
Savoir créer un utilisateur et lui
affecter des droits.
I. Introduction
1.1. Présentation Langages de manipulation des BD
relationnelles :
La manipulation du modèle
relationnel nécessite un langage Langage algébrique
de manipulation exprimant les Langage SQL (Structured Query
besoins d'un utilisateur : Langage)
Mise à jour : insertion et Inventés par E. COOD
suppression de valeurs Langage ensembliste non
Recherche de données selon un procédurale pour la manipulation
critère d’une BD relationnelle.
Opérations de traitement : visant Basé sur l'algèbre relationnelle.
à effectuer des calculs. Inventé par IBM en 1982.
Il a fait l’objet de plusieurs
normes ANSI/ISO depuis 1987.
La norme la plus répandue est
SQL2 définie en 1992.
4
I. Introduction
Intègres plusieurs niveaux de Deux langages de requêtes à
langage : fondements mathématiques sont
Définition des Données (LDD) : à la base de SQL :
ALTER, CREATE, DROP
Calcul relationnel :
Interrogation de Données (LID) :
SELECT Permet aux utilisateurs de décrire
Modification de Données (LMD) : ce qu’ils veulent, plutôt que la
UPDATE, INSERT, DELETE manière dont ce qu’ils veulent doit
Contrôle des Données et des être calculé.
utilisateurs (LCD) : GRANT, Non opérationnel, déclaratif.
REVOKE Algèbre relationnelle :
Plus opérationnelle,
Très utile pour représenter les
plans d’exécution.
I. Introduction
Calcul relationnel Exemple :
Dérivé de la logique
Requêtes de la forme {(x1,x2) | y1 (Client(x1,x2,.,y1) AND y1 = 'Yakro')}
{X | Formule(X, Y)}
X est un vecteur de variables non
quantifiées (x1, x2, …).
Y est un vecteur de variables
quantifiées ((/) y1, y2, …).
Chaque variable représente une
colonne de table.
6
I. Introduction
1.2. BD Exemple Schéma entité/association
Client
BD permettant de gérer les
numCl Commande
commandes des clients d’une nom
0, n
passe 1, 1
numCom
entreprise. ville datecom
tel 1, n
Règle de gestion fax detailCom
Un client peut passer ou non au email
numLigne 0, n Produit
moins une commande (0,n) ; qteCom numProd
Une commande est passée par un designation
et un seul client (1,1). prixUnit
qteStock
Une commande contient plusieurs
lignes de produits (1,n), Schéma relationnel
Un produit peut figurer ou non
dans plusieurs commandes (0,n). Client(numCl, nom, ville, tel, fax, email)
Commande(numCom, dateCom, #numCl)
Produit(numProd, designation, prixUnit, qteStock)
DetailCom(#numCom, #numProd, numLigne, qteCom)
K. M. BROU Chapitre 03 : Langage SQL 7
I. Introduction
Modèle physique de données
Tables Attribut Type Taille
numCl Numérique Entier long
nom Texte 20 caractères
ville Texte 15 caractères
Client
Tel Numérique Entier long
fax Numérique Entier long
email Texte 50 caractères
numProd Numérique Entier long
Produit designation Texte 15 caractères
PrixUnit Numérique Réel simple
qteStock Numérique Entier
numCom Numérique Entier long
Commande dateCom Date/Heure Date abrégée
numCl Numérique Entier long
numCom Numérique Entier long
numProd Numérique Entier long
DetailCom
numLigne Numéro Auto Entier long
qteCom Numérique Entier
K. M. BROU Chapitre 03 : Langage SQL 8
8
I. Introduction
Extension des tables
Client DetailCom
numCl nom ville tel fax email numCom numProd qteCom
1 Toto Yakro 30640506 30640406 toto@[Link]
2 Fatou Abidjan 21232425 21232425 [email protected] 1 1 10
3 Adjoua Yakro 30641515 1 2 4
4 Froto Bouaké 31632526 froto@[Link] 2 2 3
5 Mankou Yakro 30641719 30641719
3 1 2
3 2 6
Commande
Produit 3 3 3
numCom dateCom numCl
numProd designation prixUnit qteStock 4 2 7
1 2017-11-13 1
1 Savon 300 15 5 2 3
2 2017-05-12 1
2 Eau Awa 400 29 5 3 6
3 2018-11-13 1
3 Sardine 450 10 6 2 1
4 2019-05-15 2
4 Assiette 245 27 6 3 5
5 2017-05-18 2
5 Yaourt 250 50
6 2018-11-18 3
I. Introduction
1.3. Les requêtes 2 façons de créer les requêtes :
Une requête permet de Mode graphique : MySQL fournit
une interface de type QBE (Query
rechercher des enregistrements
By Example) permettant de créer
répondant à certains critères et des requêtes de façon visuelle ;
d'en établir la liste.
Mode SQL : saisie directe des
Une requête peut contenir une ou commandes SQL.
plusieurs tables.
Toute modification dans une de
ces tables est automatiquement
répercutée sur la requête.
C'est la raison pour laquelle les
requêtes sont appelées feuille de
réponse dynamique (Dynaset).
10
II. LDD
2.1. Présentation Remarque :
Le Langage de Définition de Nous utiliserons les types de
données du SGBD MySQL.
données (LDD) dans SQL permet
la description des objets
manipulés par le SGBD.
Ces objets peuvent être des
objets logiques (vues et
requêtes) ou physiques (tables).
Commandes du LDD :
CREATE : création d'objets
ALTER : modification de structures
d'objets
DROP : suppression d'objets
11
II. LDD
2.2. Les types de données UNSIGNED :
MySQL supporte un grand Permet d’avoir un type non signé.
nombre de types de colonnes. ZEROFILL :
Trois catégories de types : Remplissage des zéros non
significatifs.
Numériques, temporels et
chaînes.
Convention :
M : taille maximale d'affichage
(taille maximale légale = 255).
D : nombre de chiffres qui suivent
la virgule décimale (nombre
maximal = 30 M-2).
[] : spécifications optionnelles.
12
II. LDD
Type entier
Type Explication
TINYINT[(M)] [UNSIGNED] Très petit entier. Entiers signés : de -128 à 127.
[ZEROFILL] Entiers non-signés est 0 à 255.
BIT, BOOL, BOOLEAN Synonymes de TINYINT(1).
13
II. LDD
Type réel
Type Explication
FLOAT[(M,D)] [UNSIGNED] Valeurs de -3.402823466E+38 à -1.175494351E-38, 0, et
[ZEROFILL] 1.175494351E-38 à 3.402823466E+38. FLOAT et FLOAT(X)
(où X est dans l'intervalle 0 à 24) représente les nombres à
virgule flottante en précision simple.
DOUBLE[(M,D)] [UNSIGNED] Valeurs de -1.7976931348623157E+308 à -
[ZEROFILL] 2.2250738585072014E-308, 0, et 2.2250738585072014E-
308 à 1.7976931348623157E+308.
DOUBLE PRECISION[(M,D)] Synonymes de DOUBLE.
[UNSIGNED] [ZEROFILL] Si le serveur SQL utilise l'option REAL_AS_FLOAT, REAL est
REAL[(M,D)] [UNSIGNED][ZEROFILL] alors un synonyme de FLOAT plutôt que DOUBLE.
DECIMAL[(M[,D])] [UNSIGNED] Nombre à virgule flottante stocké sous forme de chaîne. Si
[ZEROFILL] D=0, pas de partie décimale. Même intervalle de validité
que le type DOUBLE. Si D est omis, la valeur par défaut est
0. Si M est omis, la valeur par défaut est 10.
DEC[(M[,D])] [UNSIGNED] Synonymes pour DECIMAL.
[ZEROFILL] NUMERIC[(M[,D])]
[UNSIGNED] [ZEROFILL]
FIXED[(M[,D])] [UNSIGNED]
[ZEROFILL]
K. M. BROU Chapitre 03 : Langage SQL 14
14
II. LDD
Type date et heure
Type Explication
DATE Date. Intervalle de '1000-01-01' à '9999-12-31'. MySQL affiche les valeurs de type
DATE au format 'YYYY-MM-DD', mais vous permet d'assigner des valeurs DATE en
utilisant plusieurs formats de chaînes et nombres.
DATETIME Combinaison de date et heure. Intervalle de validité '1000-01-01 [Link]' à '9999-
12-31 [Link]'. MySQL affiche les valeurs de type DATE au format 'YYYY-MM-DD
HH:MM:SS', mais vous permet d'assigner des valeurs DATE en utilisant plusieurs
formats de chaînes et nombres.
TIMESTAMP[(M)] Affiche la date et l’heure sans séparateur : YYYYMMDDHHMMSS
Utile pour enregistrer les dates et heures des opérations INSERT et UPDATE, car elle
prend automatiquement date actuellement si vous ne lui assignez pas de valeur par
vous-même. Vous pouvez aussi lui donner la valeur courante en lui donnant la valeur
NULL. L'argument M affecte affichage les M les 1er caractères de TIMESTAMP. ses
valeurs sont toujours stockées sur 4 octets.
Intervalle de validité va de '1970-01-01 [Link]' à l'année 2037.
TIME Une heure. L'intervalle va de '-[Link]' à '[Link]'. MySQL affiche les valeurs
TIME au format 'HH:MM:SS', mais vous permet d'assigner des valeurs TIME en
utilisant des nombres ou des chaînes.
YEAR[(2|4)] Une année, au format 2 ou 4 chiffres (par défaut, c'est 4 chiffres). Les valeurs
possibles vont de 1901 à 2155 plus 0000 pour le format à 4 chiffres, et de 1970 à
2069 si vous utilisez le format à 2 chiffres. MySQL affiche les valeurs YEAR au format
YYYY mais vous permet d'assigner des valeurs en utilisant des nombres ou des
chaînes. Le type YEAR n'est pas disponible avant la version 3.22.
K. M. BROU Chapitre 03 : Langage SQL 15
15
II. LDD
Type Chaîne de caractères
Type Explication
[NATIONAL] CHAR(M) [BINARY | chaîne de caractère de taille fixe, toujours complété à droite par
ASCII | UNICODE] des espaces pour remplir l'espace de stockage. L'intervalle de M
va de 0 à 255
NATIONAL CHAR : utilise le jeu de caractère par défaut. CHAR est
un synonyme de CHAR(1).
[NATIONAL] VARCHAR(M) [BINARY] CHARacter VARying, chaîne de taille dynamique. M représente la
taille maximale de la valeur dans une colonne. L'intervalle de M va
de 0 à 255 caractères
TINYBLOB, TINYTEXT Peut contenir au maximum 255 (28-1) caractères.
BLOB, TEXT peut contenir au maximum 65535 (216-1) caractères.
MEDIUMBLOB, MEDIUMTEXT peut contenir au maximum 16777215 (224-1) caractères.
16
II. LDD
Type de colonne Espace requis
Récapitulatif CHAR(M) M octets, 1 <= M <= 255
Type de colonne Espace requis VARCHAR(M) L+1 octets, avec L<=M et 1<=M<= 255
TINYINT 1 octet TINYBLOB, TINYTEXT L+1 octets, avec L < 2^8
SMALLINT 2 octets BLOB, TEXT L+2 octets, avec L < 2^16
MEDIUMINT 3 octets MEDIUMBLOB, MEDIUMTEXT L+3 octets, avec L < 2^24
INT,INTEGER 4 octets LONGBLOB, LONGTEXT L+4 octets, avec L < 2^32
BIGINT 8 octets 1 ou 2 octets, suivant le nombre
FLOAT(p) 4 Si X<=24 ou 8 Si 25 <=X<= 53 ENUM('valeur1','valeur2',...) d'éléments de l'énumération (65535 au
FLOAT 4 octets maximum)
DOUBLE 1, 2, 3, 4 ou 8 octets, suivant le nombre
8 octets
PRECISION, REAL SET('valeur1','valeur2',...) de membres de l'ensemble (64 au
M+2 octets si D > 0, M+1 octets si
DECIMAL(M,D) maximum)
D = 0 (D+2, si M < D)
Type de colonne Format d'affichage
TIMESTAMP(14) YYYYMMDDHHMMSS
Type de colonne Espace requis
TIMESTAMP(12) YYMMDDHHMMSS
DATE 3 octets
TIMESTAMP(10) YYMMDDHHMM
DATETIME 8 octets
TIMESTAMP(8) YYYYMMDD
TIMESTAMP 4 octets
TIMESTAMP(6) YYMMDD
TIME 3 octets
TIMESTAMP(4) YYMM
YEAR 1 octet
K. M. BROU
TIMESTAMP(2)
Chapitre 03 : Langage SQL
YY 17
17
II. LDD
2.3. Création de tables Exemple :
La création d'une table consiste à CREATE TABLE client(
définir son nom, les colonnes qui numcl int(11) NOT NULL,
la compose et leurs types. nom varchar(20) NOT NULL,
ville varchar(25) NOT NULL,
Syntaxe : tel int(11) NOT NULL,
fax int(11) NOT NULL,
CREATE TABLE nomTable
email varchar(50) NOT NULL,
(attribut1 type1, attribut2 type2, …, attributn typen,
PRIMARY KEY (numcl)
[contrainte1, contrainte2, …]
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
);
18
II. LDD
2.4. Définition des contraintes Contrainte de clé étrangère
d'intégrité (contrainte d'intégrité
référentielle) : FOREIGN KEY
Contrainte de valeur nulle
CONSTRAINT nomContrainte
[NULL | NOT NULL], NULL par défaut FOREIGN KEY (nomAttribut)
REFERENCES nomTable (nomAttribut)
Contrainte de domaine : ON DELETE Action
ON UPDATE Action
CONSTRAINT nomContrainte
CHECK(condition) Avec Action =
Contrainte de clé primaire : NO ACTION : on ne fait rien
PRIMARY Key SET NULL : valeur null à la clé
étrangère
CONSTRAINT nomContrainte
PRIMARY KEY (nomAttribut1, nomAttribut2,…) CASCADE : MAJ en cascade
RESTRICT : par défaut, erreur si
Index la clé primaire est référencée
CREATE [UNIQUE] INDEX nomIndex ON
nomTable(nomAttribut1, nomAttribut2,…)
K. M. BROU Chapitre 03 : Langage SQL 19
19
II. LDD
Exemple :
ALTER TABLE commande
ADD CONSTRAINT commande_ibfk_1 FOREIGN KEY (numCl)
REFERENCES client (numcl)
ON DELETE NO ACTION ON UPDATE CASCADE;
20
II. LDD
Schéma global de la base
CREATE TABLE IF NOT EXISTS detailcom
CREATE TABLE client ( numCom int NOT NULL,
( numcl int(11) NOT NULL, numProd int NOT NULL,
nom varchar(20) NOT NULL, qteCom int(11) DEFAULT NULL,
ville varchar(15) NOT NULL, numLigne int,
tel int NOT NULL, PRIMARY KEY (numCom,numProd),
fax int NOT NULL, KEY numProd (numProd),
email varchar(50) NOT NULL, KEY numLigne (numLigne)
PRIMARY KEY (numcl) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS produit
CREATE TABLE IF NOT EXISTS commande ( numProd int NOT NULL,
( numCom int NOT NULL, designation varchar(15) NOT NULL,
dateCom date DEFAULT NULL, prixUnit float DEFAULT NULL,
numCl int NOT NULL, qteStock int DEFAULT NULL,
PRIMARY KEY (numCom) PRIMARY KEY (numProd)
) ENGINE=InnoDB DEFAULT CHARSET=latin1; ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ALTER TABLE detailcom
MODIFY numLigne int NOT NULL AUTO_INCREMENT;
K. M. BROU Chapitre 03 : Langage SQL 21
21
II. LDD
ALTER TABLE commande
ADD CONSTRAINT commande_ibfk_1 FOREIGN KEY (numCl)
REFERENCES client (numcl)
ON DELETE NO ACTION ON UPDATE CASCADE;
22
II. LDD
2.5. Modification des Modification du type d'une
structures des tables colonne
Les modifications possibles sont :
Les tables générées par Access
accroître la taille
on une structure dynamique.
réduire la taille
Possible d'ajouter de nouvelles
colonnes ou de modifier leur type. modifier le type
supprimer l'interdiction de
Ajout de colonne
présence de valeur nulle (passage
Syntaxe : de NOT NULL à NULL vice versa)
ALTER TABLE nomTable
ADD définition_col1, …;
Exemple : Ajout de la colonne
nationalité dans la table Client.
ALTER TABLE Client
ADD nationalité VARCHAR(3) ;
23
II. LDD
Syntaxe : Suppression de contraintes
ALTER TABLE nomTable Syntaxe :
MODIFY définition_col1, …;
ALTER TABLE nomTable
Exemple : Supposons que la DROP CONSTRAINT nomContrainte ;
codification du nom des clients Exemple : suppression de la
n'est plus possible sur 20 contrainte commande_client_FK
caractères mais sur 22 caractères. de la table Commande
ALTER TABLE Client
MODIFY nom VARCHAR(22); ALTER TABLE Commande
DROP CONSTRAINT commande_client_FK ;
Remarque:
La suppression des colonnes n'est
pas possible directement, une
façon de le faire est d'effectuer
une projection
Création d'une table avec requête
cf. exemple 2.
K. M. BROU Chapitre 03 : Langage SQL 24
24
II. LDD
Suppression de tables Renommage des tables
Il arrive que des tables créées Syntaxe :
pour des traitements
RENAME ancienNomTable TO
intermédiaires devienne inutiles, nouveauNomTable;
elles doivent alors être
Pas dans d’Access
supprimées.
Remarque
Syntaxe :
Il faudra faire des modifications
DROP TABLE nomTable;
appropriées dans la définition des
applications et vues qui sont
Remarque : basées sur cette table.
La suppression d'une table
entraîne la suppression des
synonymes et index
correspondants.
25
II. LDD
Synonyme de table Suppression de synonyme
Il s'agit d'attribuer un ou Syntaxe :
plusieurs noms à une table déjà
DROP SYNONYM nomSynonyme;
créée.
La table peut être désignée par Pas dans d’Access
son (ou ses) synonyme (s).
Syntaxe :
CREATE SYNONYM
nomSynonyme FOR nomTable;
Remarque :
On utilise les synonymes
généralement lorsque les noms
des tables sont longs.
Exemple :
CREATE SYNONYM Com FOR
Commande;
K. M. BROU Chapitre 03 : Langage SQL 26
26
III. LID
3.1. Présentation
Le Langage d’Interrogation de
Données (LID)
Consiste à rechercher des
données contenues dans des
tables.
Syntaxe :
27
III. LID
3.2. Requêtes sélection Exemple 1 : Extension d’une table
(toutes les colonnes)
Consultation simple
Requête 1 : Liste de tous les
Syntaxe : clients.
SELECT ListeDeSélection
FROM ListeDeTable; SELECT *
FROM Client;
ListeDeSélection : permet de
spécifier les colonnes à visualiser.
Les noms de colonnes seront
séparés par une virgule.
ListeDeTable : permet de spécifier
le nom de la table qui contient les
données à sélectionner.
28
III. LID
Exemple 2 : limiter le nombre de Requête 2 : numéro, nom et ville
colonnes des clients.
Dans la pratique, il est rare que SELECT numCl, nom, ville
l'on souhaite avoir toutes les FROM Client;
colonnes d'une table, on se limite
le plus souvent à des colonnes.
Syntaxe :
SELECT attribut1, attribut2, …
FROM nomTable;
29
III. LID
Exemple 3 : Projection Sélection sans doublons
Suppression de certaines colonnes SELECT DISTINCT ville
avec élimination des FROM Client;
enregistrements en double.
On utilise la clause DISTINCT
Syntaxe :
SELECT DISTINCT attribut1, attribut2, …
FROM nomTable;
30
III. LID
Consultation avec restriction Opérateurs de comparaison
En général, les requêtes ne Opérateur Explication
portent pas sur la totalité d'une = Egalité
table, seules quelques lignes sont <> différence
sélectionnées selon une certaine <, <=, >, >= Infériorité et supériorité
condition (restriction). IS NULL Teste si le contenu d'une
Cette condition s'exprime dans la colonne a la valeur null
IN (listeDeValeur) Egalité à un élément d'une
clause WHERE. liste
Syntaxe : BETWEEN x AND y Comparaison par rapport à un
SELECT col1, col2, coln intervalle de valeurs
FROM table EXIST Existence d'une ligne de
WHERE conditions; résultats
NOT, OR, AND : Opérateurs logiques
Syntaxe de la condition : LIKE chaîne Egalité à une sous-chaîne
générique dans la valeur d'un champ
attribut opérateur valeur
31
III. LID
Opérateurs booléens :
MySQL n'a pas vraiment de type Opérateur Description
BOOLEAN. Or Ou inclusif
Xor Ou exclusif
FALSE est un synonyme de 0. And Et
Les chaines vides sont Not Non
considérées FALSE.
Table de vérité
TRUE est un synonyme de 1.
32
III. LID
Remarque Exemple 1 : Restriction simple
On peut avoir également la Requête 4 : Liste des clients de
négation de ces opérateurs : la ville de Yakro.
IS NOT NULL, NOT IN, NOT SELECT numCl, nom, ville
BETWEEN, NOT LIKE FROM Client
Condition : WHERE ville = 'Yakro';
exp opérateurRelationnel exp
exp (NOT] BETWEEN exp AND exp
exp [NOT] IN (listeDeValeurs)
colonne [NOT] LIKE "chaîne"
colonne IS [NOT] NULL
exp : expression qui peut être un
nom de colonne, une constante
numérique ou caractère, une
pseudo colonne, une valeur nulle
ou une combinaison de ces
éléments.
K. M. BROU Chapitre 03 : Langage SQL 33
33
III. LID
Requête 5 : Liste des Le prédicat LIKE
produits dont la quantité Permet de réaliser une
en stock est inférieure 15. comparaison entre la valeur de la
SELECT numProd, designation, qteStock colonne et celle d’une chaîne en
FROM Produit utilisant des caractères
WHERE qteStock <= 15; génériques de substitution.
Syntaxe :
colonne [NOT] LIKE "chaine"
LIKE acceptent deux caractères
génériques :
_ (soulignement) : n'importe quel
caractère.
% : n'importe quelle séquence de
caractères.
34
III. LID
Exemple 1 : Clients (numCl, nom Exemple 2 : Clients (numCl, nom
et ville) dont le nom se termine et ville) dont le nom contient
par "to". "to".
SELECT numCl, nom, ville SELECT numCl, nom, ville
FROM Client FROM Client
WHERE nom LIKE '%to' WHERE nom LIKE '%to%';
35
III. LID
Exemple 3 : Clients (numCl, nom Exemple 4 : Clients (numCl, nom
et ville) dont le 2ème caractère du et ville) dont le 3ème caractère du
nom est r. nom est "t".
SELECT numCl, nom, ville SELECT numCl, nom, ville
FROM Client FROM Client
WHERE nom LIKE '_r%'; WHERE nom LIKE '__t%';
36
III. LID
Table Client
3.3. Requêtes jointures
37
III. LID
Client x Commande
30 lignes = 5 clients x 6
commandes
38
III. LID
Syntaxe : condition : liste de comparaisons
simples conduisant à un produit
SELECT listeDeSélection cartésien ou à une liste de
FROM listeDeTables comparaison entre les colonnes de
WHERE condition;
différentes tables produisant une
listeDeSélection : composée des jointure.
colonnes que l'on veut voir
apparaître dans la jointure.
Les noms des colonnes peuvent
être précédées des noms des
tables ou d’alias lorsqu'il y a
ambiguïté.
listeDeTables : composée des
noms de tables à partir desquelles
les données sont extraites.
Noms de tables sont séparées par
une virgule.
K. M. BROU Chapitre 03 : Langage SQL 39
39
III. LID
Exemple 1 : deux tables Idem lorsque les attributs de
Requête 5 : Liste des clients jointure ont le même nom
(numCl, nom, ville) avec leur SELECT [Link], nom, numCom
commande (numCom). FROM Client cl
Requête impliquant deux tables : INNER JOIN Commande co
Client et Commande USING(numCl) ;
Résultat
SELECT [Link], nom, ville, numCom
FROM Client cl, Commande cd
WHERE [Link] = [Link];
Idem
40
III. LID
Exemple 2 : plusieurs tables Idem
SELECT [Link], nom, [Link], dateCom, SELECT [Link], nom, [Link], dateCom,
[Link], designation, prixUnit, qteCom [Link], designation, prixUnit, qteCom
FROM Client cl, Commande co, DetailCom de, Produit pr FROM Client cl
WHERE [Link] = [Link] AND INNER JOIN Commande co USING(numCl)
[Link] = [Link] AND INNER JOIN DetailCom de USING(numCom)
[Link] = [Link] ; INNER JOIN Produit pr USING(numProd)
idem
SELECT [Link], nom, [Link], dateCom, [Link],
designation, prixUnit, qteCom
FROM Client cl
INNER JOIN Commande co ON [Link] = [Link]
INNER JOIN DetailCom de ON [Link] = [Link]
INNER JOIN Produit pr ON [Link] = [Link] ;
41
III. LID
Jointure externe Jointure externe à droite :
Dans les différents types de
jointures présentées ci-dessus, RIGHT JOIN ou RIGHT OUTER JOIN
toute ligne de la première table Toutes les lignes de la table de
qui n'a pas de ligne dans la droite seront dans le résultat
seconde vérifiant la condition ne
fait pas partie du résultat. Jointure externe à gauche :
Pour les faire apparaître, on utilise LEFT JOIN ou LEFT OUTER JOIN
la jointure externe.
Une jointure externe est une Toutes les lignes de la table de
jointure qui favorise une table par gauche seront dans le résultat
rapport à une autre.
Les lignes de la table dominante
seront affichées même si la
condition n'est pas réalisée.
K. M. BROU 42
Chapitre 03 : Langage SQL
42
III. LID
Exemple 1 : Jointure externe à Toutes les lignes de la table
droite Commande sont affichées
SELECT [Link], nom, numCom, dateCom
FROM Client cl
RIGHT JOIN Commande co ON [Link] = [Link]
AND [Link] = 1;
K. M. BROU 43
Chapitre 03 : Langage SQL
43
III. LID
Exemple 2 : Jointure externe à Toutes les lignes de la table Client
gauche sont affichées
SELECT [Link], nom, numCom, dateCom
FROM Client cl
LEFT JOIN Commande co ON [Link] = [Link] ;
K. M. BROU 44
Chapitre 03 : Langage SQL
44
III. LID
Jointures naturelles Exemple : ces 3 requêtes ci-
On peut utiliser les jointures dessous sont identiques
naturelles lorsque les colonnes
SELECT [Link], nom, numCom, dateCom
servant à la jointure ont le même FROM Client cl
nom dans les deux tables. NATURAL JOIN Commande ;
On ne donne pas la (les)
colonne(s) sur laquelle SELECT [Link], nom, numCom, dateCom
(lesquelles) joindre les tables : FROM Client cl
INNER JOIN Commande co ON
c'est déterminé automatiquement.
[Link] = [Link];
Syntaxe :
K. M. BROU 45
Chapitre 03 : Langage SQL
45
III. LID
Utiliser les variables utilisateur
Permettent de garder des
résultats en mémoire sans avoir à
les enregistrer dans des variables
temporaires du client.
Exemple : trouver les articles les
plus cher et les moins cher
Mémorisation
SELECT @prixMin:=MIN(prixUnit),
@prixMax:=MAX(prixUnit)
FROM Produit;
K. M. BROU 46
Chapitre 03 : Langage SQL
46
III. LID
Utilisation
SELECT *
FROM Produit
WHERE prixUnit=@prixMin OR
prixUnit=@prixMax;
K. M. BROU 47
Chapitre 03 : Langage SQL
47
III. LID
3.4. Tri des résultats ou
48
III. LID
Exemple 2 : Donner la liste des
noms de clients par ordre
alphabétique décroissant.
SELECT numCl, nom
FROM Client
ORDER BY nom DESC ;
49
III. LID
3.5. Classification des Syntaxe :
résultats SELECT [ALL|DISTINCT] attribut(s)
FROM nomTable(s)
Permet de : [WHERE condition]
Regrouper des lignes résultats [GROUP BY attributs]
dans des classes ayant chacune la [HAVING condtion]];
même valeur pour une colonne
Remarque
donnée ;
On doit retrouver dans la clause
Effectuer un calcul tel que la
GROUP BY tous les attributs qui
moyenne ou la somme des valeurs
figurent dans la clause SELECT
du groupe et ensuite de rendre le
sauf les attributs calculés.
résultat sous la forme d'une ligne
par groupe.
50
III. LID
Exemple 1 : Liste des clients par Exemple 2 : Liste des clients par
ville ville ordonnée par ordre
SELECT numCl, nom, ville
alphabétique décroissant.
FROM Client SELECT numCl, nom, ville
GROUP BY ville, numCl, nom; FROM Client
GROUP BY ville, numCl, nom
ORDER BY ville DESC;
51
III. LID
Elimination dans la clause GROUP
BY de certains groupes
On utilise la clause HAVING
Exemple : Liste des clients par
ville sauf ceux de la ville Yakro.
SELECT numCl, nom, ville
FROM Client
GROUP BY ville, numCl, nom
HAVING ville <> 'Yakro';
52
III. LID
3.6. Requêtes de mise à jour
Permette de mettre à jours des
données ou de créer de nouvelles
colonnes résultant d'opération de
calculs sur les autres colonnes.
Syntaxe :
UPDATE table
SET colonne = exp, ...
[ WHERE condition ]
53
III. LID
Requête 1 : On veut ajouter +8 à Mise à jour
la quantité en stock 170 du UPDATE Produit
produit sardine. SET qteStock = qteStock + 8
WHERE designation = 'Sardine';
Vérification avant MAJ
SELECT designation, qteStock Vérification après MAJ
FROM Produit SELECT designation, qteStock
WHERE designation = 'Sardine'; FROM Produit
WHERE designation = 'Sardine';
54
III. LID
Requête 2 : Remplacer la ville Abj Mise à jour
par Abidjan. UPDATE Client
Vérification avant MAJ SET ville='Abidjan'
WHERE ville='Abj';
SELECT numCl, nom, ville
FROM Client Vérification après MAJ
WHERE ville=‘Abj’; SELECT designation, qteStock
FROM Produit
WHERE designation = 'Sardine';
55
III. LID
Requête 3 : Calculs des montants
hors taxe.
SELECT [Link], nom, [Link], dateCom,
[Link], designation, prixUnit, qteCom,
prixUnit*qteCom AS montant
FROM Client cl, Commande co, DetailCom de, Produit pr
WHERE [Link] = [Link] AND
[Link] = [Link] AND
[Link] = [Link] ;
ou
SELECT [Link], nom, [Link], dateCom,
[Link], designation, prixUnit, qteCom,
prixUnit*qteCom AS montant
FROM Client cl
INNER JOIN Commande co ON [Link] = [Link]
INNER JOIN DetailCom de ON [Link] = [Link]
INNER JOIN Produit pr ON [Link] = [Link]
K. M. BROU Chapitre 03 : Langage SQL 56
56
III. LID
Exécution
57
III. LID
3.7. Expressions Fonction Description Exemple Résultat
abs(x) Valeur absolue de x x=abs(-12) x = 12
arithmétiques ent(x) Partie entière de x x=ent(12.3) x = 12
Les clauses SELECT et cos(x) Cosinus d'un angle x=cos(0) x=1
WHERE peuvent comporter sin(x) Sinus d'un angle x=sin(0) x=0
des expressions arithmétiques. tan(x) Tangente d'un angle x=tan(0) x=0
sqrt(x) Racine carrée de x x=sqrt(4) x=2
Fonctions arithmétiques : Nombre aléatoire
0=<x<
rand() compris entre 0 x =rand()
1
(inclus) et 1 (exclu)
exp(x) Exponentiel x =exp(4) x=7,39
power(x,
xn x=power(2,3) x=8
n)
Valeur arrondie de x,
round(x[, si n permet d’avoir le x=roun(5.459) x=5
n]) nombre de chiffe x=roun(5.459,2) X=5.47
après la virgule
58
III. LID
Fonctions de chaîne de caractères
Fonction Description Exemple Résultat
lower(x) Conversion en minuscule x = lower('Toto') x='toto'
upper(x) Conversion en majuscule x = upper('Toto') x='TOTO'
concat(x,y) concaténation x = concat('To', 'to') x='toto'
length(x) Longueur d’une chaîne x = length('Toto') x=4
replace() Remplacement dans une chaîne select replace('Toto', 'to', 'ba') x=‘toba'
cast(x, as t) Conversion de x dans le type t select cast(123 AS CHAR) x='123'
Extrait une sous-chaîne à partir x = substr('le cours’,4) x='cours'
substr(x, d[, lg])
de d de longueur lg x = substr('le cours’,4,2) x='co'
Extrait une sous-chaîne de
left(x, lg) longueur lg à partir de la x = left('le cours’,2) x='le'
gauche
Extraire une sous-chaîne de
right(x, lg) x = right('le cours’,5) x='cours'
longueur lg à partir de la droite
reverse() x= power(2,3) x=8
Supprime les espacee à gauche x='mot'
trim() x = trim(' mot ')
et à droite X = 5.47
ltrim() Supprime les espaces à gauche x = ltrim(' mot ') x='mot '
rtrim() Supprime les espaces à droite x = rtrim(' mot ') x=' mot'
K. M. BROU Chapitre 03 : Langage SQL 59
59
III. LID
Fonctions système Fonctions de manipulation des
Fonction Description dates
current_user() Utilisateur courant Fonction Description
Session_user() Utilisateur autorisé Current_date() Date courante
System_user() Utilisateur système Current_time() Heure courante
database Nom de la BD courante Current_timestamp Date et heure courantes :
user() Utilisateur courant () AAAA-MM-JJ HH:MM:SS
version() Version du SGBDR curdate() Date du jour : AAAA-MM-JJ
curtime() Heure courante : HH:MM:SS
now() Heure et date courantes :
AAAA-MM-JJ HH:MM:SS
sysdate() Date et/ou heure courantes :
AAAA-MM-JJ HH:MM:SS
year() Année d’une date, x =
year('2019-10-31’), x = 2019
month() Mois d’une date
day() Jour d’une date
Déterminer le nombre de
datediff() jours entre 2 dates
x = datediff('2019-10-
31','2019-10-1’), x = 30
60
III. LID
Exemple 1 : MAJ
Mettre les noms des clients en UPDATE Client
majuscule SET nom = upper(nom);
Avant MAJ
Après MAS
SELECT nom
FROM Client; SELECT nom
FROM Client;
61
III. LID
Exemple 2 : MAJ
Remplacer la date de la
UPDATE Commande
commande numéro 1 par la date
SET dateCom = curdate()
du jour. WHERE numCom = 1;
Avant MAJ
62
III. LID
Fonctions agrégats Exemples de fonctions :
Fonctions arithmétiques : Fonction Explication
s'appliquent à une seule valeur AVG Moyenne arithmétique
d'une colonne (fonction à une COUNT Nombre d'occurrence
seule variable). MAX Valeur maximale
MIN Valeur minimale
Fonctions agrégats : s'appliquent
SUM Somme
à un ensemble de valeurs d'une
colonne. Remarques :
Elles permettent d'obtenir des La colonne ou l'expression à
informations relatives à un laquelle est appliquée une fonction
ensemble de données. agrégat peut avoir des valeurs qui
se répètent.
Pour indiquer qu'il faut considérer
les valeurs distinctes ou toutes les
valeurs, il faut précéder la colonne
de DISTINCT ou ALL.
63
III. LID
Exemple 1 : Trouver la moyenne Exemple 2 : Trouver le nombre
des prix unitaires des produits. total de commande
SELECT COUNT(*) AS nbCommande
SELECT AVG(prixUnit) AS prixUMoy FROM Commande;
FROM Produit; Ou
SELECT COUNT(numCom) AS nbCommande
FROM Commande;
64
III. LID
Exemple 3 : Trouver le nombre de Exemple 4 : Nombre de clients
client dont le numéro de ayant passé une commande (on
téléphone commence par 30. compte une seule fois le client)
65
III. LID
Exemple 5 : Total des commandes Remarque :
de toto. Les fonctions agrégats ne peuvent
SELECT [Link], nom, [Link], dateCom, [Link], s'appliquer à la clause WHERE
designation, prixUnit, qteCom, sum(prixUnit*qteCom) comme les fonctions
AS montant arithmétiques.
FROM Client cl, Commande co, DetailCom de, Produit pr
WHERE [Link] = [Link] AND
[Link] = [Link] AND
[Link] = [Link] AND
nom = 'Toto';
66
III. LID
Fonctions agrégats et Group by Exemple 2 : nombre de commande
Faire des calculs sur les par client.
regroupements créés par la clause
Group by. SELECT [Link], nom, count([Link])
AS NbCommande
Exemple 1 : nombre de client par
FROM Client cl, Commande co
ville. WHERE [Link] = [Link]
GROUP BY [Link], nom;
SELECT ville, count(numCl) AS NbClient
FROM Client
GROUP BY ville;
67
III. LID
3.8. Sous-requêtes Rechercher les valeurs contenues
dans la requête principale, qui
Constituée d'une instruction SQL sont égales, supérieures ou
SELECT contenue dans une autre inférieures aux valeurs renvoyées
requête de sélection ou dans une par la sous-requête (en utilisant
requête action. les mots réservés ANY, IN ou
Formulation identique à celle de la ALL).
requête sauf qu'elle doit être mise Créer des sous-requêtes dans les
entre parenthèse. sous-requêtes (sous-requêtes
Utiliser les sous-requêtes pour : imbriquées).
Tester l'existence de certains
résultats à partir de la sous-
requête (en utilisant les mots
réservés EXISTS ou NOT EXISTS).
68
III. LID
Résultat de la sous-requête formé Exemple : Liste des produits dont
d'une seule valeur. le prix unitaire est supérieur à la
moyenne de tous les prix
Cas des sous-requêtes utilisant
unitaires.
une fonction agrégat dans la
clause SELECT. SELECT numProd, designation
FROM Produit
WHERE prixUnit >=
(SELECT AVG(prixUnit)
FROM Produit
);
69
III. LID
Résultat de la sous-requête formé Syntaxe :
de plusieurs valeurs SELECT attribut1, …
Résultat de la comparaison dans FROM nomTable
la clause WHERE considéré comme WHERE attributi = ANY | ALL
(sous-requête);
vrai :
Soit si la condition est vérifiée
avec au moins une des valeurs
résultant de la sous-requête
(sous-requête précédée de ANY
ou IN);
Soit si la condition est vérifiée
pour toutes les valeurs (sous-
requête précédée de ALL).
70
III. LID
Exemple 1 : Nom des clients qui Exemple 2 : Numéro et nom des
ont commandé en 2005 clients qui ont commandé au
SELECT nom moins un produit en quantité
FROM Client supérieure à chacune des
WHERE numCl IN quantités commandées par le
(SELECT numCl client numéro 2.
FROM Commande
WHERE year(dateCom)=2005
Requête principale : numéro et
); quantités commandés des clients
SELECT DISTINCT [Link], qteCom
FROM Client cl, Commande co,
DetailCom de
WHERE [Link]= [Link] AND
[Link] = [Link];
71
III. LID
Sous-requête : Quantité Requête globale
commandée par le client numéro
2 SELECT DISTINCT [Link], nom
SELECT qteCom FROM Client cl, Commande co, DetailCom de
FROM Commande co, DetailCom de WHERE [Link]= [Link] AND
WHERE [Link] = [Link] AND [Link] = [Link] AND
[Link] = 2; qteCom > ALL
(SELECT qteCom
FROM Commande co, DetailCom de
WHERE [Link] = [Link] AND [Link] = 2
);
72
III. LID
Exemple 3 : Numéro et nom des
clients qui ont commandé au
moins un produit en quantité à au
moins une des quantités
commandées par le client numéro
2.
73
III. LID
Exemple 4 : Clients qui ont passé Exemple 5 : Clients qui n’ont
au moins une commande. passé aucune commande.
74
III. LID
3.9. Opérateurs ensemblistes Remarque
L'opérateur UNION supprime
Union
toutes les données redondantes
Fusion de données provenant de par défaut sauf si l'option ALL est
plusieurs requêtes SELECT explicitée.
formulées sur une ou plusieurs
Une requête SELECT avec
tables à condition que leurs
l'opérateur UNION ne peut
résultats soient compatibles.
contenir qu'une seule clause
Même nombre de colonne et ORDER BY (à la fin).
mêmes types de données pour les
colonnes de même position.
Syntaxe :
requête_SELECT1
UNION [ALL]
requête_SELECT2
[UNION [ALL]
requête_SELECT3... ]
K. M. BROU Chapitre 03 : Langage SQL 75
75
III. LID
Exemple : Numéro et désignation
des produits qui ont soit un prix
unitaire inférieur à 100 F, soit ont
été commandés par le client n° 2.
76
III. LID
Intersection Alternative pour MySQL
Permet d'obtenir comme résultat les
lignes appartenant à la fois à deux SELECT DISTINCT
requêtes. value FROM table1
Même nombre de colonnes dans les WHERE value IN (
deux listes de sélection et une SELECT value
comptabilité entre leur type de FROM table2
données. );
Pas dans MySQL
Syntaxe :
requête_SELECT1
INTERSECT
requête_SELECT2
77
III. LID
Exemple : Numéro des produits
qui ont un prix supérieur à 250 F,
et ont été commandés par le client
n° 2.
SELECT numProd, designation
FROM Produit
WHERE prixUnit < 250
INTERSECT
(SELECT [Link], designation
FROM Commande co, DetailCom de, Produit pr
WHERE [Link] = [Link]
AND [Link] = [Link] AND numCl = 2
);
78
III. LID
Alternative pour MySQL Sous-requête principale :
Requête principale : Numéro Numéro des produits commandé
des produits qui ont un prix par le client numéro 2.
supérieur à 250 F.
SELECT DISTINCT [Link]
SELECT numProd, designation FROM Commande co, DetailCom de, Produit pr
FROM Produit WHERE [Link] = [Link]
WHERE prixUnit > 250; AND [Link] = [Link]
AND numCl = 2;
79
III. LID
Requête globale.
SELECT numProd, designation
FROM Produit
WHERE prixUnit > 250 AND numProd IN
(SELECT [Link]
FROM Commande co, DetailCom de, Produit pr
WHERE [Link] = [Link]
AND [Link] = [Link] AND numCl = 2
);
80
III. LID
Différence Exemple : client dont le nom
Cet opérateur permet d'avoir les contient 'o' sauf ceux de Yakro.
lignes qui apparaissent dans le
résultat de la première requête et SELECT numcl, nom, ville
non dans le résultat de la FROM Client
deuxième. WHERE nom LIKE '%o%'
Syntaxe : EXCEPT
(SELECT numCl, nom, ville
FROM Client
requête_SELECT1
WHERE ville LIKE '%Yakro%'
EXCEPT
);
requête_SELECT2
81
III. LID
Alternative à MySQL Requête principale : client dont le
Utilisation de NOT IN nom contient 'o'.
Syntaxe : SELECT numcl, nom, ville
FROM Client
WHERE nom LIKE '%o%';
requête_SELECT1
NOT IN
requête_SELECT2
82
III. LID
Sous-requête principale : client Requête globale.
de Yakro.
SELECT numcl, nom, ville
FROM Client
SELECT numcl
WHERE nom LIKE '%o%' AND numCl NOT IN
FROM Client
(SELECT numcl
WHERE ville = 'Yakro';
FROM Client
WHERE ville = 'Yakro’
);
83
III. LID
3.10. Les vues Partitionnement vertical et/ou
horizontal pour cacher des
Définition
champs aux utilisateurs, ce qui
Une sorte de table virtuelle dont permet de personnaliser
le contenu correspond au résultat l'affichage des informations
d'une requête SELECT. suivant le type d'utilisateur.
Elle se comporte comme une table Masquer la complexité du schéma.
en ce qui concerne l'accès à ses
Indépendance logique des
données, c'est à dire qu'on peut
données, utile pour donner aux
exécuter des ordres SELECT,
utilisateurs l’accès à un ensemble
UPDATE ou DELETE dessus.
de relations représentées sous la
Utilité forme d'une table.
Contrôler l'intégrité en Les données de la vue sont alors
restreignant l'accès aux données des champs de différentes tables
(confidentialité). regroupées, ou des résultats
d’opérations sur ces champs.
K. M. BROU 84
Chapitre 03 : Langage SQL
84
III. LID
Modifier automatiquement des Syntaxe :
données sélectionnées (sum(),
avg(), max(),...). CREATE [OR REPLACE]
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
Manipuler des valeurs calculées à [DEFINER = { user | CURRENT_USER }]
partir d'autres valeurs du schéma. [SQL SECURITY { DEFINER | INVOKER }]
VIEW nomVue [(colonne(s))]
Conserver la structure d'une table AS requêteSelect
si elle doit être modifiée. [WITH [CASCADED | LOCAL] CHECK OPTION]
Le schéma peut ainsi être modifié
sans qu'il ne soit nécessaire de
changer les requêtes du côté
applicatif.
Éviter de réécrire les jointures
(optimisation).
K. M. BROU 85
Chapitre 03 : Langage SQL
85
III. LID
Explication Clause Explication
Clause Explication OR REPLACE si une vue du même nom existe, elle est
supprimée et remplacée par la nouvelle.
OR REPLACE si une vue du même nom existe, elle
est supprimée et remplacée par la DEFINER permet d'assigner un créateur à la vue (user)
nouvelle. Par défaut, le créateur de la vue est
current_user
ALGORITHM Permet de libérer plus rapidement les
verrous sur les tables sous-jacentes. SQL SECURITY permet de définir les droits de l'utilisateur lors
de l'exécution de la vue.
UNDEFINED valeur par défaut. MySQL décide lui-
même quel algorithme choisir entre DEFINER permet d'exécuter la vue avec les droits du
MERGE et TEMPTABLE. créateur (valeur par défaut).
MERGE faire une requête sur la vue revient à INVOKER permet d'exécuter la vue avec ses propres
faire la même requête sur la ou les droits.
tables sous-jacentes (vue modifiable). WITH [CASCADED | permet de vérifier les contraintes de la clause
TEMPTABLE utilise une table temporaire créée LOCAL] CHECK WHERE d'une vue modifiable lorsque l'on y
pour stocker les résultats (vue non OPTION modifie ses données.
modifiable). CASCADED permet de vérifier la contrainte pour la vue
DEFINER permet d'assigner un créateur à la ainsi que pour les vues sous-jacentes dont elle
vue (user) dérive (valeur par défaut).
Par défaut, le créateur de la vue est LOCAL permet de vérifier seulement la contrainte de la
K. M. BROU current_user vue. 86
Chapitre 03 : Langage SQL
86
III. LID
Exemple 1 : Détail des Interrogation de la vue
commandes du client numéro 1.
SELECT numCl, nom, numCom, numProd
CREATE VIEW DetailComCl1 AS FROM DetailComCl1
SELECT [Link], nom, [Link], dateCom, WHERE numCom=1;
[Link], designation, prixUnit, qteCom
FROM Client cl
INNER JOIN Commande co ON [Link] = [Link]
INNER JOIN DetailCom de ON [Link] = [Link]
INNER JOIN Produit pr ON [Link] = [Link]
WHERE [Link] = 1;
K. M. BROU 87
Chapitre 03 : Langage SQL
87
III. LID
Exemple 2 : utilisation de
ALGORITME
CREATE OR REPLACE ALGORITHM = MERGE
VIEW DetailComCl1 AS
SELECT [Link], nom, [Link], dateCom,
[Link], designation, prixUnit, qteCom
FROM Client cl
INNER JOIN Commande co ON [Link] = [Link]
INNER JOIN DetailCom de ON [Link] = [Link]
INNER JOIN Produit pr ON [Link] = [Link]
WHERE [Link] = 1;
K. M. BROU 88
Chapitre 03 : Langage SQL
88
IV. LMD
4.1. Présentation
Le Langage de Modification de
données (LMD) peut se faire en
mode interactif ou insérée dans
un langage de programmation
(embedded SQL).
Opérations possibles sont :
Insertion : INSERT
Modification : UPDATE
Suppression : DELETE
K. M. BROU 89
Chapitre 03 : Langage SQL
89
IV. LMD
4.2. Insertion de données Exemple 2 : Ajout de plusieurs lignes
à la fois
Consiste à des lignes à une table.
Syntaxe : INSERT INTO client(numCl, nom, ville, tel, fax, email) VALUES
(7, 'kogran', 'Yakro', 30640707, 30640707, 'kogran@[Link]’);
INSERT INTO nomTable [(colonne,…)]
VALUES (valeur,…); INSERT INTO client(numCl, nom, ville, tel, fax, email) VALUES
(8, 'Bassa', 'Abidjan', 22121212, 22121212, NULL);
Exemple 1 : Ajout d’une seule
ligne Idem dans MySQL
INSERT INTO client(numCl, nom, ville, tel, fax, email) INSERT INTO client(numCl, nom, ville, tel, fax, email) VALUES
VALUES (6, 'Mankou', 'Yakro', 30641212, 30640707, (7, 'kogran', 'Yakro', 30640707, 30640707, 'kogran@[Link]'),
'mk@[Link]'); (8, 'Bassa', 'Abidjan', 22121212, 22121212, NULL);
K. M. BROU 90
Chapitre 03 : Langage SQL
90
IV. LMD
4.3. Modification de données
Elle consiste à mettre à jour les
colonnes d'une table par de
nouvelles valeurs.
Syntaxe :
K. M. BROU 91
Chapitre 03 : Langage SQL
91
IV. LMD
Exemple : Augmenter le prix de
boulons de 10%
UPDATE Produit
SET prixUnit = prixUnit * 1.1
WHERE designation = 'Eau Awa';
K. M. BROU 92
Chapitre 03 : Langage SQL
92
IV. LMD
4.4. Suppression de données Exemple 1 : Supprimer Eau Awa
Consiste à supprimer une ou
plusieurs lignes d'une table. DELETE FROM Produit
WHERE designation = 'Eau Awa';
Syntaxe :
DELETE FROM [ schéma. ] { table | vue }
[ @dblink ] [ alias ]
[WHERE condition ]
K. M. BROU 93
Chapitre 03 : Langage SQL
93
IV. LMD
Exemple 2 : Supprimer tous les Remarque :
produits La table DetailCom ne contient
plus de ligne à cause de la
DELETE FROM Produit; contrainte ON DELETE CASCADE.
K. M. BROU 94
Chapitre 03 : Langage SQL
94
V. LCD
5.1. Gestion des utilisateurs A la création d’un utilisateur, il
Tout accès à la BD repose sur la n'a aucun privilège ou droit.
notion d’utilisateur auquel sont Avoir un privilège, c'est avoir
associé des droits et des l'autorisation d'effectuer une
action sur un objet.
restrictions.
Seul le DBA (root) peut créer des Processus :
utilisateurs. 1. Se connecter au serveur en tant
que root
Un utilisateur possède :
2. Se connecter à la BD mysql
un nom d’utilisateur (login) ;
3. Insérer un enregistrement à la
un mot de passe (password) ; table user
un ensemble de privilèges (ou 4. Attribuer des privilèges à
droits). l’utilisateur
K. M. BROU 95
Chapitre 03 : Langage SQL
95
V. LCD
Connexion au serveur MySQL
C:\> mysql -h localhost -u root -p
Connexion à la BD mysql
mysql> use mysql;
K. M. BROU 96
Chapitre 03 : Langage SQL
96
V. LCD
Insérer un enregistrement à la Exemple 1 : utilisateur froto de
table user mot de passe froto
Syntaxe :
CREATE USER 'froto'@'localhost'
mysql>CREATE USER 'login'@'hote’ IDENTIFIED BY 'froto';
[IDENTIFIED BY ‘motDePasse'];
K. M. BROU 97
Chapitre 03 : Langage SQL
97
V. LCD
Exemple 2 : utilisateur brou de
mot de passe brou
mysql>CREATE USER 'brou'@'localhost'
IDENTIFIED BY 'brou';
K. M. BROU 98
Chapitre 03 : Langage SQL
98
V. LCD
Afficher l’utilisateur courant Ou
mysql>SELECT user();
mysql>SELECT current_user;
K. M. BROU 99
Chapitre 03 : Langage SQL
99
V. LCD
Se connecter avec le compte de
froto
Quitter la session précédente
mysql> exit
K. M. BROU 100
Chapitre 03 : Langage SQL
100
V. LCD
Se connecter à la BD BDGSF
use bdgsf
K. M. BROU 101
Chapitre 03 : Langage SQL
101
V. LCD
5.2. Gestion des privilèges Privilège Explication
systèmes ALL Tous les privilèges
USAGE Aucun privilège
Une sélection des plus utilisés CREATE TABLE Création de tables
CREATE TEMPORARY TABLE Création de tables temporaires
CREATE VIEW Création de vues
CREATE DATABASE Permet de créer une BD.
ALTER Modification de tables
CREATE ROUTINE Création de procédures stockées
ALTER ROUTINE Modification et suppression de
procédures stockées
EXECUTE Exécution de procédures stockées
INDEX Création et suppression d'index
TRIGGER Création et suppression de
triggers
LOCK TABLES Verrouillage de tables
CREATE USER Gestion d'utilisateur
GRANT OPTION L’utilisateur peut accorder des
privilèges
K. M. BROU 102
Chapitre 03 : Langage SQL
102
V. LCD
Privilège Explication
Les différents niveaux Privilège global : s'applique à toutes
*.*
d'application des privilèges les BD, à tous les objets (stocké
Il faut également préciser à quoi dans la table [Link]).
* Si aucune BD n'a été sélectionnée,
s'applique ce privilège. c'est l'équivalent de *.* (stocké
dans [Link]). Sinon, le privilège
s'appliquera à tous les objets de la BD
courante (stocké dans la
table [Link]).
nomBD.* Privilège de BD : s'applique à tous les
objets de la base nomBD (stocké
dans [Link]).
[Link] Privilège de table (stocké
dans mysql.tables_priv).
nomTable Privilège de table : s'applique à la
table nomTable de la BD courante
(stocké dans mysql.tables_priv).
[Link] S'applique à la procédure
stockée [Link](stocké
dans mysql.procs_priv)
K. M. BROU 103
Chapitre 03 : Langage SQL
103
V. LCD
5.3. Gestion des privilèges Syntaxe :
objets
GRANT privilege [(listeColonnes)] [, privilege
Les privilèges objets [(listeColonnes)], ...]
Une sélection des plus utilisés. ON [typeObjet] niveauPrivilege
TO utilisateur [IDENTIFIED BY motDePasse];
Privilège Explication
SELECT Permet d’interroger une table.
INSERT Permet d’insérer une nouvelle Se déconnoter
ligne dans une table. Se connecter avec le compte de
DELETE Permet de supprimer des lignes root
d’une table.
UPDATE Permet de mettre à jour les lignes
d’une table.
ALTER Permet de modifier la structure
d’une table.
K. M. BROU 104
Chapitre 03 : Langage SQL
104
V. LCD
Exemple 1 : accorder tous les Exemple 2 : accorder tous les
privilèges à l’utilisateur brou privilèges à brou sur la BD BDGSF
K. M. BROU
105
Chapitre 03 : Langage SQL
105
V. LCD
Activation des droits
Pour que les nouveaux droits
attribués soient pris en compte, il
est nécessaire de lancer la
requête FLUSH.
FLUSH PRIVILEGES;
COMMIT;
K. M. BROU
106
Chapitre 03 : Langage SQL
106
V. LCD
Exemple 3 : accorder les Se connecter en tant que froto et
privilèges SELECT, UPDATE sur la faire un select sur la table client.
BD BDGSF à froto. C:\> mysql -hlocalhost -ufroto -p
mysql> GRANT SELECT, UPDATE ON bdgsf.* TO
'froto'@'localhost'; Se connecter à la BD bdgsf
K. M. BROU
107
Chapitre 03 : Langage SQL
107
V. LCD
Exécuter la requête
K. M. BROU
108
Chapitre 03 : Langage SQL
108
V. LCD
Se connecter en tant que froto et
faire un insert sur la table client.
K. M. BROU
109
Chapitre 03 : Langage SQL
109
V. LCD
Exemple 4 : accorder les ou
privilèges SELECT, UPDATE,
INSERT, DELETE et GRANT GRANT SELECT, UPDATE, INSERT, DELETE ON bdgsf.*
OPTION sur la BD BDGSF à froto. TO 'froto'@'localhost' WITH GRANT OPTION;
Quitter la session de froto
Se connecter en tant que root
K. M. BROU
110
Chapitre 03 : Langage SQL
110
V. LCD
Visualiser les privilèges d’un
utilisateur
K. M. BROU
111
Chapitre 03 : Langage SQL
111
V. LCD
Révocation de privilèges Exemple : retirer tous les
Syntaxe : privilèges à froto
REVOKE privilege [(listeColonnes)] [, privilege
[(listeColonnes)], ...] REVOKE ALL ON bdgsf.* FROM froto@localhost;
ON [typeObjet] niveauPrivilege
FROM utilisateur [IDENTIFIED BY motDePasse];
Exemple : retirer les privilèges
SELECT et UPDATE à froto
112
V. LCD
Autres opérations sur un Exécuter un select
utilisateur
mysql> select * from client;
Supprimer un utilisateur
mysql>DROP USER 'login'@'hote';
Renommer un utilisateur
113
V. LCD
Quitter MySQL
mysql> QUIT
ou
mysql> EXIT
114
Bibliographie
Livres Support de cours Web
"Modélisation dans la conception [Link]
des systèmes d’information", bd/polyv7/
Edition Masson. [Link]
"Les fichiers et organisation des g/courses/poly2/11/[Link]
données", C. JOUFFROY, Cours de
[Link], Bordas Informatique. [Link]@[Link]
"Base de données et systèmes Cours de Mme Silber
relationnels", C. DELOBEL, M. cours@[Link]
ADIBA, Dunod Informatique.
"Les bases de données
relationnelles", Serge MIRANDA,
José Maria BUSTA.
"Base de données, les systèmes
et leurs langages", G. GARDARIN,
Edition Eyrolles.
"Système d’information et base
de données", GALACSI, Bordas
Informatique. Chapitre 03 : Langage SQL 115
K. M. BROU
115