05/06/2026 15:57 SQL - Résumé (4ème SI) Lycée Cité Des Journalistes - ARIANA
🗄️ SQL - Résumé
Types, opérateurs, fonctions, requêtes, contraintes et définition de données
📊 Types de données SQL
Types numériques et chaînes
INT, DECIMAL, CHAR, VARCHAR, TEXT, DATE, TIME, DATETIME
CREATE TABLE exemple_types (
id INT,
prix DECIMAL(10,2),
code CHAR(5),
nom VARCHAR(100),
description TEXT,
date_creation DATE,
heure_rdv TIME,
date_heure DATETIME
);
🔍 Aperçu des types :
📌 INT : nombres entiers (ex: 42)
📌 DECIMAL(10,2) : nombres décimaux (ex: 1234.56)
📌 CHAR(5) : texte fixe de 5 caractères (ex: "ABC12")
📌 VARCHAR(100) : texte variable max 100 car
📌 TEXT : texte long (articles, commentaires)
📌 DATE : '2025-05-29'
📌 TIME : '14:30:00'
📌 DATETIME : '2025-05-29 14:30:00'
🔍 Opérateurs SQL
localhost/2025-2026/BaseDonné[Link] 1/12
05/06/2026 15:57 SQL - Résumé (4ème SI) Lycée Cité Des Journalistes - ARIANA
Opérateurs de comparaison
=, !=, >, <, >=, <=, IN, BETWEEN, LIKE, IS
-- Égalité
SELECT * FROM clients WHERE age = 25;
-- Différent
SELECT * FROM produits WHERE stock != 0;
-- Supérieur / Inférieur
SELECT * FROM commandes WHERE total > 100;
-- IN (dans une liste)
SELECT * FROM employes WHERE ville IN ('Paris', 'Lyon', 'Marseille');
-- BETWEEN (entre deux valeurs)
SELECT * FROM articles WHERE prix BETWEEN 10 AND 50;
-- LIKE (recherche de motif)
SELECT * FROM clients WHERE nom LIKE 'D%';
SELECT * FROM emails WHERE adresse LIKE '%@[Link]';
-- IS NULL
SELECT * FROM commandes WHERE date_livraison IS NULL;
🔍 Exemples concrets :
LIKE 'D%' → Dupont, Durand, Dumas
LIKE '%on%' → Dupont, Martin, Simon
BETWEEN 10 AND 50 → valeurs 10, 20, 35, 50
IN ('A','B','C') → A, B ou C
Opérateurs logiques
AND, OR, NOT
SELECT * FROM clients
WHERE age > 18 AND ville = 'Paris';
localhost/2025-2026/BaseDonné[Link] 2/12
05/06/2026 15:57 SQL - Résumé (4ème SI) Lycée Cité Des Journalistes - ARIANA
SELECT * FROM produits
WHERE prix < 10 OR stock > 100;
SELECT * FROM commandes
WHERE NOT status = 'annulée';
🔍 Table de vérité :
✅ AND : toutes les conditions doivent être vraies
✅ OR : au moins une condition doit être vraie
✅ NOT : inverse la condition
📅 Fonctions sur les dates
DATE(), DAY(), MONTH(), YEAR()
Extraire des parties d'une date
-- Extraire la date seule d'un DATETIME
SELECT DATE('2025-05-29 14:30:00');
SELECT DAY('2025-05-29');
SELECT MONTH('2025-05-29');
SELECT YEAR('2025-05-29');
SELECT
commande_id,
YEAR(date_commande) AS annee,
MONTH(date_commande) AS mois
FROM commandes;
🔍 Exemples multiples :
📅 DATE('2025-12-25 08:30:00') → '2025-12-25'
📅 DAY('2025-12-25') → 25
localhost/2025-2026/BaseDonné[Link] 3/12
05/06/2026 15:57 SQL - Résumé (4ème SI) Lycée Cité Des Journalistes - ARIANA
📅 MONTH('2025-12-25') → 12
📅 YEAR('2025-12-25') → 2025
NOW() - Date et heure courantes
Retourne la date et l'heure actuelles
SELECT NOW();
INSERT INTO logs (message, date_heure) VALUES ('Action effectuée', NOW())
SELECT * FROM commandes WHERE DATE(date_commande) = CURDATE();
🔍 Exemple :
🕐 NOW() → année-mois-jour heure:minute:seconde
🕐 CURDATE() → année-mois-jour uniquement
🕐 CURTIME() → heure:minute:seconde uniquement
ADDDATE() - Ajouter des jours/intervalle
Ajoute un nombre de jours ou un intervalle à une date
SELECT ADDDATE('2025-05-29', 10);
SELECT ADDDATE('2025-05-29', INTERVAL 2 MONTH);
SELECT ADDDATE('2025-05-29', INTERVAL 1 YEAR);
UPDATE commandes SET date_livraison = ADDDATE(date_commande, 3);
🔍 Exemples d'intervalles :
➕ ADDDATE('2025-01-01', INTERVAL 1 MONTH) → '2025-02-01'
➕ ADDDATE('2025-01-01', INTERVAL 1 YEAR) → '2026-01-01'
➕ ADDDATE('2025-01-01', INTERVAL 7 DAY) → '2025-01-08'
localhost/2025-2026/BaseDonné[Link] 4/12
05/06/2026 15:57 SQL - Résumé (4ème SI) Lycée Cité Des Journalistes - ARIANA
DATEDIFF() - Différence entre deux dates
Retourne le nombre de jours entre deux dates
SELECT DATEDIFF('2025-06-10', '2025-05-29');
SELECT
commande_id,
DATEDIFF(NOW(), date_commande) AS jours_ecoules
FROM commandes
WHERE DATEDIFF(NOW(), date_commande) > 30;
🔍 Exemples :
📊 DATEDIFF('2025-12-31', '2025-01-01') → 364 jours
📊 DATEDIFF('2025-03-01', '2025-03-10') → -9 jours
📊 DATEDIFF(NOW(), '2025-01-01') → jours depuis le 1er janvier
📊 Fonctions d'agrégation
AVG(), COUNT(), MAX(), MIN(), SUM()
Calculs sur des groupes d'enregistrements
SELECT COUNT(*) FROM clients;
SELECT AVG(prix) FROM produits;
SELECT MIN(date_commande), MAX(date_commande) FROM commandes;
SELECT SUM(montant) FROM commandes;
SELECT
categorie,
COUNT(*) AS nb_produits,
AVG(prix) AS prix_moyen,
SUM(stock) AS stock_total
FROM produits
GROUP BY categorie;
localhost/2025-2026/BaseDonné[Link] 5/12
05/06/2026 15:57 SQL - Résumé (4ème SI) Lycée Cité Des Journalistes - ARIANA
🔍 Exemple avec table "ventes" :
Table ventes : id | produit | quantite | prix
COUNT(*) → nombre de lignes
AVG(prix) → prix moyen des produits
SUM(quantite * prix) → chiffre d'affaires total
GROUP BY produit → ventes par produit
✏️ Manipulation des données (LMD)
SELECT - Requête de sélection
Récupérer des données avec filtres, tris, groupements
SELECT * FROM clients;
SELECT nom, prenom, email AS courriel FROM clients;
SELECT DISTINCT ville FROM clients;
SELECT * FROM commandes WHERE montant > 100 ORDER BY date DESC LIMIT 10;
SELECT
ville,
COUNT(*) AS nb_clients
FROM clients
GROUP BY ville
HAVING COUNT(*) > 5;
🔍 Syntaxe complète SELECT :
SELECT [DISTINCT] colonnes
FROM table(s)
[WHERE condition(s)]
[GROUP BY colonne(s)]
[HAVING condition sur groupes]
[ORDER BY colonne(s) [ASC|DESC]]
localhost/2025-2026/BaseDonné[Link] 6/12
05/06/2026 15:57 SQL - Résumé (4ème SI) Lycée Cité Des Journalistes - ARIANA
INSERT INTO - Ajout de données
Insérer de nouveaux enregistrements
INSERT INTO clients (nom, prenom, email)
VALUES ('Martin', 'Sophie', 'sophie@[Link]');
INSERT INTO produits (nom, prix, stock) VALUES
('Clavier', 29.99, 50),
('Souris', 15.50, 100);
UPDATE - Mise à jour des données
Modifier des enregistrements existants
UPDATE clients SET age = 31 WHERE id = 1;
UPDATE produits SET prix = prix * 1.10, stock = stock - 1;
DELETE FROM - Suppression de données
Supprimer des enregistrements
DELETE FROM clients WHERE id = 10;
DELETE FROM commandes WHERE status = 'annulée';
-- ATTENTION : DELETE sans WHERE supprime TOUTE la table
🔒 Contraintes d'intégrité
NOT NULL, DEFAULT, CHECK, UNIQUE
Garantir l'intégrité des données
localhost/2025-2026/BaseDonné[Link] 7/12
05/06/2026 15:57 SQL - Résumé (4ème SI) Lycée Cité Des Journalistes - ARIANA
CREATE TABLE employes (
id INT PRIMARY KEY,
nom VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
age INT CHECK (age >= 18),
statut VARCHAR(20) DEFAULT 'actif'
);
🔍 Contraintes expliquées :
🔒 NOT NULL : champ obligatoire
🔒 DEFAULT : valeur automatique si non spécifiée
🔒 CHECK : validation de la valeur (ex: age >= 18)
🔒 UNIQUE : pas de doublons
🔒 PRIMARY KEY : clé primaire = UNIQUE + NOT NULL
PRIMARY KEY & FOREIGN KEY
Clés primaires et étrangères
CREATE TABLE clients (
id INT PRIMARY KEY,
nom VARCHAR(50) NOT NULL
);
CREATE TABLE commandes (
id INT PRIMARY KEY,
client_id INT,
FOREIGN KEY (client_id) REFERENCES clients(id)
ON UPDATE CASCADE
ON DELETE CASCADE
);
🔍 Options ON UPDATE / ON DELETE :
🔗 CASCADE : propage les modifications/suppressions
🔗 SET NULL : met la clé étrangère à NULL
localhost/2025-2026/BaseDonné[Link] 8/12
05/06/2026 15:57 SQL - Résumé (4ème SI) Lycée Cité Des Journalistes - ARIANA
🔗 SET DEFAULT : met la valeur par défaut
🔗 NO ACTION / RESTRICT : bloque l'opération
🏗️ Définition des données (LDD)
CREATE / DROP DATABASE
Créer et supprimer des bases de données
CREATE DATABASE magasin;
CREATE DATABASE IF NOT EXISTS magasin;
DROP DATABASE magasin;
DROP DATABASE IF EXISTS magasin;
CREATE TABLE / DROP TABLE
Créer et supprimer des tables
CREATE TABLE IF NOT EXISTS produits (
id INT AUTO_INCREMENT PRIMARY KEY,
reference VARCHAR(20) NOT NULL UNIQUE,
nom VARCHAR(100) NOT NULL,
prix DECIMAL(10,2) CHECK (prix > 0),
stock INT DEFAULT 0
);
DROP TABLE IF EXISTS produits;
ALTER TABLE - Modifier une table
Ajouter, supprimer ou modifier des colonnes/contraintes
ALTER TABLE clients ADD telephone VARCHAR(15);
ALTER TABLE clients DROP COLUMN telephone;
localhost/2025-2026/BaseDonné[Link] 9/12
05/06/2026 15:57 SQL - Résumé (4ème SI) Lycée Cité Des Journalistes - ARIANA
ALTER TABLE clients MODIFY age SMALLINT;
ALTER TABLE commandes ADD CONSTRAINT fk_client
FOREIGN KEY (client_id) REFERENCES clients(id);
ALTER TABLE clients RENAME TO customers;
🔍 Notes sur ALTER TABLE :
⚠️ MySQL : MODIFY COLUMN, CHANGE COLUMN, DROP COLUMN
📋 Exemple : Base de données "Librairie"
Création et requêtes sur une librairie
CREATE DATABASE librairie;
USE librairie;
CREATE TABLE auteurs (
id INT PRIMARY KEY AUTO_INCREMENT,
nom VARCHAR(50) NOT NULL,
prenom VARCHAR(50) NOT NULL,
nationalite VARCHAR(50) DEFAULT 'Française'
);
CREATE TABLE livres (
id INT PRIMARY KEY AUTO_INCREMENT,
titre VARCHAR(100) NOT NULL,
auteur_id INT,
prix DECIMAL(10,2) CHECK (prix > 0),
stock INT DEFAULT 0,
FOREIGN KEY (auteur_id) REFERENCES auteurs(id)
);
INSERT INTO auteurs (nom, prenom) VALUES
('Hugo', 'Victor'),
('Orwell', 'George');
SELECT [Link], [Link], [Link]
localhost/2025-2026/BaseDonné[Link] 10/12
05/06/2026 15:57 SQL - Résumé (4ème SI) Lycée Cité Des Journalistes - ARIANA
FROM livres l
JOIN auteurs a ON l.auteur_id = [Link];
🔍 Résultat attendu :
📖 "Les Misérables" - Victor Hugo - 25.00€
📖 "1984" - George Orwell - 18.50€
📊 Prix moyen français : 20.00€
📑 Tableau récapitulatif des fonctions de date
Fonction Description Exemple Résultat
DATE() Extrait la date DATE('2025-05-29 14:30:00') '2025-05-29'
DAY() Jour du mois DAY('2025-05-29') 29
MONTH() Numéro du mois MONTH('2025-05-29') 5
YEAR() Année YEAR('2025-05-29') 2025
Date/heure 2025-05-29
NOW() NOW()
courantes 14:30:00
ADDDATE('2025-05-29', INTERVAL 10
ADDDATE() Ajoute un intervalle '2025-06-08'
DAY)
DATEDIFF('2025-06-10', '2025-05-
DATEDIFF() Différence en jours 12
29')
📌 Résumé des commandes essentielles
SELECT : récupérer des données
INSERT : ajouter des données
UPDATE : modifier des données
DELETE : supprimer des données
CREATE/DROP DATABASE : gérer les bases
CREATE/DROP/ALTER TABLE : gérer les tables
localhost/2025-2026/BaseDonné[Link] 11/12
05/06/2026 15:57 SQL - Résumé (4ème SI) Lycée Cité Des Journalistes - ARIANA
PRIMARY KEY / FOREIGN KEY : relations entre tables
AVG/COUNT/MAX/MIN/SUM : fonctions d'agrégation
💡 Bonnes pratiques SQL :
• Toujours utiliser des requêtes paramétrées pour éviter les injections SQL
• Indexer les colonnes utilisées dans WHERE, JOIN et ORDER BY
• Utiliser des alias (AS) pour rendre les résultats plus lisibles
• Tester les requêtes avec EXPLAIN pour optimiser les performances
• Sauvegarder régulièrement vos bases de données
📚 Résumé SQL — Lycée Cité Des Journalistes - Ariana - M. Ben Amor Walid ©2026
✨ Code coloré style VS Code + police agrandie + tous les aperçus
localhost/2025-2026/BaseDonné[Link] 12/12