Tutorial Subkueri SQL: Jenis, Subkueri yang Berkorelasi, dan ADA Dengan Contoh

  1. Beranda
  2. Blog
  3. Database & SQL

Database & SQL

Tutorial Subkueri SQL: Jenis, Subkueri yang Berkorelasi, dan EXISTS Beserta Contohnya

Subkueri adalah kueri di dalam kueri lain. Pelajari setiap jenis dan lokasinya, pahami subkueri yang berkorelasi dengan benar, dan hindari jebakan NOT IN yang secara diam-diam tidak mengembalikan baris sama sekali.

9 menit baca
Tutorial subkueri SQL: tipe, subkueri yang berkorelasi, dan EXISTS beserta contohnya

Poin penting

  • subkueri adalah kueri yang bersarang di dalam kueri lain, dan kueri luar menggunakan hasilnya.
  • Subkueri dapat muncul di WHERE, FROM, SELECT dan HAVING.
  • Subkueri berkorelasi mengacu pada baris terluar, sehingga dievaluasi secara logis per baris.
  • Pilih NOT EXISTS hingga NOT IN ketika NULL memungkinkan.

Beberapa pertanyaan memerlukan dua langkah untuk dijawab. “Pesanan mana yang di atas rata-rata?” mengharuskan Anda menemukan rata-ratanya terlebih dahulu, lalu membandingkan setiap pesanan dengannya. Subkueri SQL memungkinkan Anda menulis kedua langkah sebagai satu pernyataan.

Tutorial ini mencakup setiap jenis menggunakan dua tabel kecil. Kami menjalankan kueri ini di SQLite 3.50, dan hasil yang ditampilkan berasal dari proses tersebut. Sintaks subkueri standar didukung secara luas, dan kami menunjukkan perbedaan database.

Apa itu subkueri?

Subkueri, juga disebut kueri dalam atau kueri bersarang, adalah pernyataan SELECT yang ditempatkan di dalam pernyataan lain, dalam tanda kurung bulat. Secara konseptual, kueri dalam menghasilkan hasil yang kemudian digunakan oleh kueri luar.

SELECT id, total
FROM orders
WHERE total > (SELECT AVG(total) FROM orders);

Tabel sampel

CREATE TABLE customers (id INT, name TEXT, city TEXT);
CREATE TABLE orders (id INT, customer_id INT, total INT);

INSERT INTO customers VALUES
 (1,'Asha','Pune'), (2,'Ben','Delhi'), (3,'Chitra','Pune'), (4,'Dev','Goa');

INSERT INTO orders VALUES
 (101,1,1200), (102,1,800), (103,2,300), (104,3,2500), (105,3,100);

Perhatikan bahwa Dev tidak memiliki perintah. Detail tersebut penting untuk beberapa contoh di bawah.

Sekilas tentang jenis subquery

Ketik Kembali Lokasi yang khas Operator umum
Skalar Satu nilai WHERE, SELECT =, >, <
Multi-baris Satu kolom, banyak baris DIMANA IN, ANY, ALL
Tabel (turunan) Banyak kolom dan baris DARI Digunakan seperti meja
Berkorelasi Tergantung pada baris terluar WHERE, SELECT Apa saja, dan EXISTS

Subkueri skalar

Subkueri skalar mengembalikan tepat satu nilai, sehingga Anda dapat menggunakannya di mana pun nilai tunggal tersebut masuk akal. Ini query dari sebelumnya, beserta hasilnya. Rata-rata semua pesanan adalah 980:

SELECT id, total
FROM orders
WHERE total > (SELECT AVG(total) FROM orders);

-- 101 | 1200
-- 104 | 2500

Anda tidak dapat menulis WHERE total > AVG(total), karena agregat tidak diperbolehkan langsung di WHERE. Subkueri menyiasatinya dengan menghitung nilainya secara terpisah.

