서브쿼리란?
- 쿼리 안의 쿼리
- 사전에 추출된 내용에서 재검색 하거나, 검색된 내용을 가상 컬럼을 만들어 추가할 수 있음
- 가져온 데이터를 재정제 하기 위해 사용한다.
서브쿼리는 특별한 문법이 없다.
해결해야 할 문제를 단계별로 적어보고,
테이블 간의 연관관계( 공통점)를 찾아보고 쿼리문을 적어보면 된다.
문제1) han 의 근무 부서 이름을 찾아라.
두 개의 쿼리문을 서브쿼리로 합쳐본다.
위의 쿼리문 실행과 아래 쿼리문 실행의 결과가 같다.
문제2) 부서위치가 LA 이거나 BOSTON 인 부서에 속한 사람들의 이름과 직책은?
ALL / EXSITS
ALL : 서브쿼리의 결과 중에서 모든 값이 일치하면 참 반환
EXSITS : 기본적으로 IN과 같으나 참/거짓 반환
문제3) sales 부서에 근무하는 사원 데이터 가져오기
문제4) 직책(job)이 manager인 사원들(여러 명일 경우엔 입사일이 가장 빠른 사원 기준)
보다 입사일이 빠른 직원 데이터 가져오기
입사일 가장 빠른 데이터 하나만 뽑는 방법?
최종 해결 방법
>> 내가 group by를 처음에 쓴 이유는 아무래도 group by의 쓰임을 헷갈린 것 같다. (order by 시도하다가 잘 안되니까 그냥 냅다 group by 써본 듯)
group by는 각 직책별로 모아서 볼 때 사용하는 것이고 지금 여기선 애초에 직책이 매니저인 사람들만 뽑기 때문에 group by가 필요 없다.
limit n / min() / max()
limit n : 상위 n 개 까지만 나타낸다.
min() : 최소값을 찾아온다.
max() : 최대값을 찾아온다.
ANY
: IN과 같지만 차이점이 있다.
= ANY : IN과 같은 효과
> ANY : 최소값 보다 크면
< ANY : 최대값 보다 작으면
헷갈릴 수 있는데 any가 최소값, 최대값이 되어주는 거네
문제5) 부서별로 직원이 몇 명인지 나태내기(부서명, 부서위치, 부서인원수)
문제5번을 해결하기 위해서는 상하관계 쿼리를 사용했다.
상하관계쿼리란?
하나의 쿼리에서 나온 내용을 다른 쿼리의 컬럼, 테이블 등으로 사용하는 것
'Data > MariaDB' 카테고리의 다른 글
DB] JOIN (0) | 2022.05.06 |
---|---|
DB] IN / EXSITS / ANY / ALL / limit (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 |