Vous êtes sur la page 1sur 80

Gestion des bases de données

Langage SQL
Dr Soumana FOMBA
E-mail : fombasoumana@gmail.com

ITMA – IRT3

Année : 2023-2024
Introduction

Objectifs de SQL
● Créer la structure de la base de données (bd, tables)
● Exécuter les tâches de base de la gestion des données, telle

que l’insertion, la modification et la suppression de


données des tables
● Rechercher dans la BD : effectuer des requêtes simples ou

complexes
● Gérer les privilèges

04/03/24 15:30 Dr Soumana FOMBA, ITMA 2/80


Origine
SQL : Structured Query Language
En français Langage de requête structurée
Caractéristiques des langages déclaratifs
Origine : IBM, System R, milieu des années 70
Implémenté dans de nombreux SGBD
Plusieurs versions :
SQL1 initial: ANSI * 1986
SQL2 ANSI 1992
SQL3 ANSI 1998 incorpore la notion d’objet
ANSI = American National Standard Institute

04/03/24 15:30 Dr Soumana FOMBA, ITMA 3/80


Différentes catégories de requêtes SQL
Clauses SQL par catégorie:
Le Langage de Définition de Données (LDD) :
CREATE, ALTER, DROP
Le Langage de Manipulation de Données (LMD)
INSERT, UPDATE, DELETE, SELECT
Le Langage de Contrôle de Données (LCD)
GRANT, REVOKE
Le Langage de Contrôle de Transaction (LCT)
COMMIT, ROLLBACK
Utilisé par ;
DBA,
Développeurs,
autres utilisateurs

04/03/24 15:30 Dr Soumana FOMBA, ITMA 4/80


LDD : Création BD, table
Création de la Base de données (BDD)
CREATE DATABASE databasename;
Création d’une table
CREATE TABLE table_name (
column1 datatype [constraintes],
column2 datatype [constraintes],
column3 datatype [constraintes],
.…,
columnN datatype [constraintes],
[constraintes sur la table]
);

04/03/24 15:30 Dr Soumana FOMBA, ITMA 5/80


Exemple
Création de la Base de données (BDD)
CREATE DATABASE boutique;
Création d’une table en SqlServer
CREATE TABLE produit (
reference INT PRIMARY KEY,
designation VARCHAR(200) NOT NULL,
prix_ht REAL
);

CREATE TABLE client(


id INT IDENTITY(1,1) PRIMARY KEY,
nom VARCHAR(50) NOT NULL,
prenom VARCHAR(50),
date_naissance DATE
);

04/03/24 15:30 Dr Soumana FOMBA, ITMA 6/80


Types de données en SqlServer : chaîne de caractères

Type Description Exemple

CHAR(N) N caractères (taille fixe) CHAR(1) ‘A’, ‘P’, ‘_’

NCHAR(N) N caractères (taille fixe) pouvant NCHAR(3) : ‘IRT’, ‘SGC’,


contenir des caractères UNICODE ‘SMI’

VARCHAR(max) Chaîne de caractères de taille maximale VARCHAR(3) : ‘ ‘, ‘I’, ‘IR’,


max ‘IRT’
NVACHAR(max) Chaîne de caractères de taille maximale
max pouvant contenir tous les
caractères UNICODE
TEXT Chaîne de caractères pouvant être très "Un texte pouvant être très
long. Déconseillé à partir SQL Server long"
2005
NTEXT Chaîne de caractères pouvant être très "Un texte pouvant être très
long et utilisant des caractères long #{#"
UNICODE

04/03/24 15:30 Dr Soumana FOMBA, ITMA 7/80


Types de données en SqlServer : numérique

Exemple
Description
Type
0, 1
BIT un bit valeurs possible (0 ou 1)

0, 10, 44, 45, 80, 255


TINYINT Entier positif sur octet unique. Valeurs
possible [0, 255]
-32 768 ; 0; 455, 32 767
SMALLINT représente un entier signé de 16 bits.
Valeurs [-215, 215-1]

Min : -2 147 483 648


INTEGER représente un entier signé de 32 bits.
Max : 2 147 483 647
Valeurs possible [-231, 232-1]

04/03/24 15:30 Dr Soumana FOMBA, ITMA 8/80


Types de données en SqlServer : numérique

Exemple
Description
Type
545454
bigint représente un entier signé de 64 bits [-263,
263-1]
NUMERIC(5,2) :
NUMERIC(p,s) représente une valeur décimale. P designe
895.54, 100.20
le nombre maximale de digits, s le nombre de NUMERIC(4,0) : de 0
à 9999
chiffres après la virgule parmi ces digits

DECIMAL(4,2)
DECIMAL(p,s) Similaire à numeric, préférable pour les
0,20 ; 12,00, 18,50
nombres décimaux, et numeric préférable
pour les entiers avec précisions.

Nombre décimal : money, smallmoney, real,


float
04/03/24 15:30 Dr Soumana FOMBA, ITMA 9/80
Types de données en SqlServer : date

Exemple
Description
Type
‘24-02-2022’
DATE Toute date valide format (aaaa-mm-jj)
‘25-03-2022’

