국비수업/MySQL

[MySQL] 서브쿼리

chanCo 2022. 6. 13. 12:22

 

#1. 서브쿼리(SubQuery)

1. 서브쿼리의 개념

1) 서브쿼리란?

  • SQL안의 SQL을 사용하는 형태.
  • 하나의 SQL 명령문의 처리 결과를 다른 SQL 명령문에 전달하기 위해 두 개 이상의 SQL문을 하나의 SQL문으로 연결한 형태이다.
  • 검색조건을 다른 결과 집합에서 찾기 위해 사용한다.
  • 서브쿼리를 포함한 SQL문을 메인쿼리 라고 한다.
  • 서브쿼리는 SELECT 문의 시작과 끝에 ( )를 묶어서 메인쿼리와 구분한다.
SELECT 컬럼이름 
FROM 테이블이름 
WHERE 컬럼연산자 (SELECT ...)

 

2) 종류

종류 설명
단일 행 서브쿼리 단 하나의 검색 결과만을 반환하는 형태.
서브쿼리를 검색결과로 사용하기 위해 비교연산자가 사용된다.
다중 행 서브쿼리 하나 이상의 검색결과를 반환하는 형태.
서브쿼리를 검색결과로 사용하기 위해 IN 연산자가 사용된다.

 

2. 단일 행, 다중 행 서브쿼리

1) 단일 행 서브쿼리 

- 해당 교수와 같은 직급의 교수에 대한 이름, 직급을 조회

- 1학년 학생 중에서 키가 전체 학생의 평균키를 초과하는 학생의 이름, 학과번호, 학년, 키를 조회하시오. (집계 함수와 함께 사용)

- 해당 학생과 같은 학과에 재학중인 학생의 이름과 소속학과 이름을 조회하시오. (JOIN과 함께 사용)

 

2) 다중 행 서브쿼리

  • 서브쿼리의 결과가 여러 건인 경우

- 급여를 300만원 초과로 받는 교수에게 지도 받는 학생들의 학번, 학년, 이름을 조회하시오.

 

3) 예제

- 아이디가 'jun123'인 학생과 같은 학년인 학생의 학번, 이름, 학년을 조회 하시오.

- 101번 학과 학생들의 평균 몸무게 보다 몸무게가 적은 학생의 이름, 학과번호, 몸무게를 조회하시오.

- '이광훈' 학생과 같은 학과의 학생들에 대한 평균 몸무게 보다 몸무게가 적게 나가는 학생들의 이름, 몸무게, 소속학과이름, 담당교수 이름을 조회하시오.

- 20101번 학생과 같은 학년이고, 20101번 학생의 키보다 큰 키를 갖는 학생의 이름, 학년, 키를 조회하시오.

- 학과 이름에 '공학'이라는 단어를 포함하고 있는 학과에 재학중인 학생의 학번, 학과 이름, 학년, 학생이름을 조회하시오