[MySQL] Union으로 테이블 합치기

    포스팅에 앞서 MySQL과 MariaDB는 사실상 동일한 DB이기 때문에 본 포스팅은 MariaDB에서도 적용됩니다.

     

    [MySQL] Union으로 테이블 합치기


    UNION의 개념

    우리가 하나의 쿼리안에 다양한 테이블의 정보를 담기 위해서는 서브쿼리와 조인(Join)등의 방식으로 데이터를 표현하곤 합니다. 하지만 다른 테이블이지만 각각의 테이블의 내용을 동일한 컬럼에 담아서 표현하고 싶을 경우 어떻게 해야 할까요? 바로 이럴때 사용하는 것이 유니온(UNION) 입니다.

     

    데이터 예시

     

    유니온의 사용법을 알려드리기 위해 비슷한 구조의 테이블을 2개 만들었습니다. 하나는 블로그의 정보를 넣으려고 하는 content_tbl이고, 다른 하나는 뉴스의 정보를 넣으려고 하는 news_tbl입니다.

     

    UNION 명령어

    이 둘의 데이터를 한번에 하나의 쿼리로 표현하는 방법은 UNION을 쓰면 되는데요. 바로 아래와 같이 간단하게 유니온 명령어를 테이블 쿼리간에 넣어주시면 됩니다.

     

    SELECT 필드1,... 필드N
    FROM 테이블이름
    UNION
    SELECT 필드1,... 필드N
    FROM 테이블이름

     

    사용법이 매우 간단합니다. 다만 여기서 알아두셔야 하는 것은 테이블에서 호출하는 필드들의 순서와 유형이 비슷해야 된다는 것입니다. 만약 형(ex: 하나는 문자열, 하나는 숫자형)이 다르다면, 좀 더 범용적인 형태(ex: 숫자를 문자로)로 형변환을 시켜주게 될 경우 사용이 가능해집니다.

     

     

    UNION 실습

    select title, content
    from content_tbl
    union
    select title, contents
    from news_tbl

    위와 실습을 위해 위와 같이 콘텐츠 테이블을 먼저 호출하였고, 두번째는 뉴스 테이블을 호출하였습니다. 여기서 둘간의 필드 타입이 동일하지는 않지만, 궁극적으로 텍스트이다보니 별다른 문제 없이 UNION이 출력되었습니다.

     

    UNION은 여러개의 테이블을 합쳐서 출력을 하는 거지만, 여기서 테이블은 같은 테이블을 동시에 호출할 수도 있습니다. 하지만 UNION의 경우 아래와 같이 동일한 테이블 2개를 합쳐도 한개의 결과만 나오게 됩니다.

     

    UNION으로 중복제거

     

    이렇게 된 이유는 UNION은 내부적으로 중복된 데이터를 출력하지 않기 때문입니다. 보편적으로 중복된 데이터를 출력하지 않는 것은 문제가 없을법 하지만, 중복된 데이터도 필요한 케이스도 분명 있을 것입니다. 예를 들어 학습을 위해서 데이터를 Select 하였는데 데이터가 중복처리되어 삭제가 된다면 자주 등장한다는 사실을 알기 힘들게 될 것입니다.

     

    UNION ALL

    이럴 때 쓰는 것이 UNION 우측에 ALL을 추가하면 됩니다. 그러면 중복된 데이터도 모두 호출되어 데이터 유실을 방지합니다.

     

    UNION ALL을 하여 중복된 데이터도 표현된 모습

     

    이렇게 데이터 중복이 필요 없을 경우 UNION, 데이터 중복 조차 필요한 경우 UNION ALL을 써야 하는 것은 중요한 내용이니 꼭 기억하셔야 됩니다. 데이터 유실의 경우 알기가 상당히 힘들고, 초급자 분들은 UNION과 UNION ALL의 차이를 알지 못해서 그냥 UNION을 사용하는 케이스가 많기 때문입니다.

     

    MySQL 포스팅

    [MySQL] group_concat 사용법 모음 (문자열 구분자 묶음)

     

    [MySQL] group_concat 사용법 모음 (문자열 구분자 묶음)

    여러개의 Row로 되어 있는 데이터를 한개의 값으로 묶어서 가지고 오고 싶을 경우, MySQL(혹은 MariaDB)에서는 Group_Concat을 사용하여 처리할 수 있다. 실행 예시 테이블 생성 CREATE TABLE `stock` ( `stock_i..

    needjarvis.tistory.com

    [MySQL] date_format 설정 (날짜 포맷 변경)

     

    [MySQL] date_format 설정 (날짜 포맷 변경)

    MySQL에서는 date_format으로 날짜값을 문자열로 변경하는 포맷을 지원해 준다. 아마 DBMS로 개발을 하는 웹개발자라면 한번씩은 꼭 써보게 되는 기능일텐데, 오늘은 date_format의 포맷 설정값들과 예시

    needjarvis.tistory.com

     

    댓글

    Designed by JB FACTORY