본문 바로가기
[파이썬]/데이터베이스

[MariaDB] Exists 함수

by sung min_Kim 2023. 11. 27.
Exsits 함수


존재 여부 검증


· Exists 함수


 Exists 함수는 SQL에서 서브쿼리의 반환 결과가 존재하는 여부를 판단하는 데 사용되는 논리 함수이다.
 Exists 함수는 서브쿼리가 하나 이상의 행을 반환하면 (True)을 반환하고, 아무 행도 반환하지 않으면 거짓(False)을 반환한다. 즉, Exists 함수는 행의 존재 여부만을 검사하는 함수이다.

 


· Exists 함수를 사용하는 이유는?

 

 

  • 성능 최적화 : · Exists 함수는 일치하는 결과를 찾는 즉시 조건 평가를 중단한다. 따라서 전체 데이터셋을 검사하지 않아도 되므로 이는 불필요한 처리를 피하고 성능을 향상하는데 도움이 된다.


  • 복잡한 조건 처리 : Exists 함수를 사용하면 복잡한 조건을 더 간단하고 직관적으로 작성할 수 있다. Exists 함수는 서브쿼리 내에서 복잡한 조건을 정의하고, 이를 메인 쿼리에서 간단하게 참조할 수 있다. 이는 코드의 재사용성을 줄이고, 쿼리의 복잡성을 줄일 수 있다.


  • 데이터의 존재 여부 확인 : Exists 함수는 단순히 데이터의 존재 여부만을 확인한다. 이는 데이터의 실제 값을 판단하지 않고, 해당 조건을 만족하는 데이터가 존재하는지만 판단하므로, 데이터의 값에 상관없이 데이터의 존재 여부만을 판단하는데 유용하다.


· Exists 함수 기본 형태

 

Select '반환할 값' or 조회할 컬럼
From 테이블1
Where Exists (
  Select 1
  From 테이블2
  Where 관계 조건(PK=FK)
  And 일반 조건);

 

 

  •  Select : Exsits의 결과가 참인 경우 반환할 값 또는 조회할 컬럼을 지정한다.

  • From 테이블 1 : 조회하고 싶은 기본 테이블을 지정한다.

  •  Where 절 : Exists() 함수를 사용하여 서브쿼리의 결과에 따라 행을 필터링한다.

  •  Select 1 : 서브쿼리에서는 값의 존재 유무만을 중요시하기 때문에, 실제로 선택하는 값이 중요하지 않으므로, 단순히 1로 표현하였다.

  • From 테이블 2 : 이 부분에서는 서브쿼리에서 조회하고 싶은 테이블을 지정한다.

  •  Where 관계 조건(PK = FK) : 이 부분에서는 메인 쿼리와 서브쿼리 간의 관계를 정의한다. 일반적으로 기본 키와 외래 키 사이의 관계를 지정한다.

  •  And 일반 조건 : 이 부분에는 추가적인 필터 조건을 지정한다.


 이렇게 Exists 함수를 사용하면, 서브쿼리의 결과에 따라 메인 쿼리의 결과를 필터링할 수 있다. 이는 복잡한 조건을 처리하거나, 성능을 향상하는데 유용하다.

 


· 예시

 

<예제_Exists 함수 활용하기>  2005년도에 총 주문금액이 3천만 원 이상인 회원에 대한 정보 조회하기

- 조회 컬럼: 회원ID(mem_id), 회원 이름(mem_name), 마일리지(mem_mileage)

Exists 함수 활용

 이 SQL 쿼리는 회원(member) 테이블에 대해 Exists 함수를 사용하여 주문내역(cart) 테이블과 상품(prod) 테이블에 존재하는 행이 있는지 여부를 확인하여, 인 경우 외부 쿼리의 Select 문을 실행하고, 그 값을 반환한다.

 내부의 서브쿼리에서는 주문내역 테이블과 상품 테이블을 조회하고 있다. 이 서브쿼리는 관계 조건("PK = FK")을 통해 "회원ID(mem_id)가 회원ID(cart_member)와 일치하고, 상품코드(cart_prod)와 상품코드(Prod_id)가 일치"하는 데이터를 찾는다. 추가로 일반 조건(And cart_no Like '2005%')을 만족하는 데이터를 찾는다.

 또한 Haivng 절의 비교 연산자를 통한 그룹 함수를 사용하여 "상품에 대한 총 구매금액이 3천만 원 이상"인 데이터를 찾는다. Having 절은 일반적으로 Group By 절과 함께 사용되어 "그룹화된 각 그룹의 총 주문금액이 3천만 원 이상인 그룹"만을 선택한다.

 이렇게 Exsits 함수를 사용하면, 서브쿼리에서 정의한 조건을 만족하는 회원(member) 테이블의 데이터만을 선택하여 조회할 수 있다. 즉, 위의 쿼리문은 "2005년에 구매한 상품의 총 주문금액이 3천만 원 이상인 회원의 정보를 조회"하는 쿼리라고 해석할 수 있다.

 



Exists 함수는 주로 서브쿼리와 함께 사용되며,
서브쿼리가 반환하는 결과 집합(행의 모음)에 행이 하나라도 존재하면 참을 반환한다.
없다면 거짓을 반환한다.

Exists 함수는 조건을 만족하는 첫 번째 행을 찾으면 즉시 평가를 중단하기 때문에,
불필요한 데이터 스캔을 줄이고 쿼리 성능을 향상시킬 수 있다.

Exists 함수는 Select 문에서 반환하는 값에 관계없이 작동한다.
행의 존재 여부에 따라 참과 거짓을 반환한다.

Exists 함수는 SQL의 중요한 도구 중 하나이며,
이를 효과적으로 사용하면 복잡한 쿼리를 간단하게 작성하고,
성능을 향상시킬 수 있다.