La programmation SQL avancée est essentielle pour maîtriser l'interaction avec les bases de
données à un niveau plus poussé. Voici un aperçu des principaux concepts que tu as
mentionnés :
I. Fondements du SQL programming
1. Requêtes SQL de base : Les requêtes SQL sont principalement utilisées pour
interroger, insérer, mettre à jour et supprimer des données. Ces commandes sont
souvent les plus utilisées :
o SELECT : Pour extraire des données.
o INSERT : Pour insérer des nouvelles données.
o UPDATE : Pour mettre à jour des données existantes.
o DELETE : Pour supprimer des données.
2. Joins : L'utilisation des jointures (INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL
OUTER JOIN) est cruciale pour combiner des données de plusieurs tables.
3. Sous-requêtes (Subqueries) : Les sous-requêtes sont des requêtes imbriquées dans
d'autres requêtes, permettant de récupérer des résultats pour les utiliser dans des
conditions de filtrage ou des calculs.
4. Fonctions d'agrégation : Utilisation de fonctions comme COUNT(), SUM(), AVG(),
MAX(), et MIN() pour effectuer des calculs sur les données.
5. Groupement des données : GROUP BY pour regrouper des enregistrements
similaires et HAVING pour filtrer ces groupes.
II. Les Triggers
Un trigger (ou déclencheur) est un ensemble de règles ou d'instructions qui s'exécutent
automatiquement lorsqu'un événement spécifique se produit dans une base de données.
Cela permet de maintenir l'intégrité des données ou de lancer certaines actions en réponse
à des changements dans les tables. Les types de triggers sont :
1. BEFORE Trigger : Exécuté avant qu'une opération (INSERT, UPDATE, DELETE)
ne soit effectuée.
2. AFTER Trigger : Exécuté après qu'une opération ait été effectuée.
3. INSTEAD OF Trigger : Remplace l'opération de base par l'instruction définie dans le
trigger.
Exemple de trigger :
CREATE TRIGGER exemple_trigger
AFTER INSERT ON commandes
FOR EACH ROW
BEGIN
UPDATE produits SET stock = stock - [Link]
WHERE id_produit = NEW.id_produit;
END;
III. Les fonctions et procédures stockées
1. Fonctions stockées : Ce sont des ensembles de requêtes SQL qui sont encapsulés et
stockés dans la base de données pour être réutilisés. Elles retournent généralement une
valeur unique et peuvent être utilisées directement dans des requêtes SQL.
Exemple :
CREATE FUNCTION get_total_price(product_id INT)
RETURNS DECIMAL(10,2)
BEGIN
DECLARE total DECIMAL(10,2);
SELECT price * quantity INTO total
FROM order_items
WHERE product_id = product_id;
RETURN total;
END;
2. Procédures stockées : Contrairement aux fonctions, une procédure stockée n'a pas
besoin de retourner une valeur. Elle peut être utilisée pour effectuer une série
d'opérations complexes comme des mises à jour multiples, des suppressions, ou des
calculs.
Exemple :
CREATE PROCEDURE update_order_status(order_id INT, status VARCHAR(20))
BEGIN
UPDATE orders
SET order_status = status
WHERE id = order_id;
INSERT INTO order_logs (order_id, action, action_time)
VALUES (order_id, CONCAT('Status updated to ', status), NOW());
END;
IV. Traitement et gestion des erreurs
Dans SQL, la gestion des erreurs est cruciale pour s'assurer que les opérations se déroulent
sans interruption et de manière contrôlée. Chaque système de gestion de base de données
(SGBD) peut avoir ses propres mécanismes de gestion des erreurs. Voici quelques concepts
clés :
1. Gestion des erreurs dans les procédures : De nombreux SGBD, comme MySQL et
PostgreSQL, permettent d'utiliser des blocs TRY...CATCH (ou équivalents) pour
capturer les erreurs et prendre des actions appropriées.
Exemple (dans SQL Server) :
BEGIN TRY
-- Code qui peut provoquer une erreur
INSERT INTO clients (name, age) VALUES ('Mohammed', '41');
END TRY
BEGIN CATCH
-- Actions à réaliser en cas d'erreur
PRINT 'Une erreur est survenue';
PRINT ERROR_MESSAGE();
END CATCH;
2. Transaction et rollback : Utiliser des transactions pour regrouper plusieurs
opérations. Si une erreur se produit pendant une transaction, un ROLLBACK permet
d'annuler toutes les modifications effectuées durant cette transaction.
Exemple :
BEGIN TRANSACTION;
BEGIN TRY
UPDATE comptes SET solde = solde - 100 WHERE id = 1;
UPDATE comptes SET solde = solde + 100 WHERE id = 2;
COMMIT; -- Valider la transaction
END TRY
BEGIN CATCH
ROLLBACK; -- Annuler si erreur
PRINT 'Erreur de transaction';
END CATCH;
Cela permet d'assurer la cohérence des données même en cas de défaillance pendant les
opérations.
En résumé, la programmation SQL avancée te permet de créer des solutions efficaces,
d'automatiser des processus, de maintenir l'intégrité des données, et de traiter les erreurs de
manière professionnelle.