Gestion des bases de données
Langage SQL
Dr Soumana FOMBA
E-mail : [email protected]
USTTB-FST
Année : 2022-2023
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
29/11/23 12:02 Dr Soumana FOMBA, FST 2/32
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
29/11/23 12:02 Dr Soumana FOMBA, FST 3/32
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
29/11/23 12:02 Dr Soumana FOMBA, FST 4/32
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] );
Création d’une table à partir du résultat de requête de sélection
CREATE TABLE new_table_name AS
SELECT column1, column2,...
FROM existing_table_name
WHERE ....;
29/11/23 12:02 Dr Soumana FOMBA, FST 5/32
Exemple
Création de la Base de données (BDD)
CREATE DATABASE boutique;
Création d’une table en mysql
CREATE TABLE produit (
reference INT PRIMARY KEY AUTO_INCREMENT,
designation VARCHAR(200) NOT NULL,
prix_ht FLOAT
);
CREATE TABLE Client (
id INT PRIMARY KEY AUTO_INCREMENT ,
nom VARCHAR(255) NOT NULL,
prenom VARCHAR(255),
age INT
);
29/11/23 12:02 Dr Soumana FOMBA, FST 6/32
Les Types en MySQL
INT : Utilisé pour stocker des valeurs numériques entières. Vous pouvez
spécifier la largeur, par exemple INT(10) pour un entier de 10 chiffres.
VARCHAR : Utilisé pour stocker des chaînes de caractères de longueur
variable. Vous devez spécifier la longueur maximale, par exemple
VARCHAR(255).
CHAR : Utilisé pour stocker des chaînes de caractères de longueur fixe.
La longueur est spécifiée lors de la création de la colonne, par exemple
CHAR(10).
TEXT : Utilisé pour stocker de longs textes.
DATE : Utilisé pour stocker des dates au format "AAAA-MM-JJ".
TIME : Utilisé pour stocker des heures au format "HH:MM:SS".
DATETIME : Utilisé pour stocker des dates et heures au format "AAAA-
MM-JJ HH:MM:SS".
FLOAT : Utilisé pour stocker des nombres à virgule flottante.
DOUBLE : Utilisé pour stocker des nombres à virgule flottante à double
précision.
29/11/23 12:02 Dr Soumana FOMBA, FST 7/32
Les Types en MySQL
DECIMAL : Utilisé pour stocker des nombres décimaux. Vous pouvez
spécifier la précision et l'échelle, par exemple DECIMAL(10, 2) pour un
nombre avec 10 chiffres au total et 2 chiffres après la virgule.
ENUM : Utilisé pour stocker une liste de valeurs prédéfinies.
BOOL ou BOOLEAN : Utilisé pour stocker des valeurs booléennes
(true/false).
TINYINT : Utilisé pour stocker de petits entiers.
BLOB : Utilisé pour stocker de gros volumes de données binaires,
comme des images ou des fichiers.
29/11/23 12:02 Dr Soumana FOMBA, FST 8/32
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
29/11/23 12:02 Dr Soumana FOMBA, FST 9/32
Exemples
CREATE TABLE ligne_commande(
num_com INT,
ref_prod INT,
quantite DOUBLE,
PRIMARY KEY(num_com,ref_prod),
FOREIGN KEY(num_com) REFERENCES commande(num),
FOREIGN KEY(ref_prod) REFERENCES produit(ref)
);
ALTER TABLE ligne_commande
ADD CONSTRAINT p_con_quan CHECK(quantite>0)
ALTER TABLE ligne_commande
ADD COLUMN unite VARCHAR(10) DEFAULT "Kg"
29/11/23 12:02 Dr Soumana FOMBA, FST 10/32
Exemples
CREATE TABLE `produit` (
`ref` int(11) NOT NULL,
`designation` varchar(200),
`prix_ht` double DEFAULT 0
)
ALTER TABLE `produit`
MODIFY `prix_ht` FLOAT;
29/11/23 12:02 Dr Soumana FOMBA, FST 11/32
Langages de Manipulation de Données
Insertion d’une ligne dans une table
INSERT INTO nom_table(colonne_1, colonne_2,…,colonne_n)
VALUE(‘value1’,’value2’,…,’valuen’)
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’)
29/11/23 12:02 Dr Soumana FOMBA, FST 12/32
Exemple
Insertion d’une ligne dans une table
INSERT INTO client(numero,nom,telephone)
VALUE(‘500’,’TOURE’,’85659455’)
Insertion de plusieurs lignes à la fois
INSERT INTO client(numero, nom, telephone)
VALUES(‘501’,’DIARRA’,’54666852’),
(‘502’,’COULIBALY’,’87466852’),
(‘503’,’KAMATE’,’54566852’)
29/11/23 12:02 Dr Soumana FOMBA, FST 13/32
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>5000
29/11/23 12:02 Dr Soumana FOMBA, FST 14/32
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*0,9
WHERE prix_ht >=5000
29/11/23 12:02 Dr Soumana FOMBA, FST 15/32
LMD : SELECT
SELECT [DISTINCT] nom_des_attributs
FROM nom_table
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
29/11/23 12:02 Dr Soumana FOMBA, FST 16/32
Exemple
Afficher le nom et l’adresse des clients
SELECT nom, adresse
FROM client ;
Afficher toutes les informations sur des clients
SELECT *
FROM client ;
Afficher tous les clients qui habitent à Paris
SELECT nom, adresse
FROM client
WHERE adresse=’Paris’
29/11/23 12:02 Dr Soumana FOMBA, FST 17/32
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)
29/11/23 12:02 Dr Soumana FOMBA, FST 18/32
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;
29/11/23 12:02 Dr Soumana FOMBA, FST 19/32
Opérateurs possible(MySQL)
Booléennes
and, or, =, !=, < , >, <=, >=
Arithmétiques
+,-,*,/
Fonctions numériques
abs, log, cos, sin, mod, power, round,…
Arthmétiques sur date
DATE_ADD(date_colonne, INTERVAL 5 DAY) : ajout de jours
DATE_SUB(date_colonne, INTERVAL 3 DAY) : retrait de jours
DATE_ADD(date_colonne, INTERVAL 2 MONTH) : ajout de mois
DATEDIFF(date_colonne2, date_colonne1) : différence en jours entre deux
dates
Fonctions sur chaînes
length, concat
29/11/23 12:02 Dr Soumana FOMBA, FST 20/32
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’) ;
29/11/23 12:02 Dr Soumana FOMBA, FST 21/32
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 opérateurs 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
29/11/23 12:02 Dr Soumana FOMBA, FST 22/32
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 client (les clients
ayant fait au moins un achat)
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;
29/11/23 12:02 Dr Soumana FOMBA, FST 23/32
Exemple
Le prix moyen de tous les produits
SELECT AVG(prix_ht) AS prix_moyen
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
29/11/23 12:02 Dr Soumana FOMBA, FST 24/32
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.
29/11/23 12:02 Dr Soumana FOMBA, FST 25/32
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.
29/11/23 12:02 Dr Soumana FOMBA, FST 26/32
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
29/11/23 12:02 Dr Soumana FOMBA, FST 27/32
INNER JOIN
Intersection de deux ensembles
Syntaxe
SELECT *
FROM A
INNER JOIN B ON A.key = B.key
29/11/23 12:02 Dr Soumana FOMBA, FST 28/32
LEFT JOIN
Jointure à gauche : toutes les lignes de la table à gauche
Syntaxe
SELECT *
FROM A
LEFT JOIN B ON A.key = B.key
29/11/23 12:02 Dr Soumana FOMBA, FST 29/32
RIGHT JOIN
Jointure à droite: toutes les lignes de la table à droite
Syntaxe
SELECT *
FROM A
RIGHT JOIN B ON A.key = B.key
29/11/23 12:02 Dr Soumana FOMBA, FST 30/32
FULL JOIN
Jointure à droite: toutes les lignes des deux tables
Syntaxe
SELECT *
FROM A
FULL JOIN B ON A.key = B.key
29/11/23 12:02 Dr Soumana FOMBA, FST 31/32
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
29/11/23 12:02 Dr Soumana FOMBA, FST 32/32