‘10-11-2020
DATETIME Date et heure format (aaaa-mm-jj HH:mn:ss)
12:50:30’
‘10:50:32’
TIME Heure format (HH:mm:ss)

04/03/24 15:30 Dr Soumana FOMBA, ITMA 10/80


Contraintes d’intégrité
PRIMARY KEY : clé primaire
FOREIGN KEY : clé étrangère
DEFAULT : définir une valeur par défaut
NOT NULL : imposer le remplissage
UNIQUE : valeur unique
CHECK : imposer une condition particulière

04/03/24 15:30 Dr Soumana FOMBA, ITMA 11/80


Exemples
CREATE TABLE commande(
num INT IDENTITY(1,5),
date_com DATETIME,
montant MONEY,
CONSTRAINT pk_commande PRIMARY KEY(num))
CREATE TABLE ligne_commande(
num_com INT FOREIGN KEY REFERENCES commande(num),
ref_prod INT NOT NULL,
quantite float,
CONSTRAINT pk_ligne_commande PRIMARY KEY(num_com,
ref_prod),
CONSTRAINT fk_ligne_commande_produit FOREIGN
KEY(ref_prod) REFERENCES produit(reference))

04/03/24 15:30 Dr Soumana FOMBA, ITMA 12/80


Exemples

ALTER TABLE client


ADD adresse VARCHAR(200);

ALTER TABLE ligne_commande


ADD CONSTRAINT p_con CHECK(quantite>0)

ALTER TABLE commande


ADD num_client INT;

ALTER TABLE commande


ADD CONSTRAINT fk_commande_client FOREIGN
KEY(num_client) REFERENCES client(id);

04/03/24 15:30 Dr Soumana FOMBA, ITMA 13/80


Langages de Manipulation de Données
Insertion d’une ligne dans une table

INSERT INTO nom_table(colonne_1, colonne_2,…,colonne_n)


VALUES('value11','value12',…,'value1n') ;

Insertion de plusieurs lignes à la fois

INSERT INTO nom_table(colonne_1, colonne_2,…,colonne_n)


VALUES('value11','value12',…,'value1n'),
('value21','value22',…,'value2n'),
('value31','value32',…,'value3n'),
('value41','value42',…,'value4n')

04/03/24 15:30 Dr Soumana FOMBA, ITMA 14/80


Exemple
Insertion d’une ligne dans une table
INSERT INTO client(nom,prenom,date_naissance)
VALUES('TOURE','Adama','2000-01-07');

Insertion de plusieurs lignes à la fois


INSERT INTO client(nom,prenom,date_naissance)
VALUES('SANGARE','Dramane','2000-01-07'),
('KEITA','Oumou','2001-07-20');

04/03/24 15:30 Dr Soumana FOMBA, ITMA 15/80


LMD : DELETE
Suppression de lignes selon une condition
DELETE FROM nom_table WHERE condition

Exemple
DELETE FROM produit WHERE prix_ht>10000;
DELETE p FROM produit AS p WHERE p.prix_ht>50;

04/03/24 15:30 Dr Soumana FOMBA, ITMA 16/80


LMD : UPDATE
La mise à jour des données d’une table se fait à travers la clause
UPDATE
UPDATE nom_table
SET colonne_1=valeur1, colonne_2=valeur2
WHERE condition
Exemple

UPDATE produit
SET prix_ht= prix_ht*1.2
WHERE prix_ht <500

04/03/24 15:30 Dr Soumana FOMBA, ITMA 17/80


LMD
Supprimer une colonne
ALTER TABLE categorie
DROP COLUMN description;

Supprimer une contrainte


ALTER TABLE produit
DROP CONSTRAINT fk_produit_categorie;
Ajouter une clé étrangère avec la politique en CASCADE
ALTER TABLE produit
ADD CONSTRAINT fk_produit_categorie FOREIGN
KEY(id_categorie) REFERENCES categorie(id) ON DELETE
CASCADE;

04/03/24 15:30 Dr Soumana FOMBA, ITMA 18/80


Algèbre relationnelle
Permet de mieux comprendre l’exécution des requêtes
dans une BD
Langage théorique, avec des opérations qui travaillent
sur une (ou plusieurs) relation(s) pour définir une autre
relation sans changer la (ou les) relation(s) originale(s)
Le résultat de toute opération algébrique est une
nouvelle relation(table)

04/03/24 15:30 Dr Soumana FOMBA, ITMA 19/80


Les opérations de l’algèbre relationnelle
Les 5 opérations fondamentales :
Sélection
Projection
Produit cartésien
Union
Différence
Autres opérations
Jointure
Intersection
...

04/03/24 15:30 Dr Soumana FOMBA, ITMA 20/80


Opérations unaires
Soit deux relations R et S définies respectivement sur les attributs
A=(a1, a2,…,aN) et B=(b1, b2,…,bM)

Sélection : σprédicat (R)


L’opération sélection travaille sur une seule relation R et définit
une relation qui ne contient que les tuples de R qui satisfont à la
condition (ou prédicat) spécifiée.
En français facile, elle permet de filtrer par ligne!
Projection : πa1,...,an(R)
L’opération projection travaille sur une seule relation R et définit
une relation qui contient un sous-ensemble vertical de R, en
extrayant les valeurs des attributs spécifiés et en supprimant les
doublons.
Choisir certaines colonnes désirées...

04/03/24 15:30 Dr Soumana FOMBA, ITMA 21/80


Exemple : Sélection
σville=’Bamako’ (Client) (sélection des clients de Bamako)

numero nom prenom ville telephone

1 TRAORE Issa Bamako 75854656


2 TOURE Adama Sikasso 85456656
Opérateurs
4 KEITA Amadou Bamako 46996546
utilisables dans
l’expression de
sélection : =, != ,
<,>, ≤, ≥
Possible de
numero nom prenom ville telephone combiner
plusieurs
conditions avec :
1 TRAORE Issa Bamako 75854656 Or, and,..

4 KEITA Amadou Bamako 46996546

04/03/24 15:30 Dr Soumana FOMBA, ITMA 22/80


Exemple : Sélection
σville=’Bamako’ or ville=’Segou’ (Client)
Sélection des clients de Bamako et Segou
numero nom prenom ville telephone
1 TRAORE Issa Bamako 75854656
2 TOURE Adama Sikasso 85456656
Opérateur
3 DIARRA Seydou Segou 54546585 utilisables dans
4 KEITA Amadou Bamako 46996546 l’expression de
sélection : =, != ,
<,>, ≤, ≥
Possible de
combiner
numero nom prenom ville telephone plusieurs
conditions avec :
1 TRAORE Issa Bamako 75854656
Or, and,..
3 DIARRA Seydou Segou 54546585
4 KEITA Amadou Bamako 46996546

04/03/24 15:30 Dr Soumana FOMBA, ITMA 23/80


Exemple : Projection
Πnumero,nom, prenom(Client) (numéro, nom et prénom de tous les clients)

numero nom prenom ville telephone

1 TRAORE Issa Bamako 75854656


2 TOURE Adama Sikasso 85456656
4 KEITA Amadou Bamako 46996546

numero nom prenom


1 TRAORE Issa
2 TOURE Adama
4 KEITA Amadou

04/03/24 15:30 Dr Soumana FOMBA, ITMA 24/80


Exemple : Projection
Πville(Client) (les villes des clients)

numero nom prenom ville telephone


1 TRAORE Issa Bamako 75854656

1 TRAORE Issa Bamako 75854656


2 TOURE Adama Sikasso 85456656
4 KEITA Amadou Bamako 46996546

ville
Bamako
Sikasso

04/03/24 15:30 Dr Soumana FOMBA, ITMA 25/80


Opérations sur des ensembles
Union : R ∪ S

L’union de deux relations de même schéma R et S définit une


relation qui contient tous les tuples de R et de S sans doublon.

Différence d’ensembles : R − S

La différence de deux relations définit une relation qui comporte


les tuples qui existent dans la relation R et non dans la relation S.
(R et S doivent avoir le même schéma)

04/03/24 15:30 Dr Soumana FOMBA, ITMA 26/80


Opérations sur des ensembles

Intersection : R ∩ S
L’intersection définit une relation constituée de l’ensemble de tous
les tuples présents à la fois dans R et dans S. (R et S doivent
avoir le même schéma)

Produit cartésien : R × S
Le produit cartésien définit une relation constituée de la
concaténation de chaque tuple de la relation R avec tous ceux de
la relation S.
Cela signifie que chaque tuple de la relation R est associé à
chaque tuple de la relation S pour former toutes les paires
possibles.
R et S n’ont pas forcément le même schéma.

04/03/24 15:30 Dr Soumana FOMBA, ITMA 27/80


Opérations sur des ensembles

Division : R ÷ S
La division est une opération portant sur deux relations R et S,
telles que le schéma de S est strictement inclus dans celui de R,
qui génère une troisième relation regroupant toutes les parties
d’occurrences de la relation R qui sont associées à toutes les
occurrences de la relation S.

04/03/24 15:30 Dr Soumana FOMBA, ITMA 28/80


Exemple : Union
A1 A2 A3
R1 R2
A1 A2 A3
a1 a2 a3
* a1 a2 a3
b1 b2 b3
e1 e2 e3
d1 d2 d3
c1 c2 c3
c1 c2 c3
*

R1 ∪ R2
A1 A2 A3
a1 a2 a3
b1 b2 b3

d1 d2 d3
c1 c2 c3
e1 e2 e3

04/03/24 15:30 Dr Soumana FOMBA, ITMA 29/80


Exemple : Différence
A1 A2 A3
R1 R2
A1 A2 A3
a1 a2 a3
* a1 a2 a3
b1 b2 b3
e1 e2 e3
d1 d2 d3
c1 c2 c3
c1 c2 c3
*

R1 − R2
A1 A2 A3

b1 b2 b3

d1 d2 d3

04/03/24 15:30 Dr Soumana FOMBA, ITMA 30/80


Exemple : Intersection
A1 A2 A3
R1 R2
A1 A2 A3
a1 a2 a3
* a1 a2 a3
b1 b2 b3
e1 e2 e3
d1 d2 d3 c1 c2 c3
c1 c2 c3
*

R1 ∩ R2
A1 A2 A3

a1 a2 a3

c1 c2 c3

