Truy vấn cơ bản

SELECT, WHERE với NULL three-valued logic, ORDER BY/LIMIT pagination pitfall, DISTINCT vs GROUP BY, pattern matching, CASE/COALESCE.

7 bài · ~124 phútMiễn phí

Nội dung

Danh sách bài học

  1. 01

    SELECT — projection + alias, vì sao SELECT * chậm gấp 17 lần

    Projection ở executor layer + network/serialization overhead. Cú pháp column list, expression, alias. Vì sao Prisma select() và Spring @Query đều chọn explicit column.

    ~16 phút
  2. 02

    WHERE + NULL three-valued logic — vì sao age != 30 không trả NULL row

    TRUE/FALSE/UNKNOWN. 5 NULL pitfall thực chiến: COUNT, IN/NOT IN, JOIN, string concat, ORM. Codd 1979 paper context.

    ~22 phút
  3. 03

    ORDER BY + pagination — vì sao OFFSET 100k chậm 200 lần

    OFFSET cost tỷ lệ skip rows. Keyset pagination O(1). NULL ordering. Stable sort cần tiebreaker. Pattern infinite scroll dashboard.

    ~18 phút
  4. 04

    DISTINCT vs GROUP BY — cùng plan, khác intent

    Cùng plan, khác intent: DISTINCT để dedupe, GROUP BY để aggregate. DISTINCT ON (PostgreSQL) giải 'top N per group' gọn; window function là alternative portable.

    ~14 phút
  5. 05

    Pattern matching — vì sao LIKE '%x' không dùng được index

    LIKE với % và _, case-insensitive bằng LOWER(), regex, full-text. Nguyên lý: leading wildcard vô hiệu hoá index có thứ tự — agnostic giữa các RDBMS.

    ~15 phút
  6. 06

    CASE + COALESCE + NULLIF — switch/fallback/safe-divide trong SQL

    Conditional expression không có IF. CASE cho switch, COALESCE cho fallback, NULLIF tránh divide-by-zero. Pattern bucketize, status icon, defensive arithmetic.

    ~14 phút
  7. 07

    Mini-challenge: dashboard query — diagnose 3 bug M02

    PM yêu cầu dashboard 'tasks active của user X tuần này, due ≤ 3 ngày, paginate 20'. Naive query có 3 bug từ M02.1-M02.6. Fix sang keyset + NULL handling + JOIN tease.

    ~25 phút