집 >데이터 베이스 >MySQL 튜토리얼 >전화번호부 데이터베이스에 나열되지 않은 번호에서 걸려온 전화를 찾는 방법은 무엇입니까?
이 기사에서는 전화번호부 데이터베이스에 나열되지 않은 전화번호에서 걸려온 전화를 식별하는 몇 가지 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
아닌
솔루션 접근 방식:
이를 달성하기 위한 세 가지 효과적인 방법은 다음과 같습니다.
NOT IN
1. 조항:
Call
이 접근 방식은 Phone_book
테이블에 있는 전화번호를 Phone_book
테이블에서 직접 제외합니다. 작은
<code class="language-sql">SELECT * FROM Call WHERE phone_number NOT IN (SELECT phone_number FROM Phone_book);</code>
NOT EXISTS
2. 하위 쿼리:
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>
LEFT OUTER JOIN
3. :
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!