识别未知呼叫者:未注册号码的 SQL 技术
本文演示了如何使用 SQL 查询识别电话簿数据库中未列出的号码的电话。 我们将探索几种有效的方法来实现这一目标。
场景:
考虑这些表格:
表:Phone_book
id | name | phone_number |
---|---|---|
1 | John | 111111111111 |
2 | Jane | 222222222222 |
表:Call
id | date | phone_number |
---|---|---|
1 | 0945 | 111111111111 |
2 | 0950 | 222222222222 |
3 | 1045 | 333333333333 |
目标是查找来自号码的来电,而不是中的Phone_book
。
SQL 查询解决方案:
下面介绍三种方法:
方法一:NOT IN
子查询
此方法使用 NOT IN
子查询来有效过滤掉 Phone_book
:
<code class="language-sql">SELECT * FROM Call WHERE phone_number NOT IN (SELECT phone_number FROM Phone_book);</code>
方法2:NOT EXISTS
子查询
此替代方案使用 NOT EXISTS
来实现相同的结果。 它通常被认为对于大型数据集更有效:
<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
与NULL
检查
此方法使用 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>
预期结果:
所有三个查询将产生相同的输出:
表:Call
id | date | phone_number |
---|---|---|
3 | 1045 | 333333333333 |
这可以正确识别来自未注册号码的呼叫。 选择最适合您的数据库系统和数据大小的方法。
以上是如何使用 SQL 查询识别未注册的调用者?的详细内容。更多信息请关注PHP中文网其他相关文章!