OLHub

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 · ~125 phút

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

    PG planner biến DISTINCT thành Group/HashAggregate. Khi nào dùng cái nào theo intent. DISTINCT ON PG-specific cho 'top N per group' không cần window.

    ~14 phút
  5. 05

    Pattern matching — vì sao LIKE '%x' kill index

    4 cấp pattern matching: LIKE, ILIKE, regex, FTS. B-tree prefix scan vs leading wildcard. pg_trgm cho fuzzy. Decision tree theo use case.

    ~16 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 TaskFlow — diagnose 3 bug từ M02 concepts

    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