Paghahambing ng mga uri ng SQL JOIN: inner, outer, cross, self, lateral, natural — ano ang ibinabalik ng bawat isa at isang halimbawang isang linya.
Pinagsasama ng mga join ang mga row mula sa dalawang table batay sa shared na key. Ang uri ng join ang nagdedesisyon kung aling mga row ang matitira kapag nagtugma, nawala, o umulit ang mga key.
Talaan ng sanggunian · 8 mga entry
Mga SQL JoinExplained
8 of 8 rows
Inner at outer
Mga row lang kung saan tugma ang ON condition sa parehong mga table. Natatanggal ang mga walang katugma sa alinmang panig.
SELECT u.name, o.total FROM users u INNER JOIN orders o ON u.id = o.user_id;
Lahat ng row mula sa kaliwang table. NULL ang mga column sa kanan kapag walang tugma.
SELECT u.name, o.total FROM users u LEFT OUTER JOIN orders o ON u.id = o.user_id;
Lahat ng row mula sa kanang table. NULL ang mga column sa kaliwa kapag walang tugma.
SELECT u.name, o.total FROM users u RIGHT OUTER JOIN orders o ON u.id = o.user_id;
Lahat ng row mula sa parehong mga table. Napupunan ng NULL ang mga panig na walang tugma.
SELECT u.name, o.total FROM users u FULL OUTER JOIN orders o ON u.id = o.user_id;
Cross at self
Cartesian product. Pina-pares ang bawat row sa kaliwa sa bawat row sa kanan. Walang ON clause.
SELECT u.name, o.total FROM users u CROSS JOIN orders o;
Table na ini-join sa sarili nito gamit ang mga alias. Inihahambing ang mga row sa loob ng isang table.
SELECT a.id AS o1, b.id AS o2 FROM orders a JOIN orders b ON a.user_id = b.user_id WHERE a.id < b.id;
Advanced
Subquery sa FROM na sine-evaluate kada outer row. Makakarefer ang subquery sa mga column ng outer table.
SELECT u.name, o.total FROM users u, LATERAL (SELECT total FROM orders WHERE user_id = u.id LIMIT 1) o;
Nag-join batay sa mga column na pareho ang pangalan. Walang ON clause. Mag-ingat sa hindi sinasadyang collision ng mga key.
SELECT u.name, o.total FROM users u NATURAL JOIN orders o;