괴발개발
[강의 정리]D-52 DB(in, exist, any) 본문
[목차]
1. in & exists
2. any & all
1. in & exists
[exists] : 사용 및 반환값
1.메인 쿼리 실행 후 서브쿼리 조건을 비교 한다.
2. 해당 결과가 있는지 1과 0을 반환
[장점]
1. 속도가 우수하다! > in - 메인 돌고 서브 도니까 (데이터 확보하고 하는거니까)
* in은 조건을 추출하고 그 조건으로 전체 데이터 검색하지만,
* exists는 메인쿼리를 통해 데이터 확보하고, 서브 쿼리로 조건 걸러낸다.
일단
1.in
1. '=' 비교만 가능하고, or 조건의 검색 결과 내용을 가져온다.
* 서브가 동작한 후에 메인 쿼리가 동작함.
select ename, job from emp e where deptno in (2,4);
select ename, job from emp e where deptno
in (select deptno from dept where loc = 'LA' or loc = 'boston');
2. exist
0. [번외!]
[ exist의 중요한 점!!!!]
0과 1을 반환하는거긴 함.
but , 테이블이 달라진다면
조건(where)으로 들어갈 때 걸러서 들어간다!
1. 해당 결과가 있는지 1과 0을 반환
보스턴과 la가 있다면 1을 반환 없으면 0을 반환
select exists(select deptno from dept where loc = 'LA' or loc = 'boston') as yn;
2.
select ename, job, deptno from emp where 1;
이건 조건에 1이면 데이터를 보여주는걸로 먼저 설정하면
2-1
select ename, job, deptno from emp
where exists(select deptno from dept where loc = 'LA' or loc = 'boston');
** 1 = exists 문이니까 이렇게 표현 가능
만약 0이라면 보스턴과 la가 같이 일치하는게 없다는거고
그러니까 아무것도 안보여주겠지
select ename, job, deptno from emp where 0;
select ename, job, deptno from emp
where exists(select deptno from dept where loc = 'korea');
드디어 [사용법]
3. 사용법
1) 메인 퀴리가 먼저 실행
2) 가져온 데이터를 하나하나 조건에 맞는지 여부를 따진다.
3) 결과적으로 확보한 데이터에 loc= 'LA' or loc 'boston' 조건을 추가 해 준다.
1) 메인 퀴리가 먼저 실행
select ename, job, deptno from emp;
* 메인 쿼리가 실행 - emp 에서 ename, job , deptno 만 가져옴
2) 가져온 데이터를 하나하나 조건에 맞는지 여부를 따진다.
select ename, job, deptno from emp e
where exists(select deptno from dept d where e.deptno = d.deptno);
deptno가 겹치는거 있어? = '응'
그럼 dept에서 deptno만 가져와 = '응' 1,2,4
1 로 반환 <= exists (1,2,4) 있으면
그럼 emp에서 ename , job, deptno 가져와
3) 결과적으로 확보한 데이터에 loc= 'LA' or loc 'boston' 조건을 추가 해 준다.
select ename, job, deptno from emp e
where exists(select deptno from dept d
where e.deptno = d.deptno and (loc = 'LA' or loc = 'boston'));
위에 나온 결과에서 다시 boston과 la인 애들만 데려와!
2번과 4번 애들이니까!!!
2,4번만 추려서 보여줌!
2. any & all
[any]
ㅡㅡㅡㅡㅡ<ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ>ㅡㅡㅡㅡㅡㅡㅡ
최소값 최대값
[all]
ㅡㅡㅡㅡㅡ<ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ>ㅡㅡㅡㅡㅡㅡㅡ
최소값 최대값
any : in과 같은 효과, '=' 뿐만 아니라 부등호(<, >) 사용가능
1) < any : 최소값 보다 크면
2) > any : 최대값보다 작으면
1) < any : 최소값 보다 크면
직책이 manager 인 직원의 입사일이 가장 빠른 사람보다 늦은 이름과, 직책 , 입사일
select ename, job, hiredate from emp
where hiredate > any(select hiredate from emp where job = 'manager')
order by hiredate;
2) > any : 최대값보다 작으면
직책이 manager 인 직원의 입사일이 가장 늦은 사람보다 빠른 이름과, 직책 , 입사일
select ename, job, hiredate from emp
where hiredate < any(select hiredate from emp where job = 'manager')
order by hiredate;
all : any와 비슷하다
1) = all 는: and 조건을 사용한다
2) > all : 최대값 보다 크면
3) < all : 최소값 보다 작으면
'BACK END > DB' 카테고리의 다른 글
[강의 정리] DB(index, view) (0) | 2023.03.22 |
---|---|
emp, dept (0) | 2023.03.22 |
[강의 정리]D-52 DB#3 (join) (0) | 2023.03.22 |
[퀴즈 정리]D-51 DB - contraint (0) | 2023.03.22 |
[강의 정리]D-51 DB(contraint - 제약 조건) (0) | 2023.03.21 |