Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mencari Panggilan daripada Nombor yang Tidak Tersenarai dalam Pangkalan Data Buku Telefon?
Artikel ini menunjukkan beberapa teknik MySQL untuk mengenal pasti panggilan telefon daripada nombor yang tidak disenaraikan dalam pangkalan data buku telefon. Kami akan menganalisis masalah menggunakan data sampel dan menyediakan penyelesaian yang cekap.
Senario:
Kami mempunyai dua jadual: Phone_book
dan Call
.
Phone_book
Jadual:
<code>Phone_book +----+------+--------------+ | id | name | phone_number | +----+------+--------------+ | 1 | John | 111111111111 | +----+------+--------------+ | 2 | Jane | 222222222222 | +----+------+--------------+</code>
Call
Jadual:
<code>Call +----+------+--------------+ | id | date | phone_number | +----+------+--------------+ | 1 | 0945 | 111111111111 | +----+------+--------------+ | 2 | 0950 | 222222222222 | +----+------+--------------+ | 3 | 1045 | 333333333333 | +----+------+--------------+</code>
Matlamat: Cari panggilan daripada nombor telefon bukan dalam jadual Phone_book
.
Pendekatan Penyelesaian:
Berikut ialah tiga kaedah yang berkesan untuk mencapai matlamat ini:
1. NOT IN
Fasal:
Pendekatan ini secara langsung mengecualikan nombor telefon daripada jadual Call
yang terdapat dalam jadual Phone_book
. Ia cekap untuk Phone_book
jadual yang lebih kecil.
<code class="language-sql">SELECT * FROM Call WHERE phone_number NOT IN (SELECT phone_number FROM Phone_book);</code>
2. NOT EXISTS
Subquery:
Ini menggunakan subkueri untuk menyemak kewujudan nombor telefon dalam Phone_book
. Ia biasanya lebih cekap daripada NOT IN
untuk Phone_book
jadual yang lebih besar.
<code class="language-sql">SELECT * FROM Call WHERE NOT EXISTS ( SELECT * FROM Phone_book WHERE Phone_book.phone_number = Call.phone_number );</code>
3. LEFT OUTER JOIN
:
Kaedah ini menggunakan LEFT OUTER JOIN
untuk membandingkan nombor telefon. Pertanyaan mengembalikan semua panggilan, tetapi hanya yang mempunyai nilai NULL
dalam lajur Phone_book
mewakili nombor tidak tersenarai.
<code class="language-sql">SELECT * FROM Call LEFT OUTER JOIN Phone_book ON (Call.phone_number = Phone_book.phone_number) WHERE Phone_book.phone_number IS NULL;</code>
Memilih Penyelesaian Terbaik:
Pendekatan optimum bergantung pada saiz dan struktur pangkalan data anda. Untuk set data yang besar, NOT EXISTS
subquery atau LEFT OUTER JOIN
biasanya diutamakan untuk prestasi yang lebih baik. Untuk set data yang lebih kecil, klausa NOT IN
mungkin mencukupi. Pertimbangkan untuk menggunakan EXPLAIN
untuk menganalisis rancangan pelaksanaan pertanyaan dan memilih kaedah yang paling cekap.
Atas ialah kandungan terperinci Bagaimana untuk Mencari Panggilan daripada Nombor yang Tidak Tersenarai dalam Pangkalan Data Buku Telefon?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!