Le Langage SQL : Principes Fondamentaux et Définition des Données

I. Caractéristiques Essentielles du SQL

Le Structured Query Language (SQL) est le langage standard pour la gestion des systèmes de bases de données relationnelles. Ses principales caractéristiques sont : 1. Unifié et Polyvalent : SQL intègre harmonieusement les fonctions de définition (DDL), de manipulation (DML) et de contrôle (DCL) des données au sein d'une syntaxe cohérente. 2. Opérations Déclaratives : La manipulation des données s'effectue de manière non procédurale. L'utilisateur spécifie "ce qu'il veut" obtenir ou modifier, plutôt que "comment" y parvenir. 3. Traitement par Ensembles : Les requêtes et les modifications s'appliquent à des ensembles de données, ce qui facilite la gestion efficace de grands volumes d'informations. 4. Syntaxe Harmonisée : Une structure grammaticale unique permet diverses interactions avec la base de données, qu'il s'agisse de requêtes, d'insertions, de mises à jour ou de gestion des permissions. 5. Simplicité et Accessibilité : Le langage est concis, ce qui le rend relativement aisé à apprendre et à utiliser pour les développeurs et administrateurs.

Le tableau suivant récapitule les principales catégories de commandes SQL et les verbes associés :

Catégorie SQL Verbes Associés
Définition des Données (DDL) CREATE, DROP, ALTER
Interrogation des Données (DQL) SELECT
Manipulation des Données (DML) INSERT, UPDATE, DELETE
Contrôle des Données (DCL) GRANT, REVOKE

II. Définition des Données (DDL)

Cette section aborde les commandes SQL utilisées pour la définition et la gestion de la structure d'une base de données.

1. Définition et Suppression des Schémas

Définir un Schéma

Un schéma est un conteneur logique pour les objets de la base de données (tables, vues, index, etc.), fournissant un espace de noms distinct.

CREATE SCHEMA [nom_schema] AUTHORIZATION nom_utilisateur;

Exemple 1 : Créer un schéma "ProjetScolaire" pour l'utilisateur "DUPONT".

CREATE SCHEMA ProjetScolaire AUTHORIZATION DUPONT;

Exemple 2 : Créer un schéma sans spécifier explicitement son nom. Dans ce cas, le nom de l'utilisateur ("DUPONT") sera implicitement utilisé comme nom de schéma.

CREATE SCHEMA AUTHORIZATION DUPONT;

Exemple 3 : Définir un schéma "GestionBiblio" pour l'utilisateur "MARTIN" et y inclure directement la définition d'une table "Livres".

CREATE SCHEMA GestionBiblio AUTHORIZATION MARTIN
CREATE TABLE Livres (
    ISBN CHAR(13) PRIMARY KEY,
    Titre VARCHAR(100),
    Auteur VARCHAR(50),
    AnneePublication INT
);

Supprimer un Schéma

DROP SCHEMA nom_schema {CASCADE | RESTRICT};

  • CASCADE : Supprime le schéma et tous les objets qu'il contient (tables, vues, etc.).
  • RESTRICT : Refuse la suppression du schéma si celui-ci contient des objets. Le schéma doit être vide.

Exemple 4 : Supprimer le schéma "GestionBiblio" et tous ses objets.

DROP SCHEMA GestionBiblio CASCADE;

2. Définition, Suppression et Modification des Tables

Définir une Table

La commande CREATE TABLE permet de créer une nouvelle table dans un schéma. Il est possible d'y définir des contraintes d'intégrité au niveau de la colonne ou de la table.

CREATE TABLE nom_table (
  nom_colonne1 type_donnee1 [contrainte_niveau_colonne],
  nom_colonne2 type_donnee2 [contrainte_niveau_colonne],
  ...,
  [contrainte_niveau_table]
);

Considérons un système de gestion des inscriptions universitaires, avec les tables suivantes :

  • Etudiants (NumeroEtudiant, Nom, Prenom, DateNaiss, Filiere)
  • Cours (CodeCours, Intitule, NbCredits, CodePreRequis)
  • Inscriptions (RefEtudiant, RefCours, NoteObtenue, PeriodeAcademique, IdentifiantGroupe)

Exemple 5 : Création de la table Etudiants.

CREATE TABLE Etudiants
(
  NumeroEtudiant CHAR(8) PRIMARY KEY,       /* Clé primaire de l'étudiant */
  Nom VARCHAR(30) NOT NULL,                 /* Nom de famille, ne peut être nul */
  Prenom VARCHAR(30),                       /* Prénom de l'étudiant */
  DateNaiss DATE,                           /* Date de naissance */
  Filiere VARCHAR(50)                       /* Filière d'études suivie */
);

Exemple 6 : Création de la table Cours.

