Commandes SQL

Le Structured Query Language, représenté par l’abréviation SQL, compte parmi les langages de programmation les plus connus. Il fait office d’interface universelle permettant le travail avec des données relationnelles ou des systèmes de gestion de base de données relationnelle (SGBDR). Ce langage est caractérisé par un nombre déconcertant de commandes SQL. Nous allons vous présenter les plus importantes, ainsi que leurs modèles sous-jacents.

Domaine Internet pas cher

Bien plus qu'un simple domaine !

Personnalisez votre présence en ligne avec un nom de domaine pertinent.

Email
Certificat SSL
Assistance 24/7
Conseil

Consultez notre article d’introduction à SQL à l’aide d’exemples pour découvrir la programmation avec SQL.

Commandes SQL : qu’est-ce que c’est ?

Les commandes SQL permettent d’ordonner à un système de gestion de base de données (SGBD) d’exécuter certaines tâches. Il peut notamment s’agir de définir des tables et leur structure, d’insérer, de modifier ou de supprimer des données et d’effectuer des requêtes.

Différentes normes ISO ou ANSI encadrent la portée des commandes SQL. De plus, il existe plusieurs dialectes spécifiques à l’implémentation. De cette manière, les implémentations des principaux fournisseurs tels que PostgreSQL, MySQL, Oracle DBMS et Microsoft SQL Server disposent toutes de leur propre variante pour ce langage. Certains fournisseurs possèdent leurs propres commandes ; la plupart du temps, leurs différences concernent surtout les fonctions liées au traitement des chaînes de caractères et d’autres données.

En réalité, SQL est composé de plusieurs sous-langages, chacun d’eux portant sur un domaine différent et bénéficiant de ses propres commandes. Découvrez avec nous les principaux types de commandes SQL.

Quels sont les différents types de commandes SQL ?

De façon approximative, il est possible de répartir les commandes SQL les plus importantes en cinq sous-langages. Voici, pour chaque sous-langage, un aperçu de son domaine d’utilisation et de ses commandes :

Sous-langage SQL Commandes Exemples
Data Definition Language (DDL) Commandes de définition du schéma de la base de données : création, modification et suppression de tables de la base de données ; définition des clés primaires, des clés étrangères et des contraintes CREATE TABLE, DROP TABLE
Data Manipulation Language (DML) Commandes de manipulation des données : modification, insertion et suppression d’ensembles de données INSERT, UPDATE
Data Query Language (DQL) Commandes d’interrogation et de préparation des données SELECT
Data Control Language (DCL) Commandes de gestion des autorisations GRANT, REVOKE
Transaction Control Language (TCL) Commandes de contrôle des transactions COMMIT, ROLLBACK

Quelles sont les bases de la syntaxe des commandes SQL ?

SQL est un langage déclaratif, ce qui le distingue de la plupart des autres langages de programmation populaires. En d’autres termes, il décrit le résultat à atteindre sans pour autant préciser les étapes exactes qu’il convient de suivre pour arriver à cet objectif. Cette particularité donne un langage avec des commandes qui sont souvent plus longues, mais qui nécessite généralement moins de lignes de code que les langages impératifs, plus conventionnels.

À titre d’exemple, intéressons-nous à la commande SQL « DROP TABLE IF EXISTS ». Comme vous l’avez sans doute compris, cette commande unique permet de supprimer une table si celle-ci existe déjà :

DROP TABLE IF EXISTS SomeTable;

Pour créer un exemple de code aux fonctions similaires avec Python, il est nécessaire d’appeler plusieurs d’entre elles, avec une ramification sur deux lignes différentes :

if db.has_table(some_table):
    db.drop_table(some_table)

Comme vous avez pu le constater, une seule commande SQL peut contenir plusieurs mots-clés. Ainsi; les différentes commandes se ressemblent sur le plan visuel. Prenons par exemple les deux commandes SQL « CREATE TABLE » et « CREATE OR REPLACE VIEW » ; si, de prime abord, elles semblent toutes deux être des expressions d’une commande « CREATE » sous-jacente, il n’en est rien. Ces commandes se ressemblent, mais elles sont totalement indépendantes l’une de l’autre.