04/03/24 15:30 Dr Soumana FOMBA, ITMA 31/80


Exemple : Produit cartésien
Client Client × Vente
numero nom prenom num num_clie ref_pro date
numero nom prenom
nt d
1 TRAORE Issa
1 TRAORE Issa 1 2 2 20/11/2021
2 TOURE Adama

1 TRAORE Issa 2 1 1 10/11/2021


4 KEITA Amadou

2 TOURE Adama 1 2 2 20/11/2021


Vente
num num_clie ref_prod date
nt 2 TOURE Adama 2 1 1 10/11/2021

1 2 2 20/11/2021
4 KEITA Amadou 1 2 2 20/11/2021

2 1 1 10/11/2021 4 KEITA Amadou 2 1 1 10/11/2021

04/03/24 15:30 Dr Soumana FOMBA, ITMA 32/80


Exemple : Division
R1 : professeurs R2 : qualités
Professeur Matière Langue Matière Langue
P1 M1 FR
M1 FR
P2 M1 EN
M1 EN
P3 M2 FR
P1 M1 EN
P1 M2 FR

R3=R1÷R2 R3

Professeur

P1

04/03/24 15:30 Dr Soumana FOMBA, ITMA 33/80


Propriétés de la structure
Rappel : Degré = nombre d’attributs de la relation

Même schéma
Degré (R1 ∪ R2) = Degré(R1) = Degré(R2)
Degré (R1 ∩ R2) = Degré(R1) = Degré(R2)
Degré (R1 – R2) = Degré(R1) = Degré(R2)

Schéma quelconque

Degré(R1 x R2) = Degré(R1) + Degré(R2)

04/03/24 15:30 Dr Soumana FOMBA, ITMA 34/80


Opérations de jointure
Jointure thêta ( θ-join) : R F S
La jointure thêta définit une relation qui contient des tuples satisfaisant au
predicat F du produit cartésien de R et S.
Le prédicat F est de la forme R.ai θ S.bj où θ peut être l’un des
opérateurs de comparaison (<,≤,>,≥,=,!=)
Dans le cas où le prédicat F ne contient que l’égalité (=), on utilise le
terme d’équi-jointure

Jointure naturelle : R S
La jointure naturelle est une équi-jointure des deux relations R et S sur
tous les attributs communs x
Une occurrence de chaque attribut commun est éliminée du résultat

04/03/24 15:30 Dr Soumana FOMBA, ITMA 35/80


Exemple : Jointure
Client client.numero=vente.num_client Vente
Client
numero nom prenom num num_client ref_prod date
numero nom prenom

1 TRAORE Issa
1 TRAORE Issa 2 1 1 10/11/2021

2 TOURE Adama

4 KEITA Amadou 1 4 2 20/11/2021


4 KEITA Amadou

Vente
num num_client ref_prod date

1 4 2 20/11/2021

2 1 1 10/11/2021

04/03/24 15:30 Dr Soumana FOMBA, ITMA 36/80


Fonctions d’agrégation
En algèbre relationnelle on a la possibilité d’effectuer des calculs sur les
attributs ce calcule peut être effectué en ligne par des expressions
arithmétiques sur les attributs ou en colonne par les fonctions
agrégatives.
client produit prix quantite
Expressions de calcul,
Ali PC 3000 2
relation Ventes Dramane Clavier 50 10
Bintou Souris 20 50

R = PROJECTION(ventes, client, produit, prix*quantite)

ou R= πclient, produit, prix*quantite(Ventes)


client produit prix*quantite
Ali PC 6000
Dramane Clavier 500
Bintou Souris 1000

04/03/24 15:30 Dr Soumana FOMBA, ITMA 37/80


Fonctions d’agrégation
Les expressions de calcul permettent d’effectuer des opérations de calcul en
ligne, sur des attributs de relations.

En pratique, il est nécessaire d’effectuer des opérations de calcul en


colonnes, sur des tuples de relations, cela par exemple afin de faire des
sommes, moyennes, etc.

Le concept d’agrégat permet de telles opérations.

Définition : Agrégat
Partitionnement horizontal d’une relation en fonction des valeurs d’un
groupe d’attributs, suivi d’un regroupement par application d’une fonction
de calcul sur ensemble.
Notation :
R = AGREGAT(RELATION ; ATTRIBUT1 ; FONCTION{ATTRIBUT2})
ATTRIBUT1 : est optionnel, dans ce cas, la fonction s’applique sur
l’ensemble des lignes

04/03/24 15:30 Dr Soumana FOMBA, ITMA 38/80


Fonctions d’agrégation
Les fonctions de calcul sur ensemble les plus souvent proposées sont :
SOMME (SUM) permettant de calculer la somme des éléments d’un
ensemble ;
MOYENNE (AVG) permettant de calculer la moyenne des éléments d’un
ensemble ;
MINIMUM (MIN) permettant de sélectionner l’élément minimum d’un
ensemble ;
MAXIMUM (MAX) permettant de sélectionner l’élément maximum d’un
ensemble ;
COMPTE (COUNT) permettant de compter les éléments d’un ensemble.

04/03/24 15:30 Dr Soumana FOMBA, ITMA 39/80


Exemple
Soit la relation « notes » suivante :