Bagaimana jika subkueri “skalar” mengembalikan beberapa baris? Sebagian besar database, termasuk PostgreSQL, MySQL dan SQL Server, memunculkan kesalahan. SQLite tidak. Dalam pengujian kami, secara diam-diam hanya menggunakan baris pertama, yang dapat menyembunyikan bug sebenarnya, jadi jangan bergantung pada perilaku ini.

DALAM dan BUKAN DALAM

Saat kueri dalam mengembalikan daftar, gunakan IN. Ini menemukan pelanggan dengan setidaknya satu pesanan lebih dari 1000:

SELECT name FROM customers
WHERE id IN (SELECT customer_id FROM orders WHERE total > 1000);

-- Asha
-- Chitra

NOT IN melakukan sebaliknya, menemukan pelanggan yang belum pernah memesan:

SELECT name FROM customers
WHERE id NOT IN (SELECT customer_id FROM orders);

-- Dev

Itu berfungsi di sini, tetapi NOT IN memiliki kasus tepi yang berbahaya, yang kami bahas di bawah.

Subkueri di FROM

Subquery di FROM bertindak sebagai tabel sementara, sering disebut tabel turunan. Hal ini berguna ketika Anda perlu menggabungkan dua kali, seperti dalam kueri untuk pembelanjaan rata-rata per pelanggan di setiap kota:

SELECT city, AVG(spent) AS avg_spent
FROM (
  SELECT c.city, SUM(o.total) AS spent
  FROM customers c
  JOIN orders o ON o.customer_id = c.id
  GROUP BY c.id, c.city
) AS per_customer
GROUP BY city;

-- Delhi |  300.0
-- Pune  | 2300.0

Kueri bagian dalam menjumlahkan setiap pelanggan, dan kueri bagian luar menghitung rata-rata total tersebut. Memberi alias pada tabel turunan adalah kebiasaan yang baik, karena beberapa database memerlukannya. Jika GROUP BY baru bagi Anda, lihat SQL GROUP BY dan HAVING.

Subkueri di SELECT

Subkueri skalar juga dapat menambahkan kolom terhitung. Yang ini menghitung pesanan per pelanggan:

SELECT name,
       (SELECT COUNT(*) FROM orders o WHERE o.customer_id = c.id) AS order_count
FROM customers c;

-- Asha   | 2
-- Ben    | 1
-- Chitra | 2
-- Dev    | 0

Dev muncul dengan nol. Gabungan dalam akan menghilangkan Dev sepenuhnya, karena Dev tidak memiliki baris yang cocok. Anda bisa mendapatkan hasil yang sama dengan LEFT JOIN dan GROUP BY, yang kami jelaskan di penjelasan gabungan SQL.

Subkueri yang berkorelasi

Contoh sebelumnya juga berkorelasi, karena kueri dalam merujuk ke c.id dari kueri luar. Subkueri yang tidak berkorelasi dapat berjalan sendiri. Yang berkorelasi tidak bisa, karena bergantung pada nilai dari baris terluar saat ini.

Ini menemukan pesanan di atas rata-rata pelanggan yang sama:

SELECT o.id, o.customer_id, o.total
FROM orders o
WHERE o.total > (
  SELECT AVG(i.total)
  FROM orders i
  WHERE i.customer_id = o.customer_id
);

-- 101 | 1 | 1200
-- 104 | 3 | 2500

Berikut cara membacanya. Untuk pesanan 101, kueri dalam menghitung rata-rata pesanan pelanggan 1 (1200 dan 800), yang menghasilkan 1000. Karena 1200 lebih besar, baris tersebut dipertahankan. Untuk order 102 berlaku rata-rata yang sama, namun 800 tidak lebih besar sehingga dihilangkan. Pesanan tunggal Pelanggan 2 sama dengan rata-rata pesanannya sendiri, jadi pesanan tersebut juga dibatalkan.

Fitur Tidak berkorelasi Berkorelasi
Menggunakan nilai kueri luar? Tidak Ya
Bisakah berjalan sendiri? Ya Tidak
Eksekusi logis Sekali Sekali per baris terluar
Risiko kinerja Biasanya rendah Bisa tinggi di meja besar

