Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mencari Panggilan daripada Nombor yang Tidak Tersenarai dalam Pangkalan Data Buku Telefon?

Bagaimana untuk Mencari Panggilan daripada Nombor yang Tidak Tersenarai dalam Pangkalan Data Buku Telefon?

DDD
DDDasal
2025-01-22 18:41:09774semak imbas

How to Find Calls from Numbers Not Listed in a Phone Book Database?

Mengenal pasti Pemanggil Tidak Tersenarai dalam MySQL

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn