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ś!