Filiere Etudiant Note R1=AGREGAT(notes ; filiere, MOYENNE{Note})

MPCI Adama 17,5 Filiere MOYENNE(Note)


MPCI 13,58
LGL Dramane 7,75
LGL 9,62
MPCI Bintou 9,25

MPCI Seydou 14,0 R2 = AGREGAT(notes ; MAXIMUM{Note})


MAXIMUM(Note)
LGL Djeneba 11,5
17,5

R3 = AGREGAT(notes ; COMPTE{Note})

COMPTE(Note)
5

04/03/24 15:30 Dr Soumana FOMBA, ITMA 40/80


Exercice
1. Afficher le nom des clients ayant effectué un achat
2. Afficher pour le client numéro 1 : le numéro de vente et la désignation des produits qu’il
a achetés.
3. Afficher le nom et le prénom des clients ayant acheté du TOYOTA.

numero nom prenom ville telephone

1 TRAORE Issa Bamako 75854656


Client 2 TOURE Adama Sikasso 85456656

4 KEITA Amadou Segou 46996546

num num_client ref_prod date

Vente 1 4 2 20/11/2021
2 1 1 10/11/2021

3 1 3 11/11/2021

ref designation prix_ht


Produit
1 TOYOTA 5000000
2 KIA 9000000
3 Nissan 4500000

04/03/24 15:30 Dr Soumana FOMBA, ITMA 41/80


LMD : SELECT
SELECT [DISTINCT] nom_des_attributs
FROM nom_table(s)
WHERE condition
[GROUP BY champ [HAVING condition_sur_groupe]]
[ORDER BY champ ASC|DESC]

FROM spécifie la table ou les tables à utiliser


WHERE filtre les lignes selon une condition donnée
GROUP BY forme des groupes de lignes de même valeur de colonne
HAVING filtre les groupes sujets à une certaine condition
SELECT spécifie les colonnes qui doivent apparaître dans les résultats,
on peut utiliser * pour l’ensemble des champs.
DISTINCT : éliminer les doublons. Par défaut ALL est utilisé
ORDER BY spécifie l’ordre d’apparition des données dans le résultat

04/03/24 15:30 Dr Soumana FOMBA, ITMA 42/80


Exemple
Afficher le nom et l’adresse de tous les clients
SELECT nom, adresse
FROM client ;
Afficher toutes les informations sur les clients
SELECT *
FROM client ;
Afficher tous les clients qui habitent à Paris
SELECT nom, adresse
FROM client
WHERE adresse=’Paris’

04/03/24 15:30 Dr Soumana FOMBA, ITMA 43/80


Sélection de lignes clause WHERE
Objectifs de SQL
● Comparaison
(salaire>10000 AND ville=’Paris’)
● Intervalle

(salaire BETWEEN 20000 and 30000)


● appartenance à un ensemble

(couleur IN (’red’, ’vert’))


● correspondance à un masque

(adresse LIKE ’%Montréal%’)


● NULL: valeur non renseignée

(adresse IS NULL)

04/03/24 15:30 Dr Soumana FOMBA, ITMA 44/80


Exemple
Afficher les clients qui ont un numéro de téléphone
SELECT *
FROM client
WHERE telephone IS NOT NULL ;

Quels sont les produits dont le prix TTC est supérieur à 10000, sachant
que la TVA=18%.
SELECT *
FROM produit
WHERE (prix_ht + prix_ht*0,18)>10000;

04/03/24 15:30 Dr Soumana FOMBA, ITMA 45/80


Opérateurs possible(MySQL)
Booléennes
and, or, =, !=, < , >, <=, ≥, <>
Arithmétiques
+,-,*,/
Fonctions numériques
abs, log, cos, sin, mod, power, round,…
Arthmétiques sur date
+,-
Fonctions sur chaînes
length, concat

04/03/24 15:30 Dr Soumana FOMBA, ITMA 46/80


Requêtes simples(2)
Quels sont les ventes dont le montant HT est entre 1000 et 3000 euros et
dont le client n’est pas le numéro 101 ?
SELECT *
FROM vente
WHERE (prix_ht between 1000 and 3000) and numero!=101
Quels sont les clients dont le nom est soit TOURE, soit DIARRA, ou
TRAORE ?
SELECT *
FROM client
WHERE nom in (‘TOURE’, ‘DIARRA’, ‘TRAORE’) ;

04/03/24 15:30 Dr Soumana FOMBA, ITMA 47/80


Requêtes simples(3)
Quels sont les clients dont le nom commence par ‘P’
SELECT *
FROM client
WHERE nom LIKE ‘P%’ ;
Quels sont les clients dont le nom commence par ‘P’ et a un ‘S’ comme
4ieme lettre
SELECT *
FROM client
WHERE nom LIKE ‘P__S%’ ;
NB pour l’opérateur LIKE
% : signifie n’importe quelle suite de caractères ;
_ : signifie un caractère quelconque
On peut utiliser les fonctions d’agrégation :
COUNT : compter le nombre de lignes
SUM : la somme des éléments d’une colonne
AVG : la moyenne des éléments d’une colonne
MIN : le plus petit élément parmi les éléments d’une colonne
MAX : le plus grand élément parmi les éléments d’une colonne

