Mysql
 sql >> Base de données >  >> RDS >> Mysql

Expression de table commune dans MySQL

Les expressions de table communes (CTE) vous permettent d'écrire facilement des requêtes SQL complexes dans MySQL. Dans cet article, nous verrons ce qu'est Common Table Expression dans MySQL et comment écrire des CTE dans MySQL.


Qu'est-ce qu'une expression de table commune

Common Table Expression est un jeu de résultats nommé dont la portée est limitée à la requête SQL dans laquelle il est défini et utilisé. Elle est similaire à une table dérivée, mais elle n'est pas stockée en tant qu'objet et peut se référencer automatiquement, contrairement aux tables dérivées. Par conséquent, CTE offre de meilleures performances que les tables dérivées dans MySQL.

Lecture bonus :comment calculer la marge dans MySQL


Expression de table commune dans MySQL

Voici la syntaxe de l'expression de table commune dans MySQL.

WITH cte_name (column_list) AS (     
      query 
)  
SELECT * FROM cte_name;

Dans la requête ci-dessus, vous devez spécifier le nom de CTE, la requête SQL dont le résultat doit être référencé à l'aide du nom CTE. Veuillez noter que le nombre de colonnes dans column_list doivent être identiques à ceux de votre requête .

Regardons un exemple d'expression de table commune (CTE).

Lecture bonus :comment obtenir le produit le plus vendu à l'aide d'une requête SQL

Disons que vous avez des ventes (id, order_date, amount) tableau.

mysql> create table sales(id int, order_date date, amount int);

mysql> insert into sales(id, order_date, amount)
      values(1, '2021-01-01', 200),
      (2, '2021-01-02', 250),
      (3, '2021-01-03', 220),
      (4, '2021-01-04', 230),
      (5, '2021-01-05', 210),
      (6, '2021-01-06', 100),
      (7, '2021-01-07', 120),
      (8, '2021-01-08', 150),
      (9, '2021-01-09', 180),
      (10, '2021-01-10', 200);

 mysql> select * from sales;
 +------+------------+--------+
 | id   | order_date | amount |
 +------+------------+--------+
 |    1 | 2021-01-01 |    200 |
 |    2 | 2021-01-02 |    250 |
 |    3 | 2021-01-03 |    220 |
 |    4 | 2021-01-04 |    230 |
 |    5 | 2021-01-05 |    210 |
 |    6 | 2021-01-06 |    100 |
 |    7 | 2021-01-07 |    120 |
 |    8 | 2021-01-08 |    150 |
 |    9 | 2021-01-09 |    180 |
 |   10 | 2021-01-10 |    200 |
 +------+------------+--------+

Voici un CTE pour sélectionner uniquement les enregistrements de ventes dont le montant est supérieur à 200.

with test_cte as (
     select id,order_date,amount from sales
     where amount>200
 ) select * from test_cte; 

 +------+------------+--------+
 | id   | order_date | amount |
 +------+------------+--------+
 |    1 | 2021-01-01 |    200 |
 |    2 | 2021-01-02 |    250 |
 |    3 | 2021-01-03 |    220 |
 |    4 | 2021-01-04 |    230 |
 |    5 | 2021-01-05 |    210 |
 |   10 | 2021-01-10 |    200 |
 +------+------------+--------+

Dans le CTE ci-dessus, nous spécifions la requête SELECT pour filtrer les lignes avec un montant> 200 dans la clause WITH.

Lecture bonus :Comment utiliser l'instruction CASE dans MySQL

Veuillez noter que vous pouvez utiliser CTE avec les instructions SELECT, UPDATE, INSERT et DELETE. Voici les syntaxes pour le même.

WITH … SELECT …
WITH … UPDATE …
WITH … DELETE …

Vous pouvez également utiliser un CTE comme sous-requête, comme indiqué ci-dessous

SELECT … WHERE id IN (WITH … SELECT …);
SELECT * FROM (WITH … SELECT …) AS temporary_table;

Si vous utilisez le résultat d'une instruction SELECT comme entrée pour les instructions CREATE/INSERT/REPLACE, vous pouvez également y utiliser la clause WITH. Voici quelques exemples,

CREATE TABLE … WITH … SELECT …
CREATE VIEW … WITH … SELECT …
INSERT … WITH … SELECT …
REPLACE … WITH … SELECT …
DECLARE CURSOR … WITH … SELECT …
EXPLAIN … WITH … SELECT …

Lecture bonus :Obtenez plusieurs comptes avec différentes conditions dans MySQL


Expression de table commune dans Ubiq

L'outil Ubiq Reporting prend en charge les requêtes SELECT basées sur CTE et facilite la visualisation des résultats SQL de différentes manières. Il vous permet également de créer des tableaux de bord et des graphiques à partir des résultats des requêtes MySQL. Voici la requête CTE ci-dessus dans Ubiq.

En fait, après avoir exécuté la requête, vous pouvez simplement cliquer sur un type de visualisation pour tracer le résultat dans un graphique.

Besoin d'un outil de reporting pour MySQL ? Ubiq facilite la visualisation des données en quelques minutes et la surveillance dans des tableaux de bord en temps réel. Essayez-le aujourd'hui !