1 Minute 4 Change

Menu
  • Home
  • Code & Discover
    • Data Engineer
    • SQL
    • Flutter
    • Web Developer
  • Learn something
    • Languages
      • English
  • Chill Zone
    • Novels
      • Giả làm thần linh ở xã hội nguyên thủy
    • Games
    • Videos
  • About
  • Contact
Menu

Common Table Expression (CTE) trong cơ sở dữ liệu

Posted on Tháng 12 24, 2024Tháng 12 24, 2024 by Daisy

Common Table Expression (CTE) là một khái niệm trong SQL (Structured Query Language), được sử dụng để định nghĩa một tập hợp các kết quả truy vấn tạm thời, mà có thể được tham chiếu nhiều lần trong cùng một truy vấn chính. CTE thường giúp làm cho các truy vấn phức tạp trở nên dễ đọc, dễ hiểu và dễ bảo trì hơn.

CTE được khai báo bằng từ khóa WITH và có thể được sử dụng trong các câu lệnh như SELECT, INSERT, UPDATE, hoặc DELETE.

Cú pháp cơ bản

WITH cte_name (column1, column2, ...) AS (

    -- Truy vấn con

    SELECT column1, column2, ...

    FROM table_name

    WHERE conditions

)

-- Truy vấn chính

SELECT column1, column2, ...

FROM cte_name

WHERE conditions;

Đặc điểm chính:

1. Dễ đọc và bảo trì: CTE giúp chia nhỏ truy vấn lớn thành các phần dễ hiểu hơn.

2. Có thể đệ quy: CTE hỗ trợ truy vấn đệ quy (recursive CTE), cho phép xử lý dữ liệu lặp đi lặp lại như duyệt cây hoặc tính toán lặp.

3. Không tạo bảng tạm: Dữ liệu trong CTE không lưu trữ tạm thời trong cơ sở dữ liệu mà chỉ tồn tại trong quá trình truy vấn.

Ví dụ 1: CTE đơn giản

Tính tổng số lượng sản phẩm bán ra từ bảng Sales:

WITH TotalSales AS (

    SELECT ProductID, SUM(Quantity) AS TotalQuantity

    FROM Sales

    GROUP BY ProductID

)

SELECT *

FROM TotalSales

WHERE TotalQuantity > 100;

Ví dụ 2: CTE đệ quy

Tính cấp bậc trong một cấu trúc cây (ví dụ: bảng nhân viên với quản lý):

WITH RecursiveCTE AS (

    -- Truy vấn cơ sở (Base case)

    SELECT EmployeeID, ManagerID, 1 AS Level

    FROM Employees

    WHERE ManagerID IS NULL

    UNION ALL

    -- Truy vấn đệ quy (Recursive case)

    SELECT e.EmployeeID, e.ManagerID, r.Level + 1

    FROM Employees e

    INNER JOIN RecursiveCTE r

    ON e.ManagerID = r.EmployeeID

)

SELECT *

FROM RecursiveCTE;

Khi nào nên dùng CTE?

• Khi cần tái sử dụng kết quả của một truy vấn con nhiều lần.

• Khi cần làm cho truy vấn phức tạp dễ đọc hơn.

• Khi làm việc với các vấn đề đệ quy, như cấu trúc cây.

Category: Code & Discover Data Engineer SQL

Điều hướng bài viết

← High Water Mark (HWM) trong cơ sở dữ liệu là gì?
CRM là gì? →

1minute4change.

ABOUT ME

One minute for change, mỗi ngày biết thêm một chút.

RECENT POSTS

  • Tháng 1 30, 2025 by Daisy So sánh báo cáo trong Tableau và BI Publisher
  • Tháng 1 21, 2025 by Daisy CDS (Card Data System) là gì?
  • Tháng 1 19, 2025 by Daisy Data Warehouse (DW), Operational Reporting System (ORS), và Operational Data Store (ODS)

CATEGORIES

  • Chill Zone (5)
  • Code & Discover (17)
  • Learn something (0)
  • Uncategorized (1)

TAG

  • API (2)
  • Bigdata (1)
  • CDS (1)
  • CRM (1)
  • DevOps (1)
  • Gialamthanlinhoxahoinguyenthuy (4)
  • HTML (1)
  • Khongcp (3)
  • Oracle (1)
  • Partition (2)
  • Report (1)
  • SQL (8)
  • WebAPI (1)
  • Xaydung (3)
  • Chill Zone (5)
  • Code & Discover (17)
  • Data Engineer (12)
  • Discover (3)
  • Flutter (1)
  • Novels (5)
  • SQL (11)
  • Uncategorized (1)
  • Web Developer (4)
© 2025 1 Minute 4 Change | Powered by Minimalist Blog WordPress Theme