04/03/24 15:30 Dr Soumana FOMBA, ITMA 48/80


Exemple
Le nombre de clients
SELECT COUNT(*)
FROM client;
Le nombre d’achats par client
SELECT num_client, COUNT(*) as nb_achats
FROM vente
GROUP BY num_client
Le montant total des achats effectués par chaque client
SELECT v.num_client, SUM(v.quantite*p.prix_ht)
FROM vente v, produit p
WHERE v.ref=p.ref
GROUP BY v.num_client;

04/03/24 15:30 Dr Soumana FOMBA, ITMA 49/80


Exemple
Le prix moyen de tous les produits

SELECT AVG(prix_ht) AS moyenne


FROM produit;

Le prix minimal et maximal de l’ensemble des produits

SELECT MIN(prix_ht) AS min, MAX(prix_ht) AS max


FROM produit

04/03/24 15:30 Dr Soumana FOMBA, ITMA 50/80


Les opérateurs ensemblistes
Différence : cette requête donne quelles informations?
SELECT c.num_client FROM client c
EXCEPT
SELECT v.num_client FROM vente v;

Intersection
SELECT v.num_client FROM vente v WHERE v.date_vente BETWEEN
'01-12-2023' AND '31-12-2023'
INTERSECT
SELECT v.num_client FROM vente v wHERE v.date_vente BETWEEN
'01-01-2024' AND '31-01-2024';
Union
SELECT v.* FROM vente v WHERE v.num_client=1
UNION
SELECT v.* FROM vente v wHERE v.num_client=3;

04/03/24 15:30 Dr Soumana FOMBA, ITMA 51/80


Jointure
Les jointures en SQL permettent d’associer plusieurs tables
dans une même requête.

Cela permet d’exploiter la puissance des bases de données


relationnelles pour obtenir des résultats qui combinent les
données de plusieurs tables de manière efficace.

Exemple : soit la table vente(num_client#, ref_prod#,


quantite,date) : pour accéder aux autres informations du client
on est obligé de joindre les deux tables. Idem pour les
informations du produit.

04/03/24 15:30 Dr Soumana FOMBA, ITMA 52/80


Type de jointure
INNER JOIN : jointure interne, retourne les enregistrements
quand la condition est vrai dans les 2 tables.
CROSS JOIN : jointure croisée, retourne le produit cartésien de
2 tables.
LEFT JOIN (ou LEFT OUTER JOIN) : jointure externe pour
retourner tous les enregistrements de la table de gauche (LEFT =
gauche) même si la condition n’est pas vérifié dans l’autre table.
RIGHT JOIN (ou RIGHT OUTER JOIN) : jointure externe pour
retourner tous les enregistrements de la table de droite (RIGHT =
droite) même si la condition n’est pas vérifié dans l’autre table.

04/03/24 15:30 Dr Soumana FOMBA, ITMA 53/80


Type de jointure
FULL JOIN (ou FULL OUTER JOIN) : jointure externe pour
retourner les résultats quand la condition est vrai dans au moins
une des 2 tables.

SELF JOIN : permet d’effectuer une jointure d’une table avec


elle-même comme si c’était une autre table.

NATURAL JOIN : jointure naturelle entre 2 tables s’il y a au


moins une colonne qui porte le même nom entre les 2 tables SQL
(pas possible en sqlserver)

04/03/24 15:30 Dr Soumana FOMBA, ITMA 54/80


INNER JOIN
Intersection de deux ensembles
Syntaxe
SELECT *
FROM A
INNER JOIN B ON A.key = B.key

04/03/24 15:30 Dr Soumana FOMBA, ITMA 55/80


LEFT JOIN
Jointure à gauche : toutes les lignes de la table à gauche
Syntaxe
SELECT *
FROM A
LEFT JOIN B ON A.key = B.key

04/03/24 15:30 Dr Soumana FOMBA, ITMA 56/80


RIGHT JOIN
Jointure à droite: toutes les lignes de la table à droite
Syntaxe
SELECT *
FROM A
RIGHT JOIN B ON A.key = B.key

04/03/24 15:30 Dr Soumana FOMBA, ITMA 57/80


FULL JOIN
Jointure à droite: toutes les lignes des deux tables
Syntaxe
SELECT *
FROM A
FULL JOIN B ON A.key = B.key

04/03/24 15:30 Dr Soumana FOMBA, ITMA 58/80


Exemple

L’ensemble des ventes avec le client concerné si ça existe.

SELECT * FROM vente


LEFT JOIN client ON vente.num_client = client.numero;

Tester cette requête ainsi que les autres types de jointure

04/03/24 15:30 Dr Soumana FOMBA, ITMA 59/80


SQL sous-requêtes
Dans le langage SQL une sous-requête (aussi appelé “requête
imbriquée” ou “requête en cascade”) consiste à exécuter une
requête à l’intérieur d’une autre requête.
Une requête imbriquée est souvent utilisée au sein d’une clause
WHERE ou de HAVING pou remplacer une ou plusieurs
constante
Syntaxe : Il y a plusieurs façons d’utiliser les sous-requêtes. De
ce fait, il y a plusieurs syntaxes envisageables pour utiliser des
requêtes dans des requêtes.

