ホームページ >データベース >mysql チュートリアル >電話帳データベースに登録されていない番号からの電話を見つけるにはどうすればよいですか?
この記事では、電話帳データベースにリストされていない番号からの電話を識別するための MySQL テクニックをいくつか紹介します。サンプルデータを使用して問題を分析し、効率的な解決策を提供します。
シナリオ:
Phone_book
と Call
の 2 つのテーブルがあります。
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
からの電話番号からの通話を検索します。
解決策のアプローチ:
これを達成するための 3 つの効果的な方法を次に示します。
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 中国語 Web サイトの他の関連記事を参照してください。