IN & EXISTS
1. IN
- '=' 비교만 가능, OR 조건의 검색 결과 내용을 가져온다.
- 서브쿼리가 먼저 실행된다.
2. EXISTS
- 기본적으로 IN과 같으나 참 / 거짓 반환
- 메인쿼리 비교조건이 서브쿼리의 결과 중에 '만족하는 값이 하나라도 있으면 참(1)/거짓(0) 반환
- 메인쿼리가 먼저 실행된다.
첫번째 쿼리문의 결과는 모든 값이 다 나왔다.
서브쿼리에 해당하는 값이 있다 => exist를 거쳐 '1'을 반환 => 결국 두번재 쿼리문과 같아진다.
where 절에 1이 들어가면 참 => 모든 값을 보여준다.
where 절에 0이 들어가면 거짓 => 아무 값도 보여주지 않는다.
EXISTS 사용 방법
1) 메인쿼리가 먼저 실행된다.
2) emp 의 모든 값을 가져오고(메인쿼리)
등가 조인에 만족하는 값만 걸러서 가져온다.(서브쿼리)
=> 그냥 등가조인 아닌감,,?******
3) IN과 EXISTS 비교해보기
- 일반적으로 EXISTS 는 IN 보다 성능이 좋다고 알려져 있다.
- IN 의 경우 서브쿼리에서 검색, 이후 메인쿼리에서 또다시 검색이 진행된다. (검색 2회)
- EXISTS 는 메인쿼리에서 모든 데이터를 가져온 후, 서브쿼리에서 검색을 진행한다. (검색 1회)
- 성능은 일반적으로 1만건 이상의 데이터에서 고려하자.
- 가져오는 것과 검색은 다름. 가져오는 건 걍 가져오는 거고 검색은 위에서부터 훑으면서 가기 때문에 검색 횟수가 성능에 영향을 미침.
ANY & ALL
1. ANY
: 기본적으로 IN과 비슷함 (OR 조건)
= ANY : IN과 같다.
> ANY : 최소값 보다 크면
< ANY : 최대값 보다 작으면
2. ALL
- ALL 은 ANY와 모든 게 반대
- 서브쿼리의 결과 중에서 모든 값이 일치하면 참(1) 반환
= ALL : AND 조건
> ALL : 최대값 보다 크면
< ALL : 최소값 보다 작으면
- AND 조건 : 서브쿼리 안의 결과값이 1개 이상이 나오면 안된다.
- all 에서는 and 조건이나 or 조건과는 상관없이 서브쿼리 안의 결과값이 무조건 1개 이어야 한다.
LIMIT
결과값 중에서 상위 n 개 까지만 불러온다.
1) limit n : n 개를 불러온다.
2) limit n,m : n 부터 m 개를 불러온다.
n - 어디서부터 (0부터 시작)
m - 몇 개
3) offset : 시작점을 지정 (0부터 시작)
결과값은 2번과 같다.
'Data > MariaDB' 카테고리의 다른 글
DB] JOIN (0) | 2022.05.06 |
---|---|
DB] 서브쿼리 , 상하관계쿼리 (0) | 2022.05.06 |
DB] 제약 조건(constraint) 2 - 참조 제약 조건 / 연계 참조 무결성 제약 조건 / 유니크 제약 조건 / 체크 제약 조건 (0) | 2022.05.06 |
DB] 트랜젝션(TRANSACTION) (0) | 2022.05.02 |
DB] 제약 조건(constraint) 1 - 기본 키 제약 조건 / NOT NULL (0) | 2022.04.28 |