Maison >base de données >tutoriel mysql >Comment rechercher des appels provenant de numéros non répertoriés dans une base de données d'annuaire téléphonique ?
Cet article présente plusieurs techniques MySQL pour identifier les appels téléphoniques provenant de numéros non répertoriés dans une base de données d'annuaire téléphonique. Nous analyserons le problème à l'aide d'échantillons de données et fournirons des solutions efficaces.
Scénario :
Nous avons deux tables : Phone_book
et Call
.
Phone_book
Tableau :
<code>Phone_book +----+------+--------------+ | id | name | phone_number | +----+------+--------------+ | 1 | John | 111111111111 | +----+------+--------------+ | 2 | Jane | 222222222222 | +----+------+--------------+</code>
Call
Tableau :
<code>Call +----+------+--------------+ | id | date | phone_number | +----+------+--------------+ | 1 | 0945 | 111111111111 | +----+------+--------------+ | 2 | 0950 | 222222222222 | +----+------+--------------+ | 3 | 1045 | 333333333333 | +----+------+--------------+</code>
Objectif : Rechercher des appels provenant de numéros de téléphone pas dans le tableau Phone_book
.
Approches de solutions :
Voici trois méthodes efficaces pour y parvenir :
1. NOT IN
Clause :
Cette approche exclut directement les numéros de téléphone de la table Call
qui sont présents dans la table Phone_book
. C'est efficace pour les Phone_book
tables plus petites.
<code class="language-sql">SELECT * FROM Call WHERE phone_number NOT IN (SELECT phone_number FROM Phone_book);</code>
2. NOT EXISTS
Sous-requête :
Ceci utilise une sous-requête pour vérifier l'existence d'un numéro de téléphone dans Phone_book
. C'est généralement plus efficace que NOT IN
pour les tables Phone_book
plus grandes.
<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
:
Cette méthode utilise un LEFT OUTER JOIN
pour comparer les numéros de téléphone. La requête renvoie tous les appels, mais seuls ceux avec des valeurs NULL
dans les colonnes Phone_book
représentent des numéros non répertoriés.
<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>
Choisir la meilleure solution :
L'approche optimale dépend de la taille et de la structure de votre base de données. Pour les grands ensembles de données, la sous-requête NOT EXISTS
ou LEFT OUTER JOIN
sont généralement préférées pour de meilleures performances. Pour les ensembles de données plus petits, la clause NOT IN
peut suffire. Pensez à utiliser EXPLAIN
pour analyser les plans d'exécution des requêtes et choisir la méthode la plus efficace.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!