Degree vs cardinality? → degree = #columns, cardinality = #rows.
What does NULL mean? → value missing/unknown, not 0/''.
NULL = NULL returns? → UNKNOWN.
How to test for NULL? → IS NULL / IS NOT NULL.
FALSE AND NULL? → FALSE. TRUE OR NULL? → TRUE.
Does a row survive WHERE if the condition is UNKNOWN? → No, only TRUE survives.
Recall Feynman: explain to a 12-year-old
Imagine a class attendance grid. Each column is a question we ask about a kid (name, age, favourite sport). Each row is one kid's answers. The whole grid is the table. Sometimes a kid forgot to write their age — that empty box isn't "zero years old," it just means we don't know yet. That blank-meaning-unknown is called NULL. And here's the funny rule: if you ask "is this unknown age bigger than 10?" the honest answer is "I can't tell" — so the computer says unknown and just skips that kid from the answer list.
Relational model ka basic idea ekdum simple hai: saara data tables (grid) ke form mein store hota hai. Har column ek tarah ki information ka naam hai (jaise name, age, major) aur uska ek domain yaani data type hota hai. Har row ek record hai — ek student, ek order, jo bhi. Jitne columns utna degree, jitni rows utni cardinality. Mathematically ye ek set of tuples hai, isliye bina ORDER BY ke row order ki koi guarantee nahi — yaad rakhna.
Ab sabse tricky cheez: NULL. NULL ka matlab hai "value pata hi nahi" — ye zero nahi, empty string '' bhi nahi. Socho Ravi ki age form mein blank reh gayi — iska matlab ye nahi ki Ravi 0 saal ka hai, matlab hai humein nahi pata. Isi wajah se SQL normal TRUE/FALSE ke alawa ek teesri value laata hai: UNKNOWN. Jaise hi NULL ke saath comparison karo (NULL = 20, NULL > 10), answer aata hai UNKNOWN.
Iska practical impact: WHERE clause sirf un rows ko rakhta hai jinki condition TRUE ho. UNKNOWN waali rows chup-chaap drop ho jaati hain. Isliye WHERE age = 20 OR age <> 20 likhne par bhi NULL waala banda gayab ho jaata hai. Fix? NULL check karne ke liye hamesha IS NULL / IS NOT NULL use karo, kyunki yeh asli TRUE/FALSE deta hai. Aur missing value ki jagah default daalna ho to COALESCE(col, default) use karo. Mantra yaad rakho: "NULL = no clue", aur no clue kabhi no clue ke barabar nahi hota.