Cours complet de UE8 — Systèmes d'information pour le DCG. Révise efficacement avec StudentAI.
---
Le SQL (Structured Query Language) est le langage standard de manipulation et d'interrogation des bases de données relationnelles. Normalisé par l'ISO (norme ISO/IEC 9075, régulièrement mise à jour depuis 1987), il est implémenté par tous les grands systèmes de gestion de bases de données relationnelles (SGBDR) : MySQL, PostgreSQL, Oracle Database, Microsoft SQL Server, MariaDB, SQLite.
Dans le cadre de l'UE8 du DCG, le SQL s'inscrit dans la maîtrise des systèmes d'information de gestion (SIG). Le gestionnaire ou le comptable n'est pas un développeur, mais il doit être capable de :
---
Le modèle relationnel (Edgar F. Codd, 1970, IBM) repose sur le concept de relation, représentée sous la forme d'une table à deux dimensions :
| Concept | Définition | Synonyme courant |
| --- | --- | --- |
| Relation | Ensemble de tuples partageant les mêmes attributs | Table |
| Tuple | Occurrence d'une relation | Ligne / Enregistrement |
| Attribut | Propriété d'une relation | Colonne / Champ |
| Domaine | Ensemble de valeurs possibles pour un attribut | Type de données |
| Clé primaire | Attribut (ou ensemble d'attributs) identifiant de façon unique chaque tuple | PRIMARY KEY |
| Clé étrangère | Attribut faisant référence à la clé primaire d'une autre table | FOREIGN KEY |
Prenons une PME avec un système de facturation simple. Le schéma relationnel (MLD) est le suivant :
```
CLIENT (client_id, raison_sociale, siret, email, ville)
PRODUIT (produit_id, libelle, prix_unitaire_ht, taux_tva)
FACTURE (facture_id, #client_id, date_facture, date_echeance, statut)
LIGNE_FACTURE (ligne_id, #facture_id, #produit_id, quantite, prix_unit_ht_applique)
```
> Convention : Le `#` devant un attribut indique une clé étrangère.
| Type SQL | Description | Exemple de valeur |
| --- | --- | --- |
| `INT` ou `INTEGER` | Entier (positif ou négatif) | 42, -5 |
| `DECIMAL(p,s)` | Nombre décimal avec `p` chiffres dont `s` après la virgule | DECIMAL(10,2) → 9999999.99 |
| `VARCHAR(n)` | Chaîne de caractères variable, max `n` caractères | 'Dupont SA' |
| `CHAR(n)` | Chaîne de longueur fixe `n` | CHAR(14) pour le SIRET |
| `DATE` | Date au format AAAA-MM-JJ | 2025-06-15 |
| `DATETIME` | Date et heure | 2025-06-15 14:30:00 |
| `BOOLEAN` | Valeur vraie/fausse | TRUE / FALSE |
| `TEXT` | Chaîne longue sans limite fixe | Observations libres |
Le SQL est organisé en sous-langages selon la nature des opérations :
| Sous-langage | Sigle | Commandes principales | Usage |
| --- | --- | --- | --- |
| Data Definition Language | DDL | CREATE, ALTER, DROP, TRUNCATE | Définir la structure des tables |
| Data Manipulation Language | DML | SELECT, INSERT, UPDATE, DELETE | Manipuler les données |
| Data Control Language | DCL | GRANT, REVOKE | Gérer les droits d'accès |
| Transaction Control Language | TCL | BEGIN, COMMIT, ROLLBACK | Gérer les transactions |
---
```sql
CREATE TABLE CLIENT (
client_id INT PRIMARY KEY,
raison_sociale VARCHAR(100) NOT NULL,
siret CHAR(14) UNIQUE,
email VARCHAR(150),
ville VARCHAR(80)
);
CREATE TABLE FACTURE (
facture_id INT PRIMARY KEY,
client_id INT NOT NULL,
date_facture DATE NOT NULL,
date_echeance DATE,
statut VARCHAR(20) DEFAULT 'EN_ATTENTE',
FOREIGN KEY (client_id) REFERENCES CLIENT(client_id)
);
```
Contraintes d'intégrité courantes :
| Contrainte | Rôle |
| --- | --- |
| `PRIMARY KEY` | Identifiant unique, non nul |
| `FOREIGN KEY … REFERENCES` | Intégrité référentielle entre tables |
| `NOT NULL` | Valeur obligatoire |
| `UNIQUE` | Valeur non dupliquée dans la colonne |
| `DEFAULT valeur` | Valeur par défaut si non renseignée |
| `CHECK (condition)` | Contrôle de domaine (ex. `CHECK (quantite > 0)`) |
```sql
-- Ajouter une colonne
ALTER TABLE CLIENT ADD COLUMN telephone VARCHAR(20);
-- Modifier le type d'une colonne (syntaxe MySQL/MariaDB)
ALTER TABLE CLIENT MODIFY COLUMN email VARCHAR(200);
-- Supprimer une colonne
ALTER TABLE CLIENT DROP COLUMN telephone;
```
```sql
DROP TABLE LIGNE_FACTURE; -- Suppression définitive avec toutes les données
```
> ⚠️ `DROP TABLE` supprime la structure et les données. `TRUNCATE TABLE` vide les données mais conserve la structure.
---
```sql
-- Insertion d'un client
INSERT INTO CLIENT (client_id, raison_sociale, siret, email, ville)
VALUES (1, 'BOULANGERIE MARTIN', '12345678901234', 'contact@martin.fr', 'Lyon');
-- Insertion multiple
INSERT INTO CLIENT (client_id, raison_sociale, ville)
VALUES
(2, 'GARAGE LECLERC', 'Bordeaux'),
(3, 'CABINET DURAND', 'Paris');
```
```sql
-- Mise à jour de l'email d'un client précis
UPDATE CLIENT
SET email = 'nouveau@martin.fr'
WHERE client_id = 1;
-- Mise à jour du statut de toutes les factures échues
UPDATE FACTURE
SET statut = 'EN_RETARD'
WHERE date_echeance < CURRENT_DATE AND statut = 'EN_ATTENTE';
```
> ⚠️ Sans clause `WHERE`, l'`UPDATE` s'applique à toutes les lignes de la table.
```sql
-- Supprimer un client précis
DELETE FROM CLIENT WHERE client_id = 3;
-- Supprimer toutes les factures réglées avant 2023
DELETE FROM FACTURE
WHERE statut = 'REGLE' AND date_facture < '2023-01-01';
```
---
Tableaux récapitulatifs, mnémotechniques, exercices corrigés, QCM et colle orale IA — tout est inclus.
S'inscrire gratuitementLe SQL (Structured Query Language) est un langage de programmation utilisé pour gérer et manipuler des bases de données relationnelles. Il permet aux utilisateurs de créer, lire, mettre à jour et supprimer des données dans des systèmes de gestion de bases de données.
Les types de données courants incluent INT pour les entiers, VARCHAR(n) pour les chaînes de caractères de longueur variable, et DATE pour les dates. Chaque colonne d'une table doit avoir un type de données défini.
Pour insérer une nouvelle ligne, on utilise la commande INSERT INTO. Par exemple : `INSERT INTO Clients (Nom, Prénom, Email) VALUES ('Dupont', 'Jean', 'jean.dupont@example.com');`.
La clause WHERE permet de filtrer les résultats d'une requête en spécifiant une condition. Par exemple, `SELECT * FROM Clients WHERE Nom = 'Dupont';` retourne uniquement les clients dont le nom est 'Dupont'.
On utilise la clause ORDER BY pour trier les résultats. Par exemple, `SELECT * FROM Clients ORDER BY Nom ASC;` trie les clients par ordre alphabétique de leur nom.
La commande CREATE TABLE est utilisée pour créer une nouvelle table dans une base de données. Par exemple : `CREATE TABLE Clients (ID INT PRIMARY KEY, Nom VARCHAR(50), Prénom VARCHAR(50), Email VARCHAR(100));`.
Les fonctions d'agrégation, comme COUNT(), SUM(), AVG(), MIN() et MAX(), permettent d'effectuer des calculs sur un ensemble de valeurs dans une colonne. Elles sont souvent utilisées avec la clause GROUP BY pour regrouper les résultats.
Pour modifier une ligne, on utilise la commande UPDATE. Par exemple : `UPDATE Clients SET Email = 'jean.dupont@nouveau.com' WHERE ID = 1;` met à jour l'email du client avec l'ID 1.
QCM illimités, colle orale IA, flashcards et bien plus — 100% gratuit.
Commencer à réviser