04/03/24 15:30 Dr Soumana FOMBA, ITMA 60/80


Requête imbriquée qui retourne un seul résultat

La sous-requête retourne une seule valeur, cela peut être garanti


par le mot clé TOP (LIMIT en mysql)
SELECT *
FROM table
WHERE nom_colonne = (SELECT TOP 1 `valeur` FROM `table2` )

SELECT *
FROM produit
WHERE prix_ht =(SELECT MAX(prix_ht) FROM produit);

04/03/24 15:30 Dr Soumana FOMBA, ITMA 61/80


Requête imbriquée qui retourne une colonne

Une requête imbriquée peut également retournée une colonne


entière.
Dès lors, la requête externe peut utiliser la commande IN pour
filtrer les lignes qui possèdent une des valeurs retournées par la
requête interne.

SELECT * FROM table WHERE nom_colonne IN (


SELECT table2.colonne FROM `table2` WHERE condition )

04/03/24 15:30 Dr Soumana FOMBA, ITMA 62/80


Sous-requête : EXISTS

Dans le langage SQL, la commande EXISTS s’utilise dans une


clause conditionnelle pour savoir s’il y a une présence ou non
de lignes lors de l’utilisation d’une sous-requête.

A noter : cette commande n’est pas à confondre avec la clause


IN. La commande EXISTS vérifie si la sous-requête retourne un
résultat ou non, tandis que IN vérifie la concordance d’une à
plusieurs données.
SELECT nom_colonne1
FROM `table1`
WHERE EXISTS (
SELECT nom_colonne2
FROM `table2`
WHERE nom_colonne3 = table1.colonnex
)

04/03/24 15:30 Dr Soumana FOMBA, ITMA 63/80


Sous-requête : ALL

Dans le langage SQL, la commande ALL permet de comparer


une valeur avec l’ensemble des valeurs d’une sous-requête.
En d’autres mots, cette commande permet de s’assurer qu’une
condition est “=”, “!=”, “>”, “<”, “>=” ou “<=” pour tous les
résultats retournés par une sous-requête.

SELECT *
FROM table1
WHERE expression > ALL (
SELECT *
FROM table2
WHERE condition2
)

04/03/24 15:30 Dr Soumana FOMBA, ITMA 64/80


Sous-requête : ANY ou SOME

Dans le langage SQL, la commande ANY (ou SOME) permet de


comparer une valeur avec le résultat d’une sous-requête.
Il est ainsi possible de vérifier si une valeur est “=”, “!=”, “>”, “>=”,
“<” ou “<=” pour au moins une des valeurs de la sous-requête.
A noter : le mot-clé SOME est un alias de ANY, l’un et l’autre des
termes peut être utilisé.

SELECT *
FROM table1
WHERE expression > ANY (
SELECT *
FROM table2
WHERE condition2
)

04/03/24 15:30 Dr Soumana FOMBA, ITMA 65/80


Exemple

Sélectionner le produit ayant le prix le plus élevé


SELECT * FROM produit p
WHERE p.prix_ht >= ALL (
SELECT prix_ht
FROM produit
)
Sélectionner les clients qui ont fait au moins un achat
SELECT * FROM client AS c
WHERE EXISTS(SELECT * FROM vente as v WHERE
v.num_client=c.numero);

Sélectionner les clients qui n’ont fait aucun achat


SELECT * FROM client AS c
WHERE NOT EXISTS(SELECT * FROM vente AS v WHERE
v.num_client=c.numero);

04/03/24 15:30 Dr Soumana FOMBA, ITMA 66/80


Place aux TP

04/03/24 15:30 Dr Soumana FOMBA, ITMA 67/80


Gestion des utilisateurs

Afficher la liste des utilisateurs en sqlserver


SELECT name
FROM sys.server_principals
WHERE type_desc = 'SQL_LOGIN'
OR type_desc = 'WINDOWS_LOGIN';

04/03/24 15:30 Dr Soumana FOMBA, ITMA 68/80


Gestion des utilisateurs

Pour Créer un utilisateur il suffit de spécifier :


Le nom de l’utilisateur
Le Host ( %, localhost,..)
Eventuellement le mot de passe
Exemple
CREATE USER 'keita'@'localhost' IDENTIFIED BY
'adm123';
Supprimer un utilisateur
DELETE FROM mysql.user where user='nom_user';

04/03/24 15:30 Dr Soumana FOMBA, ITMA 69/80


Langage de Contrôle de Données (LCD)

La clause GRANT permet d’accorder des privilèges (autorisations) aux


utilisateurs
REVOKE retire des autorisations.
Accorder tous les privilèges à un utilisateur
GRANT ALL PRIVILEGES ON * . * TO 'keita'@'localhost';
Les astérisques (*) de cette commande renvoient à la base de
données et à la table (respectivement) auxquelles il peuvent
accéder.
Cette commande spécifique permet à l’utilisateur de lire,
modifier, exécuter et effectuer toutes tâches sur l’intégralité
des bases de données et des tables.
Valider les modifications des privilèges par :
FLUSH PRIVILEGES

04/03/24 15:30 Dr Soumana FOMBA, ITMA 70/80


