本文示範了幾種 MySQL 技術,用於識別電話簿資料庫中未列出的號碼的電話。我們將使用樣本數據分析問題並提供有效的解決方案。
場景:
我們有兩個表:Phone_book
和 Call
。
Phone_book
表:
<code>Phone_book +----+------+--------------+ | id | name | phone_number | +----+------+--------------+ | 1 | John | 111111111111 | +----+------+--------------+ | 2 | Jane | 222222222222 | +----+------+--------------+</code>
Call
表:
<code>Call +----+------+--------------+ | id | date | phone_number | +----+------+--------------+ | 1 | 0945 | 111111111111 | +----+------+--------------+ | 2 | 0950 | 222222222222 | +----+------+--------------+ | 3 | 1045 | 333333333333 | +----+------+--------------+</code>
目標: 找出表格中以外的電話號碼的來電。 Phone_book
解決方法:
以下是實現此目的的三種有效方法:
1。 子句:NOT IN
表中排除 Call
表中存在的電話號碼。 對於較小的Phone_book
表來說它非常有效。 Phone_book
<code class="language-sql">SELECT * FROM Call WHERE phone_number NOT IN (SELECT phone_number FROM Phone_book);</code>
2。 子查詢:NOT EXISTS
中是否存在電話號碼。對於較大的 Phone_book
表,它通常比 NOT IN
更有效。 Phone_book
<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
來比較電話號碼。 此查詢會傳回所有呼叫,但只有 LEFT OUTER JOIN
列中具有 NULL
值的呼叫代表未列出的號碼。 Phone_book
<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>
選擇最佳解:
最佳方法取決於資料庫的大小和結構。 對於大型資料集,通常首選 子查詢或 NOT EXISTS
以獲得更好的效能。 對於較小的資料集,LEFT OUTER JOIN
子句可能就足夠了。 考慮使用NOT IN
來分析查詢執行計劃並選擇最有效的方法。 EXPLAIN
以上是如何找到電話簿資料庫中未列出的號碼的通話?的詳細內容。更多資訊請關注PHP中文網其他相關文章!