0% ont trouvé ce document utile (0 vote)
88 vues58 pages

BDCH 03 SQL

Transféré par

kouadio ulrich konan
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
88 vues58 pages

BDCH 03 SQL

Transféré par

kouadio ulrich konan
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Base de données

Chapitre 3 : Langage SQL

Konan Marcellin BROU


Université AO
[Link]@[Link]

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

K. M. BROU Chapitre 03 : Langage SQL 2

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.

K. M. BROU Chapitre 03 : Langage SQL 3

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.

K. M. BROU Chapitre 03 : Langage SQL 4

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.

K. M. BROU Chapitre 03 : Langage SQL 5

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.

K. M. BROU Chapitre 03 : Langage SQL 6

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

K. M. BROU Chapitre 03 : Langage SQL 9

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).

K. M. BROU Chapitre 03 : Langage SQL 10

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

K. M. BROU Chapitre 03 : Langage SQL 11

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.

K. M. BROU Chapitre 03 : Langage SQL 12

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).

SMALLINT[(M)] [UNSIGNED] Petit entier. Entiers signés de -32768 à 32767.


[ZEROFILL] Entiers non-signés est 0 à 65535.
MEDIUMINT[(M)] [UNSIGNED] Entier. Entiers signés de -8388608 à 8388607.
[ZEROFILL] Entiers non-signés de 0 à 16777215.
INT[(M)] [UNSIGNED] [ZEROFILL] Grand entier. Entiers signés de -2147483648 à
2147483647. Entiers non-signés de 0 à
4294967295.
INTEGER[(M)] [UNSIGNED] Synonyme INT.
[ZEROFILL]
BIGINT[(M)] [UNSIGNED] Très grand entier. Entiers signés de -
[ZEROFILL] 9223372036854775808 à 9223372036854775807.
Entiers non-signés de 0 à 18446744073709551615.

K. M. BROU Chapitre 03 : Langage SQL 13

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.

LONGBLOB, LONGTEXT peut contenir au maximum 4294967295 ou 4 Go (2 32 − 1)


caractères.
ENUM('value1','value2',...) Enumération. Un objet chaîne qui peut prendre une des valeurs
valeuri, ou NULL ou la valeur spéciale d'erreur "". un maximum
de 65535 valeurs distinctes.
SET('value1','value2',...) Ensemble. Un objet chaîne, qui peut prendre zéro, une ou
plusieurs valeurs valeuri,... Un maximum de 64 membres.

K. M. BROU Chapitre 03 : Langage SQL 16

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;
);

K. M. BROU Chapitre 03 : Langage SQL 18

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;

ALTER TABLE detailcom


MODIFY numLigne int(11) NOT NULL AUTO_INCREMENT;

ALTER TABLE detailcom


ADD CONSTRAINT detailcom_ibfk_4 FOREIGN KEY (numProd)
REFERENCES produit (numProd)
ON DELETE NO ACTION ON UPDATE CASCADE,
ADD CONSTRAINT detailcom_ibfk_3 FOREIGN KEY (numCom)
REFERENCES commande (numCom)
ON DELETE NO ACTION ON UPDATE CASCADE;

K. M. BROU Chapitre 03 : Langage SQL 20

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;

ALTER TABLE detailcom


MODIFY numLigne int(11) NOT NULL AUTO_INCREMENT;

ALTER TABLE detailcom


ADD CONSTRAINT detailcom_ibfk_4 FOREIGN KEY (numProd)
REFERENCES produit (numProd)
ON DELETE NO ACTION ON UPDATE CASCADE,
ADD CONSTRAINT detailcom_ibfk_3 FOREIGN KEY (numCom)
REFERENCES commande (numCom)
ON DELETE NO ACTION ON UPDATE CASCADE;

K. M. BROU Chapitre 03 : Langage SQL 22

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) ;

K. M. BROU Chapitre 03 : Langage SQL 23

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.

K. M. BROU Chapitre 03 : Langage SQL 25

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 :

SELECT [ALL|DISTINCT] attribut(s)


FROM nomTable(s)
[WHERE condition]
[GROUP BY attributs] [HAVING condtion]]
[ORDER BY attribut(s) [ASC|DESC]] ;

K. M. BROU Chapitre 03 : Langage SQL 27

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.

K. M. BROU Chapitre 03 : Langage SQL 28

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;

K. M. BROU Chapitre 03 : Langage SQL 29

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;

 Requête 3 : Liste de toutes les


villes
Sélection avec des doublons
SELECT ville
FROM Client;

K. M. BROU Chapitre 03 : Langage SQL 30

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

K. M. BROU Chapitre 03 : Langage SQL 31

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.

A B Not And Or Xor Eqv Imp


 Tout ce qui n'est ni FALSE, ni
True True False True True False True True
NULL est considéré TRUE. True False False False True True False False
 UNKNOWN est un synonyme de False True True False True True False True
NULL. False False True False False False True True
 La date spéciale 0/0/0 est
nulle.

K. M. BROU Chapitre 03 : Langage SQL 32

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.

K. M. BROU Chapitre 03 : Langage SQL 34

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%';

K. M. BROU Chapitre 03 : Langage SQL 35

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%';

K. M. BROU Chapitre 03 : Langage SQL 36

36
III. LID
Table Client
 3.3. Requêtes jointures 

 Une jointure permet de récupérer


dans une requête des données
disséminées dans deux tables.
 C’est un lien entre deux tables
disposant d'au moins une colonne
commune (clé étrangère).
 Consiste à créer une table  Table Commande
temporaire composée de lignes
satisfaisant la condition de
jointure.
 C’est en fait un produit cartésien
avec une restriction.
 Exemple : Produit cartésien des
tables clients et Commande.
K. M. BROU Chapitre 03 : Langage SQL 37

37

III. LID
 Client x Commande

SELECT [Link], nom, numCom


FROM Client cl, Commande cd;

 30 lignes = 5 clients x 6
commandes

K. M. BROU Chapitre 03 : Langage SQL 38

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

SELECT [Link], nom, numCom


FROM Client cl
INNER JOIN Commande co
ON [Link] = [Link];

 Après la restriction sur on retient


6 lignes sur 30
K. M. BROU Chapitre 03 : Langage SQL 40

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] ;

K. M. BROU Chapitre 03 : Langage SQL 41

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 :

SELECT * SELECT [Link], nom, numCom, dateCom


FROM table1 FROM Client cl
NATURAL JOIN table2; INNER JOIN Commande co
USING(numCl);

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

 Par ordre croissant (ASC) ou SELECT numCl, nom


décroissant (DESC). FROM Client
ORDER BY nom ASC;
 Syntaxe :
SELECT [ALL|DISTINCT] attribut(s)
FROM nomTable(s)
[WHERE condition]
[ORDER BY attribut(s) [ASC|DESC]] ;
 Exemples :
 Exemple 1 : Donner la liste des
noms de clients par ordre
alphabétique croissant.
SELECT numCl, nom
FROM Client
ORDER BY nom ;

K. M. BROU Chapitre 03 : Langage SQL 48

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 ;

K. M. BROU Chapitre 03 : Langage SQL 49

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.

K. M. BROU Chapitre 03 : Langage SQL 50

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;

K. M. BROU Chapitre 03 : Langage SQL 51

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';

K. M. BROU Chapitre 03 : Langage SQL 52

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 ]

K. M. BROU Chapitre 03 : Langage SQL 53

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';

K. M. BROU Chapitre 03 : Langage SQL 54

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';

K. M. BROU Chapitre 03 : Langage SQL 55

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

K. M. BROU Chapitre 03 : Langage SQL 57

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

K. M. BROU Chapitre 03 : Langage SQL 58

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

K. M. BROU Chapitre 03 : Langage SQL 60

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;

K. M. BROU Chapitre 03 : Langage SQL 61

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

SELECT dateCom  Après MAS


FROM Commande SELECT dateCom
WHERE numCom=1; FROM Commande
WHERE numCom=1;

K. M. BROU Chapitre 03 : Langage SQL 62

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.

K. M. BROU Chapitre 03 : Langage SQL 63

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;

K. M. BROU Chapitre 03 : Langage SQL 64

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)

SELECT COUNT(*) AS NbeClientYakro SELECT COUNT(DISTINCT numCl)


FROM Client AS nbCommande
WHERE LEFT(CAST(tel AS CHAR), 2) = '30'; FROM Commande;

K. M. BROU Chapitre 03 : Langage SQL 65

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';

K. M. BROU Chapitre 03 : Langage SQL 66

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;

K. M. BROU Chapitre 03 : Langage SQL 67

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).

K. M. BROU Chapitre 03 : Langage SQL 68

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
);

K. M. BROU Chapitre 03 : Langage SQL 69

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).

