Persediaan Temu Duga Pengaturcaraan · Pelajaran

Cara INNER JOIN Memadankan Baris

Model mental pemadanan pasangan baris yang memudahkan setiap soalan cantuman

Pelajaran 1 daripada 413 langkah

Cara INNER JOIN Memadankan Baris ialah pelajaran Persediaan Temu Duga Pengaturcaraan percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Persediaan Temu Duga Pengaturcaraan, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Persediaan Temu Duga Pengaturcaraan merangkumi sejumlah 4 pelajaran.

JOIN Pertama yang Ditanya Penemuduga

Apabila penemuduga berkata "gabungkan dua jadual ini", mereka hampir selalu bermaksud INNER JOIN. Ia ialah JOIN lalai dan yang menunjukkan sama ada anda benar-benar memahami cara baris dipadankan.

Keseluruhan topik ini boleh diringkaskan dalam satu ayat: INNER JOIN mempertimbangkan setiap pasangan baris yang mungkin daripada dua jadual dan mengekalkan hanya pasangan yang memenuhi syarat ON. Tiada padanan bermakna baris itu hilang begitu sahaja daripada hasil.

Fahami model mental ini dan setiap soalan JOIN yang lebih sukar akan menjadi lebih mudah.

Dua Jadual untuk Dianalisis

Sepanjang pelajaran ini, kita menggunakan dua jadual kecil. Jadual customers menyimpan pihak yang membuat pesanan, manakala jadual orders merekodkan setiap pesanan serta pelanggan yang berkaitan dengannya.

  • customers(id, name)
  • orders(id, customer_id, amount)

Pautan antara kedua-duanya ialah orders.customer_id = customers.id. Kesamaan itu ialah predikat JOIN yang menjadi asas kepada keseluruhan hasil.

customers
id | name
1  | Ada
2  | Bob
3  | Cleo   -- no orders yet

orders
id | customer_id | amount
10 | 1           | 50
11 | 1           | 20
12 | 2           | 99

Pertanyaan INNER JOIN Asas

Inilah pertanyaan piawai yang ingin dilihat oleh penemuduga. Perhatikan tiga bahagian: dua jadual, JOIN ... ON yang memadankan baris, dan lajur yang anda pilih untuk dipaparkan.

Kata kunci INNER adalah pilihan dalam semua pangkalan data utama. Menulis JOIN sahaja bermaksud INNER JOIN, tetapi menulisnya dengan jelas menunjukkan niat dan mengelakkan kekaburan semasa semakan kod.

SELECT c.name, o.amount
FROM customers AS c
INNER JOIN orders AS o
  ON o.customer_id = c.id;

Bentuk Hasil

Jalankan pertanyaan itu pada data contoh kita dan anda mendapat tiga baris. Ada mempunyai dua pesanan, jadi dia muncul dua kali. Bob muncul sekali.

Cleo hilang. Dia tidak mempunyai pesanan yang sepadan, jadi INNER JOIN menggugurkannya sepenuhnya. Menyatakan dengan jelas bahawa baris tanpa padanan hilang ialah perkara paling penting dalam temu duga tentang JOIN.

name | amount
Ada  | 50
Ada  | 20
Bob  | 99

Model Mental Pemadanan Baris

Bayangkan pangkalan data membentuk hasil darab Kartesian terlebih dahulu: setiap pelanggan dipadankan dengan setiap pesanan. Dengan 3 pelanggan dan 3 pesanan, terdapat 9 pasangan calon.

Kemudian pangkalan data menggunakan predikat ON dan mengekalkan hanya pasangan yang nilainya benar. Daripada 9 calon itu, hanya 3 yang memenuhi o.customer_id = c.id.

Anda tidak menggunakan cara fikir ini untuk mengoptimumkan prestasi, tetapi inilah model tepat untuk menjawab setiap soalan "berapa banyak baris yang dikembalikan?"

Menelusuri Pasangan Calon

Mari kita telusurinya. Komen selepas setiap pasangan menunjukkan sama ada predikat itu benar.

Hanya tiga baris TRUE yang kekal dalam hasil. Setiap pasangan yang melibatkan Cleo (id 3) gagal, jadi dia tidak menyumbang apa-apa.

-- customer.id vs order.customer_id
(Ada=1, ord10 cust=1)  -> TRUE  keep
(Ada=1, ord11 cust=1)  -> TRUE  keep
(Ada=1, ord12 cust=2)  -> FALSE
(Bob=2, ord10 cust=1)  -> FALSE
(Bob=2, ord12 cust=2)  -> TRUE  keep
(Cleo=3, anything)     -> FALSE (no order matches 3)

INNER JOIN Tidak Bergantung pada Susunan

Soalan lazim: adakah penting jadual yang mana anda letakkan dahulu? Untuk INNER JOIN, tidak. Kedua-dua pertanyaan ini mengembalikan baris yang sama kerana syarat ON bersimetri.

Pengoptimum bebas membaca mana-mana jadual dahulu tanpa mengira cara anda menulisnya. (Ini NOT benar untuk JOIN LEFT/RIGHT, yang akan dibincangkan kemudian.)