Comme c’est également le cas d’autres langages, certaines commandes SQL peuvent prendre en charge des paramètres. La plupart du temps, il s’agit de noms de bases de données, de tables ou de colonnes. Ici, nous pouvons par exemple interroger les colonnes « Name » (nom) et « Age » (âge) de la table « People » (personnes) :

SELECT Name, Age FROM People;
Note

Les commandes SQL telles que SELECT et CREATE TABLE s’écrivent généralement en majuscules. En réalité, SQL ne fait toutefois aucune distinction entre les majuscules et les minuscules. Il ne s’agit donc là que d’une convention très répandue.

En réalité, les commandes SQL correspondent plutôt à des instructions. Il existe d’autres constructions syntaxiques qui, dans une certaine mesure, agissent également comme des commandes. Voici une présentation des principaux éléments syntaxiques du langage SQL :

Terme Équivalent anglais Explication Exemple
Instruction Statement Ordonne au système de gestion de base de données relationnelle d’effectuer une action et se termine par un point-virgule CREATE TABLE People;
Clause Clause Modifie une instruction et ne peut apparaître qu’à l’intérieur de celle-ci WHERE, HAVING
Expression Expression Renvoie une valeur lors de l’évaluation 6 * 7
Identificateur Identifier Représente le nom d’un objet de la base de données, d’une variable ou d’une procédure et peut être qualifié ou non dbname.tablename / tablename
Prédicat Predicate Renvoie, en tant qu’expression, une valeur TRUE, FALSE ou UNKNOWN Age < 42
Requête Query Renvoie, en tant qu’instruction spéciale, l’ensemble de données trouvé comme résultat SELECT Name FROM People WHERE Age < 42;
Fonction Function Traite une ou plusieurs valeurs, généralement pour en créer une nouvelle UPPER('text') -- Renvoie ’TEXT’
Commentaire Comment Permet de commenter le code SQL, mais n’est pas pris en compte par le système de gestion de base de données relationnelle -- Commentaire jusqu’à la fin de la ligne / /* Commentaire sur plusieurs lignes, le cas échéant */

Présentation des principales commandes SQL

Une base de données structure ses données de manière hiérarchique à l’aide de différentes couches de mémoire, qui vont du serveur de la base de données jusqu’à la valeur enregistrée dans un champ. Étant donné que SQL est en mesure de contrôler tous les aspects d’un système de gestion de base de données relationnelle (SGBDR), des commandes SQL existent pour chacune des couches susmentionnées. Voici un aperçu de la hiérarchie des différents objets d’un système de gestion de base de données relationnelle :

Objet de système de gestion de base de données relationnelle Contenu
Serveur Bases de données
Base de données Tables
Table Ensembles de données
Ensemble de données Champs
Champ Valeur d’un type donné

En plus des principaux objets des systèmes de gestion de base de données relationnelle présentés ci-dessus, il est également possible d’utiliser d’autres objets tels que les vues (Views) et les procédures stockées (Stored Procedures). Des commandes SQL propres à chacun de ces objets existent également. Découvrons à présent les commandes relatives aux cinq sous-langages principaux de SQL :

  1. Data Definition Language (DDL) : langage de définition des données
  2. Data Manipulation Language (DML) : langage de manipulation des données
  3. Data Query Language (DQL) : langage d’interrogation des données
  4. Data Control Language (DCL) : langage de contrôle des données
  5. Transaction Control Language (TCL) : langage de contrôle des transactions

Commandes SQL pour la définition de données

Avec ces commandes SQL, vous pouvez définir des structures de données. Toutes ces commandes agissent sur des objets agrégés, comme les bases de données, les tables ou encore les index. Un objet agrégé peut stocker plusieurs ensembles de données ; un ensemble de données va quant à lui contenir plusieurs champs, chacun de ces champs étant associé à une colonne. La colonne permet de définir le type de données contenu par le champ (un nombre, une chaîne de caractères, une valeur booléenne…). Il est de plus possible de spécifier des restrictions pour les valeurs de ces colonnes : « doit être unique », « ne peut pas être nulle », etc.

Commandes SQL pour la définition de bases de données

Les bases de données sont toujours au sommet des systèmes de gestion de base de données relationnelle (SGBDR). Des commandes SQL permettent de créer ou encore de supprimer celles-ci :

Commande SQL Explication Exemple
CREATE DATABASE Créer une nouvelle base de données CREATE DATABASE Store;
DROP DATABASE Supprimer entièrement la base de données DROP DATABASE Store;
USE Sélectionner la base de données pour les commandes à venir USE Store;

Commandes SQL pour la définition de tables

Pour créer une base de données, il faut d’abord définir son schéma. Celui-ci est essentiel si vous voulez utiliser efficacement votre base de données. Il nécessite une conception des plus méticuleuses et une représentation des différentes tables et de leurs associations. En règle générale, le schéma d’une base de données se développe à partir de diagrammes entité-association ou de diagrammes UML spécifiques.

Le schéma de la base de données prend donc la forme d’une description abstraite, tandis que sa structure se crée en utilisant les commandes SQL correspondantes. La définition des tables s’effectue avec leurs colonnes et leurs types, et les éventuels liens entre celles-ci sont matérialisés par des Foreign Keys (c’est-à-dire des « clés étrangères »). Vous avez toujours la possibilité de modifier cette structure par la suite, à l’aide d’autres commandes SQL. Découvrez avec nous les principales commandes que vous pouvez utiliser :

Commande SQL Explication Exemple
CREATE TABLE Créer une nouvelle table dans la base de données ; vous pouvez définir le nom des colonnes et leurs types en plus du nom de la table CREATE TABLE Customers ( CustomerID INT UNSIGNED NOT NULL AUTO_INCREMENT, CustomerName VARCHAR(255) NOT NULL, Country VARCHAR(60) NOT NULL, PRIMARY KEY (CustomerID) );
ALTER TABLE Modifier une table existante ; vous pouvez insérer ou supprimer des colonnes, mais aussi en modifier le type ou le nom ALTER TABLE Customers ADD Email VARCHAR(50);
TRUNCATE TABLE Supprimer toutes les données d’une table ; vous pouvez toutefois en conserver la structure TRUNCATE TABLE Customers;
DROP TABLE Supprimer entièrement une table ; si celle-ci n’existe pas, une erreur est signalée au moment de l’exécution DROP TABLE Customers;
DROP TABLE IF EXISTS Supprimer une table, à la condition que celle-ci existe DROP TABLE IF EXISTS Customers;
ALTER COLUMN Modifier le type de données d’une colonne existante ALTER TABLE Customers ALTER COLUMN Email VARCHAR(255);
DROP COLUMN Supprimer entièrement une colonne de la table concernée ALTER TABLE customers DROP COLUMN Email;
CREATE INDEX Créer un index avec un nom pour une ou plusieurs colonnes d’une table existante CREATE INDEX IdxEmail ON Customers (Email);
DROP INDEX Supprimer un index existant ALTER TABLE Customers DROP INDEX IdxEmail;

L’une des propriétés importantes des systèmes de gestion de base de données (SGBD) consiste à garantir la cohérence des données. Vous pouvez donc décider que les champs de certaines colonnes ne doivent pas être vides ou que les valeurs contenues par ceux-ci doivent rester dans les limites autorisées. Il s’agit là de Constraints (contraintes). De la même manière, les Foreign Keys (ou clés étrangères) permettent d’exiger l’établissement de liens corrects entre plusieurs tables.

Il suffit d’utiliser une série de clauses dans les instructions relatives à la définition des données pour spécifier les contraintes applicables aux différentes colonnes. Voici quelques-unes de ces contraintes (sans exemple) :

Commande SQL Explication
NOT NULL La valeur du champ concerné ne peut pas être nulle
UNIQUE La valeur du champ concerné ne peut pas apparaître deux fois dans la même colonne
DEFAULT Une valeur par défaut est définie pour le champ ; elle s’applique si aucune valeur n’est indiquée pour le champ concerné au moment de la création de l’ensemble de données
CHECK La valeur du champ doit remplir une condition
PRIMARY KEY Le champ contient la clé primaire (implique les commandes « UNIQUE » et « NOT NULL »)
FOREIGN KEY La valeur du champ doit être une clé primaire issue d’une autre table

