반응형
Contents
9장. 서브쿼리
[1] 개념
하나의 SQL 명령문과 결과를 다른 SQL 명령문에 전달하기 위해
2개 이상의 SQL 명령문을 하나의 SQL 명령문으로 연결해 처리하는 방법
▶ 처리과정
① 서브쿼리, 메인쿼리가 실행되기 전 한 번씩 실행
② 서브쿼리에서 실행된 결과가 메인쿼리에 전달되어 최종적 결과 출력
[2] 종류
(1) 단일 행 서브쿼리
- 서브쿼리에서 단 하나의 행만을 검색해 메인쿼리에 반환
- 메인쿼리의 WHERE절에서 서브쿼리 결과와 비교할 경우, 반드시 단일 행 비교 연산자 중 하나만 사용해야
(=, >, >=, >, <>, <=) - 서브쿼리 결과로 하나의 행만 출력되어야 (조건절 : = 비교 / SELECT : 그룹 함수)
(2) 다중 행 서브쿼리
- 서브쿼리에서 반환되는 결과 행이 하나 이상
- 메인쿼리의 WHERE절에서 서브쿼리 결과와 비교할 경우, 다중 행 비교 연산자 사용해야
(IN, ANY, SOME, ALL, EXISTS)
→ 단일 행 비교 연산자와 결합해 사용 가능
종류 | 의미 |
IN | 메인 쿼리의 비교 조건이 서브쿼리의 결과와 하나라도 일치하면 참, ‘=‘ 비교만 가능 (= OR) |
ANY, SOME | 메인 쿼리의 비교 조건이 서브쿼리의 결과와 하나라도 일치하면 참. >, < 범위 비교도 가능 (= MIN) |
ALL | 메인 쿼리의 비교 조건이 서브쿼리의 결과 중 모든 값이 일치하면 참 (= MAX) |
EXISTS | 메인 쿼리의 비교 조건이 서브쿼리의 결과 중 만족하는 값이 하나라도 존재하면 참 (↔ NOT EXISTS) |
(3) 다중 컬럼 서브쿼리
- 서브쿼리에서 여러 개의 칼럼 값을 검색해 메인쿼리의 조건절과 비교하는 서브쿼리
→ 메인쿼리 조건절, 서브쿼리 칼럼수만큼 지정해야 - 종류
① PAIRWISE : 칼럼을 한 쌍으로 묶어 동시에 비교
SELECT 컬럼 리스트
FROM 테이블명1
WHERE (컬럼1, 컬럼2, ..) IN ( SELECT 컬럼1, 컬럼2, ...
FROM 테이블명2
WHERE 조건);
② UNPAIRWISE : 칼럼별로 나누어 비교한 후, AND 연산 (따로따로)
→ 각 칼럼이 동시에 만족하지 않더라도 개별적으로 만족하는 경우, 비교 조건이 참이 되어 결과 출력 가능
(4) 상호 연관 서브쿼리 🌟🌟🌟
- 메인쿼리절과 서브쿼리 간 검색 결과 교환
(서브쿼리의 WHERE 조건 절에서 메인쿼리의 테이블과 연결)
[3] 실무에서 서브쿼리 사용 시 주의사항
1) 복수 행 출력하는 서브쿼리와 단일행 연산자로 비교하는 경우
2) 메인쿼리 칼럼 수 ≠ 서브쿼리 칼럼 수
3) 서브쿼리 내에서 ORDER BY 사용하는 경우
4) 서브쿼리 결과가 NULL인 경우
10장. 데이터 조작어 (~p.32)
데이터 조작어 (DML)
- 정의 : 테이블에 새로운 데이터 입력 / 기존 데이터 수정 · 삭제 위한 명령어
- 종류 : INSERT, UPDATE, DELETE, MERGE
1. 데이터 입력 : INSERT
→ 입력되는 데이터 크기, 칼럼 크기보다 작거나 같아야
1) 단일 행 입력 | 테이블에 한 번에 하나의 행 입력
INSERT INTO table [(col [, col...])]
VALUES (value [, value...]);
2) 다중 행 입력 | 서브쿼리 이용해 한 번에 여러 행 동시에 입력
단일 테이블에 다중 행 입력
: INSERT 명령문에서 서브쿼리 절 이용 - 자타 테이블에 데이터 복사
INSERT INTO table [(col1, col2, ....)]
subquery;
2-1. INSERT ALL (unconditional)
서브쿼리 결과 집합을 조건 없이 여러 테이블에 동시에 입력
→ ALL : 서브쿼리 결과 집합을 해당하는 INSERT 절에 모두 입력
INSERT ALL
INTO [tb1] VALUES [(col1, col2, ....)]
INTO [tb1] VALUES [(col1, col2, ....)]
INTO [tb1] VALUES [(col1, col2, ....)]
subquery;
2-2. Conditional INSERT ALL : WHEN
서브쿼리 결과 집합에 대해 WHEN 조건절에서 지정한 조건을 만족하는 행을 해당되는 테이블에 각각 입력
→ ALL : WHEN~THEN~ELSE 조건을 만족하는 서브쿼리의 모든 검색 결과를 입력하기 위한 옵션
→ WHEN 조건절 THEN : 서브쿼리의 결과 집합에 대한 비교 조건
INSERT ALL
[WHEN 조건절1 THEN
INTO [table1] VALUES[(column1, column2,...)]
[WHEN 조건절2 THEN
INTO [table2] VALUES[(column1, column2,...)]
[ELSE
INTO [table3] VALUES[(column1, column2,...)]
subquery;
2. 데이터 수정 : UPDATE ~ SET
UPDATE 테이블명
SET 열 = 값
[WHERE 조건]
▶ 서브쿼리를 이용한 데이터 수정
- SET절에서 서브쿼리 이용
- 다른 테이블에 저장된 데이터 검색해 한꺼번에 여러 칼럼 수정
3. 데이터 삭제 : DELETE FROM
DELETE [FROM] 테이블명
[WHERE 조건]
▶ 서브쿼리를 이용한 데이터 삭제
- WHERE절에서 서브쿼리 이용
DELETE vs TRUNCATE
반응형
'KDT > TIL' 카테고리의 다른 글
2022-08-17 (Wed) (0) | 2022.08.20 |
---|---|
2022-08-16 (Tue) (0) | 2022.08.16 |
2022-08-09 (Tue) (0) | 2022.08.14 |
2022-08-08 (Mon) (0) | 2022.08.13 |
2022-08-05 (Fri) (0) | 2022.08.13 |