Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wspólne wyrażenie tabelowe w MySQL

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 15 przydatnych wskazówek dotyczących dostrajania i optymalizacji wydajności MySQL/MariaDB

  2. 2017 @ Severalnines:Celebrujemy historie naszych klientów

  3. NA ZDUPLIKOWANY KLUCZ + AUTO INCREMENT problem mysql

  4. Co nowego w replikacji MySQL w MySQL 8.0

  5. Przyznaj uprawnienia użytkownikowi MySQL w systemie Linux za pomocą wiersza poleceń