Vous appréciez mon travail ? Je serais ravi de prendre un café !

Vous prenez du plaisir à lire mes articles ? Vous apprenez de nouvelles choses ? Je serais ravis que vous supportiez mon travail avec une petite participation

1 café Merci, vous financez ma dose quotidienne de théïne (oui, en vrai je ne bois pas de café).
5 cafés Génial, ça couvre mes frais de serveur mensuels.
10 cafés Fantastique, avec ça je peux investir dans du matériel et approfondir mes connaissances.
BazinGa's - Tips & tuto IT

PostgreSQL – Vade-mecum SQL – 1/8 – Introduction : La quête de la requête parfaite

Principe de requêtage

Dans le SQL…

Tout est requête.

La Nouvelle Revue Française, Tome XIII, NRF – Paris – 1919, p390 ligne 13

Que vous souhaitiez importer, modifier ou encore afficher vos données, vous allez utiliser des requêtes.

Le principe des requêtes SQL est simple :

  • On pose une question : la requête.
  • Le serveur nous répond : la réponse.

Ainsi, nous allons apprendre comment poser des questions au serveur pour qu’il travaille pour nous.

Par exemple, pour l’ajout de donnée, comme nous sommes très polis, nous demandons au serveur si dans son extrême amabilité il accepterait d’insérer nos données (avec bienveillance). Il s’exécutera alors puis nous répondra bien cordialement « ok, c’est fait, j’ai inséré X lignes » (oui bien que nous soyons très polis, le serveur utilise son propre argot que nous décoderons).

Aussi performant qu’ils soient, les serveurs ne laissent aucune place à la diplomatie. Ainsi, vous devrez donc respecter leurs codes et leurs langages à la lettre si vous souhaitez travailler avec eux. Heureusement, ils ne sont aucunement rancuniers et vous indiquerons immédiatement l’erreur commise si vous leur manquez de politesse et pourrez dans la foulée leur reposer votre question.

Sans plus attendre lançons vos premières requêtes. Pour cela, rendez vous dans votre client SQL préféré (DBeaver ?). Pour rappel, dans DBeaver clic droit sur une connexion puis sélectionnez « Editeur SQL » et dans pgAdmin cliquez sur la « loupe SQL » dans le menu du haut, une fenêtre s’ouvre.

Voici une requête toute simple que vous pouvez tester :

-- Exemple de requête simple
SELECT 'hello world';

Et voila !! Vous venez de lancer votre première requête : demander au serveur d’afficher « hello world » et le serveur a du vous répondre « hello world », facile non ?

Transactions

Les requêtes que vous aller envoyer au serveur peuvent modifier profondément les données stockées et leur structure. Pour s’assurer du bon déroulement de vos requêtes, PostgreSQL (comme toutes les bases de données) utilise le principe des transactions.

Une transaction est une unité de travail dans laquelle des instructions sont exécutées.

Quand on travaille avec des bases, il faut toujours penser aux ACID

Arthur Bazin

Les transactions respectent toujours les propriétés ACID (plus de détails sur Wikipedia) :

  • Atomicité : la transaction se fait totalement ou pas du tout, en cas d’échec les données sont remise dans le même état qu’avant la transaction (même en cas de panne pendant la transaction).
  • Cohérence : la transaction n’entraine pas d’invalidité dans un objet de la base (les objets étaient valides avant et le restent après).
  • Isolation : chaque transaction s’exécute sans aucun lien avec une quelconque autre transaction.
  • Durabilité : les opérations effectuées dans la transaction sont effectuées de façon définitive une fois la transaction terminée (même en cas de panne immédiatement après la transaction).

Les transactions vont donc contenir vos requêtes afin qu’elles s’exécutent correctement. Voici comment se déroule une transaction ainsi que les opérations possibles durant celle-ci :

  • BEGIN, BEGIN TRANSACTION ou START TRANSACTION : permet de démarrer une transaction. Un point de sauvegarde de la BDD est créé à ce moment là.
  • SAVEPOINT mon_pointdesauvegarde : permet de créer un point de sauvegarde à l’intérieur d’une transaction.
  • END ou COMMIT : permet de terminer la transaction et de la valider. Les points de sauvegarde concernant cette transaction sont tous supprimés.
  • ROLLBACK : Annule la transaction et restaure la BDD au point de sauvegarde créé lors du BEGIN.
  • ROLLBACK TO mon_poindesauvegarde : Annule les opérations effectuées depuis la création du point de sauvegarde indiqué.

Ainsi, le requêtage doit être effectué de la façon suivante :

-- Démarrage de la transaction
BEGIN;

