"매 SQL은 매 algebra 의 syntactic sugar". Codd(1970)의 relational algebra는 매 set-based operator(σ, π, ⋈, ∪, −, ×) 매 closed system. 매 modern query optimizer(Postgres, DuckDB, Snowflake)의 plan tree 매 그대로 RA expression.
매 핵심
매 6 primitive operators
σ (Selection): row filter. σ_{age>30}(R) ≡ WHERE age>30.
-- Logical: π_{name}(σ_{age>30}(Emp ⋈ Dept))
-- Physical: σ pushed below ⋈ — 매 smaller intermediate
SELECTnameFROMEmpeJOINDeptdONe.dept_id=d.idWHEREe.age>30;-- 매 optimizer 매 σ_{age>30} 의 Emp 매 push.
Projection pushdown
-- π_{name,salary}(Emp ⋈ Dept) — Dept columns 매 unused
EXPLAIN(FORMATTEXT)SELECTe.name,e.salaryFROMEmpeJOINDeptdONe.dept_id=d.id;-- Postgres: only e.name,e.salary,e.dept_id materialized.
Join reordering (⋈ associative + commutative)
-- (A ⋈ B) ⋈ C ≡ A ⋈ (B ⋈ C) — but cost 매 다름
SETjoin_collapse_limit=12;EXPLAINANALYZESELECT*FROMsmallsJOINbigbONs.k=b.kJOINhugehONb.k=h.k;-- 매 small 매 build side 의 선택.
Division via NOT EXISTS
-- "students who took every required course"
-- Took ÷ Required
SELECTs.idFROMStudentssWHERENOTEXISTS(SELECT1FROMRequiredrWHERENOTEXISTS(SELECT1FROMTooktWHEREt.student_id=s.idANDt.course_id=r.course_id));