CREATE TABLE Cours
(
  CodeCours CHAR(5) PRIMARY KEY,                    /* Clé primaire pour identifier le cours */
  Intitule VARCHAR(60) NOT NULL,                    /* Titre complet du cours, obligatoire */
  NbCredits SMALLINT CHECK (NbCredits > 0),         /* Nombre de crédits attribués, doit être positif */
  CodePreRequis CHAR(5),                            /* Code du cours prérequis (peut être NULL) */
  CONSTRAINT fk_prerequis FOREIGN KEY (CodePreRequis) REFERENCES Cours(CodeCours)
    /* Contrainte de clé étrangère : CodePreRequis doit référencer un CodeCours existant */
);

Exemple 7 : Création de la table Inscriptions, avec une clé primaire composite et deux clés étrangères.

CREATE TABLE Inscriptions
(
  RefEtudiant CHAR(8) NOT NULL,
  RefCours CHAR(5) NOT NULL,
  NoteObtenue SMALLINT,                             /* Note obtenue par l'étudiant au cours */
  PeriodeAcademique CHAR(5),                        /* Semestre ou période d'inscription */
  IdentifiantGroupe CHAR(8),                        /* Groupe de travaux dirigés/pratiques */
  PRIMARY KEY (RefEtudiant, RefCours),              /* Clé primaire composite */
  CONSTRAINT fk_etudiant FOREIGN KEY (RefEtudiant) REFERENCES Etudiants(NumeroEtudiant),
    /* Clé étrangère : RefEtudiant pointe vers la table Etudiants */
  CONSTRAINT fk_cours FOREIGN KEY (RefCours) REFERENCES Cours(CodeCours)
    /* Clé étrangère : RefCours pointe vers la table Cours */
);

Types de Données Courants

Voici une liste des types de données fréquemment utilisés en SQL :

Type de Donnée SQL Description
CHAR(n), CHARACTER(n) Chaîne de caractères de longueur fixe n
VARCHAR(n), CHARACTER VARYING(n) Chaîne de caractères de longueur variable, avec une longueur maximale de n
CLOB Objet volumineux de type caractère (Character Large Object)
BLOB Objet volumineux de type binaire (Binary Large Object)
INT, INTEGER Entier (généralement sur 4 octets)
SMALLINT Entier court (généralement sur 2 octets)
BIGINT Grand entier (généralement sur 8 octets)
NUMERIC(p, d) Nombre décimal à virgule fixe avec p chiffres au total, dont d après la virgule
DECIMAL(p, d), DEC(p, d) Similaire à NUMERIC, la précision et l'échelle sont garanties
REAL Nombre à virgule flottante simple précision
DOUBLE PRECISION Nombre à virgule flottante double précision
FLOAT(n) Nombre à virgule flottante avec une précision minimale de n chiffres
BOOLEAN Valeur logique (TRUE, FALSE, NULL)
DATE Date au format AAAA-MM-JJ
TIME Heure au format HH:MM:SS
TIMESTAMP Horodatage (date et heure complètes)
INTERVAL Représente une durée ou un intervalle de temps

Modifier une Table

La commande ALTER TABLE permet de modifier la structure d'une table existante :

ALTER TABLE nom_table
  [ADD [COLUMN] nouveau_nom_colonne type_donnee [contrainte_niveau_colonne]]
  [ADD contrainte_niveau_table]
  [DROP [COLUMN] nom_colonne [CASCADE | RESTRICT]]
  [DROP CONSTRAINT nom_contrainte [CASCADE | RESTRICT]]
  [RENAME COLUMN ancien_nom_colonne TO nouveau_nom_colonne]
  [ALTER COLUMN nom_colonne TYPE nouveau_type_donnee];

  • Le sous-clause ADD est utilisée pour ajouter de nouvelles colonnes, ainsi que de nouvelles contraintes de colonne ou de table.
  • Le sous-clause DROP COLUMN permet de supprimer une colonne. Si CASCADE est spécifié, tous les objets dépendants (comme les vues ou les contraintes qui référencent cette colonne) sont également supprimés.
  • Le sous-clause DROP CONSTRAINT est utilisée pour supprimer une contrainte d'intégrité spécifiée.
  • Le sous-clause RENAME COLUMN permet de changer le nom d'une colonne existante.
  • Le sous-clause ALTER COLUMN TYPE est utilisée pour modifier le type de données d'une colonne.

Supprimer une Table

DROP TABLE nom_table [CASCADE | RESTRICT];

  • CASCADE : Supprime la table et tous les objets qui en dépendent (vues, contraintes de clés étrangères dans d'autres tables, etc.).
  • RESTRICT : Refuse la suppression de la table si d'autres objets (comme des vues ou des clés étrangères) y font référence.

Étiquettes: SQL DDL BaseDeDonnées Schéma Table

Publié le 16 octobre à 15h17