本文演示了几种 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中文网其他相关文章!