반응형
UNION이나 UNION ALL 사용 시 주의해야 할 경우에 대해서 알아보고 어떤 경우에 에러가 발생하는지 파악할 수 있는 문제입니다.
문제
아래 SQL의 결과와 똑같은 SQL를 고르세요.
[TABLE_A]
TABLE_A | TABLE_B |
COL1 NUMBER | COL1 NUMBER |
COL2 VARCHAR2(1) | COL2 NUMBER |
COL3 VARCHAR2(1) | COL3 VARCHAR2(1) |
1)
SELECT COL1, COL2 FROM TABLE_A
UNION ALL
SELECT COL1, COL2, COL3 FROM TABLE_B
2)
SELECT COL1, COL2 FROM TABLE_A
UNION ALL
SELECT COL1, COL3 FROM TABLE_B ORDER BY 1
3)
SELECT COL1, COL2 FROM TABLE_A
UNION ALL
SELECT COL1, COL2 FROM TABLE_B ORDER BY COL3
4)
SELECT COL1, COL2 FROM TABLE_A ORDER BY COL1
UNION ALL
SELECT COL1, COL2 FROM TABLE_B ORDER BY COL1
문제풀이
- UNION ALL 은 비교하는 SQL의 컬럼 갯수, 컬럼 데이터 타입이 동일해야 한다.
- ORDER BY 절에 나오는 컬럼은 SELECT 절에 명시한 컬럼만 가능하다. (중요!!)
1)
SELECT COL1, COL2 FROM TABLE_A
UNION ALL
SELECT COL1, COL2, COL3 FROM TABLE_B
>> 비교되는 컬럼의 갯수가 달라서 에러가 발생합니다.
2)
SELECT COL1, COL2 FROM TABLE_A
UNION ALL
SELECT COL1, COL3 FROM TABLE_B ORDER BY 1
>> 비교되는 컬럼 갯수, 데이터타입이 같아서 정상
>> ORDER BY 절이 마지막에 명시되어 정상
>> ORDER BY 절에 1 은 SELECT 절에 명시한 첫번째 컬럼을 의미합니다.
3)
SELECT COL1, COL2 FROM TABLE_A
UNION ALL
SELECT COL1, COL2 FROM TABLE_B ORDER BY COL3
>> ORDER BY 절의 컬럼은 SELECT 절에 명시한 컬럼만 사용 가능해서 에러 발생합니다.
4)
SELECT COL1, COL2 FROM TABLE_A ORDER BY COL1
UNION ALL
SELECT COL1, COL2 FROM TABLE_B ORDER BY COL1
>> COL2의 데이터 타입이 달라서 에러가 발생합니다.
간단한 문제 같지만 UNION ALL의 특성을 잘 파악해야만 풀 수 있는 문제입니다.
추가적인 궁금증은 댓글로 달아주세요!! :)
반응형
'SQL' 카테고리의 다른 글
SQL 강의 SQLP SQLD 기출 문제 - 011 ( UNION, UNION ALL, MINUS, INTERSECT 등 ) (0) | 2022.10.21 |
---|---|
SQL 강의 SQLP SQLD 기출 문제 - 010 ( LIKE, JOIN ) (0) | 2022.10.20 |
SQL 강의 SQLP SQLD 기출 문제 - 008 ( COUNT 집계 함수 ) (0) | 2022.10.12 |
SQL 강의 SQLP SQLD 기출 문제 - 007 ( NULL 체크 함수 ) (0) | 2022.10.10 |
SQL 강의 SQLP SQLD 기출 문제 - 006 ( ORACLE AUTO COMMIT ) (0) | 2022.10.10 |
댓글