Karatasi ya Muhtasari ya SQL Joins
Rejeo la SQL joins linalotafutika na kuchapishika: inner, left, right, full, anti na semi joins, self joins, ON vs WHERE na LATERAL. Bure.
Basic join types
9SELECT * FROM a INNER JOIN b ON a.id = b.a_id;
SELECT * FROM a LEFT JOIN b ON a.id = b.a_id;
SELECT * FROM a RIGHT JOIN b ON a.id = b.a_id;
SELECT * FROM a FULL OUTER JOIN b ON a.id = b.a_id;
JOIN = INNER JOIN
LEFT OUTER JOIN = LEFT JOIN
LEFT JOIN ... UNION ... RIGHT JOIN ...
ON a.id = b.a_id AND a.type = b.type
ON a.qty BETWEEN p.min_qty AND p.max_qty
Anti-joins (no match)
8LEFT JOIN b ON a.id = b.a_id WHERE b.a_id IS NULL
WHERE NOT EXISTS (SELECT 1 FROM b WHERE b.a_id = a.id)
WHERE a.id NOT IN (SELECT a_id FROM b)
WHERE a.id NOT IN (SELECT a_id FROM b WHERE a_id IS NOT NULL)
RIGHT JOIN a ... WHERE a.id IS NULL
SELECT id FROM a EXCEPT SELECT a_id FROM b;
users without orders = LEFT JOIN + IS NULL
Prefer NOT EXISTS over NOT IN
Semi-joins (has a match)
8WHERE EXISTS (SELECT 1 FROM b WHERE b.a_id = a.id)
WHERE a.id IN (SELECT a_id FROM b)
JOIN b ... GROUP BY a.id
SELECT DISTINCT a.* FROM a JOIN b ON ...
EXISTS stops at the first match
EXISTS (SELECT 1 ...) vs (SELECT * ...)
IN: uncorrelated / EXISTS: correlated
users WITH orders = EXISTS subquery
Self joins
8FROM emp e JOIN emp m ON e.manager_id = m.id
FROM emp e LEFT JOIN emp m ON e.manager_id = m.id
SELECT e.name, m.name AS manager FROM ...
ON a.id < b.id
ON a.id <> b.id
ON b.day = a.day + INTERVAL 1 DAY
ON a.city = b.city AND a.id <> b.id
WITH RECURSIVE tree AS (... UNION ALL ...)
Cross & multi-table joins
8SELECT * FROM sizes CROSS JOIN colors;
FROM sizes, colors
FROM users u JOIN orders o ON ... JOIN items i ON ...
JOIN dates d CROSS JOIN users u LEFT JOIN ...
u LEFT JOIN o ON ... LEFT JOIN i ON i.o_id = o.id
u LEFT JOIN o ... INNER JOIN i ON i.o_id = o.id
FROM a JOIN (b LEFT JOIN c ON ...) ON ...
Written order is logical, not execution order
ON vs WHERE (the gotcha)
8LEFT JOIN b ON a.id = b.a_id AND b.status = 1
LEFT JOIN b ON a.id = b.a_id WHERE b.status = 1
WHERE b.a_id IS NULL OR b.status = 1
LEFT JOIN b ON ... AND a.type = 'x'
WHERE a.type = 'x'
INNER JOIN: ON and WHERE are equivalent
COALESCE(b.total, 0)
COUNT(b.id) vs COUNT(*)
USING, NATURAL & set ops
9JOIN b USING (user_id)
USING outputs ONE shared column
NATURAL JOIN b
Avoid NATURAL JOIN in production
SELECT ... UNION SELECT ...
UNION ALL
JOIN adds columns, UNION adds rows
INTERSECT
UNION needs same column count and types
LATERAL & performance
9CROSS JOIN LATERAL (SELECT ... WHERE b.a_id = a.id LIMIT 3) t
LEFT JOIN LATERAL (...) t ON TRUE
CROSS APPLY / OUTER APPLY
LATERAL sees columns of preceding tables
CREATE INDEX idx ON orders (user_id);
EXPLAIN SELECT ...;
Filter early: join the smallest set first
ON DATE(a.created_at) = b.day
Join on same-type, same-collation columns
Hakuna kipengele kinacholingana na “:q”.
Kuhusu Karatasi ya Muhtasari ya SQL Joins
Karatasi hii ya muhtasari ya SQL joins inafanya jambo moja kwa kina: inaeleza kila njia ya kuunganisha jedwali. Sehemu nane zinashughulikia aina za msingi za join, anti-joins kwa safu zisizo na mfanano, semi-joins kwa safu zenye mfanano, self joins, cross joins na joins za jedwali nyingi, mtego maarufu wa ON dhidi ya WHERE, USING, NATURAL na set operations, na LATERAL joins pamoja na maelezo ya utendaji.
Joins ndipo matokeo ya SQL hukosewa kimyakimya: LEFT JOIN iliyochujwa katika kifungu cha WHERE hugeuka kimyakimya kuwa INNER JOIN, na NOT IN yenye NULL haurudishi chochote. Mitego hiyo ina safu zake hapa, kando ya mfumo sahihi wa kutumia badala yake.
Kama kila karatasi ya muhtasari katika kundi hili ni bure na inafanya kazi upande wa mteja: chuja safu moja kwa moja kwa kisanduku cha utafutaji, ruka kati ya sehemu kwa jedwali la yaliyomo linalobaki juu, nakili taarifa yoyote kwa mbofyo mmoja na chapisha ukurasa kuwa rejeo mezani kwako.
Jinsi ya kutumia Karatasi ya Muhtasari ya SQL Joins
- Fungua karatasi na upitie sehemu, kuanzia Basic join types hadi LATERAL & performance.
- Tafuta neno kuu kama LEFT JOIN, EXISTS au NOT IN ili kuchuja kila safu moja kwa moja.
- Soma sehemu ya ON vs WHERE kabla ya kurekebisha LEFT JOIN inayorudisha safu chache mno.
- Bofya taarifa au ikoni yake ya kunakili ili kunakili SQL kwenye ubao wako wa kunakili.
- Tumia Chapisha kupata nakala ya karatasi ya rejeo kamili ya joins.