Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
SQL Approfondi
1 Introduction
Ce chapitre est dédié au langage SQL sous ses facettes LDD (Langage de Définition
de Données), LMD (Langage de Manipulation de Données), et LCD (Langage de
Contrôle de Données).
Loin d’être une référence exhaustive, ce chapitre se veut néanmoins être un
ensemble de généralités de ce langage et un point de départ pour une maitrise de Nous utiliserons MariaDB
(Un SGBD compatible avec
SQL. Il est donc impératif que l’étudiant fasse sa part du travail en se documentant
MySQL) dans ce chapitre,
et en apprenant les détails de ce langage par ses propres efforts. mais la syntaxe demeure
presque la même à travers
les autres SGBDs qui utilisent
2 SQL : LDD SQL comme langage de re-
quêtes.
1
2.2 Gestion des tables
Création de tables
);
Les types de données carient souvent avec le SGBD utilisé, mais en général, nous
avons :
CHAR(n) : Chaine de caractère de taille fixe (n caractères).
VARCHAR(n) : Chaine de caractère de taille variable (n caractère). Veuillez vous référer à la do-
TINYINT : Entier entre -128 et 127. (Ou 0 255 pour les nombres non signés). cumentation de votre SGBD
pour les différents types qu’il
INT (ou INTEGER) : Entier (signé ou pas) sur 4 octets. propose.
2
Les contraintes d’intégrité
NOT NULL : Les valeurs nulles ne sont pas autorisées (le champ doit être rensei-
gné).
UNIQUE : La colonne ne peut contenir la même valeur plus d’une fois.
PRIMARY KEY : La colonne est une clé primaire.
CHECK : La, ou les colonnes, doivent satisfaire une certaine condition.
CASCADE : Cascader la suppression quand l’enregistrement de la clé étrangère
est supprimé.
SET NULL : Mettre à NULL la colonne quand l’enregistrement de la clé étrangère
est supprimé.
SET DEFAULT : Affecter la valeur par défaut lorsque la colonne quand l’enregis-
trement de la clé étrangère est supprimé.
RESTRICT : Rejeter la suppression (ou la mise à jour).
Ces contraintes peuvent être définies pour une seule colonne (au niveau de la
colonne elle-même) ou de plusieurs colonnes (comme des contraintes de table).
Elles peuvent être établie à la création de la table, ou à sa modification (ALTER
TABLE).
Modification de tables
3
Création et suppression d’index
Les index permettent d’optimiser les requêtes sur les tables. Ils peuvent être définis
sur une seule ou plusieurs colonnes à la fois. Notez que la contrainte [PRIMARY
KEY] créé automatiquement un index sur la colonne en question.
Pour créer un index :
Pour en supprimer :
Exemple :
Exemple: Création d’un index
4
DELIMITER // -- Le délimiteur n’est plus le point-virgule
CREATE TRIGGER [IF NOT EXISTS] trigger_Name
(BEFORE | AFTER) [INSERT | UPDATE | DELETE] ON [nable_Name]
FOR EACH ROW
BEGIN
[trigger_body]
END//
DELIMITER ; -- Le délimiteur est remis à sa valeur (point-virgule).
Comme vous l’avez remarqué dans l’exemple précédent, nous avons utilisé le
mot-clé new. Nous avons aussi un autre : old. Ces deux mots-clés réfèrent aux
enregistrements (nouveaux ou anciens) de la table en question. Par exemple : new
n’est défini que pour les commandes INSERT et UPDATE, alors que old n’est défini
que pour les instructions UPDATE et DELETE. Ce qui est tout à fait normal.
Car à l’insertion, il n’y a pas
d’enregistrement ancien (donc
pas de old et à la suppression,
3 SQL : LMD il n’y a pas de nouveau en-
registrement et donc pas de
Nous verrons dans ce qui suit les principales opérations de manipulations de new.
données offertes par SQL. Notons que cette revue n’est pas exhaustive car le langage
SQL est assez vaste, mais donne une idée générale de ce qui est possible.
Les commandes SQL permettant de manipuler les données sont : INSERT, UPDATE,
DELETE, et SELECT. Elles permettant respectivement d’insérer de nouveaux enregis-
trements, de les mettre à jour, de les supprimer, et de les afficher (rechercher).
5
3.1 Insertion de nouveaux enregistrements
L’insertion de nouveaux enregistrements obeït à la syntaxe suivante :
La liste des colonnes est optionnelle, elle spécifie quelles colonnes sont renseignées
et dans quel ordre. Si cette liste de colonnes est omise, les valeurs doivent être
renseignées dans l’ordre de leur définition lors de la création de la table.
Remarque : Les colonnes non renseignées se verront affecter la valeur NULL.
Exemple: Insertion de plusieurs enregistrements
L’insertion peut aussi se faire avec des tuples issus d’un SELECT comme suit :
Par exemple, pour supprimer tous les produits en rupture de stock, nous pouvons
faire ceci :
6
Exemple: Suppression d’enregistrements qui satisfont une condition.
Quand on ne précise pas de clause WHERE, tous les enregistrements seront affectés
que cela soit pour un UPDATE ou un DELETE.
WHERE : est une clause qui spécifie une condition (ou combinaison de condi-
tions) que les enregistrements doivent satisfaire pour être retournés par la
requête.
GROUP BY : Permet de regrouper des enregistrements qui ont des colonnes (ou
des valeurs calculées) en commun.
HAVING : Permet de filtrer les groupes (issus de GROUP BY) selon une condition
donnée.
ORDER BY : Permet de trier les résultats de la requête sur une ou plusieurs
colonnes (par ordre ascendant ASC ou descendant DESC.
7
Exemple: Une table de produits.
Nous voulons afficher tous les produits dont la quantité est supérieure à 10 :
Exemple:
Afficher les catégories ainsi que le nombre de produits par catégorie, mais n’affi-
cher que les catégories qui ont plus de 5 produits.
Exemple:
Notez aussi que les résultats des requêtes SELECT peuvent être combinés avec des
opérateurs d’ensembles comme l’union (UNION), l’intersection (INTERSECT), etc.
Par ailleurs, les requêtes SELECT peuvent être imbriquées.
Par exemple, pour afficher les catégories des produits en rupture de stock, nous
pouvons faire :
8
Exemple:
Pour revenir un peu sur les triggers, imaginez que l’on veuille réaffecter les
produits dont les catégories ont été supprimées à la catégorie (1, ’NO CATEGORY’),
nous écrivons ceci :
Exemple:
SQL nous offre la possibilité de définir des vues sur les données, ces vues sont
souvent appelées tables virtuelles car elles n’ont pas d’existence physique proprement
dite.
Les vues offrent plusieurs avantages tels que :
Pour créer une vue, nous utilisons la commande CREATE VIEW dont la syntaxe
simplifiée est comme suit :
Autrement dit, la vue est céée comme un raccourci pour un SELECT aussi complexe
puisse-t-il être. Par exemple, nous pouvons reprendre l’exemple de la jointure des
produits et des catégories ci-dessus comme suit :
9
Exemple: Exemple de vues.
Et désormais les applications peuvent utiliser cette vue comme si c’était une table
réelle comme suit :
Exemple:
Pour supprimer une vue, il suffit d’utiliser la commande DROP VIEW comme suit :
4 SQL : LCD
En plus des contraintes d’intégrité citées plus haut, SQL offre aussi la possibilité
de définir des règles de contrôle d’accès aux données. En effet, dans un contexte
client-serveur, où plusieurs clients peuvent se connecter au serveur (SGBD) et y
soumettre des requêtes, il serait judicieux de définir qui peut faire quoi avec les
données stockées et gérées par le SGBD.
Pour ce, SQL définit des utilisateurs (USER) et des des privilèges.
Exemple:
Dans cet exemple, le mot de passe ’SGBD’ sera haché avant d’être mis sur le
serveur.
Exemple:
SELECT PASSWORD(’SGBD’)
10
Exemple:
Pour lister les utilisateurs des SGBD MySQL (ou MariaDB), il suffit d’effectuer un
SELECT sur la table mysql.user :
Où privilege peut concerner une base de données ou des tables. Par exemple,
parmi les privilèges sur les base de données, nous pouvons citer : CREATE, DROP,
CREATE TEMPORARY TABLE, etc.
Et les privilèges sur les tables : ALTER, CREATE, DROP, INDEX, INSERT, SELECT,
UPDATE, DELETE, etc.
Quant à la spcéfication de columns dans la syntaxe sus-citée, elle permet de
préciser des privilèges sur les colonnes d’une table donnée, et peut être utilisée dans
INSERT (columns), SELECT columns, ou UPDAET columns.
Par ailleurs, privilege_level permet de spécifier de façon générale le niveau de
privilèges, tel qu’indiqué ici :
*.* : Permet de tout gérer : les bases, les tables, les utilisateurs, etc.
db_name.* : Permet de gérer toutes les tables d’une base de données db_name.
db_name.table_name : Permer de gérer la table table_name de la base de
données db_name.
11
Voyons quelques exemples de la commande GRANT :
Exemple: Tous les droits à l’utilisateur dba
Par exemple, on peut accorder le droit à l’utilisateur moi de modifier les valeurs
le % à la place du host signifie
de la colonne name de la table categories de la base de données joins. quelque soit le host.
Exemple:
Pour afficher les privilèges accordés à un utilisateur donné, nous utilons la com-
mande SHOW GRANTS comme suit :
Exemple:
Par exemple, pour retirer à l’utilisateur test le droit de supprimer des catégories,
nous pouvons faire ceci :
Exemple:
5 Références
1. https://mariadb.com/kb/en/documentation/
2. https://sqlite.org/lang.html
3. https://www.postgresql.org/docs/current/sql.html
Rédaction collaborative
12