반응형
01. 서브(SUB)는 메인(MAIN) 안에 있는 것 : SUBQUERY IN MAINQUERY
하나의 쿼리문 안에 또 다른 쿼리문이 삽입 되었을 때 그 쿼리문을 서브쿼리라고 한다.
SELECT *
FROM ( SELECT COLUMN01, COLUMN02
FROM TABLE
)
;
FROM 절 안에 괄호로 싸여 있는 절이 SUBQUERY이다.
형태
-전체 서브쿼리는 괄호로 감싼다.
-서브쿼리가 메인쿼리보다 먼저 실행된다.
-서브쿼리는 자체로 하나의 메인쿼리로서 작동 가능하다.
-서브쿼리 내에서는 ORDER BY를 사용하지 않는다.
03. 결과에 따른 서브쿼리
단일 행 서브쿼리 SINGLE ROW SUBQUEYR | 다중 행 서브쿼리 MULTIPLE ROW SUBQUERY |
칼럼도 하나일 경우 스칼라 서브쿼리 SCALA SUBQUERY라고 부른다. 하나의 갑과 같기 때문에 단일행 비교연산자와 함께 쓰인다. [ = | < | > | <= | >= | <> , != ] |
여러 값이기 때문에 다중행 비교 연산자와 함께 쓰인다. [IN, ALL, ANY, EXISTS, SOME] |
EXAMPLE
스칼라 서브쿼리
2반의 14번 학생의 수학성적과 같은 수학성적을 갖는 1반 학생들의 이름을 알려주세요.
SELECT C1.NAME
FROM CLASS01 C1
WHERE C1.MATHE = ( SELECT C2.MATHE
FROM CLASS02 C2
WHERE C2.ID = '14'
)
;
다중행 서브쿼리
학교에서 지정한 동아리목록에서 활동하고 있는 학생들의 이름과 전화번호 그리고 동아리명을 알려주세요.
SELECT S.NAME, S.TEL, S.CLUB
FROM SCHOOL2021 S
WHERE S.CLUB IN (SELECT SC.CLUB
FROM SPECIAL_CLUB_LIST SC
)
;
다중 칼럼 서브쿼리 MULTI-COLUMN SUBQUERY | |
단일 행일 경우 단일행 비교연산자를 사용할 수 있다. [ = | < | > | <= | >= | <> , != ] |
다중 행일 경우 다중행 비교 연산자를 사용 해야 한다. [IN, ALL, ANY, EXISTS, SOME] |
EXMPLE
학생들이 제출한 주관식 문제에서 수도와 나라를 올바르게 입력한 학생의 이름과 전화번호를 알려주세요.
SELECT C.NAME, C.TEL
FROM CLASS C
WHERE C.CITY, C.COUNTRY IN (SOL.CITY, SOL.COUNTRY
FROM SOLUTION SOL
)
;
04. 지금까지 배운 서브쿼리와 다른 서브쿼리 : 연관서브쿼리 CORRELATED SUBQUERY
지금까지 배운 것과는 다른 서브쿼리가 있다. 연관서브쿼리가 그것이다. 연관서브쿼리는 서브쿼리가 메인쿼리의 자료를 가져와서 이용하기 때문에 서로 연관 CORRELATED 되어 있다고 한다.
SELECT C1.COL01
FROM TABLE C1
WHERE <CONDITION USING C1.COL01>
;
형태 : 연관서브쿼리가 일반적인 서브쿼리와 다른 점
-서브쿼리는 자체로 하나의 메인쿼리로서 작동 가능하지 못한다.
<< 메인쿼리에서 추출한 데이터를 가져와서 사용하기 때문에 연관서브쿼리는 메인쿼리에 종속되어 있다. 따라서 독립적으로 작동이 불가능하다.
EXAMPLE
같은 부서의 평균 연봉보다 적은 연봉을 받는 사람들의 이름과 연봉을 알려주세요.
SELECT EM.NAME, EM.SAL
FROM EMPLOYEE EM
WHERE EM.SAL < (SELECT AVG(SAL)
FROM EMPLOYEE EM2
WHERE EM2.DP_ID = EM.DP_ID
)
;
반응형
'ICT > SQL' 카테고리의 다른 글
[SQL] 국가공인 SQL 개발자 및 전문가 자격시험 정보 (0) | 2021.08.30 |
---|---|
SQL 문법 | 데이터 조회 및 필터 | JOIN (0) | 2021.08.29 |
SQL 문법 | 데이터 조회 및 필터 | ALIAS (0) | 2021.08.28 |
SQL 문법 | 데이터 조회 및 필터 | WHERE IS NULL (0) | 2021.08.28 |
SQL 문법 | 데이터 조회 및 필터 | WHERE LIKE (0) | 2021.08.28 |
댓글