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)
이 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의 중요한 도구 중 하나이며,
이를 효과적으로 사용하면 복잡한 쿼리를 간단하게 작성하고,
성능을 향상시킬 수 있다.
'[파이썬] > 데이터베이스' 카테고리의 다른 글
[MariaDB] 함수의 개념과 생성 및 호출 (3) | 2023.11.27 |
---|---|
[MariaDB] With Rollup (1) | 2023.11.27 |
[MairaDB] Union(유니온) (1) | 2023.11.27 |
[MariaDB] 가상 테이블(Inline View) (1) | 2023.11.26 |
[MariaDB] Join (Inner Join, Outer Join) (1) | 2023.11.26 |