Définir une CTE simple avec la clause WITH
Dans cette étape, vous apprendrez à définir une Expression de Table Commune (Common Table Expression - CTE) simple en utilisant la clause WITH
dans MySQL. Les CTE sont des ensembles de résultats temporaires et nommés que vous pouvez référencer dans une seule instruction SELECT
, INSERT
, UPDATE
ou DELETE
. Elles sont utiles pour décomposer les requêtes complexes en parties plus petites et plus gérables, améliorant ainsi la lisibilité et la maintenabilité.
Comprendre les CTE
Une CTE est essentiellement une sous - requête nommée qui n'existe que pour la durée de l'exécution de la requête. Elle est définie à l'aide de la clause WITH
, suivie du nom de la CTE, de la liste des colonnes (optionnelle) et du mot - clé AS
, suivi de la sous - requête entre parenthèses.
Créer une table d'exemple
Tout d'abord, créons une simple table nommée employees
avec laquelle travailler. Exécutez les instructions SQL suivantes dans votre environnement MySQL. Vous pouvez accéder au client de ligne de commande MySQL en tapant simplement mysql
dans votre terminal.
mysql
Ensuite, créez la table :
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
department VARCHAR(50),
salary DECIMAL(10, 2)
);
INSERT INTO employees (employee_id, first_name, last_name, department, salary) VALUES
(1, 'John', 'Doe', 'Sales', 60000.00),
(2, 'Jane', 'Smith', 'Marketing', 75000.00),
(3, 'Robert', 'Jones', 'Sales', 55000.00),
(4, 'Emily', 'Brown', 'IT', 90000.00),
(5, 'Michael', 'Davis', 'Marketing', 70000.00);
Maintenant, quittez le client MySQL :
exit
Définir une CTE simple
Maintenant, définissons une CTE simple pour sélectionner les employés du département 'Sales'.
WITH SalesEmployees AS (
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE department = 'Sales'
)
SELECT employee_id, first_name, last_name, salary
FROM SalesEmployees;
Explication :
WITH SalesEmployees AS (...)
: Cela définit une CTE nommée SalesEmployees
.
SELECT employee_id, first_name, last_name, salary FROM employees WHERE department = 'Sales'
: Il s'agit de la sous - requête qui sélectionne les informations des employés de la table employees
où le département est 'Sales'.
SELECT employee_id, first_name, last_name, salary FROM SalesEmployees
: Il s'agit de la requête principale qui sélectionne toutes les colonnes de la CTE SalesEmployees
.
Exécuter la requête
Pour exécuter la requête, vous pouvez la sauvegarder dans un fichier nommé sales_employees.sql
dans votre répertoire ~/project
en utilisant nano
:
nano ~/project/sales_employees.sql
Collez le code SQL dans le fichier, enregistrez - le (Ctrl+O) et quittez (Ctrl+X).
Ensuite, exécutez le fichier SQL à l'aide du client de ligne de commande MySQL :
mysql < ~/project/sales_employees.sql
Sortie attendue :
La sortie devrait être une table contenant l'identifiant de l'employé, le prénom, le nom de famille et le salaire de tous les employés du département 'Sales' :
+-------------+------------+-----------+----------+
| employee_id | first_name | last_name | salary |
+-------------+------------+-----------+----------+
| 1 | John | Doe | 60000.00 |
| 3 | Robert | Jones | 55000.00 |
+-------------+------------+-----------+----------+
2 rows in set (0.00 sec)
Cela démontre comment définir et utiliser une CTE simple pour filtrer les données d'une table. Dans les étapes suivantes, vous apprendrez des techniques plus avancées, telles que les CTE récursives et la jointure de CTE avec des tables.