Programming/데이터베이스

[MySQL] 데이터 조작문 DML - UNION, SUB QUERY

Bam_t 2022. 1. 23. 14:58
728x90

데이터 조작문의 마지막 포스트입니다. 마지막으로 다룰 데이터 조작문 명령은 UNION과 SUB QUERY입니다.

테이블은 지난번 포스트와 동일한 두 개의 테이블을 이용하겠습니다.


1. UNION

UNION 명령은 여러 테이블의 SELECT 명령 결과를 하나의 테이블로 표현할 때 이용합니다.

유니온을 사용할 땐 몇 가지 규칙이 있는데 다음과 같습니다.

  • SELECT 구문의 순서는 상관하지 않는다.
  • 각 SELECT 구문은 표현식이 같아야한다.(컬럼 수 등이 일치)
  • 중복된 결과는 하나만 표시한다.
  • ORDER BY 구문은 한 번만 사용한다.
  • 컬럼타입은 반환 가능한 타입만 이용한다.

UNION 구문은 다음과 같이 사용합니다.

SELECT 구문
UNION
SELECT 구문;
(계속해서 가능)

 

본 예제와 같이 UNION만을 사용하는 경우에는 중복된 값이 있을경우 한 번만 보여줍니다. 하지만 중복된 결과라도 전부를 보여주고 싶다면 UNION 뒤에 ALL 구문을 붙여서 사용합니다.

UNION ALL

 

 

 

2. SUB QUERY

서브 쿼리는 다른 쿼리문 내부에서 사용가능한 쿼리를 말합니다. JOIN처럼 여러 테이블을 결합해서 결과를 내는 것과 비슷한 동작을 하는데, 서브 쿼리는 서브 쿼리 내부에서 다시 호출 될 수도 있고, 서브 쿼리 결과를 INSERT 하는 등의 동작은 JOIN으로 불가능 하기 때문에 서브 쿼리를 이용하는 것이 더 편한 경우도 존재합니다. 서브 쿼리를 포함한 쿼리는 외부쿼리, 서브 쿼리는 내부 쿼리라고도 부릅니다. 서브 쿼리는 사용할 때 소괄호()로 감싸서 이용합니다.

서브 쿼리를 모든 명령에서 이용할 수는 없고, SELECT, INSERT, UPDATE, DELETE, SET, DO 구문에서만 사용할 수 있습니다.

외부 쿼리 구문
(내부 쿼리 구문);

 

다음 예시는 교수 목록에서 'A'로 시작하는 이름을 가진 교수의 데이터를 출력하는 예시입니다.

SELECT * FROM professor_info.professors
WHERE name = (
SELECT name FROM professor_info.professors
WHERE name LIKE 'A%');

동작을 살펴보면, 소괄호로 구성된 내부 쿼리가 우선적으로 실행되어 테이블을 가져오고 외부 쿼리가 그 다음으로 실행됩니다.

728x90