Data selalunya disimpan dalam berbilang jadual, dengan perhubungan ditakrifkan oleh kunci asing. Walau bagaimanapun, kadangkala dua jadual mungkin tidak mempunyai hubungan kunci asing langsung, tetapi ia masih boleh dicantumkan melalui jadual ketiga. Soalan ini menunjukkan cara melakukan gabungan sedemikian untuk mengekstrak maklumat khusus daripada berbilang jadual.
Bertentangan dengan andaian bahawa kunci asing diperlukan untuk cantuman jadual, kunci asing tidak diperlukan. Sebaliknya, jadual boleh digabungkan berdasarkan predikat yang ditakrifkan untuk setiap jadual.
Untuk menyertai jadual yang tidak mempunyai hubungan utama asing langsung, ikut langkah berikut:
CROSS JOIN
atau INNER JOIN
. WHERE
untuk menambah syarat tambahan untuk menapis data yang disambungkan. Penyata dan jadual:
Setiap jadual mempunyai predikat yang mentakrifkan baris yang terkandung di dalamnya. Contohnya, jadual Species
mengandungi baris di mana nama spesies sepadan dengan jenis kayu dan ketinggian maksimumnya.
Predikat pertanyaan:
pertanyaan juga mempunyai predikat berdasarkan FROM
, WHERE
dan klausa lain. Alias jadual membenarkan penamaan semula lajur dan memudahkan syarat gabungan.
Sertai jadual:
CROSS JOIN
dan INNER JOIN
gunakan AND
untuk menggabungkan predikat. UNION
menggunakan OR
, manakala EXCEPT
menggunakan AND NOT
untuk menggabungkan predikat. Klausa ON
dan WHERE
boleh digunakan untuk menentukan syarat gabungan tambahan.
Jadual pilihan:
Untuk memilih jadual yang betul, pertimbangkan output yang diingini dan kenal pasti jadual yang mengandungi lajur yang diperlukan. Sertai mereka berdasarkan predikat yang mereka kongsi.
Kunci dan pertanyaan asing:
Kunci asing tidak menjejaskan pelaksanaan pertanyaan. Mereka menguatkuasakan kekangan integriti tetapi tidak menyekat sambungan. Pertanyaan dinilai berdasarkan predikat jadual.
Contoh pertanyaan:
Untuk mengekstrak nama hutan, nama spesies dan jenis kayu hutan wilayah "ARKTIK":
<code class="language-sql">SELECT Forest.Fo_name, Species.Sp_name, Species.Sp_woodtype FROM Forest INNER JOIN Tree ON Forest.Fo_name = Tree.Tr_forest INNER JOIN Species ON Tree.Tr_species = Species.Sp_name WHERE Forest.Fo_loc='ARCTIC' ORDER BY Forest.Fo_name, Species.Sp_name;</code>
Pertanyaan ini secara berkesan menyertai jadual Tr_species
, Tr_forest
dan Forest
melalui lajur Species
dan Tree
serta menapis keputusan berdasarkan lajur Fo_loc
. Keluaran diisih mengikut nama hutan dan spesies.
Nota: Contoh pertanyaan telah diperbetulkan daripada penerangan untuk memastikan ketepatan logik dan dapat menyertai tiga jadual. Keadaan ON Tree.Tr_species=Tree.Tr_forest
dalam contoh asal adalah salah kerana ia cuba menggabungkan dua lajur berbeza dalam jadual. Pertanyaan yang diperbetulkan menggunakan syarat gabungan yang betul.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyertai Jadual Tanpa Hubungan Utama Asing Langsung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!