1. SubQuery란?
- Query문 안에 또 다른 Query문이 있는 것
- 중첩될 수 있는 Query문은 Select문만 가능하므로 SubSelect라 부르기도 함
- 소괄호 안에 표기
2. SubQuery 활용
1. 검색
1) 단일 값을 반환하는 경우
/* 학생 김철수와 같은 학과에 속하는 학생의 성명을 검색하라*/
SELECT 성명
FROM 학생
WHERE 학과 = (SELECT 학과 FROM 학생 WHERE 성명 = '김철수');
/*괄호에서 반환되는 결과는 '컴퓨터' 단일 값임*/
2) 2개 이상의 값을 반환하는 경우(1) - 1개의 열로 이루어진 테이블을 반환
- 외부 질의문의 WHERE절에 (NOT) IN, ANY, ALL, EXISTS와 같은 연산자가 사용됨
연산자 | 설명 |
IN | '=ANY'와 같은 의미 |
NOT IN | '<>ALL'과 같은 의미 |
ALL | 왼쪽 애트리뷰트 값이 오른쪽 값을 모두 만족해야 되는 AND의 의미 |
ANY | 하나 이상 만족해도 되는 OR의 의미 |
EXISTS | 중첩질의문 결과에 해당 레코드와 동일한 레코드가 하나 이상 있으면 선택 |
*<> = 다르다
/*과목코드 ‘CO123’을 수강한 학생의 성명을 검색하라*/
SELECT 성명
FROM 학생
WHERE 학번 IN (SELECT 학번 FROM 수강 WHERE 과목코드 = 'CO123');
/*수강 테이블에서 학번 20181234의 점수보다 좋은 점수를 받은 학생의 학번과 과목코드를 검색하라*/
SELECT 학번, 과목코드
FROM 수강
WHERE 점수 > ALL (SELECT 점수 FROM 수강 WHERE 학번 = 20181234);
3) 2개 이상의 값을 반환하는 경우(2) - 2개 이상의 열로 이루어진 테이블을 반환
/*과목 ‘CO123’에 수강한 학생의 성명을 검색하라*/
SELECT 성명
FROM 학생
WHERE EXISTS (SELECT * FROM 수강 WHERE 수강.학번 = 학생.학번 AND 과목코드 = 'CO123');
2. 삭제
/*과목 CO123의 점수가 85점 이상인 ‘컴퓨터’과 학생을 수강테이블에서 삭제하라*/
DELETE FROM 수강
WHERE 과목코드 = 'CO123' AND 점수 >= 85
AND 수강.학번 IN (SELECT 학번 FROM 학생 WHERE 학과 = '컴퓨터');
3. 갱신
/*‘컴퓨터’과 학생의 점수를 2점씩 증가시켜라*/
UPDATE 수강
SET 점수 = 점수 + 2
WHERE 학번 IN (SELECT 학번 FROM 학생 WHERE 학과 = '컴퓨터');
'CS > 데이타베이스' 카테고리의 다른 글
[MySQL] Error Code: 1175. Safe Update Mode (0) | 2022.03.17 |
---|---|
[SQL] 조인 (0) | 2022.03.16 |
[SQL] 데이터 조작어(DML) 활용 (0) | 2022.03.16 |
[SQL] 데이터 정의어(DDL) 활용 (0) | 2022.03.16 |
[실습] 트리거 (0) | 2021.12.15 |