PostgreSQL SELECT를 사용하여 존재 여부를 확인합니다. Opera토르(예시)

⚡ 스마트 요약

PostgreSQL EXISTS는 상관 관계가 있는 하위 쿼리가 행을 반환하는지 여부를 테스트하는 부울 연산자로, SELECT, INSERT, UPDATE 및 DELETE 문이 일치하는 레코드의 존재 여부에 따라 데이터를 효율적으로 필터링할 수 있도록 합니다.

  • 📋 구문 : WHERE EXISTS (하위 쿼리)는 하위 쿼리에서 하나 이상의 행이 반환될 경우 true를 반환합니다.
  • 🔗 상관 서브쿼리: EXISTS는 내부 및 외부 쿼리를 연결하여 공유 키를 기준으로 행을 일치시킵니다.
  • 단락: EXISTS는 일치하는 첫 번째 행에서 멈추므로 대규모 테이블에서 확장성이 뛰어납니다.
  • 🔁 네 가지 진술: 해당 연산자는 SELECT, INSERT, UPDATE 및 DELETE 쿼리 내에서 작동합니다.
  • 🛡️ 존재하지 않음: 행을 안전하게 제외하고 NOT IN 구문을 실패하게 만드는 NULL 함정을 방지합니다.
  • 🤖 AI 쿼리: 어시스턴트는 EXISTS 절을 생성하고 상관 서브쿼리로 인한 성능 위험을 표시합니다.

PostgreSQL Select와 함께 존재합니다 Opera바위 산

EXISTS에는 무엇이 있습니까? PostgreSQL?

The PostgreSQL 존재 `EXISTS` 연산자는 서브쿼리에 하나 이상의 행이 존재하는지 여부를 검사합니다. 즉, 이 연산자는 서브쿼리와 함께 사용됩니다. 서브쿼리에서 하나 이상의 행이 발견되면 `EXISTS` 연산자의 조건이 충족된 것으로 간주합니다. 이 연산자는 `SELECT`, `UPDATE`, `INSERT`, `DELETE` 문과 함께 사용할 수 있습니다.

PostgreSQL EXISTS 쿼리 구문

다음은 PostgreSQL EXISTS 문:

WHERE EXISTS (subquery);

위의 구문은 EXISTS 연산자가 인수를 받는 것을 보여줍니다. 인수는 하위 쿼리입니다. 하위 쿼리는 단순히 SELECT 문 열 이름이나 표현식 목록 대신 SELECT *로 시작해야 합니다.

PostgreSQL SELECT 문을 사용하여 존재 여부를 확인합니다.

SELECT 문에서 EXISTS 연산자를 사용하는 방법을 살펴보겠습니다. 다음과 같은 테이블이 있습니다.

도서:

PostgreSQL SELECT 문을 사용하여 존재 여부를 확인합니다.

가격:

PostgreSQL SELECT 문을 사용하여 존재 여부를 확인합니다.

다음 문장을 실행합니다:

SELECT *
FROM Book
WHERE EXISTS (SELECT *
              FROM Price
              WHERE Book.id = Price.id);

다음을 반환합니다.

PostgreSQL SELECT 문 결과에서 EXISTS를 검색합니다.

위 명령은 하위 쿼리에 의한 레코드 ID와 ID가 일치하는 Book 테이블의 모든 레코드를 반환해야 합니다. 아이디가 XNUMX개만 일치했습니다. 따라서 하나의 레코드만 반환되었습니다.

PostgreSQL INSERT 문과 함께 EXISTS를 사용합니다.

EXISTS 연산자를 다음과 같이 사용할 수 있습니다. INSERT 문. 우리는 다음 3개의 테이블을 가지고 있습니다:

도서:

PostgreSQL INSERT 문과 함께 EXISTS를 사용합니다.

가격:

PostgreSQL INSERT 문과 함께 EXISTS를 사용합니다.

가격2:

PostgreSQL INSERT 문과 함께 EXISTS를 사용합니다.

그러면 다음 명령문을 실행할 수 있습니다.

