> 데이터 베이스 > MySQL 튜토리얼 > PostgreSQL에서 다른 테이블에 없는 한 테이블의 행을 효율적으로 선택하는 방법은 무엇입니까?

PostgreSQL에서 다른 테이블에 없는 한 테이블의 행을 효율적으로 선택하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2025-01-23 22:22:10
원래의
651명이 탐색했습니다.

How to Efficiently Select Rows from One Table Not Present in Another in PostgreSQL?

PostgreSQL에서 누락된 IP 주소 검색

이 가이드에서는 PostgreSQL 데이터베이스 내 login_log 테이블에 있지만 ip_location 테이블에는 없는 IP 주소를 식별하는 여러 가지 방법을 보여줍니다.

방법 1: NOT EXISTS

일반적으로 PostgreSQL에서 가장 효율적인 접근 방식으로 간주됩니다.

<code class="language-sql">SELECT ip 
FROM   login_log l 
WHERE  NOT EXISTS (
   SELECT 1 -- A simple SELECT is sufficient here
   FROM   ip_location
   WHERE  ip = l.ip
   );</code>
로그인 후 복사

방법 2: LEFT JOIN/IS NULL

간결하고 효율적인 대안:

<code class="language-sql">SELECT l.ip 
FROM   login_log l 
LEFT   JOIN ip_location i USING (ip) -- Equivalent to ON i.ip = l.ip
WHERE  i.ip IS NULL;</code>
로그인 후 복사

방법 3: EXCEPT

간단한 방법이지만 복잡한 쿼리에는 유연성이 떨어집니다.

<code class="language-sql">SELECT ip 
FROM   login_log

EXCEPT ALL  -- `ALL` preserves duplicates, potentially improving speed
SELECT ip
FROM   ip_location;</code>
로그인 후 복사

방법 4: NOT IN

NULL 값:

에 잠재적인 문제가 있으므로 주의하여 사용하세요.
<code class="language-sql">SELECT ip 
FROM   login_log
WHERE  ip NOT IN (
   SELECT DISTINCT ip  -- `DISTINCT` is optional
   FROM   ip_location
   );</code>
로그인 후 복사

성능 최적화

쿼리 성능은 데이터 양과 테이블 인덱싱에 따라 달라집니다. NOT EXISTS, LEFT JOINEXCEPT은 일반적으로 뛰어난 성능을 제공합니다. 최적의 결과를 얻으려면 두 테이블의 ip 열에 적절한 인덱스가 있는지 확인하세요.

위 내용은 PostgreSQL에서 다른 테이블에 없는 한 테이블의 행을 효율적으로 선택하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