-- Mise à jour d'une table
UPDATE ma_table SET mon_champ = mon_champ - 100;

-- Création d'un point de sauvegarde
SAVEPOINT mon_pointdesauvegarde;

-- Mise à jour d'une autre table
UPDATE ma_table_2 SET mon_champ_2 = mon_champ_2 + 100;

-- Annulation de la dernière opération
ROLLBACK TO mon_pointdesauvegarde;

-- Mise à jour d'une autre table
UPDATE ma_table_3 SET mon_champ_3 = mon_champ_3 + 100;

-- Validation de la transaction
END;

Dans les fait, vous n’utiliserez que très peu ces fonctionnalités sauf lors de la rédaction de scripts complexes pour les raisons suivantes :

  • Lorsque vous exécutez quelques requêtes tapées à la main, vous souhaitez voir le résultat immédiatement. Vous « commitez » donc immédiatement la transaction.
  • Les clients SQL possèdent des fonctions d’auto-commit qui vous permettent de vous passer de la rédaction de ces instructions. Vous pouvez d’ailleurs gérer la façon dont fonctionne l’auto-commit dans ces clients pour régler finement la façon dont s’appliquent vos instructions.

Mais si besoin, n’hésitez pas à désactiver l’auto-commit pour tester et voir ce qu’il se passe notamment en lançant une requête sans la commiter puis en testant d’autres requêtes dans une autre transaction (dans une autre fenêtre d’instruction SQL).

Les commandements de la requête

Avant de nous lancer dans nos premières requêtes voici quelques règles et conventions à garder à l’esprit et que vous retrouverez dans la suite.

Pour le nom de vos objets (schéma, table, colonne), la norme SQL impose l’utilisation des 26 lettres de l’alphabet, des dix chiffres et du caractère underscore (_). PostgreSQL est plus laxiste et autorise l’utilisation d’accent, d’espace et autre caractères étrange. Je vous recommande (et vous impose) de n’utiliser que les caractères de la norme SQL. En effet, vous risquez certaines incompatibilités avec d’autres clients, extensions ou modules.

Par défaut, PostgreSQL utilise la minuscule pour les noms d’objet, vous devrez donc entourer vos objets par des guillemets s’ils utilisent des majuscules (de même s’ils utilisent des caractères accentués).

Une requête se termine toujours par un point-virgule ;. Ça permet de dire à PostgreSQL que l’instruction est finie.

Privilégiez l’utilisation de lettre majuscule pour les mots-clés lors de la rédaction de vos requêtes, ça vous en simplifiera la lecture.

Usez et abusez de l’indentation pour vous simplifier la lecture des requêtes.

Un commentaire débute par un double tiret --.

Les valeurs textuelles sont entre simples guillemets ('), les valeurs numériques n’en ont pas besoin.

Préfixez le nom des objets pour mieux vous y retrouver : vous pouvez utilisez la première lettre du schéma pour préfixer vos tables et la première lettre de la table pour préfixer vos colonnes par exemple.

Limitez l’utilisation d’abréviation. Les noms d’objet peuvent être long alors profitez-en.

Chaque objet peut être commenté, n’hésitez pas à les détailler. Cela vous aidera beaucoup lorsque vous n’aurez pas mis le nez dans votre base depuis longtemps.

Le sélecteur étoile * permet de tout sélectionner (toutes les colonnes par exemple).

Utilisez des index sur les colonnes les plus utilisées, cela accélèrera de façon impressionnante le traitement de gros jeux de données (de x2 à x100).

NULL n’est pas une valeur, c’est justement l’absence de valeur. Ainsi, il n’est pas possible de recherche ma_valeur = NULL car justement, il n’y a pas d’élément à comparer.

Introduction au Vade-mecum

Maintenant que nous avons vu les bases du requêtage, nous pouvons nous concentrer sur le langage SQL pour que vous puissiez réaliser vos premières requêtes.

Il s’agit ici d’un vade-mecum des requêtes que j’utilise le plus. N’hésitez donc par à approfondir celles-ci en vous rendant sur les nombreux sites d’information dont voici ceux qui me semble le plus intéressant :

Dans la suite de ce vade-mecum, chaque page est organisée en deux grandes parties :

  • Les requêtes : recueil des requêtes qui me semble intéressantes
  • Les concepts clés : quelques détails sur certains éléments des différentes requêtes.

Si vous êtes prêts, allons-y !

Sommaire général

Voici le sommaire général du cours :


Cet article vous a plu ?

N'hésitez pas à le partager, il interessera surement certains de vos contacts.

Les thèmes suivants contiennent des articles en lien avec celui-ci, allez faire un tour :

BDDPostgreSQLProgrammationSQL tuto

50%