K. M. BROU Chapitre 03 : Langage SQL 70

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];

K. M. BROU Chapitre 03 : Langage SQL 71

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
);

K. M. BROU Chapitre 03 : Langage SQL 72

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.

SELECT DISTINCT [Link], nom


FROM Client cl, Commande co, DetailCom de
WHERE [Link]= [Link] AND
[Link] = [Link] AND
qteCom > ANY
(SELECT qteCom
FROM Commande co, DetailCom de
WHERE [Link] = [Link] AND [Link] = 2
);

K. M. BROU Chapitre 03 : Langage SQL 73

73

III. LID
 Exemple 4 : Clients qui ont passé  Exemple 5 : Clients qui n’ont
au moins une commande. passé aucune commande.

SELECT [Link], nom SELECT [Link], nom


FROM Client cl FROM Client cl
WHERE EXISTS WHERE NOT EXISTS
(SELECT * (SELECT *
FROM Commande co FROM Commande co
WHERE [Link] = [Link] WHERE [Link] = [Link]
); );

K. M. BROU Chapitre 03 : Langage SQL 74

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.

SELECT numProd, designation


FROM Produit
WHERE prixUnit < 100
UNION
(SELECT [Link], designation
FROM Commande co, DetailCom de, Produit pr
WHERE [Link] = [Link]
AND [Link] = [Link] AND numCl = 2
);

K. M. BROU Chapitre 03 : Langage SQL 76

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

K. M. BROU Chapitre 03 : Langage SQL 77

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
);

K. M. BROU Chapitre 03 : Langage SQL 78

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;

K. M. BROU Chapitre 03 : Langage SQL 79

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
);

K. M. BROU Chapitre 03 : Langage SQL 80

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

 Pas dans MySQL

K. M. BROU Chapitre 03 : Langage SQL 81

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

K. M. BROU Chapitre 03 : Langage SQL 82

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’
);

K. M. BROU Chapitre 03 : Langage SQL 83

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;

 Supprimer une vue


 Syntaxe
 DROP VIEW nomVue;

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 :

UPDATE [ schéma. ] { table | vue } [ @dblink ] [ alias ]


SET { ( colonne [,colonne ] ... ) = ( requête )
| colonne = {expr | requête ) } }
[, { ( colonne [,colonne ] ... ) = ( requête )
| colonne = {expr | requête ) } } ] ...
[ WHERE condition ]

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 ]

 En l'absence de clause WHERE, la


commande DELETE efface toutes
les données de la table.

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;

 Afficher les utilisateurs de la


table user

mysql>SELECT user FROM user;

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';

 Lister les utilisateurs


mysql>SELECT user FROM user;

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

C:\>mysql -hlocalhost -ufroto -p

K. M. BROU 100
Chapitre 03 : Langage SQL

100
V. LCD
 Se connecter à la BD BDGSF
use bdgsf

 Impossible car froto n’a aucun


droit

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

GRANT ALL ON *.* TO 'brou'@'localhost' ; GRANT ALL ON bdgsf.* TO 'brou'@'localhost' ;

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

mysql> use bdgsf

 Quitter la session du root

K. M. BROU
107
Chapitre 03 : Langage SQL

107

V. LCD
 Exécuter la requête

SELECT * FROM Client;

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.

INSERT INTO CLIENT VALUES (96, 'Aicha', NULL,


NULL, NULL, NULL);

 Impossible de faire une insertion


car froto n’a pas reçu ce droit

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

GRANT SELECT, UPDATE, INSERT, DELETE, GRANT


OPTION ON bdgsf.* TO 'froto'@'localhost';

K. M. BROU
110
Chapitre 03 : Langage SQL

110
V. LCD
 Visualiser les privilèges d’un
utilisateur

show grants for "froto"@"localhost";

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

REVOKE SELECT, UPDATE ON bdgsf.*


FROM froto@localhost;

K. M. BROU Chapitre 03 : Langage SQL 112

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

RENAME USER ancienNom TO nouvelNom;

 Modifier un mot de passe

SET PASSWORD FOR 'login'@'hote' =


PASSWORD('nouveauMotDePasse');

 La fonction PASSWORD permet de


crypter le mot de passe

K. M. BROU Chapitre 03 : Langage SQL 113

113

V. LCD
 Quitter MySQL

mysql> QUIT
ou
mysql> EXIT

K. M. BROU Chapitre 03 : Langage SQL 114

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

Vous aimerez peut-être aussi