SQL - union

Bean·2024년 2월 11일

Data

목록 보기
5/14

UNION

  • 여러 개의 SQL 문을 하나로 합쳐 하나의 SQL 문으로 만들어주는 방법
  • 각 테이블에서 불러오는 칼럼(column)의 개수가 같아야한다(다르면 에러를 반환)
  • UNION은 두 개의 문법이 있다
    --> UNION         중복된 값은 제거하여 보여준다
    --> UNION ALL   중복된 값도 포함해 모두 보여준다
select column1, column2, ... from tableA
UNION | UNION ALL
SELECT column1, column2, ... FROM tableB;

🤔각 테이블에서 불러오는 칼럼이 다른 경우 어떻게 될까

 mysql> select name, job_title from celeb where job_title LIKE '%singer%'
     -> UNION
     -> select age, birthday from celeb where birthday LIKE '198%';
+----------+----------------+
| name     | job_title      |
+----------+----------------+
| IU       | singer, talent |
| MIJU     | singer         |
| SOOHYEON | singer         |
| 41       | 1981-01-18     |  
+----------+----------------+
-- 처음 지정한 칼럼명으로 반환되어 name과 job_title에 맞지 않은 age와 birthday 칼럼값이 합쳐짐

(예제) 성이 '이'씨인 데이터를 검색하는 쿼리와 1970년대 생을 검색하는 쿼리를 중복 포함 합쳐서 실행해보자

mysql> SELECT NAME, BIRTHDAY FROM CELEB
    -> WHERE NAME LIKE '이%'
    -> UNION ALL
    -> SELECT NAME, BIRTHDAY FROM CELEB
    -> WHERE BIRTHDAY BETWEEN '1970-01-01' AND '1979-12-31';
-- 1970년대생 조건을 만족할 수 있는 BETWEEN 구문이 길다고 판단이 들어 LIKE도 시험해봄
-- ↓ LIKE 사용 VER
mysql> SELECT NAME, BIRTHDAY FROM CELEB
    -> WHERE NAME LIKE '이%'
    -> UNION ALL
    -> SELECT NAME, BIRTHDAY FROM CELEB
    -> WHERE BIRTHDAY LIKE '197%';
-- 둘 다 같은 결과를 반환함을 알 수 있다
+--------+------------+
| NAME   | BIRTHDAY   |
+--------+------------+
| 이미주  | 1994-09-23 |
| 이수현  | 1999-05-04 |
| 유재석  | 1972-08-14 |
| 차승원  | 1970-06-07 |
+--------+------------+
profile
시리즈별로 봐주시길

0개의 댓글