Common Table Expressions (CTE) umożliwiają łatwe pisanie złożonych zapytań SQL w MySQL. W tym artykule przyjrzymy się, czym jest Common Table Expression w MySQL i jak pisać CTE w MySQL.
Co to jest wspólne wyrażenie tabelowe
Wspólne wyrażenie tabelowe to nazwany zestaw wyników, którego zakres jest ograniczony do zapytania SQL, w którym jest zdefiniowany i używany. Jest podobna do tabeli pochodnej, ale nie jest przechowywana jako obiekt i może odwoływać się do siebie, w przeciwieństwie do tabel pochodnych. W rezultacie CTE zapewnia lepszą wydajność niż tabele pochodne w MySQL.
Przeczytaj bonus:Jak obliczyć depozyt zabezpieczający w MySQL
Wspólne wyrażenie tabelowe w MySQL
Oto składnia wspólnego wyrażenia tabelowego w MySQL.
WITH cte_name (column_list) AS ( query ) SELECT * FROM cte_name;
W powyższym zapytaniu należy podać nazwę CTE, zapytanie SQL, do którego wyniku należy się odwołać przy użyciu nazwy CTE. Pamiętaj, że liczba kolumn w column_list powinny być takie same jak te w Twoim zapytaniu .
Spójrzmy na przykład wspólnego wyrażenia tabelowego (CTE).
Przeczytaj bonus:Jak uzyskać najlepiej sprzedający się produkt za pomocą zapytania SQL
Powiedzmy, że masz sprzedaż (identyfikator, data_zamówienia, kwota) tabela.
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 | +------+------------+--------+
Oto CTE, aby wybrać tylko rekordy sprzedaży, które mają kwotę>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 | +------+------------+--------+
W powyższym CTE określamy zapytanie SELECT, aby filtrować wiersze z ilością>200 wewnątrz klauzuli WITH.
Przeczytaj bonus:Jak używać instrukcji CASE w MySQL
Pamiętaj, że możesz używać CTE z instrukcjami SELECT, UPDATE, INSERT i DELETE. Oto składnia tego samego.
WITH … SELECT … WITH … UPDATE … WITH … DELETE …
Możesz także użyć CTE jako podzapytania, jak pokazano poniżej
SELECT … WHERE id IN (WITH … SELECT …); SELECT * FROM (WITH … SELECT …) AS temporary_table;
Jeśli używasz wyniku instrukcji SELECT jako danych wejściowych dla instrukcji CREATE/INSERT/REPLACE, możesz również użyć w niej klauzuli WITH. Oto kilka przykładów,
CREATE TABLE … WITH … SELECT … CREATE VIEW … WITH … SELECT … INSERT … WITH … SELECT … REPLACE … WITH … SELECT … DECLARE CURSOR … WITH … SELECT … EXPLAIN … WITH … SELECT …
Bonus przeczytaj:Uzyskaj wiele zliczeń z różnymi warunkami w MySQL
Wspólne wyrażenie tabeli w Ubiq
Narzędzie Ubiq Reporting obsługuje zapytania SELECT oparte na CTE i ułatwia wizualizację wyników SQL na różne sposoby. Umożliwia także tworzenie pulpitów nawigacyjnych i wykresów z wyników zapytań MySQL. Oto powyższe zapytanie CTE w Ubiq.
W rzeczywistości po uruchomieniu zapytania wystarczy kliknąć typ wizualizacji, aby wykreślić wynik na wykresie.
Potrzebujesz narzędzia do raportowania dla MySQL? Ubiq ułatwia wizualizację danych w ciągu kilku minut i monitorowanie w pulpitach nawigacyjnych w czasie rzeczywistym. Wypróbuj już dziś!