SQL - (Basic) UNION 문법

jaam._.mini·2023년 12월 22일
0
post-thumbnail
  • 실습 환경 만들기

    • 테스트용 테이블 생성

      CREATE TABLE test1
      (
       no int
      );
      CREATE TABLE test2
      (
       no int
      );
    • 데이터 추가 (1)

      INSERT INTO test1 VALUES (1);
      INSERT INTO test1 VALUES (2);
      INSERT INTO test1 VALUES (3);
    • 데이터 추가 (2)

      INSERT INTO test2 VALUES (5);
      INSERT INTO test2 VALUES (6);
      INSERT INTO test2 VALUES (3);




UNION

여러개의 SQL문을 합쳐서 하나의 SQL 문으로 만들어 주는 방법


⭐ 단, 컬럼의 갯수가 같아야 함 ❗

(1) UNION

중복된 값을 제거해서 가져온다

SELECT column1, column2, ... FROM tableA
UNION
SELECT column1, column1, ... FROM tableB;

(2) UNION ALL

중복된 값을 모두 가져온다

SELECT column1, column2, ... FROM tableA
UNION ALL
SELECT column1, column1, ... FROM tableB;

(3) 문제풀이

  • 예제 1. UNION ALL

    • test1, test2 모든 값 자겨오기(중복포함)
      SELECT * FROM test1
      UNION ALL
      SELECT * FROM test2;
  • 예제 2. UNION

    • test1, test2 모든 값 자겨오기
      SELECT * FROM test1
      UNION ALL
      SELECT * FROM test2;
  • 예제 3.

    • 성별이 여자인 데이터를 검색하는 쿼리와
      소속사가 YG엔터 데이터를 검색하는 쿼리를
      UNION ALL로 실행
      SELECT name, sex, agency FROM celeb WHERE sex='F'
      UNION ALL
      SELECT name, sex, agency FROM celeb WHERE agency = 'YG엔터';
  • 예제 4.

    • 가수가 직업인 연예인의 이름, 직업을 검색하는 쿼리
      1980년 대에 태어난 연예인의 이름, 생년월일, 나이
      UNION으로 실행

      • 1차 쿼리
        SELECT name, job_title FROM celeb
        WHERE job_title
        LIKE '%가수%';
      • 2차 쿼리
        SELECT name, birthday, age FROM celeb
        WHERE birthday 
        BETWEEN '1980-01-01' AND '1989-12-31';
    • 그냥 UNION을 하는 경우 'different nuumber of columns'에러❗ 발생

    • 따라서, 💡컬럼의 개수를 맞춰줘야함

      • SELECT name, birthday, age FROM celeb
        ▼ - age 삭제
      • SELECT name, birthday FROM celeb
        SELECT name, job_title FROM celeb
        WHERE job_title
        LIKE '%가수%'
        UNION
        SELECT name, birthday FROM celeb
        WHERE birthday
        BETWEEN '1980-01-01' AND '1989-12-31';
  • 예제 5.
    • 성이 이씨인 데이터 & 1970년대생, 중복 포함
      SELECT name, birthday FROM celeb
      WHERE name LIKE '이%'
      UNION ALL
      SELECT name, birthday FROM celeb
      WHERE birthday BETWEEN '1979-01-01' AND '1970-12-31';

제로베이스 데이터 스쿨
profile
비전공자의 데이터 공부법

0개의 댓글