-- These return the same rows
SELECT c.name, o.amount
FROM customers c JOIN orders o ON o.customer_id = c.id;

SELECT c.name, o.amount
FROM orders o JOIN customers c ON c.id = o.customer_id;

Nama Ringkas Jadual Diharapkan

Penemuduga mahukan nama ringkas yang pendek dan jelas. Bandingkan versi dengan kelayakan penuh yang bertele-tele dengan versi yang kemas menggunakan nama ringkas.

Nama ringkas juga menjadi wajib apabila nama lajur wujud dalam kedua-dua jadual. Memilih id tanpa nama jadual di sini akan menimbulkan ralat lajur mendua, jadi anda mesti menulis c.id atau o.id.

-- verbose
SELECT customers.name, orders.amount
FROM customers JOIN orders
  ON orders.customer_id = customers.id;

-- aliased, preferred
SELECT c.name, o.amount
FROM customers c JOIN orders o
  ON o.customer_id = c.id;

Menggabungkan Lebih Daripada Satu Lajur

Predikat ON tidak terhad kepada satu kesamaan sahaja. Apabila hubungan ditakrifkan oleh kunci gabungan, gabungkan syarat tersebut menggunakan AND.

Di sini, harga ditetapkan mengikut produk dan rantau, jadi padanan memerlukan kedua-dua lajur sepadan. Penemuduga menggunakan perkara ini untuk memastikan anda tidak sekadar menghafal cantuman satu lajur.

SELECT s.units, p.unit_price
FROM sales s
INNER JOIN price_list p
  ON p.product_id = s.product_id
 AND p.region     = s.region;

Cantuman Bukan Kesamaan Turut Wujud

Syarat ON boleh berupa apa-apa ungkapan logik, bukan hanya =. Cantuman bukan kesamaan menggunakan julat atau ketaksamaan. Contoh klasik mengelompokkan skor ke dalam julat gred.

Setiap skor dipadankan dengan satu-satunya julat yang merangkuminya. Menyebut bahawa cantuman tidak terhad kepada kesamaan ialah cara pantas untuk kelihatan berpengalaman.

SELECT s.student, g.grade
FROM scores s
INNER JOIN grades g
  ON s.points >= g.min_points
 AND s.points <= g.max_points;

JOIN Eksplisit berbanding Cantuman Menggunakan Koma

Anda masih akan menemui sintaks cantuman koma lama dalam kod legasi dan sesetengah soalan temu duga. Kedua-dua pertanyaan ini setara untuk INNER JOIN.

Utamakan bentuk JOIN ... ON yang jelas. Sintaks koma mudah tersalah taip sehingga menghasilkan hasil darab Cartesian secara tidak sengaja (kerana terlupa WHERE), iaitu pepijat yang penemuduga berharap dapat dikesan.

-- old implicit join
SELECT c.name, o.amount
FROM customers c, orders o
WHERE o.customer_id = c.id;

-- modern explicit join (preferred)
SELECT c.name, o.amount
FROM customers c
JOIN orders o ON o.customer_id = c.id;

Semakan Ringkas

Uji idea teras padanan INNER JOIN.

Ulang Kaji: Cara INNER JOIN Memadankan Baris

Perkara penting untuk diulangi dalam temu duga:

  • INNER JOIN mengekalkan hanya pasangan yang sepadan; baris yang tidak sepadan pada kedua-dua belah akan hilang.
  • Model mental: bentuk semua pasangan calon, kemudian kekalkan pasangan yang mempunyai predikat ON yang benar.
  • Ia tidak bergantung pada susunan, dan kata kunci INNER adalah pilihan.
  • ON boleh menggunakan kunci gabungan, julat dan ketaksamaan, bukan hanya satu =.
  • Gunakan JOIN ... ON yang jelas bersama nama ringkas untuk mengelakkan pepijat lajur mendua dan hasil darab Cartesian yang tidak disengajakan.
Percuma untuk bermula

Pelajari Persediaan Temu Duga Pengaturcaraan dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
90
Pelajaran
360

Soalan Lazim

Adakah pelajaran “Cara INNER JOIN Memadankan Baris” percuma?

Ya — teks penuh “Cara INNER JOIN Memadankan Baris” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Persediaan Temu Duga Pengaturcaraan, tingkat taraf kepada CoddyKit PRO. Kursus Persediaan Temu Duga Pengaturcaraan merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Cara INNER JOIN Memadankan Baris”?

Model mental pemadanan pasangan baris yang memudahkan setiap soalan cantuman Anda berlatih Persediaan Temu Duga Pengaturcaraan menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Persediaan Temu Duga Pengaturcaraan?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Persediaan Temu Duga Pengaturcaraan di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.

Berapa lamakah pelajaran “Cara INNER JOIN Memadankan Baris” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Persediaan Temu Duga Pengaturcaraan ini?

Ya. Setiap pelajaran Persediaan Temu Duga Pengaturcaraan menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Cara INNER JOIN Memadankan Baris
  2. ON berbanding WHERE dalam Cantuman
  3. Pengembangan Cantuman dan Penggandaan Baris
  4. Mencantumkan Tiga Jadual atau Lebih
← Kembali ke Persediaan Temu Duga Pengaturcaraan