SeSAC 5일차 / SQL 기본(SQL 문-4)
SeSAC 5일차(2023-07-21)
SQL 기본(SQL 문-4)
Subquery를 사용하여 Query 해결
- Subquery
Main query 전에 먼저 실행되고 결과는 main query에서 사용된다.
Subquery는 괄호로 묶고 비교 조건 오른쪽에 배치한다.
AND 절로 Subquery 두 개 이상 적을 수도 있다.
ex)
SELECT column1, column2
FROM table
WHERE column1 = (SELECT column1
FROM table
WHERE column3 = 166);
- 단일 행 Subquery
=, >, >=, <, <=, <> 같이 단일 행 비교 연산자 사용하여 한 행만 반환
-다중 행 Subquery
IN, ANY, ALL 같이 다중 행 비교 연산자 사용하여 두 개 이상의 행 반환
- ANY 연산자
값을 subquery에서 반환되는 각 값과 비교한다.
>ANY 는 최소값보다 큼을 의미
<ANY는 최대값보다 작음을 의미
=ANY 는 IN과 같다.
- ALL 연산자
값을 subquery에서 반환되는 모든 값과 비교한다.
>ALL 은 최대값보다 큼을 의미
<ALL 은 최소값보다 작음을 의미
- EXISTS 연산자
테이블에 특정 행이 있는지 없는지 여부에 따라 query 결과가 달라지는 query에 사용된다.
Subquery에서 최소한 한 개의 행이 반환되면 True
반대는 NOT EXISTS
SET 연산자 사용
- SET 연산자
UNION/UNION ALL, INTERSECT, MINUS 연산자 존재
SELECT 리스트의 표현식은 개수가 일치해야 한다.
두 쿼리의 각 열의 데이터 형식은 일치해야 한다.
ORDER BY 절은 명령문의 맨 끝에만 나타날 수 있다.
자동으로 중복 행이 제거되고 오름차순으로 정렬된다. (UNION ALL 제외)
첫번째 쿼리의 열 이름이 결과에 표시된다.
UNION 연산자:
합집합
중복 레코드 제거
선택된 열 수는 같아야 하고, 데이터 형식은 동일한 데이터 형식 그룹에 속해야 한다.
열의 이름이 동일할 필요는 없다.
ex)
SELECT column1, column2
FROM table1
UNION
SELECT column1, column2
FROM table2;
UNION ALL 연산자:
중복 행을 제거하지 않고, 출력 결과가 정렬되지 않는다.
INTERSECT 연산자:
교집합
SELECT 문에서 선택된 열의 개수와 데이터 유형은 동일해야 한다.
하지만 열 이름은 동일할 필요 없다.
ex)
SELECT column1, column2
FROM table1
INTERSECT
SELECT column1, column2
FROM table2;
MINUS 연산자:
차집합
ex)
SELECT column
FROM table1
MINUS
SELECT column
FROM table2;