Today I Learned
서브쿼리, count함수, 상하관계쿼리 본문
서브쿼리란?
- 쿼리 안의 쿼리가 들어있는 것!
- 서브쿼리는 사전에 추출된 내용에서 재검색하거나, 검색된 내용을 가상 컬럼을 만들어 추가할 수 있다.
- 즉 서브쿼리를 사용하는 이유는 가져온 데이터를 재 정제하기 위해서
- 최종적으로 찾아야 하는거 먼저 배치
- 괄호 먼저 실행하고 나온 결과값과 함께 앞의 쿼리문을 처리!
- 또다른 서브쿼리문 -
select ename,job from emp where deptno in (select deptno from dept where loc ='LA' or loc ='BOSTON' );
: 먼저 실행되는 괄호안 쿼리문의 값이 여러개일 경우 or조건문대신 쓸 수 있었던 in 쓰기
- + -
- ALL : 서브쿼리의 결과 중에서 모든 값이 일치 하면 참 : 이거 조건 다 맞아? 확인할때?
- EXSITS : 기본적으로 IN과 같으나 참/거짓 반환 : 하나라도 있으면 참 반환하는듯?
- 값이 여러개일 경우 하나만 뽑아 오는 방법 -
- 부등호를 사용한 서브쿼리문 -
select * from emp where hiredate < (select min(hiredate) from emp where job = 'manager') order by hiredate;
: 직책(job)이 manager 인 사원들(여러명 일 경우 입사일이 가장 빠른 사원 기준) 보다 입사일이 빠른 직원 데이터 가져오기
- any -
- in 과 같지만 차이점이 있다. : 부등호 유무
- = ANY : in과 같은 효과 (: 결과값 중에 뭐하나 걸리면 됨)
- > ANY : 최소값 보다 크면
- < ANY : 최대값 보다 작으면
- 단점 : '최소값보다 작은거'랑 '최대값보다 큰거'는 any 로 못구함
- 부등호와 함께 min max로 쓰는 방법이 더 명시적
+서브쿼리문 5번 예제+ (어려움)
[부서별 인원수와 부서명 , 부서위치, 부서인원수 표시하기]
밑줄 부분 / emp테이블 부서번호와 dept 테이블 부서번호가 같은 ? emp테이블 부서번호와 dept 테이블 부서번호가 같을 때?
저렇게 써주면서 from dept 뒤에 where deptno =1;을 지워줌
- count 함수-
- count(컬럼명) 은 컬럼의 행을 세어준다.
- 기본키를 해주는게 제일 좋다
- 상하관계쿼리 -
(서브쿼리에서 쿼리는 조건으로 쓰였다면)
- 하나의 쿼리문이 다른 쿼리문의 일부,구성품처럼 쓰이는 것 (다른쿼리의 컬럼 혹은 테이블로 사용해봤음)
별칭을 사용하려면 별칭을 명시해주자
08_SUB