“Sekali per baris” menjelaskan logikanya, dan pengoptimal kueri sering kali menulis ulang logika ini menjadi sesuatu yang jauh lebih efisien. Namun, subquery yang berkorelasi lambat layak untuk diselidiki. Indeks pada kolom dalam, di sini orders.customer_id, dapat membuat perbedaan besar. Lihat penjelasan indeks SQL.

ADA dan TIDAK ADA

EXISTS menanyakan pertanyaan ya atau tidak: apakah kueri dalam mengembalikan setidaknya satu baris? Itu bisa berhenti di pertandingan pertama, dan apa yang Anda pilih di dalamnya tidak masalah, itulah sebabnya orang sering menulis SELECT 1.

SELECT c.name FROM customers c
WHERE EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.id);

-- Asha, Ben, Chitra

SELECT c.name FROM customers c
WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.id);

-- Dev

Perangkap NOT IN NULL

Ini adalah salah satu bug subkueri yang paling umum. Kami membuat tabel dengan satu ID asli dan satu NULL, lalu menjalankan kedua formulir tersebut:

CREATE TABLE r (customer_id INT);
INSERT INTO r VALUES (1), (NULL);

SELECT name FROM customers
WHERE id NOT IN (SELECT customer_id FROM r);
-- (no rows at all)

SELECT c.name FROM customers c
WHERE NOT EXISTS (SELECT 1 FROM r WHERE r.customer_id = c.id);
-- Ben, Chitra, Dev

Mengapa yang pertama tidak menghasilkan apa-apa? id NOT IN (1, NULL) berarti id <> 1 AND id <> NULL. Perbandingan apa pun dengan NULL tidak diketahui dan bukan benar, sehingga seluruh kondisi tidak akan pernah benar. Tidak ada pesan kesalahan dan tidak ada peringatan, hanya hasil kosong yang terlihat masuk akal.

Tips: Gunakan NOT EXISTS untuk anti-gabungan secara default. Jika Anda menggunakan NOT IN, tambahkan WHERE customer_id IS NOT NULL di dalam subkueri.

Subkueri vs GABUNG vs CTE

Banyak pertanyaan dapat ditulis lebih dari satu cara. Sebelumnya kami menemukan pelanggan dengan pesanan besar menggunakan IN. Berikut hasil yang sama dengan join:

SELECT DISTINCT c.name FROM customers c
JOIN orders o ON o.customer_id = c.id AND o.total > 1000;

-- Asha
-- Chitra

Perhatikan DISTINCT. Gabungan dapat menghasilkan duplikat jika pelanggan memiliki beberapa kecocokan, sedangkan IN dan EXISTS tidak bisa.

Gunakan Kapan
BERGABUNG Anda memerlukan kolom dari kedua tabel
DALAM atau ADA Anda hanya perlu memfilter berdasarkan apakah ada kecocokan
Tabel turunan Anda perlu melakukan agregat terlebih dahulu, dan itu tetap singkat
CTE Logikanya memiliki beberapa langkah, atau digunakan lebih dari satu kali
Fungsi jendela Anda memerlukan gambar per grup di samping setiap baris

Kinerja bervariasi menurut database dan data, dan pengoptimal modern sering kali menghasilkan rencana serupa. Jadi pilihlah bentuk yang paling jelas terlebih dahulu, lalu centang EXPLAIN apakah ternyata lambat.

Kesalahan umum

  • Menggunakan = dengan hasil multi-baris. Gunakan IN, atau pastikan kueri dalam mengembalikan satu baris.
  • Menggunakan NOT IN pada kolom yang dapat dibatalkan. Anda dapat kehilangan setiap baris secara diam-diam.
  • Menggunakan alias yang tidak jelas. Dalam kueri yang berkorelasi, memenuhi syarat setiap kolom, atau kolom tersebut mungkin terikat ke tabel yang salah.
  • Sarang yang dalam. Tiga level sulit dibaca, jadi konversikan ke CTE.
  • Menambahkan ORDER BY di dalam. Biasanya tidak berpengaruh pada hasil luar, dan beberapa database menolaknya.

