Rappel
langage sql
1
Introduction
SQL (Structured Query Language)
Est Introduit par IBM, évolution du langage SEQUEL, commercialisé
tout d'abord par ORACLE
Est le langage standard pour décrire et manipuler les BDR
Est implémenter dans de nombreux SGBD
2
Introduction
SQL est l'interface logicielle/logiciel entre les applications et les BDR
3
Introduction
Il existe plusieurs versions de SQL
SQL1 initial, ANSI* __ 1986
SQL1 avec intégrité référentielle, ANSI __1989
SQL2 extension de SQL1 ANSI __1992
SQL3 ANSI __1999 incorpore la notion d’objet
*ANSI = American National Standard Institute
4
Fonctionnalités de SQL
SQL assure plusieurs fonctionnalités au sein des SGBD
Langage de Définition des données (LDD)
CREATE pour la création des tables et des bases de données
ALTER pour modifier le schéma d’une relation
DROP pour la suppression des tables et des bases de données
5
Fonctionnalités de SQL
Langage de Manipulation des données (LMD)
SELECT pour sélectionner les données d’une table
INSERT pour insérer les données dans une table
UPDATE pour mettre à jour les données d’une table
DELETE pour supprimer les données d’une table
6
Fonctionnalités de SQL
Langage de Contrôle des Transactions (TCL: Transaction
Control Language)
Gestion des transactions: Permet de gérer les modifications faites
par le langage de manipulation des données (DML)
COMMIT : Pour valider les modifications faites dans une BD
ROOLBACK : Pour annuler les modifications faites dans la BD
SAVEPOINT : Permet de gérer les transactions, en offrant la
possibilité d’annuler les états antérieurs sans annuler l’ensemble de
la transaction
7
Fonctionnalités de SQL
Langage de Protection d’Accès (DCL: Data Control Language)
Contrôle des droits d’accès: Permet de gérer les droits
d’accès aux tables
GRANT : Pour attribuer les droits aux utilisateurs
REVOKE : Pour révoquer les droits des utilisateurs
8
Fonctionnalités de SQL
SQL intégré (embedded SQL): Il permet d’utiliser le SQL dans un langage
de 3ième génération tel que C, Java, Cobol, etc.
DECLARE : Utile dans la creation des fonctions et procedures stockées, elle
permet de gérer les variables, les curseurs, les conditions, etc.
CONNECT : Permet de se connecter à la base de données
PREPARE : Permet d’améliorer la sécurité, la performance et la flexibilité
des applications qui interagissent avec la base de données
EXECUTE : Permet d’utiliser des paramètres lors de l’execution des
instructions SQL préparées
OPEN : Permet d’ouvrir un curseur afin de parcourir les résultats d’une
requête ligne par ligne
FETCH : Est utilisé pour récupérer des lignes d’un curseur ouvert
CLOSE : Permet de fermer un curseur et de libérer les ressources associées
9
SGBD-Définition
Un SGBD (Système de Gestion de Bases de Données) est un logiciel
qui stocke des données de façon organisées et cohérentes.
Un SGBDR (Système de Gestion de Bases de Données
Relationnelles) est un type particulier de SGBD qui stocke les données
dans des tables à deux dimensions. (Il fera l’objet de ce cours)
10
Objectifs du SGBD
Indépendance physique : La façon dont les données sont définies doit
être indépendante des structures de stockage utilisées.
Indépendance logique : Un même ensemble de données peut être vu
différemment par des utilisateurs différents. Toutes ces visions
personnelles des données doivent être intégrées dans une vision
globale.
Accès aux données : L'accès aux données se fait par l'intermédiaire
d'un Langage de Manipulation de Données (LMD).
Non redondance des données : Afin d'éviter les problèmes lors des
mises à jour, chaque donnée ne doit être présente qu'une seule fois
dans la base.
11
Objectifs du SGBD
Cohérence des données : Les données sont soumises à un certain
nombre de contraintes d'intégrité qui définissent un état cohérent de la
base. Ces contraintes sont décrites dans le Langage de Définition des
Données (LDD)
12
SGBDR les plus utilisés
Quelques SGBDR les plus utilisées
Oracle considéré comme un des SGBDR les plus performants.
Microsoft SQL Server la mouture de microsoft, qui est intégré au
framework .NET.
PostgreSQL est un SGBDR open source réputé pour sa puissance,
sa fiabilité et son extensibilité.
MySQL logiciel libre fonctionnant souvent de pair avec Apache et
Php, et de ce fait très répandu dans la programmation web.
Access incorporé à Microsoft Office. Il présente l’énorme avantage
de mettre à disposition de l’utilisateur une interface graphique. En
contrepartie, de faible capacité.
13
Langage de Définition de
Données (LDD)
Le Langage de Définition des Données (LDD) est la partie de SQL
qui permet de décrire les tables et autres objets manipulés par les
SGBD.
Il fait usage des commandes suivantes:
CREATE
ALTER
DROP
14
Commande CREATE
CREATE permet de créer une base de données, les tables et les vues d’une base de données
Pour créer une base de données, on utilise la commande:
CREATE DATABASE nom_base_de_donnees;
Lorsqu’on veut spécifier l’encodage des caractères, on utilise la commande:
CREATE DATABASE nom_base_de_donnees
CHARACTER SET utf8mb4;
Cet encodage permet de s’assurer que la base de données peut gérer une variété de langues
et de symboles
Ex: Création de la base de données gestion_etudiants
CREATE DATABASE gestion_etudiants
CHARACTER SET utf8mb4;
15
Commande ALTER
ALTER permet de modifier la définition d’une table
Elle utilise les sous commandes suivantes
ADD
MODIFY
DROP
RENAME
Syntaxe:
ALTER TABLE nom_table
ADD | MODIFY | RENAME | DROP
16
Commande ALTER
Exemples
Ajout d’un attribut dans une table: ALTER TABLE STAGIAIRE
ADD COLUMN email VARCHAR(20);
Modification du type d’un attribut: ALTER TABLE STAGIAIRE
MODIFY NomEntr VARCHAR(30);
Suppression d’un attribut dans une table: ALTER TABLE STAGIAIRE
DROP COLUMN NomEntr;
17
Commande ALTER
Exemples
Renommer une table: ALTER TABLE STAGIAIRE
RENAME TO POSTULANT;
Renommer une colonne d’une table: ALTER TABLE STAGIAIRE
RENAME COLUMN NomEntr TO Nom;
18
Commande DROP
DROP permet de supprimer une base de données, une table, une
colonne d’une table.
Syntaxe:
Pour la base de données: DROP DATABASE nom_BD;
Pour la table: DROP TABLE nom_table;
Pour un colonne d’une table: ALTER TABLE nom_table
DROP COLUMN nom_colonne;
19
Les contraintes
Il existe plusieurs types de contraintes:
Les contraintes de domaine
Les contraintes d’intégrité d’entité
Les contraintes d’intégrité référentielle
Les assertions
La vérification différée des contraintes
Les contraintes particulières
Dans le cadre de ce cours, nous ne parlerons que des trois premières
contraintes
20
Contraintes de domaine
Les contraintes de domaine pour un attribut sont l’ensemble des
valeurs que peut prendre cet attribut.
Ces contraintes sont décrites dans la définition de l’attribut, directement
après son type et sa longueur.
On a les contraintes suivantes :
NOT NULL : Impose que l’attribut possède une valeur
DEFAULT : Spécifie une valeur par défaut dont le type doit
correspondre au type de l’attribut
UNIQUE : Interdit qu’une colonne contienne deux valeurs identiques
21
Contraintes de domaine
Ex:
CHECK(condition): est une clause qui permet de spécifier une contrainte
qui doit être vérifiée à tout moment par les tuples de la table.
Ex:
22
Contraintes d’intégrité
d’entité
Les contraintes d’intégrité d’entité : spécifient la clé primaire d’une
table via la clause PRIMARY KEY.
Une clé primaire doit toujours avoir une valeur déterminée et unique
pour la table.
Quand une clé primaire est constituée de plusieurs attributs (clé
segmentée), la clause PRIMARY KEY est placée après la définition des
attributs, séparée par une virgule.
23
Contraintes d’intégrité
d’entité
Exemple de création de table ayant deux attributs comme clé:
CREATE TABLE Appartement (NumApp INT,
NomAppVARCHAR(30),
PRIMARY KEY(NumApp, NomApp)
);
24
Contraintes d’intégrité
d’entité
PRIMARY KEY peut aussi être séparée de la définition des attributs
même s ’il n’y a qu’un seul attribut
CREATE TABLE Animal (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
espece VARCHAR(40) NOT NULL,
sexe CHAR(1),
date_naissance DATETIME NOT NULL,
nom VARCHAR(30),
commentaires TEXT,
PRIMARY KEY (id)
);
25
Contraintes d’intégrité
référentielles
Une contrainte d’intégrité référentielle est une règle qui garantit la
cohérence des relations entre les tables d’une base de données
relationnelle. Elle assure que les valeurs d’une clé étrangère (FOREIGN
KEY) correspondent toujours à une clé primaire (PRIMARY KEY) d’une
autre table
Une contrainte d’intégrité à 3 objectifs principaux:
Empêcher les données orphelines : Une clé étrangère ne peut pas faire
référence à un enregistrement inexistant.
Maintenir la cohérence des relations : Impossible de supprimer un
enregistrement référencé sans précaution.
Assurer l’intégrité des données : Les modifications suivent des règles
strictes pour éviter les incohérences.
26
Contraintes d’intégrité
référentielles
On utilise les mots clés REFERENCES et FOREIGN KEY pour
spécifier une contrainte d’intégrité référentielle.
FOREIGN KEY indique qu’un attribut est une clé étrangère
REFERENCES indique l’origine de la clé étrangère (table et attribut
référencés)
La syntaxe est la suivante:
CREATE TABLE Nom_table (
Attribut1 description1,
[…]
[ [CONSTRAINT [nom_contrainte]]
FOREIGN KEY (Attrib_clé_étrangère) REFERENCES table_référencé (Attrib_référencé)
);
27
Contraintes d’intégrité
référentielles
Exemple de création de table avec clé étrangère
CREATE TABLE clients (
id_client INT PRIMARY KEY,
nom VARCHAR(100)
);
CREATE TABLE commandes (
id_commande INT PRIMARY KEY,
id_cli INT,
montant DECIMAL(10,2),
FOREIGN KEY (id_cli) REFERENCES clients(id_client)
);
Le champ id_cli de la table “commandes” est une clé étrangère qui fait reference au
champs id_client de la table “clients”
NOTEZ BIEN
Une insertion d'une commande avec un client inexistant est impossible
Une suppression d'un client avec des commandes associées bloquée
28
Contraintes d’intégrité
référentielles
Il peut arriver que lors de la création de la table « commande », on
oublie de préciser que l’attribut « id_client » est une clé étrangère, pour
résoudre le problème, on utilisera la commande « ALTER »
ALTER TABLE Commande
ADD CONSTRAINT fk_client_com FOREIGN KEY (id_client) REFERENCES
Client(id_client);
Pour supprimer cette clé étrangère, on utilise la commande
ALTER TABLE Commande
DROP FOREIGN KEY fk_client_com;
29
Actions liées au contraintes
d’intégrité
Lors de la suppression ou modification d’un enregistrement référencé,
plusieurs options existent :
Action Effet
CASCADE Supprime ou met à jour les enregistrements liés automatiquement
SET NULL Remplace la clé étrangère par NULL si la référence est supprimée
RESTRICT Empêche la suppression/modification si les références existent
NO ACTION Se comporte comme RESTRICT (par défaut si aucune action n’est précisée)
30
Action CASCADE
En cas de suppression, l’action ON DELETE CASCADE supprime
automatiquement tous les enregistrements liés,
En cas de mise à jour, l’action ON UPDATE CASCADE met à jour automatiquement
toutes les clés étrangères
Exemple:
CREATE TABLE clients (
id_client INT PRIMARY KEY,
nom VARCHAR(100)
);
CREATE TABLE commandes (
id_commande INT PRIMARY KEY,
id_client INT,
montant DECIMAL(10,2),
FOREIGN KEY (id_client) REFERENCES clients(id_client)
ON DELETE CASCADE
ON UPDATE CASCADE
);
31
Action CASCADE
En se basant sur l’exemple ci-dessus,
Si on supprime de la table « clients » le client dont id_client=1, toutes
les commandes pour lesquelles l’id_client=1 seront automatiquement
supprimées
Si on remplace dans la table « clients » id_client=1 par id_client=2,
toutes les lignes de la table « commandes » ayant l’id_client=1 seront mises
à jour à id_client=2
32
Action SET NULL
En cas de suppression, l’action ON DELETE SET NULL remplace la clé étrangère
par NULL
En cas de mise à jour, l’action ON UPDATE SET NULL remplace la clé étrangère
par NULL
Exemple
CREATE TABLE clients (
id_client INT PRIMARY KEY,
nom VARCHAR(100)
);
CREATE TABLE commandes (
id_commande INT PRIMARY KEY,
id_client INT,
montant DECIMAL(10,2),
FOREIGN KEY (id_client) REFERENCES clients(id_client)
ON DELETE SET NULL
ON UPDATE SET NULL
);
33
Action SET NULL
En se basant sur l’exemple ci-dessus,
Si on supprime de la table « clients » le client dont id_client=1, tous les
id_client=1 de la table « commandes » prennent la valeur NULL au lieu
d’être supprimés
Si on remplace dans la table « clients » id_client=1 par id_client=2, tous
les id_client=1 de la table « commandes » prennent la valeur NULL
34
Action RESTRICT
En cas de suppression, l’action ON DELETE RESTRICT empêche la suppression si des
enregistrements liés existent
En cas de mise à jour, l’action ON UPDATE RESTRICT empêche la modification de la
clé primaire si elle est référencée
Exemple
CREATE TABLE clients (
id_client INT PRIMARY KEY,
nom VARCHAR(100)
);
CREATE TABLE commandes (
id_commande INT PRIMARY KEY,
id_client INT,
montant DECIMAL(10,2),
FOREIGN KEY (id_client) REFERENCES clients(id_client)
ON DELETE RESTRICT
ON UPDATE RESTRICT
);
35
Action RESTRICT
En se basant sur l’exemple ci-dessus,
Si on essaye de supprimer de la table « clients » le client dont
id_client=1, on reçoit un message d’erreur (Impossible de supprimer le
client 1 car il a des commandes associées)
Si on essaye de remplacer dans la table « clients » id_client=1 par
id_client=2, on reçoit un message d’erreur (Impossible de modifier id_client
car il est référencé dans commandes)
36
Action NO ACTION
En cas de suppression ou de mise à jour, les action ON DELETE NO ACTION et ON UPDATE NO
ACTION ont le même comportement que ON DELETE RESTRICT et ON UPDATE RESTICT
respectivement
Exemple
CREATE TABLE clients (
id_client INT PRIMARY KEY,
nom VARCHAR(100)
);
CREATE TABLE commandes (
id_commande INT PRIMARY KEY,
id_client INT,
montant DECIMAL(10,2),
FOREIGN KEY (id_client) REFERENCES clients(id_client)
ON DELETE NO ACTION
ON UPDATE NO ACTION
);
Aucune suppression ou mise à jour n’est possible
37
RECAPITULATIF DES
COMPORTEMENTS
CASCADE et SET NULL automatisent la gestion des relations
RESTRICT et NO ACTION bloquent les modifications si les
dépendances existent
38
Langage de manipulation
des données
Le Langage de Manipulation des Données (LMD ou DML-Data
Manipulation Language) est une partie du SQL permettant d’interagir
avec les données stockées dans une base de données
Les principales commandes LMD sont:
SELECT pour récupérer les données
INSERT pour ajouter les données
UPDATE pour modifier les données
DELETE pour supprimer les données
39
Commande SELECT
SELECT est utilisée pour interroger une base de données et récupérer les
données depuis une ou plusieurs tables.
Elle permet de réaliser les opérations suivantes:
Les projections
Les sélections
Les tri des tuples
Les fonctions et expressions
Les requêtes sur les groupes
40
Commande SELECT
La syntaxe globale d’une commande SELECT est la suivante:
SELECT …
Partie obligatoire
FROM …
WHERE …
GROUP BY …
HAVING … Clauses
ORDER BY ...
LIMIT…
L’ordre des différentes clauses est à respecter
41
SELECT - Projection
En SQL, une projection fait référence à l'opération qui consiste à
sélectionner certaines colonnes d'une table
La syntaxe est la suivante
SELECT colonne1, colonne2, ... FROM nom_table;
Exemples:
SELECT * FROM client; (*) signifie que toutes les colonnes seront affichées
SELECT nom FROM client; toutes les lignes de la table client sont affichées
SELECT nom, ville FROM client; les colonnes ‘nom’ et ‘ville’ seront affichées
SELECT nom AS nom_client FROM client; la colonne ‘nom’ sera renommée en
‘nom_client’ avant d’être affichée
42
SELECT - Projection
Si on veut éviter que les lignes issue d’une projection ne se répètent
pas, on va utiliser la clause DISTINCT
Exemple
SELECT Type_Stage FROM stage;
SELECT DISTINCT Type_Stage AS nature du stage FROM stage;
Remarque: Si on indique plusieurs noms de tables derrière le FROM,
on obtient un produit cartésien
43
SELECT - Sélection
En SQL, une sélection est une opération qui permet de spécifier en plus des
colonnes, les lignes qui devront s’afficher à l’issue d’une requête. Cela se fait avec la
clause WHERE
La syntaxe est la suivante:
SELECT colonne1, colonne2, ...
FROM nom_table;
WHERE (condition)
La clause WHERE permet de spécifier quelles sont les lignes à sélectionner dans une
table ou dans le produit cartésien de plusieurs tables.
WHERE est suivie d’une expression logique prenant la valeur vrai ou faux et qui sera
évalué pour chaque ligne. Seules les lignes pour lesquelles l’expression logique est
évalué à vrai sont sélectionnées.
44
SELECT - Sélection
Les expressions logiques peuvent être composées d’une suite de conditions
combinées entre elles par les opérateurs AND, OR, NOT.
Des parenthèses peuvent être utilisées pour imposer une priorité dans l ’évaluation de
l’expression logique. L’opérateur NOT placé devant un prédicat en inverse le sens.
Les différentes formes d’expressions logiques:
Comparaison à une valeur,
Comparaison à une fourchette de valeurs,
Comparaison à une liste de valeurs,
Comparaison à un filtre,
Test sur l’indétermination d’une valeur,
Test ‘ tous ’ ou ‘ au moins un ’,
Test existentiel,
Test d’unicité
45
SELECT - Sélection
Quelques cas d’expressions logiques
WHERE exp1 = exp2
WHERE exp1 != exp2
WHERE exp1 < exp2
WHERE exp1 > exp2
WHERE exp1 <= exp2
WHERE exp1 >= exp2
WHERE exp1 is NULL
WHERE exp1 is NOT NULL
Exp2 peut être une constante. Les chaînes de caractères doivent apparaître sous
forme d ’une séquence de caractères entre apostrophes.
Exp2 peut être une expression obtenue par application d ’opérateurs (+, -, x, /) sur des
noms d ’attributs ou des constantes
46
SELECT – Comparaison à une
valeur
Exemples
SELECT Num_St, Nom_St FROM STAGIAIRE WHERE Adr= 'Paris';
SELECT Num-Stage FROM STAGE WHERE Nb-jours > 4;
SELECT Num-Stage FROM STAGE WHERE (Prix* nb-jours) > 5000;
SELECT Num-Stage, Libellé-Stage, Type-Stage, Num-Cat
FROM STAGE
WHERE Type-Stage = ’TP ’ AND Num-Cat = 1;
SELECT Num-Stage, Libellé-Stage, Type-Stage, Num-Cat
FROM STAGE
WHERE NOT(Type-Stage = ’TP ’ OR Num-Cat = 1);
47
SELECT – Comparaison à une
fourchette de valeurs
La comparaison sur une fourchette de valeurs se faite à l’aide la clause
BETWEEN…AND…
Syntaxe:
SELECT … FROM … WHERE Cond1 [NOT] BETWEEN val1 AND val2;
Exemple
SELECT Num-Stage, Libellé-Stage, Num-Cat
FROM STAGE
WHERE Num-Cat BETWEEN 1 AND 3;
48
SELECT – Comparaison à une
liste de valeurs
La comparaison sur une liste de valeurs se faite à l’aide la clause IN
Syntaxe:
SELECT … FROM … WHERE nom_colonne [NOT] IN (liste_valeurs);
Exemple
SELECT Num-Stage, Libellé-Stage, Num-Cat
FROM STAGE
WHERE Num-Cat IN (1,3);
NOT IN sert à sélectionner les lignes dont l’attribut dans la clause
WHERE contient une valeur autre que celle de la liste
49
SELECT – Comparaison à
un filtre
La comparaison sur un filtre est faite à l’aide la clause LIKE. Cette
clause s’utilise uniquement sur les chaines de caractères
Syntaxe:
SELECT … FROM … WHERE nom_colonne [NOT] LIKE ‘Modèle_de_chaine’;
Cette clause teste l’égalité de deux chaînes en tenant compte des
caractères jokers dans la 2ème chaîne.
« _ » remplace 1 caractère exactement,
« % » remplace une chaîne de caractères de longueur quelconque.
’%objet%’ sélectionne toutes les chaines contenant objet à n ’importe quelle
place dans la chaîne
’%a_’ sélectionne toutes les chaines ayant a à l’avant-dernière place
’%@%%’ sélection toutes les chaines ayant % n’importe où dans la chaîne.
50
SELECT – Comparaison à
un filtre
Exemples
Liste des stagiaires dont les noms commencent par ‘Var’
SELECT Num-St, Nom-St, Prénom-St
FROM STAGIAIRE
WHERE Nom-St LIKE ’Var%’;
Liste des stagiaires dont les noms tiennent sur 8 caractères, commençant par PE puis se
terminant par N
SELECT Num-St, Nom-St, Prénom-St
FROM STAGIAIRE
WHERE Nom-St LIKE ’PE_____N’;
Liste des stagiaires dont les noms tiennent sur 3 caractères et se terminant par AR
SELECT Num-St, Nom-St, Prénom-St
FROM STAGIAIRE
WHERE Nom-St LIKE ’_AR%’;
51
SELECT – Tri des tuples
L ’ordre dans lequel les lignes d’une table résultat apparaissent est
indéterminé. Pour imposer un ordre d’affichage, on utilise la clause
ORDER BY.
Syntaxe :
SELECT … FROM … ORDER BY colonne1 [DESC|ASC], colonne2 [DESC|ASC],.. ;
On peut trier selon la valeur d’un ou de plusieurs attributs.
Les attributs selon lesquels le tri est demandé doivent obligatoirement
faire partie de la clause SELECT.
DESC donne un tri par ordre décroissant, et ASC donne un tri
croissant. Par défaut, l’ordre est croissant.
52
SELECT – Tri des tuples
Le tri se fait d ’abord selon le premier attribut, puis les lignes ayant la même valeur pour ce
premier attribut sont triées selon le 2ème attribut, etc. Les valeurs nulles sont toujours en tête.
Exemples
Tri par ordre croissant de Num_Stage
SELECT Num-Stage, Libellé-Stage //
FROM STAGE
ORDER BY Num-Stage;
Tri par ordre croissant sur la 1ière colonne
SELECT Num-Stage, Libellé-Stage // Tri par ordre croissant sur la 1ière colonne
FROM STAGE
ORDER BY 1;
Tri par ordre croissant sur Num_Cat et par ordre décroissant sur Num_Stage
SELECT Num-Stage, Libellé-Stage, Nom-Cat
FROM STAGE
WHERE NOT(Type-Stage = ’Cours’)
ORDER BY Num-Cat, Num-Stage DESC;
53
Clause GROUP BY
GROUP BY est utilisée pour regrouper les lignes ayant des valeurs identiques dans
une ou plusieurs colonnes. Cette clause permet d’effectuer des opérations d’agrégation
(COUNT, SUM, AVG, etc.)
Syntaxe :
SELECT COUNT | SUM | AVG | MIN | MAX
FROM nom_table;
[WHERE condition]
GROUP BY nom_colonne
[HAVING condition]
NOTEZ BIEN:
En présence d’un GROUP BY, tout attribut dans la clause SELECT doit figurer dans
la clause GROUP BY.
54
Fonctions de groupes
Un groupe est un ensemble de tuples d’une table pour lesquels la
valeur d’un attribut est constante.
Les fonctions de groupe effectuent un calcul sur l’ensemble des
valeurs d’un attribut pour un groupe de tuples.
Il existe 5 fonctions de groupes:
COUNT,
SUM,
AVG,
MIN,
MAX
55
Fonctions de groupes
Une fonction peut apparaître dans une clause SELECT, elle sera
affichée comme un attribut ou une expression MAIS, en l’absence de
clause GROUP BY, on ne peut mettre ensemble des fonctions de groupe
et des attributs dans un même SELECT.
Une fonction de groupe s’emploie uniquement dans les clauses
SELECT ou HAVING.
56
Fonction COUNT
COUNT permet de compter le nombre de ligne dans un ensemble de
résultats qui répondent à des critères spécifiques
Syntaxe :
SELECT COUNT(* | [DISTINCT] nom_colonne)
FROM nom_table;
[WHERE condition]
[GROUP BY nom_colonne]
[HAVING condition]
57
Fonction COUNT
Exemples
SELECT COUNT(*) FROM Employes // Nombre de lignes dans la table Employes
SELECT COUNT(*) // Nombre d’employés dont le salaire est supérieur à 100000
FROM Employes
WHERE salaire > 100000;
SELECT poste, COUNT(*) // Nombre d’employés par poste
FROM Employes
GROUP BY poste;
SELECT COUNT(DISTINCT salaire) // Nombre de valeurs possibles prises par la
colonne “salaire”
58
Fonction SUM
SUM est utilisé pour calculer la somme des valeurs d’une colonne
numérique dans un ensemble de résultats.
Syntaxe :
SELECT SUM(colonne)
FROM nom_table;
[WHERE condition]
[GROUP BY]
[HAVING]
59
Fonction SUM
Exemples
La somme des salaires dans une table employes
SELECT SUM(salaire) FROM Employes;
La somme des ventes du produit dont le code est 123
SELECT SUM(montant)
FROM Ventes
WHERE produit_id = 123;
La somme des salaires par poste
SELECT poste, SUM(salaire)
FROM Employes
GROUP BY poste;
60
Fonction AVG
AVG est utilisé pour calculer la moyenne des valeurs d’une colonne
numérique dans un ensemble de résultats
Syntaxe :
SELECT AVG(nom_colonne)
FROM nom_table;
[WHERE condition]
[GROUP BY]
[HAVING]
61
Fonction AVG
Exemples
La somme des salaires dans une table employes
SELECT AVG(salaire) FROM Employes;
La moyenne des ventes du produit dont le code est 123
SELECT AVG(montant)
FROM Ventes
WHERE produit_id = 123;
La moyenne des salaires par poste
SELECT poste, AVG(salaire)
FROM Employes
GROUP BY poste;
62
Fonctions MIN et MAX
MIN et MAX sont utilisés pour obtenir les valeurs minimale et maximale
respectivement d’une colonne spécifiée dans un ensemble de résultats.
Syntaxe :
SELECT MIN(nom_colonne) | MAX (nom_colonne)
FROM nom_table;
[WHERE condition]
[GROUP BY]
[HAVING (condition)]
63
Fonctions MIN et MAX
Exemples
Les salaire minimum et maximum dans la table Employes
SELECT MIN(salaire), MAX(salaire) FROM Employes;
La date la plus ancienne et la plus récente dans une table Commandes
SELECT MIN(date_commande), MAX(date_commande) FROM Commandes;
Les salaires mimimun et maximum des employés par département
SELECT departement, MIN(salaire), MAX(salaire)
FROM Employes
GROUP BY departement;
64
Clause HAVING
HAVING est utilisé pour filtrer les résultats d’une requête après que les
données aient été regroupées par la clause GROUP BY
Syntaxe :
SELECT SUM | AVG | COUNT | MIN | MAX
FROM nom_table;
[WHERE condition]
GROUP BY
HAVING (condition)
65
Clause HAVING
Exemples
Compter les départements ayant plus de 5 employés
SELECT departement, COUNT(*)
FROM Employes
GROUP BY departement
HAVING COUNT(*) > 5;
Les codes de produits dont la somme des ventes est supérieure à 10000
SELECT produit_id, SUM(montant)
FROM Ventes
GROUP BY produit_id
HAVING SUM(montant) > 10000;
66
Clause LIMIT
LIMIT est utilisé pour restreindre le nombre de résultats renvoyés par une
requête. Cette clause est particulièrement utile lorsqu’on souhaite recupérer un
sous ensemble de résultats
Syntaxe :
SELECT
FROM nom_table;
[WHERE condition]
[GROUP BY]
[HAVING (condition)]
LIMIT valeur [OFFSET valeur]
67
Clause LIMIT
Exemples
Les 5 premières lignes de la table Employes
SELECT * FROM Employes LIMIT 5;
Les 10 produits ayant les prix les plus élevés
SELECT *
FROM Produits
ORDER BY prix DESC
LIMIT 10;
Les 10 employés suivants (du 6ième au 15ième)
SELECT *
FROM Employes
LIMIT 5 OFFSET 10;
68
Commande INSERT
INSERT est utilisé pour ajouter de nouvelles lignes dans une table. Elle
présente deux syntaxe, selon que l’on souhaite insérer une ligne ou plus d’une
ligne
Insertion d’une ligne
INSERT INTO nom_table (colonne1, colonne2, colonne3)
VALUES (valeur1, valeur2, valeur3);
Insertion de plus d’une ligne
INSERT INTO nom_table (colonne1, colonne2, colonne3)
VALUES (valeur1a, valeur2a, valeur3a),
(valeur1b, valeur2b, valeur3b),
(valeur1c, valeur2c, valeur3c);
69
Commande INSERT
Exemples
Insérer une ligne dans la table Employes
INSERT INTO Employes (nom, prenom, salaire)
VALUES ('Dupont', 'Jean', 3000);
Insérer 3 lignes dans la table Produits
INSERT INTO Produits (nom, prix, quantite)
VALUES ('Produit A', 10.50, 100),
('Produit B', 20.00, 200),
('Produit C', 15.75, 150);
Insérer sans spécifier de colonnes
INSERT INTO Employes
VALUES (NULL, 'Martin', 'Sophie', 2500);
Dans cet exemple, NULL est utilisé pour indiquer que l’id sera auto-incrémenté
70
Commande UPDATE
UPDATE est utilisé pour modifier des enregistrements existants dans une
table.
Syntaxe :
UPDATE nom_table
SET colonne1 = valeur1, colonne2 = valeur2, ...
WHERE condition;
SET est utilisé pour spécifier les colonnes à mettre à jour et à leurs nouvelles
valeurs
WHERE indiquent quelles lignes doivent être mise à jour. En cas d’omission
de cette clause, ce sont toutes les lignes de la table qui sont mise à jour
71
Commande UPDATE
Exemples
Modifier le salaire de l’employé dont l’id est 1
UPDATE Employes
SET salaire = 3500
WHERE id = 1;
Modifier le nom et le salaire d’un employé dont l’id est 2
UPDATE Employes
SET nom = 'Durand', salaire = 4000
WHERE id = 2;
Augmenter le salaire de tous les employés du département de vente
UPDATE Employes
SET salaire = salaire * 1.10
WHERE departement = 'Vente';
72
Commande DELETE
DELETE est utilisé pour supprimer des enregistrements d’une table
Syntaxe :
DELETE FROM nom_table
WHERE condition;
WHERE indiquent quelles lignes doivent être supprimées. En cas
d’omission de cette clause, ce sont toutes les lignes de la table qui sont
supprimées
NB: Avant d’effectuer des suppressions massives, il est judicieux de faire
une sauvegarde de données, surtout lorsqu’on n’est pas sûr de la
commande
73
Commande DELETE
Exemples
Supprimer l’employé dont l’id est 1
DELETE FROM Employes
WHERE id = 1;
Supprimer tous les employés du département de vente
DELETE FROM Employes
WHERE departement = 'Vente';
Supprimer l’employé Dupont Jean
DELETE FROM Employes
WHERE nom = 'Dupont' AND prenom = 'Jean';
Supprimer tous les employés d’une table
DELETE FROM Employes;
74