Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- coding test
- 윤성우 열혈자료구조
- JSON
- 이스케이프 문자
- 혼자 공부하는 C언어
- s
- Stack
- Serialization
- list 컬렉션
- Graph
- R
- C 언어 코딩 도장
- Algorithm
- insertion sort
- stream
- Selection Sorting
- datastructure
- C programming
- 메모리구조
- 알기쉬운 알고리즘
- 이것이 자바다
- buffer
- 윤성우의 열혈 자료구조
Archives
- Today
- Total
Engineering Note
SQL 서브쿼리 본문
서브쿼리
- 하나의 쿼리 안에 포함된 또 하나의 쿼리 메인 쿼리가 서브쿼리를 포함하는 종속적인 관계
- 알려지지 않은 기준을 이용한 검색에 유용
- 만약 엘리스의 금액보다 높은 금액의 직원을 추출하려 한다면 select * from salaries where salary > 엘리스 급여
- 이때 엘리스 급여를 미리 쿼리를 이용해 구하고 '엘리스 급여' 자리에 써주면 된다.
select * from emplyee where 급여 > (select 급여 from employee where 이름 = 'elice');
- 메인 쿼리가 실행되기 이전에 한 번만 실행
- 한 문장에서 여러 번 사용 가능
서브쿼리 사용시 주의사항
- 서브쿼리는 괄호와 함께 사용되어야 한다.
- 서브쿼리 안에서 order by 절은 사용할 수 없다.
- 서브쿼리는 연산자의 오른쪽에서 사용 되어야한다.
- 서브쿼리는 오로지 select문으로만 작성 할 수 있다.
단일 행 서브쿼리
- Sigle-Row Subquery는 서브쿼리의 조회 겨로가가 1개의 행만 나오는 서브쿼리를 뜻합니다.
- 서브쿼리에서 나오는 결과는 하나이므로 메인쿼리와 서브쿼리 결과는 단일행 연산자를 사용하여 비교합니다.
- 단일행 연산자는 =,<>,> >= 등이 있다.
다중 행 서브쿼리
- 서브쿼리가 결과를 2개 이상 반환하고, 이 결과를 메인쿼리로 전달하는 쿼리
<any 최대값 ex) 10 < any(1,2,3,4) 최대값 4 보다 10이 작은지 비교
>any 최소값
>all 최대값 ex) 99 > all(99,100,101) 최대값 101보다 99가 큰지 비교
<all 최소값
=any(데이터1, 데이터2, 데이터3) 서브쿼리는 any의 값과 동일한 값만 반환한다.
연습문제1
select max(sal)
from emp
group by deptno;
select *
from emp
where sal =any
(select max(sal)
from emp
group by deptno);
코드 설명
- 부서별 최고 연봉 서브쿼리 결과 (5000,2850,2450,2975)이고 여기서 =any를 통해 서브쿼리를 사용하면 any의 값과 같은 컬럼의 값만 메인커리에서 추출할 수 있다.
- any는 내부적으로 or 연산을 하기 때문에 any뒤에 나오는 데이터와 하나라도 만족하면 추출 되는 것이다.
- 여기서 in을 사용해도 같은 결과가 나온다.
연습문제2
select *
from emp
where birthdate in
(
select min(birthdate)
from emp
group by deptno
);
코드설명
- 서브쿼리는 그룹별로 데이터를 묶어 주고 묶여진 데이터에서 가장 나이가 많은 생년월일을 추출한다. 그리고 이렇게 추출한 컬럼을 서브쿼리로 하여 in 연산자와 메인쿼리와 연산을 하면 원하는 값을 얻을 수 있다. 메인 쿼리에서 서브쿼리의 데이터와 맞는 데이터를 추출할 수 있기 때문이다.
위치에 따른 분류
- where 절에 사용되는 서브쿼리
- 스칼라 서브쿼리 - select절에서 사용하는 서브쿼리, 스칼라 서브쿼리는 오로지 한 행만 반환 마치 join을 사용한 것과 같은 결과를 나타낸다.
- join 보다 계산 속도가 빠름
'Computer Science > Database' 카테고리의 다른 글
NoSQL (0) | 2021.07.19 |
---|---|
SQL - 테이블 제어하기 (0) | 2021.07.17 |
SQL과 함수 (0) | 2021.07.16 |
SQL (0) | 2021.07.14 |
관계대수, 관계해석 (0) | 2021.04.04 |
Comments