Commandes SQL pour la manipulation de données

Si les tables de votre base de données sont déjà définies, vous devez vous occuper des opérations sur les différents ensembles de données. En utilisant les commandes SQL appropriées, vous pouvez insérer, modifier et supprimer des ensembles de données. Dans ce contexte, il est également question des opérations CRUD de base (Create, Read, Update, Delete, soit « Créer, lire, mettre à jour et supprimer »), qui se retrouvent également dans les bases de données NoSQL :

Commande SQL Explication Exemple
INSERT INTO Insérer un ensemble de données dans une table INSERT INTO Customers (CustomerName) VALUES('Tester');
UPDATE Modifier les champs d’un ou de plusieurs ensembles de données UPDATE Customers SET Email = 'test@example.com' WHERE CustomerName = 'Tester';
DELETE FROM Supprimer des ensembles de données d’une table DELETE FROM Customers WHERE CustomerName = 'Tester';

Attention : les clauses ou les fonctions « WHERE », « SET » et « VALUES » que vous voyez dans les exemples ci-dessus peuvent également apparaître dans d’autres situations. Elles portent toujours le même nom, mais les règles encadrant leur utilisation peuvent toutefois légèrement différer. Nous vous conseillons donc de faire preuve de prudence lorsque vous utilisez les commandes SQL « UPDATE » et « DELETE FROM » sans la clause « WHERE ». Si vous le faites, sachez que tous les ensembles de données contenus dans la table concernée seront modifiés ou supprimés.

Commandes SQL pour l’interrogation des données

La commande « SELECT » est peut-être la plus connue parmi toutes celles que compte le langage SQL. Elle vous permet en effet d’interroger les données d’une base de données. En règle générale, cela n’a pas pour effet de modifier la base de données. Il n’est donc pas rare que la commande « SELECT » soit mise à la disposition des analystes. Découvrons ensemble les principaux composants de la commande SQL « SELECT » :

Commande SQL Explication Exemple
SELECT Interroger les données de la base de données concernée SELECT CustomerName FROM Customers;
WHERE Limiter la requête aux enregistrements de données répondant à un prédicat donné SELECT Email FROM Customers WHERE CustomerName = 'Tester';
AS Définir un alias pour une table ou une ligne dans une requête SELECT CustomerID AS ID, CustomerName AS Customer FROM Customers;
HAVING Limiter la requête aux ensembles de données pertinents en utilisant la fonction d’agrégation SELECT COUNT(CustomerID), Country FROM Customers HAVING COUNT(CustomerID) >= 1;

La commande SQL « SELECT » est la seule qui permet d’interroger des données, mais ses possibilités d’utilisation sont nombreuses. Il existe en effet une série de clauses pouvant vous aider à filtrer, trier et regrouper les données générées ; découvrez-les ci-après.

Commandes SQL pour l’amélioration des requêtes

La commande SQL « SELECT » renvoie invariablement un Result Set, ou « jeu de résultats ». D’un point de vue conceptuel, un jeu de résultats peut être représenté comme une table avec des colonnes contenant des valeurs. D’un point de vue pratique, il est souvent nécessaire de filtrer ces résultats, de les trier ou encore de limiter le nombre d’ensembles de données générés. Pour chaque cas d’utilisation, il existe une clause que vous pouvez utiliser dans le cadre de votre commande SQL « SELECT » :

Commande SQL Explication Exemple
DISTINCT Supprimer tout doublon du jeu de résultats SELECT DISTINCT Country FROM Customers;
LIMIT Limiter le jeu aux résultats les plus élevés SELECT * FROM Customers LIMIT 5;
GROUP BY Regrouper les résultats en un jeu sur la base d’une caractéristique commune SELECT CustomerName, Country FROM Customers GROUP BY Country;
ORDER BY Trier le jeu de résultats sur la base d’une caractéristique SELECT CustomerName, Email FROM Customers SORT BY CustomerName;
ASC Utiliser la fonction de tri dans l’ordre croissant (ascending) SELECT DISTINCT Country FROM Customers SORT BY Country ASC;
DESC Utiliser la fonction de tri dans l’ordre décroissant (descending) SELECT DISTINCT Country FROM Customers SORT BY Country DESC;