Penutup

Subkueri adalah cara alami untuk mengungkapkan pertanyaan dua langkah. Mulailah dengan subkueri skalar dan IN, lalu praktikkan subkueri yang berkorelasi dengan memikirkan satu baris terluar pada satu waktu. Dan ingat NOT EXISTS kapan pun NULL memungkinkan. Untuk berlatih, tulis satu pertanyaan dalam tiga cara, dengan subkueri, gabungan, dan CTE, lalu bandingkan hasil dan keterbacaannya.

Pertanyaan yang sering diajukan

Apa itu subkueri di SQL?

Subquery adalah pernyataan SELECT yang ditempatkan di dalam pernyataan SQL lain, dalam tanda kurung. Pernyataan luar menggunakan hasilnya sebagai nilai, daftar atau tabel.

Apa itu subquery yang berkorelasi?

Ini adalah subkueri yang merujuk ke kolom dari kueri luar. Itu tergantung pada baris terluar saat ini, sehingga tidak bisa berjalan sendiri.

Mana yang lebih cepat, subquery atau GABUNG?

Hal ini bergantung pada database dan data, dan pengoptimal sering kali menghasilkan rencana serupa. Tulis versi yang paling jelas terlebih dahulu, lalu bandingkan rencana eksekusi jika kinerja penting.

Apa perbedaan antara IN dan EXIST?

IN membandingkan nilai dengan daftar hasil. EXISTS memeriksa apakah ada baris yang dikembalikan. Mereka berperilaku berbeda dengan NULL ketika dinegasikan.

Bisakah subkueri mengembalikan banyak kolom?

Ya, bila digunakan dalam FROM sebagai tabel turunan, dan beberapa database juga mengizinkan perbandingan baris. Subkueri skalar harus mengembalikan hanya satu kolom dan satu baris.

Teruslah belajar

Bekerja dengan Stack Quora

Butuh bantuan dengan pengujian, WordPress atau SEO?

Kami membantu tim mengirimkan perangkat lunak yang lebih baik dan mengembangkan situs mereka. Beritahu kami apa yang sedang Anda kerjakan dan kami akan menyarankan langkah selanjutnya yang jelas.

Teruslah membaca

Panduan lebih lanjut tentang pengujian, AI & pengembangan modern

Menikmati artikel ini? Pilih topik dan langsung masuk ke tutorial terbaru kami.

Kecerdasan buatan

Penjelasan Halusinasi AI: Mengapa Model Bahasa Memperbaiki Masalah dan Cara Menguranginya

Halusinasi AI menjelaskan: apa itu, mengapa model bahasa memproduksinya, tipe umum, cara menguranginya dengan landasan dan petunjuk, dan pemeriksaan…

Baca artikel →
DevOps

Penjelasan Variabel Lingkungan: File .env, Rahasia, dan Konfigurasi Dilakukan dengan Benar

Variabel lingkungan dijelaskan dengan contoh Python yang kami jalankan: membaca dan mengaturnya, mengapa setiap nilai berupa string, file .env, pewa…

Baca artikel →
Pengembangan perangkat lunak

Penjelasan Pembatasan Kecepatan API: Algoritma, Header, dan Penanganan 429 Kesalahan

Pembatasan laju API dijelaskan dengan simulasi yang kami jalankan: keranjang token, jendela tetap, jendela geser, respons 429, header batas laju, pe…

Baca artikel →
Otomatisasi pengujian

Mengejek dengan Python: unittest.mock, patch dan Kesalahan yang Membuat Tes Berbohong

Mengejek dengan Python dengan unittest.mock, menguji: Mock dan return_value, side_effect, menambal di mana nama digunakan, spesifikasi dan autospec,…

Baca artikel →
Pengujian perangkat lunak

Penjelasan Cakupan Kode: Cakupan Jalur vs Cabang dan Apa Arti 100% Sebenarnya

Cakupan kode dijelaskan dengan coverage.py yang sebenarnya dijalankan: cakupan garis, cabang dan kondisi, membaca laporan, mengapa cakupan 100% masi…

