Truy vấn lồng và CTE

Nhập môn Snowflake SQL

George Boorman

Senior Curriculum Manager, DataCamp

Truy vấn lồng

  • Truy vấn lồng
  • Dùng trong các mệnh đề FROM, WHERE, HAVING hoặc SELECT
  • Ví dụ:
    SELECT column1 
    FROM table1 
    WHERE column1 = (SELECT column2 FROM table2 WHERE condition)
    
  • Loại: truy vấn con tương quan và không tương quan
Nhập môn Snowflake SQL

Truy vấn con không tương quan

-- Truy vấn chính trả về pizza có giá bằng giá tối đa từ truy vấn con
SELECT pizza_id
FROM pizzas
-- Truy vấn con không tương quan xác định giá pizza cao nhất
WHERE price = (
    SELECT MAX(price)
    FROM pizzas
)
  • Truy vấn con không tương tác với truy vấn chính
Nhập môn Snowflake SQL

Truy vấn con tương quan

  • Truy vấn con tham chiếu cột từ truy vấn chính
SELECT pt.name, 
       pz.price, 
       pt.category
FROM pizzas AS pz
JOIN pizza_type AS pt 
    ON pz.pizza_type_id = pt.pizza_type_id
WHERE pz.price = (
  -- Xác định giá tối đa cho mỗi danh mục pizza
    SELECT MAX(p2.price) -- Giá tối đa
    FROM pizzas AS p2
    WHERE -- Tương quan: dùng cột của truy vấn ngoài 
      p2.pizza_type_id = pz.pizza_type_id
)
Nhập môn Snowflake SQL

Common Table Expressions

Cú pháp chung:

-- Từ khóa WITH
WITH cte1 AS ( -- Tên CTE
        SELECT col_1, col_2
            FROM table1
    )
    ...
SELECT ... 
FROM cte1 -- Truy vấn CTE
;
Nhập môn Snowflake SQL

Common Table Expressions

WITH max_price AS ( -- CTE tên max_price
    SELECT pizza_type_id, 
           MAX(price) AS max_price
    FROM pizzas
    GROUP BY pizza_type_id
)

-- Truy vấn chính SELECT pt.name, pz.price, pt.category FROM pizzas AS pz JOIN pizza_type AS pt ON pz.pizza_type_id = pt.pizza_type_id JOIN max_price AS mp -- Join với CTE max_price ON pt.pizza_type_id = mp.pizza_type_id WHERE pz.price < mp.max_price -- So sánh giá với cột max_price của CTE
Nhập môn Snowflake SQL

Nhiều CTE

-- Định nghĩa nhiều CTE, phân tách bằng dấu phẩy
WITH cte1 AS (
    SELECT ...
    FROM ...
),

cte2 AS ( SELECT ... FROM ... )
-- Truy vấn chính kết hợp cả hai CTE SELECT ... FROM cte1 JOIN cte2 ON ... WHERE ...
Nhập môn Snowflake SQL

Vì sao dùng CTE?

  • Quản lý thao tác phức tạp
  • Tính mô-đun
  • Dễ đọc
  • Tái sử dụng
Nhập môn Snowflake SQL

Ayo berlatih!

Nhập môn Snowflake SQL

Preparing Video For Download...