Общите таблични изрази (CTE) ви позволяват лесно да пишете сложни SQL заявки в MySQL. В тази статия ще разгледаме какво представлява общият израз на таблица в MySQL и как да пишем CTE в MySQL.
Какво е общ табличен израз
Common Table Expression е именуван набор от резултати, чийто обхват е ограничен до SQL заявката, в която е дефиниран и използван. Тя е подобна на извлечена таблица, но не се съхранява като обект и може да се самопрепраща, за разлика от извлечените таблици. В резултат на това CTE осигурява по-добра производителност от извлечените таблици в MySQL.
Бонус четене:Как да изчислим маржа в MySQL
Общ табличен израз в MySQL
Ето синтаксиса на израза за обща таблица в MySQL.
WITH cte_name (column_list) AS ( query ) SELECT * FROM cte_name;
В горната заявка трябва да посочите името на CTE, SQL заявката, чийто резултат трябва да бъде препратен с CTE име. Моля, обърнете внимание на броя на колоните в column_list трябва да са същите като тези във вашата заявка .
Нека разгледаме пример за общ табличен израз (CTE).
Бонус четене:Как да получите най-продавания продукт с SQL заявка
Да кажем, че имате продажби (идентификатор, дата_на_поръчка, сума) таблица.
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 | +------+------------+--------+
Ето CTE, за да изберете само записи за продажби, които имат сума>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 | +------+------------+--------+
В горния CTE ние посочваме заявката SELECT за филтриране на редове с количество>200 вътре в клаузата WITH.
Бонус за четене:Как да използвате израза CASE в MySQL
Моля, имайте предвид, че можете да използвате CTE с изрази SELECT, UPDATE, INSERT и DELETE. Ето синтаксиса за същото.
WITH … SELECT … WITH … UPDATE … WITH … DELETE …
Също така можете да използвате CTE като подзаявка, както е показано по-долу
SELECT … WHERE id IN (WITH … SELECT …); SELECT * FROM (WITH … SELECT …) AS temporary_table;
Ако използвате резултата от оператор SELECT като вход за изрази CREATE/INSERT/REPLACE, тогава можете също да използвате клауза WITH в него. Ето няколко примера,
CREATE TABLE … WITH … SELECT … CREATE VIEW … WITH … SELECT … INSERT … WITH … SELECT … REPLACE … WITH … SELECT … DECLARE CURSOR … WITH … SELECT … EXPLAIN … WITH … SELECT …
Бонус за четене:Вземете няколко броя с различни условия в MySQL
Общ табличен израз в Ubiq
Инструментът за отчитане на Ubiq поддържа базирани на CTE SELECT заявки и улеснява визуализирането на SQL резултатите по различни начини. Той също така ви позволява да създавате табла за управление и диаграми от резултатите от MySQL заявки. Ето горната CTE заявка в Ubiq.
Всъщност, след като изпълните заявката, можете просто да щракнете върху тип визуализация, за да начертаете резултата в диаграма.
Нуждаете се от инструмент за отчитане за MySQL? Ubiq улеснява визуализирането на данни за минути и наблюдение в табла за управление в реално време. Опитайте днес!