Maîtrise des Fondamentaux du Langage SQL : Structure, Requêtes et Administration

Types de données et standards

Le langage SQL (Structuerd Query Language) est la norme pour l'interaction avec les bases de données relationnelles. Bien que la syntaxe soit largement standardisée, certains types de données varient selon le système de gestion de base de données (SGBD) utilisé :

Type MySQL PostgreSQL SQL Server Oracle
Booléen TINYINT(1) BOOLEAN BIT NUMBER(1)
Entier INT INTEGER INT NUMBER
Décimal DECIMAL NUMERIC DECIMAL NUMBER
Chaîne fixe CHAR CHAR CHAR CHAR
Chaîne variable VARCHAR VARCHAR VARCHAR VARCHAR2

Classification des instructions SQL

Les commaneds SQL sont regroupées en cinq catégories principales selon leur fonction :

  • DQL (Data Query Language) : Extraction de données (ex: SELECT).
  • DML (Data Manipulation Language) : Modification des enregistrements (ex: INSERT, UPDATE, DELETE).
  • DDL (Data Definition Language) : Définition de la structure de la base (ex: CREATE, DROP, ALTER).
  • DCL (Data Control Language) : Gestion des permissions (ex: GRANT, REVOKE).
  • TCL (Transaction Control Language) : Gestion des transactions (ex: COMMIT, ROLLBACK).

Structure des requêtes d'extraction (DQL)

L'ordre d'écriture d'une requête diffère de son ordre d'exécution par le moteur de base de données.

-- Ordre d'écriture syntaxique
SELECT colonnes
FROM table
WHERE conditions
GROUP BY colonnes_groupement
HAVING conditions_agrégat
ORDER BY colonnes_tri
LIMIT décalage, nombre;

-- Ordre d'exécution logique
1. FROM (Identification de la source)
2. WHERE (Filtrage des lignes)
3. GROUP BY (Regroupement)
4. HAVING (Filtrage des groupes)
5. SELECT (Projection des colonnes)
6. ORDER BY (Tri final)
7. LIMIT (Pagination)

Opérations de filtrage et recherche

Le filtrage s'effectue via la clause WHERE avec des opérateurs logiques et de comparaison.

-- Recherche floue avec LIKE
-- % correspond à n'importe quelle séquence, _ à un seul caractère
SELECT nom_complet FROM collaborateurs WHERE nom_complet LIKE 'A%'; -- Commence par A
SELECT nom_complet FROM collaborateurs WHERE nom_complet LIKE '_i%'; -- Deuxième lettre est 'i'

-- Conditions multiples
SELECT * FROM services WHERE localisation IN ('Paris', 'Lyon') AND actif = 1;

Agrégation et regroupement

Les fonctions d'agrégation (SUM, AVG, MAX, MIN, COUNT) sont souvent couplées à GROUP BY.

SELECT 
    id_service, 
    COUNT(*) AS effectif, 
    AVG(salaire) AS moyenne_remuneration
FROM collaborateurs
GROUP BY id_service
HAVING AVG(salaire) > 3500;

Jointures de tables

Les jointures permettent de lier des données provenant de plusieurs tables via des clés étrangères.

-- Jointure interne (données présentes dans les deux tables)
SELECT c.nom_complet, s.nom_service
FROM collaborateurs c
INNER JOIN services s ON c.id_service = s.id;

-- Jointure externe gauche (tous les collaborateurs, même sans service)
SELECT c.nom_complet, s.nom_service
FROM collaborateurs c
LEFT JOIN services s ON c.id_service = s.id;

-- Auto-jointure (comparaison au sein de la même table)
SELECT a.nom_complet AS employé, b.nom_complet AS manager
FROM personnel a
JOIN personnel b ON a.id_manager = b.id;

Manipulation des données (DML)

-- Insertion
INSERT INTO collaborateurs (nom_complet, salaire, id_service) 
VALUES ('Jean Dupont', 4200.00, 2);

-- Mise à jour avec sous-requête
UPDATE collaborateurs 
SET salaire = salaire * 1.05 
WHERE id_service = (SELECT id FROM services WHERE nom_service = 'R&D');

-- Suppression ciblée
DELETE FROM collaborateurs WHERE actif = 0;

Gestion des utilisateurs et privilèges (DCL)

-- Création d'un accès
CREATE USER 'admin_tech'@'localhost' IDENTIFIED BY 'MotDePasseSecurise';

-- Attribution de droits spécifiques
GRANT SELECT, INSERT ON base_donnees.ma_table TO 'admin_tech'@'localhost';

-- Révocation
REVOKE INSERT ON base_donnees.ma_table FROM 'admin_tech'@'localhost';

Traitement des valeurs NULL

Une valeur NULL n'est pas égale à zéro ou à une chaîne vide. Elle représente une absence de donnée.

-- Utilisation de COALESCE ou IFNULL pour gérer les valeurs manquantes
SELECT 
    nom_complet, 
    salaire + COALESCE(prime, 0) AS revenu_total 
FROM collaborateurs;

-- Filtrage des valeurs nulles
SELECT * FROM collaborateurs WHERE prime IS NOT NULL;

Contraintes d'intégrité

Les contraintes assurent la cohérence des données lors de la création (CREATE TABLE) :

  • NOT NULL : Interdit les valeurs vides.
  • UNIQUE : Garantit l'unicité des valeurs dans une colonne.
  • PRIMARY KEY : Identifiant unique de la ligne (Combinaison de NOT NULL et UNIQUE).
  • FOREIGN KEY : Maintient la relation avec une autre table.
  • CHECK : Valide une condition spécifique (ex: salaire > 0).

Étiquettes: SQL MySQL PostgreSQL Bases-de-données DQL

Publié le 3 juin à 04h46