교육 (Today I Learned)/SeSAC

SeSAC 5일차 / SQL 기본(SQL 문-4)

Bay Im 2023. 7. 22. 00:52
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;

 

 

728x90