Octroyer différentes autorisations

Voici une liste d’autorisations couramment utilisées que vous pouvez


octroyer aux utilisateurs.
ALL PRIVILEGES : cela donne à l’utilisateur de MySQL un total
accès à une base de données désignée (ou un accès global à
l’ensemble du système si aucune base de données n’est
sélectionnée)
CREATE : permet de créer de nouvelles tables ou bases de
données
DROP :permet de supprimer des tables ou des bases de données
DELETE : permet de supprimer des lignes des tables
INSERT : permet d’insérer des lignes dans les tables
SELECT :permet d’utiliser la commande SELECT pour lire
UPDATE : permet de mettre à jour les lignes d’une table
GRANT OPTION : permet d’accorder ou de supprimer les privilèges
des autres utilisateurs
04/03/24 15:30 Dr Soumana FOMBA, ITMA 71/80
Octroyer différentes autorisations
Donner une autorisation:
GRANT type_of_permission ON database_name.table_name TO
'username'@'localhost';
Révoquer une autorisation
REVOKE type_of_permission ON database_name.table_name FROM
'username'@'localhost';
Afficher la liste des privilèges d’un utilisateur
SHOW GRANTS FOR 'username'@'localhost';
Exemples
GRANT DELETE ON irt3.* TO 'u10'@'localhost'
REVOKE DELETE ON irt3.* FROM 'u10'@'localhost'
GRANT DELETE, CREATE, INSERT ON irt3.client TO 'u10'@'localhost'
FLUSH PRIVILEGES

04/03/24 15:30 Dr Soumana FOMBA, ITMA 72/80


Gestion des transactions

Une transaction, c'est un ensemble de requêtes qui sont


exécutées en un seul bloc.
Ainsi, si une des requêtes du bloc échoue, on peut décider
d'annuler tout le bloc de requêtes (ou de quand même valider les
requêtes qui ont réussi).
Cela permet de s’assurer que toutes les requêtes du bloc ont été
exécutées si oui on valide la transaction avec le mot COMMIT
sinon on peut décider de tout annuler avec ROLLBACK.

04/03/24 15:30 Dr Soumana FOMBA, ITMA 73/80


Schéma d’une transaction

04/03/24 15:30 Dr Soumana FOMBA, ITMA 74/80


Démarrer une transaction

START TRANSACTION;

UPDATE client set adresse ='BAMAKO' where adresse IS NULL;

INSERT INTO client(numero, nom, adressee)


values('14564','Keita',NULL);

COMMIT;

04/03/24 15:30 Dr Soumana FOMBA, ITMA 75/80


Programmation SQL

Une procédure stockée, aussi appelée stored procedure en


anglais, est un concept utilisé en administration de base de
données afin d’exécuter un ensemble d’instructions SQL.
Une telle procédure est stockée au sein du Système de Gestion
de Base de Donneés (SGBD) et peut être appelée à tout moment
par son nom afin d’exécuter celle-ci.
En MySQL un paramètre de la procédure peut être précédé par :
IN : une entrée uniquement
OUT : la sortie uniquement
INOUT : entrée et sortie à la fois

04/03/24 15:30 Dr Soumana FOMBA, ITMA 76/80


Exemple

Une Procédure permettant de récupérer l’ensemble des clients


d’une adresse donnée
Création de la procédure
DELIMITER //
CREATE PROCEDURE les_clients(IN adr CHAR(20))
BEGIN
SELECT * FROM client WHERE adresse = adr;
END

// DELIMITER ;

Appel de la procédure
CALL les_clients('Paris');

Afficher la liste des procédures stockées


select db, name FROM mysql.proc;
04/03/24 15:30 Dr Soumana FOMBA, ITMA 77/80
Procédures et fonctions stockées en mysql

déclarer une variable locale


DECLARE var_name [,...] type [DEFAULT value]
Ex : DECLARE nb INT DEFAULT 20 ;
Affecter une valeur à une variable
SET variable = expression [,…]
Ex : SET nb=500 ;
Syntaxe de SELECT... INTO (affectation dans une requête)
SELECT column[,...] INTO variable[,...] table_expression
Exemple :
SELECT id,data INTO x,y FROM table LIMIT 1;

04/03/24 15:30 Dr Soumana FOMBA, ITMA 78/80


Procédures et fonctions stockées en mysql

Il est possible d’utiliser :


Les curseurs (CURSOR) : boucler sur le résultat d’une
requête
Les instructions de contrôle :
IF : les SI -SINON
CASE : plusieurs cases
LOOP, WHILE, ITERATE, REPEAT : des boucles
LEAVE : quitter une boucle
La boucle FOR n’est pas supportée actuellement.

04/03/24 15:30 Dr Soumana FOMBA, ITMA 79/80


Conclusion

Modèle EA : gère l’aspect conceptuel. Identifier les entités et les


associations entre ces identités.
Modèle relationnel : modèle tel que implémenté dans un SGBD.
Normalisation : élimination des problèmes de mises à jour, de
redondances, rend performant la base de données
SQL : langage de manipulation des données

04/03/24 15:30 Dr Soumana FOMBA, ITMA 80/80

Vous aimerez peut-être aussi