Baca artikel →
Basis data & SQL

DELETE vs TRUNCATE vs DROP dalam SQL: Perbedaan, Rollback dan Kapan Menggunakan Masing-Masing

DELETE vs TRUNCATE vs DROP dijelaskan dengan SQL yang diuji: apa yang dihapus, rollback, pemicu, reset identitas, kecepatan, dan perbedaan PostgreSQ…

Baca artikel →
Basis data & SQL

Penjelasan Tampilan SQL: Membuat, Menggunakan, dan Menghindari Kesalahan, Dengan Contoh

Tampilan SQL dijelaskan dengan kueri yang kami jalankan: membuat tampilan, hasil langsung, menyembunyikan kolom, kinerja, tampilan yang dapat diperb…

Baca artikel →
Pengembangan perangkat lunak

Antarmuka TypeScript vs Tipe: Perbedaan Nyata, Diuji Dengan Kompiler

Antarmuka TypeScript vs tipe, diperiksa dengan kompiler sebenarnya: apa yang bisa dilakukan keduanya, apa yang hanya bisa dilakukan satu orang, peng…

Baca artikel →
Pengembangan perangkat lunak

Penjelasan Python *args dan **kwargs: Fungsi Fleksibel Dengan Contoh Jelas

Python *args dan **kwargs dijelaskan dengan kode yang kami jalankan: pengepakan dan pembongkaran, urutan parameter, argumen hanya kata kunci dan pos…

Baca artikel →
Pengembangan perangkat lunak

Fungsi Python Lambda: Sintaks, Kegunaan Sebenarnya, dan Kapan Tidak Digunakan

Fungsi python lambda dijelaskan dengan kode yang kami jalankan: sintaksis, pengurutan dengan kunci, peta dan filter, penutupan, jebakan pengikatan a…

Baca artikel →
Kecerdasan buatan

Apa Itu Agen AI? Cara Kerjanya, Dengan Agent Loop Sederhana yang Dapat Anda Jalankan

Apa itu agen AI? Panduan sederhana tentang loop agen, alat, memori, dan pagar pembatas, dengan loop Python kecil yang kami jalankan, risiko nyata da…

Baca artikel →
DevOps

Pemantauan vs Observabilitas: Perbedaan Nyata, Dengan Log, Metrik, dan Jejak

Penjelasan pemantauan vs observabilitas: kegagalan yang diketahui dan tidak diketahui, log, metrik dan jejak, penelusuran insiden checkout, sinyal e…

Baca artikel →
DevOps

Volume Docker vs Bind Mounts: Pertahankan Data Kontainer dengan Cara yang Benar

Volume Docker vs pengikatan pengikat dijelaskan: mengapa data kontainer menghilang, volume yang diberi nama, pengikatan pengikatan, tmpfs, contoh Tu…

Baca artikel →
Otomatisasi pengujian

TDD vs BDD: Perbedaan Utama, Satu Fitur Dibangun dengan Dua Cara dan Kapan Menggunakan Masing-masing

TDD vs BDD dijelaskan dengan satu fitur diskon yang dibuat dengan dua cara: refactor merah-hijau dengan kode yang kami jalankan, skenario Mengingat-…

Baca artikel →
Pengujian perangkat lunak

User Acceptance Testing (UAT): Proses, Checklist dan Contoh Nyata

Pengujian penerimaan pengguna menjelaskan: siapa yang menjalankannya, perbedaannya dengan QA, proses tujuh langkah, templat kasus uji UAT, daftar pe…

Baca artikel →
Basis data & SQL

Penjelasan Nilai NULL SQL: IS NULL, COALESCE, NULLIF dan Jebakan yang Harus Dihindari

Nilai SQL NULL dijelaskan dengan kueri yang kami jalankan: logika tiga nilai, IS NULL, COALESCE, NULLIF, cara agregat, penggabungan, dan pengurutan …

Baca artikel →
Basis data & SQL

