Lateral Join (LATERAL JOIN)
Rujuk item FROM sebelumnya dari dalam subkueri dengan LATERAL — padanan SQL untuk pemanggilan fungsi per baris.
Lateral Join (LATERAL JOIN) adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.
Apa Itu LATERAL?
LATERAL memungkinkan sub-SELECT dalam klausa FROM merujuk ke kolom dari item yang muncul lebih awal dalam daftar FROM. Tanpa LATERAL, item FROM tidak dapat saling melihat.
Model Mental
LATERAL berarti "untuk setiap baris di sisi kiri, evaluasi kueri ini". Ini seperti subkueri berkorelasi — tetapi berada dalam klausa FROM dan mengembalikan banyak baris/kolom.
3 Pesanan Teratas per Pengguna
Penggunaan LATERAL yang klasik:
SELECT u.id, u.email, o.id AS order_id, o.total
FROM users u
JOIN LATERAL (
SELECT id, total FROM orders
WHERE user_id = u.id
ORDER BY total DESC
LIMIT 3
) AS o ON true;Mengapa Bukan Subkueri dalam SELECT?
Subkueri skalar dalam SELECT mengembalikan satu nilai. LATERAL mengembalikan banyak baris dan banyak kolom untuk setiap baris luar.
LATERAL dengan Fungsi
Fungsi yang mengembalikan himpunan secara bawaan memiliki perilaku seperti LATERAL:
SELECT t.id, unnest_tag
FROM posts t
CROSS JOIN LATERAL unnest(t.tags) AS unnest_tag;
-- Equivalent (set-returning functions are implicit LATERAL):
SELECT t.id, unnest_tag
FROM posts t, unnest(t.tags) AS unnest_tag;LATERAL dibandingkan Fungsi Jendela
Untuk "N teratas per grup", LATERAL dan ROW_NUMBER sama-sama dapat digunakan. ROW_NUMBER sering lebih efisien karena membaca tabel sekali; LATERAL menjalankan kembali kueri untuk setiap baris luar.
-- ROW_NUMBER alternative:
WITH ranked AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY total DESC) AS rn
FROM orders
)
SELECT u.email, r.id, r.total
FROM users u
JOIN ranked r ON r.user_id = u.id
WHERE r.rn <= 3;LATERAL dengan Agregat
Nilai yang dihitung sebelumnya untuk setiap baris:
SELECT u.email, stats.last_order_at, stats.total_orders
FROM users u
LEFT JOIN LATERAL (
SELECT MAX(created_at) AS last_order_at,
COUNT(*) AS total_orders
FROM orders WHERE user_id = u.id
) AS stats ON true;ON true
LATERAL memerlukan klausa ON untuk JOIN — tetapi kondisi join berada di dalam subkueri, sehingga ON bagian luar adalah true.
CROSS JOIN LATERAL dibandingkan LEFT JOIN LATERAL
- CROSS JOIN LATERAL — baris luar dihapus jika bagian dalam tidak mengembalikan baris
- LEFT JOIN LATERAL ... ON true — baris luar dipertahankan dengan kolom NULL
LATERAL untuk Kueri Jarak
Untuk setiap pengguna, cari toko terdekat:
SELECT u.id, s.name, s.distance
FROM users u
CROSS JOIN LATERAL (
SELECT name, location <-> u.location AS distance
FROM stores
ORDER BY location <-> u.location
LIMIT 1
) AS s;LATERAL adalah Standar SQL
Distandardisasi dalam SQL:1999. PostgreSQL mengimplementasikannya sebagai LATERAL; SQL Server menggunakan CROSS APPLY / OUTER APPLY.
Kinerja
LATERAL dieksekusi untuk setiap baris luar. Dengan indeks yang sesuai pada tabel bagian dalam, setiap iterasi berlangsung cepat. Tanpa indeks tersebut, kinerjanya dapat lambat dalam skala besar.
Ringkasan
LATERAL = "subkueri FROM yang dapat melihat baris luar".
- N teratas per grup
- Pra-penghitungan per baris
- Fungsi yang mengembalikan himpunan
- Pasangkan dengan LEFT JOIN ... ON true untuk outer join
Pemeriksaan Singkat
Apa yang dimungkinkan oleh LATERAL, tetapi tidak oleh subkueri FROM biasa?
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Lateral Join (LATERAL JOIN)” gratis?
Ya — teks lengkap “Lateral Join (LATERAL JOIN)” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Lateral Join (LATERAL JOIN)”?
Rujuk item FROM sebelumnya dari dalam subkueri dengan LATERAL — padanan SQL untuk pemanggilan fungsi per baris. Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai SQL Academy?
Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Lateral Join (LATERAL JOIN)” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?
Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- CROSS JOIN dan Hasil Kali Kartesius
- Lateral Join (LATERAL JOIN)
- Anti-Join dan Semi-Join (NOT EXISTS)
- Penyetelan Kinerja Join Multi-Tabel