Commandes SQL pour l’association de requêtes

En plus d’améliorer votre jeu de résultats, vous pouvez également combiner des requêtes sur plusieurs tables. À titre de rappel, une commande SQL « SELECT » renvoie un jeu de résultats. Certaines commandes SQL peuvent donc, conformément aux règles de la théorie des ensembles relationnels, vous permettre de fusionner deux jeux de résultats.

Pour vous expliquer dans le détail le fonctionnement des commandes SQL permettant d’associer des requêtes, nous devrions faire appel à des exemples plus complexes, avec la définition de plusieurs tables. Ici, nous avons donc choisi de ne vous présenter aucun exemple de code. Découvrons ensemble les principales opérations que vous pouvez utiliser dans ce contexte :

Commande SQL Explication
UNION Associer deux jeux de résultats, dont les colonnes doivent être du même type et dans le même ordre ; leurs lignes sont ainsi fusionnées
INNER JOIN Filtrer deux jeux de résultats sur la base d’un critère commun
LEFT JOIN Associer le jeu de résultats de la requête de gauche aux résultats correspondants de la requête de droite ; si les champs ne correspondent pas, leur valeur devient nulle
RIGHT JOIN Associer le jeu de résultats de la requête de droite aux résultats correspondants de la requête de gauche ; si les champs ne correspondent pas, leur valeur devient nulle
FULL OUTER JOIN Combiner les commandes « LEFT JOIN » et « RIGHT JOIN »

Commandes SQL pour la sauvegarde et la répétition de requêtes

Comme nous avons pu le voir, les requêtes SQL peuvent s’avérer assez complexes dans certaines circonstances. Dans les faits, il est souvent judicieux de répéter ces requêtes. En principe, il est possible de sauvegarder les commandes SQL concernées sous forme de code, puis de s’en servir en cas de besoin. Cette méthode n’est toutefois pas très efficace. Fort heureusement, des commandes SQL spéciales permettent de sauvegarder des requêtes complexes directement dans le système de gestion de base de données concerné, et ce, en tant qu’entités.

Pour commencer, intéressons-nous aux vues (Views en anglais). Une vue de la base de données correspond approximativement à une requête enregistrée. À titre de rappel, une requête renvoie un jeu de résultats présenté sous la forme d’une table. Au lieu d’ignorer ce jeu, nous choisissons de l’enregistrer en tant que vue. Le terme de « table virtuelle » est donc également utilisé pour désigner une vue. De manière générale, il n’est possible d’accéder à une vue qu’en mode lecture. Quelques commandes SQL peuvent vous permettre de travailler avec les vues :

Commande SQL Explication Exemple
CREATE VIEW Créer une nouvelle vue CREATE VIEW GermanCustomers AS SELECT CustomerName, Email FROM Customers WHERE Country = "DE";
ALTER VIEW Modifier une vue existante ALTER VIEW GermanCustomers AS SELECT * FROM Customers WHERE Country = "DE";
CREATE OR REPLACE VIEW Créer une nouvelle vue ou, le cas échéant, remplacer une vue existante CREATE OR REPLACE VIEW GermanCustomers AS SELECT * FROM Customers WHERE Country = "DE";
SHOW CREATE VIEW Afficher la commande SQL utilisée pour créer la vue en question SHOW CREATE VIEW GermanCustomers;
DROP VIEW Supprimer une vue existante DROP VIEW GermanCustomers;

En plus des vues de la base de données, vous pouvez tirer parti des « procédures stockées » (Stored Procedures en anglais). Les procédures stockées vous permettent de répéter certaines requêtes et sont donc plus complexes que les vues. Elles peuvent prendre en charge des paramètres, et ainsi assembler des requêtes de façon dynamique. Une procédure stockée peut en outre vous permettre de bénéficier d’un accès en écriture aux données sous-jacentes. Nous vous présentons ci-dessous les commandes SQL correspondantes, mais nous ne disposons pas d’assez de place pour vous proposer des exemples :