Pernyataan SQL CASE WHEN: Sintaks, Contoh Nyata dan Kesalahan Umum

SQL CASE KETIKA dijelaskan dengan kueri yang kami jalankan: formulir sederhana dan dicari, urutan kondisi, pivot dengan SUM, trik COUNT, pengurutan …

Baca artikel →
Pengembangan perangkat lunak

Apa itu JWT? Token Web JSON Dijelaskan Dengan Contoh Kerja

Apa itu JWT? JSON Web Tokens menjelaskan: tiga bagian, token yang dibuat dan dirusak dalam kode yang kami jalankan, sesi JWT vs, penyimpanan, token …

Baca artikel →
Pengembangan perangkat lunak

Penjelasan Loop Acara JavaScript: Call Stack, Microtasks, dan Timer Dengan Contoh

Perulangan peristiwa JavaScript dijelaskan dengan kode yang kami jalankan: tumpukan panggilan, antrian tugas dan tugas mikro, mengapa setTimeout 0 t…

Baca artikel →
Pengembangan perangkat lunak

Generator Python dan Penjelasan Hasil: Menghemat Memori Dengan Contoh Nyata

Generator dan hasil Python dijelaskan dengan kode yang kami jalankan: bagaimana mereka menjeda dan melanjutkan, mengukur penghematan memori, saluran…

Baca artikel →
Kecerdasan buatan

Apa itu Embedding? Kesamaan Vektor dan Kosinus Dijelaskan Secara Sederhana

Apa itu embeddings? Panduan bahasa sederhana tentang vektor, kesamaan kosinus, dan penelusuran semantik, dengan contoh kecil yang kami jalankan, pen…

Baca artikel →
DevOps

Penerapan Biru-Hijau vs Canary: Perbedaan, Kompromi, dan Cara Memilih

Penjelasan penerapan blue-green vs canary: cara kerja masing-masing, biaya, risiko dan rollback, pengelompokan pengguna stabil yang kami uji, migras…

Baca artikel →
Otomatisasi pengujian

Tes Tidak Stabil: Apa Penyebabnya dan Cara Memperbaikinya untuk Kebaikan

Pengujian yang tidak stabil dijelaskan dengan demo yang kami jalankan: penyebab utama, cara mengonfirmasi dan mendiagnosisnya, perbaikan waktu yang …

Baca artikel →
Pengujian perangkat lunak

Load Testing vs Stress Testing: Perbedaan, Metrik dan Contoh k6

Penjelasan pengujian beban vs pengujian stres: apa yang dibuktikan masing-masing, pengujian lonjakan dan rendam, metrik yang penting, mengapa rata-r…

Baca artikel →
Pengujian perangkat lunak

Kasus Uji vs Skenario Uji: Perbedaan Utama, Contoh, dan Kapan Menggunakan Masing-masing

Penjelasan kasus uji vs skenario pengujian: definisi yang jelas, tabel berdampingan, satu fitur pengaturan ulang kata sandi yang diambil dari skenar…

Baca artikel →
Basis data & SQL

Optimasi Kueri SQL: Baca Rencana Eksekusi dan Perbaiki Kueri Lambat, Dengan Pengaturan Waktu

Pengoptimalan kueri SQL diuji pada sejuta baris: membaca rencana eksekusi, menambahkan indeks yang tepat, memperbaiki filter yang tidak dapat disarg…

Baca artikel →
Basis data & SQL

SQL UNION vs UNION ALL: Perbedaan, Contoh dan Kinerja Diuji

SQL UNION vs UNION ALL dijelaskan dengan kueri yang kami jalankan: duplikat, aturan yang diikuti keduanya, bug data nyata, kinerja terukur, INTERSEC…

Baca artikel →
Pengembangan perangkat lunak

Tutorial API Pengambilan JavaScript: GET, POST, Penanganan Kesalahan, dan Batas Waktu

Tutorial JavaScript Fetch API diuji pada server lokal: GET dan POST, mengapa 404 tidak muncul, bantuan yang dapat digunakan kembali, string kueri, b…