INSERT INTO Price
SELECT id, price
FROM Price2
WHERE EXISTS (SELECT id
              FROM Book
              WHERE Book.id = Price2.id);

이제 가격표는 다음과 같습니다.

PostgreSQL INSERT 문 결과와 함께 EXISTS를 사용합니다.

Price5라는 테이블에서 ID가 2인 행이 일치되었습니다. 그런 다음 이 레코드가 Price 테이블에 삽입되었습니다.

PostgreSQL EXISTS와 UPDATE 문

UPDATE 문에서 EXISTS 연산자를 사용할 수 있습니다.

다음 쿼리를 실행합니다.

UPDATE Price
SET price = (SELECT price
              FROM Price2
              WHERE Price2.id = Price.id)
WHERE EXISTS (SELECT id, price
FROM Price2
WHERE Price2.id = Price.id);

PostgreSQL EXISTS와 UPDATE 문

가격 테이블의 가격 열을 업데이트하는 중입니다. 우리의 목표는 ID를 공유하는 항목의 가격을 동일하게 만드는 것입니다. 한 행, 즉 5개만 일치했습니다.

하지만 가격이 동일 즉 205이므로 업데이트가 이루어지지 않았습니다. 차이가 있었다면 업데이트가 되었을 것입니다.

PostgreSQL DELETE 문으로 존재함을 확인합니다.

A PostgreSQL DELETE 문은 EXISTS 연산자를 사용할 수 있습니다. 다음은 예입니다.

DELETE FROM Price
WHERE EXISTS (SELECT *
              FROM Price2
              WHERE Price.id = Price2.id);

이제 가격표는 다음과 같습니다.

PostgreSQL DELETE 문으로 존재함을 확인합니다.

ID가 5인 행이 삭제되었습니다.

PostgreSQL pgAdmin을 사용한 EXISTS 문

SQL 셸 외에도 pgAdmin 인터페이스를 통해 동일한 EXISTS 쿼리를 시각적으로 실행할 수 있습니다. 이제 pgAdmin을 사용하여 이러한 작업을 수행하는 방법을 살펴보겠습니다.

SELECT 문을 사용하여

다음은 EXISTS 쿼리를 사용하는 단계입니다. PostgreSQL pgAdmin을 사용하여 SELECT 문으로:

단계 1) pgAdmin 계정에 로그인하세요. pgAdmin을 열고 자격 증명을 사용하여 계정에 로그인하십시오.

단계 2) 데모 데이터베이스를 생성합니다.

  1. 왼쪽 탐색 모음에서 데이터베이스를 클릭합니다.
  2. 데모를 클릭하세요.

PostgreSQL pgAdmin을 사용한 EXISTS 문

단계 3) 쿼리 편집기에 아래 쿼리를 입력합니다.

SELECT *
FROM Book
WHERE EXISTS (SELECT *
              FROM Price
              WHERE Book.id = Price.id);

단계 4) 실행 버튼을 클릭하세요.

PostgreSQL pgAdmin을 사용한 EXISTS 문

다음을 반환해야 합니다.

PostgreSQL pgAdmin을 사용한 EXISTS 문

INSERT 문 사용

pgAdmin을 통해 동일한 작업을 수행하려면 다음을 수행하십시오.

단계 1) pgAdmin 계정에 로그인하세요.

단계 2)

  1. 왼쪽 탐색 모음에서 데이터베이스를 클릭합니다.
  2. 데모를 클릭하세요.

EXISTS 문 PostgreSQL pgAdmin 사용

단계 3) 쿼리 편집기에 쿼리를 입력합니다.

INSERT INTO Price
SELECT id, price
FROM Price2
WHERE EXISTS (SELECT id
              FROM Book
              WHERE Book.id = Price2.id);

단계 4) 실행 버튼을 클릭하세요.

EXISTS 문 PostgreSQL pgAdmin 사용

이제 가격 테이블은 다음과 같아야 합니다.

EXISTS 문 PostgreSQL pgAdmin 사용

업데이트 문 포함

pgAdmin을 통해 동일한 작업을 수행하려면 다음을 수행하십시오.

단계 1) pgAdmin 계정에 로그인하세요.