Commande SQL Explication
CREATE PROCEDURE Créer une nouvelle procédure
ALTER PROCEDURE Modifier une procédure existante
CREATE OR REPLACE PROCEDURE Créer une nouvelle procédure ou, le cas échéant, remplacer une procédure existante
DROP PROCEDURE Supprimer une procédure existante
CALL Exécuter une procédure stockée

En utilisant une procédure stockée, vous déplacez le code du client vers le serveur. Une fois cette séparation effectuée, vous bénéficiez d’une plus grande sécurité et de meilleures performances. Si la « logique métier » contenue dans une procédure stockée se trouve en dehors du système de contrôle de version, cela peut vous être dommageable. Comme les procédures stockées sont largement tributaires du système de gestion de base de données qui les entourent, un changement de fournisseur peut, dans le pire des scénarios, entraîner une perte de fonctionnalité.

Note

Attention à ne pas confondre les Stored Procedures (procédures stockées) avec les Prepared Statements (instructions préparées). Ces deux mécanismes ont certes pour objectif d’améliorer la sécurité, mais les Prepared Statements se définissent plutôt du côté de l’application client.

Commandes SQL pour le contrôle des accès

Un seul serveur de bases de données peut renfermer plusieurs bases de données. Si vous souhaitez les administrer indépendamment les unes des autres, vous pouvez mettre en place des mécanismes de contrôle des accès. Vous avec donc la possibilité de définir le niveau des droits d’accès de chaque utilisateur aux bases de données et aux tables que celles-ci contiennent. Vous pouvez en outre créer des groupes dans lesquels vous pouvez catégoriser vos utilisateurs. Pour ce faire, deux commandes SQL sont particulièrement adaptées :

Commande SQL Explication Exemple
GRANT Accorder un droit d’accès GRANT ALL ON SomeDB.* TO 'john'@'localhost';
REVOKE Révoquer un droit d’accès REVOKE INSERT ON *.* FROM 'john'@'localhost';

Commandes SQL pour le contrôle des transactions

Les garanties apportées par les propriétés ACID constituent l’un des avantages de l’utilisation des systèmes de gestion de base de données relationnelles (SGBDR). Pour faire court, elles garantissent la bonne organisation et la bonne définition de vos données. Sur le plan technique, elles utilisent des transactions indivisibles sous la forme d’Atomic Operations (« opérations atomiques »). Soit la transaction est exécutée entièrement et sans aucune erreur, soit une erreur se produit et les différentes étapes sont alors annulées. Découvrons ensemble les commandes SQL pour le contrôle des transactions :

Commande SQL Explication Exemple
START TRANSACTION Marquer le début d’une transaction START TRANSACTION;
COMMIT Mener à bien une transaction entamée START TRANSACTION; TRUNCATE TABLE Customers; COMMIT;
ROLLBACK Interrompre une transaction entamée et restaurer les données de manière à ce qu’elles retrouvent leur état initial START TRANSACTION; TRUNCATE TABLE Customers; ROLLBACK;
SAVEPOINT Créer un point de sauvegarde avec un nom au sein d’une transaction START TRANSACTION; SAVEPOINT BeforeAddData;
ROLLBACK TO Revenir à un point de sauvegarde avec un nom ROLLBACK TO BeforeAddData;

Présentation des propriétés ACID mentionnées ci-avant :

Propriété ACID Équivalent français Explication
Atomicity Atomicité Les transactions sont « indivisibles ». Cela signifie qu’elles s’exécutent entièrement ou pas du tout. Si vous interrompez une transaction atomique, le système revient à l’état dans lequel il se trouvait avant le début de ladite transaction.
Consistency Cohérence Après l’exécution d’une transaction, les données réapparaissent sous une forme cohérente.
Isolation Isolation Les transactions simultanées ne doivent pas avoir d’effet les unes sur les autres.
Durability Durabilité Les conséquences d’une transaction sur les données concernées doivent être durables. Les résultats d’une transaction réussie ne doivent pas disparaître dans le cas, par exemple, d’une panne du SGBDR.
Conseil

Épinglez notre guide numérique à votre barre des tâches Windows. De cette manière, vous pourrez toujours vous référer facilement à nos différents articles. Pour ce faire, consultez le lien correspondant à votre situation :