Baca artikel →
Pengembangan perangkat lunak

Penanganan File Python: Baca, Tulis, CSV, JSON dan pathlib Dengan Contoh

Penanganan file Python dijelaskan dengan kode yang kami jalankan: mode terbuka, dengan, membaca file besar, CSV, JSON, pathlib, file biner, penulisa…

Baca artikel →
Pengembangan perangkat lunak

Kelas dan Objek Python: Tutorial OOP Dengan Contoh Nyata

Kelas dan objek Python dijelaskan dengan kode yang kami jalankan: __init__, metode, atribut kelas vs instance, warisan, properti, metode dunder, kel…

Baca artikel →
Kecerdasan buatan

Apa Itu Model Bahasa Besar? Bagaimana LLM Bekerja, Dijelaskan Tanpa Hype

Apa yang dimaksud dengan model bahasa besar? LLM dijelaskan dalam bahasa sederhana: token, penyematan, perhatian, pelatihan, jendela suhu dan kontek…

Baca artikel →
DevOps

Perintah Linux untuk Pemula: Panduan Terminal Penting Dengan Contoh

Perintah Linux untuk pemula, dikelompokkan berdasarkan tugas: navigasi, file, melihat log, grep, pipa, izin, proses dan arsip, dengan contoh analisi…

Baca artikel →
Otomatisasi pengujian

Selenium vs Penulis Drama: Perbedaan Utama, Perbandingan Kode, dan Mana yang Harus Dipilih

Selenium vs Playwright dibandingkan: arsitektur, menunggu, dukungan browser dan bahasa, debugging, pengujian yang sama di kedua alat, saran migrasi …

Baca artikel →
Pengujian perangkat lunak

Partisi Ekivalensi: Teknik Desain Tes Dijelaskan Dengan Contoh yang Dikerjakan

Penjelasan partisi ekivalensi: cara menemukan partisi yang valid dan tidak valid, contoh yang berfungsi untuk usia, kata sandi dan kupon, pengujian …

Baca artikel →
Pengujian perangkat lunak

Severity vs Priority dalam Pengujian Perangkat Lunak: Perbedaan, Matriks dan Contoh Nyata

Keparahan vs prioritas dalam pengujian perangkat lunak dijelaskan: definisi yang jelas, matriks empat arah dengan contoh, skala level, siapa yang me…

Baca artikel →
Basis data & SQL

Tutorial Subkueri SQL: Jenis, Subkueri yang Berkorelasi, dan ADA Dengan Contoh

Tutorial subkueri SQL dengan kueri yang kami jalankan: subkueri skalar, IN, FROM dan SELECT, subkueri yang berkorelasi, EXISTS, jebakan NOT IN NULL …

Baca artikel →
Basis data & SQL

Penjelasan Transaksi SQL dan ACID: COMMIT, ROLLBACK dan Tingkat Isolasi

Transaksi SQL dan ACID dijelaskan dengan transfer bank yang kami jalankan: COMMIT, ROLLBACK, savepoint, kunci, tingkat isolasi, pembacaan kotor, keb…

Baca artikel →
Pengembangan perangkat lunak

Git merge vs rebase: perbedaan, contoh, dan kapan memakai masing-masing

Git merge vs rebase dijelaskan dengan keluaran log nyata, tabel perbandingan, aturan emas rebase, dan alur kerja tim yang aman.

Baca artikel →
Pengembangan perangkat lunak

List Comprehension Python: Sintaks, Contoh, dan Kapan Harus Dihindari

List comprehension Python dijelaskan: sintaks, filter, if-else, perulangan bersarang, waktu yang diukur, dan kapan perulangan for biasa lebih baik.

Baca artikel →
Basis data & SQL

Penjelasan SQL JOIN dengan Contoh (Inner, Left, Right, Full)

Pahami SQL JOIN langkah demi langkah dengan tabel dan query contoh: INNER, LEFT, RIGHT, FULL, CROSS, dan SELF, plus kesalahan umum dan tips performa.

Baca artikel →