단계 2)

  1. 왼쪽 탐색 모음에서 데이터베이스를 클릭합니다.
  2. 데모를 클릭하세요.

EXISTS 문 PostgreSQL pgAdmin 사용

단계 3) 쿼리 편집기에 쿼리를 입력합니다.

UPDATE Price
SET price = (SELECT price
              FROM Price2
              WHERE Price2.id = Price.id)
WHERE EXISTS (SELECT id, price
FROM Price2
WHERE Price2.id = Price.id);

단계 4) 실행 버튼을 클릭하세요.

PostgreSQL pgAdmin을 사용한 EXISTS 문

이제 가격 테이블은 다음과 같아야 합니다.

PostgreSQL pgAdmin을 사용한 EXISTS 문

DELETE 문 사용

pgAdmin을 통해 동일한 작업을 수행하려면 다음을 수행하십시오.

단계 1) pgAdmin 계정에 로그인하세요.

단계 2)

  1. 왼쪽 탐색 모음에서 데이터베이스를 클릭합니다.
  2. 데모를 클릭하세요.

PostgreSQL pgAdmin을 사용한 EXISTS 문

단계 3) 쿼리 편집기에 쿼리를 입력합니다.

DELETE FROM Price
WHERE EXISTS (SELECT *
              FROM Price2
              WHERE Price.id = Price2.id);

단계 4) 실행 버튼을 클릭하세요.

PostgreSQL pgAdmin을 사용한 EXISTS 문

이제 가격 테이블은 다음과 같아야 합니다.

PostgreSQL pgAdmin을 사용한 EXISTS 문

이 튜토리얼에 사용된 데이터베이스 다운로드

자주 묻는 질문

EXISTS는 상관 관계가 있는 서브쿼리가 행을 반환하는지 여부를 테스트하고 첫 번째 일치 항목에서 중지되므로 대규모 서브쿼리에 적합합니다. IN은 값을 목록과 비교하며 작고 고정된 집합에 적합합니다.

NOT IN은 서브쿼리에 NULL 값이 포함될 경우 비교 결과가 불확실해지므로 0개의 행을 반환할 수 있습니다. 반면 NOT EXISTS는 NULL 값을 무시하고 각 행을 정확하게 평가하므로 안티 조인에 적합한 신뢰할 수 있는 선택입니다.

상관 서브쿼리는 외부 쿼리의 열을 참조합니다. 예를 들어, WHERE Book.id = Price.id와 같습니다. EXISTS는 외부 쿼리의 각 행에 대해 해당 열을 다시 확인하고 일치하는 항목이 발견되면 true를 반환합니다.

네. EXISTS는 서브쿼리에서 한 행이라도 나오면 바로 true를 반환하므로 나머지 행은 검사하지 않습니다. 이러한 단축 평가 동작 덕분에 상관관계가 있는 대규모 서브쿼리에서 효율적입니다.

아니요. EXISTS는 서브쿼리가 행을 반환하는지 여부만 확인하므로 SELECT *, SELECT 1 또는 SELECT id는 동일하게 동작합니다. 서브쿼리 내부의 열 목록은 결과에 영향을 미치지 않습니다.

하위 쿼리 내에서 조인된 열에 인덱스를 생성하고, 상관 관계 조건을 sargable로 유지한 다음, EXPLAIN ANALYZE를 실행하십시오. PostgreSQL 인덱스가 지원하는 경우 EXISTS를 효율적인 세미 조인으로 재작성하는 경우가 많습니다.

AI 어시스턴트는 일반적인 영어 규칙을 EXISTS 절로 변환하고, 관련 서브쿼리를 생성하며, NOT IN NULL 함정에 대해 경고합니다. 또한 튜닝을 위해 인덱스와 EXPLAIN 힌트를 제안합니다.

예. AI 코파일럿은 서브쿼리 패턴을 감지하고 IN을 EXISTS로, NOT IN을 NOT EXISTS로 변경하여 대규모 테이블에서 NULL 값의 안전성과 성능을 향상시킵니다.

이 게시물을 요약하면 다음과 같습니다.