MySQL 쿼리 결과 합치기 - MySQL kwoli gyeolgwa habchigi

Summry

본 문서에서는 MySQL에서 복수의 select문을 합치는 방법을 정리한다.

Show

    send me email if you have any questions.


    UNION

    두개의 SELECT문을 서로 합치고 싶은데 그 중에서도 두개의 조회문의 중복되는 데이터를 한번만 출력할 때 사용한다.

    • UNION은 합집합을 의미하며 사용하게되면 두개의 SELECT문을 서로 합친 결과를 출력합니다. (중복데이터는 한번만 조회)

    usertable1

    idxnameage
    1 user1 20
    2 user2 22
    3 user3 24

    usertable2

    idxnameage
    1 user4 21
    2 user5 23
    3 user6 25

    위와 같은 데이터를 가진 테이블이 두 개 있을 때 두 테이블의 모든 이름을 조회하고 싶을 경우 아래처럼 쿼리문을 구성한다.

    mysql > (SELECT name FROM usertable1) --첫번째 SELECT문
         -> UNION
         -> (SELECT name FROM usertable2) --두번째 SELECT문
    

    하나의 테이블에서도 SELECT문을 합칠 수 있다.

    usertable1에서 나이가 20살인 사람을 조회하고 동시에 가장 마지막 행을 조회하고 싶다면 아래와 같이 쿼리문을 구성한다.

    mysql > (SELECT * FROM usertable1 WHERE age = 20)
         -> UNION
         -> (SELECT * FROM calendar ORDER BY idx DESC limit 1);
    

    UNION ALL

    두개의 SELECT문을 서로 합치되, 중복을 무시하고 싶을 때 사용한다.

    • UNION 대신 UNION ALL 키워드를 사용한다.

    mysql > (SELECT name FROM usertable1) --첫번째 SELECT문
         -> UNION ALL
         -> (SELECT name FROM usertable2) --두번째 SELECT문
    

    example

    Reference

    [Oracle] SELECT문 합치기 유니온(UNION, UNION ALL) 합집합 - 코딩팩토리

    반응형

    mysql에서 테이블을 검색해서 두개의 컬럼값을 하나로 합치고 싶을 때가 있다.

    아래와 같은 테이블이 있다면,

    column1 column2
    1 A
    2 B
    3 C

    CONCAT을 이용해서 두개의 컬럼을 하나로 합칠 수 있다.

    SELECT CONCAT(column1, " - ", column2) AS result FROM 테이블명

    이렇게 하면 

    result
    1 - A
    2 - B
    3 - C

    의 결과를 얻을 수 있다.

    만약 열로 된 결과를 ,구분으로 한 행으로 가져오고 싶을 땐 GROUP_CONCAT를 쓰면 된다.

    SELECT GROUP_CONCAT(column1, " - ", column2) AS result FROM 테이블명

    이렇게하면

    result
    1 - A,2 - B,3 - C

    처럼 얻을 수 있다.

    반응형

    저작자표시비영리동일조건

    '프로그래밍 > Server' 카테고리의 다른 글

    [nodejs] 배열 복사하기 - 자바스크립트(javascript)  (0) 2021.11.02
    [MYSQL] 네이버클라우드플랫폼 mysql 외부접속 HeidiSQL SSH 터널로 연결하기  (0) 2021.10.12
    [MYSQL] AUTO_INCREMENT 증가값 초기화 및 재정렬하기  (0) 2021.10.08
    [webRTC] 카카오엔터프라이즈 서비스를 이용한 영상통화 비디오챗팅  (1) 2021.05.27
    [MYSQL] 테이블(TABLE)과 컬럼(COLUMN)의 코멘트(COMMENT) 정보 조회하기  (0) 2021.05.12

    오랜만에 쿼리짜다가 신기한 함수를 발견해서 글로 적어보기로 했다.

    바로바로 GROUP_CONCAT() 함수!!

    GROUP_CONCAT()

    살짝 알아본 바로는 SELECT 결과를 concat을 통해 한 문장으로 합쳐주는 것이다.

    maria db에 잘 설명되어있어서 페이지 참고하시라고 첨부합니당...

    https://mariadb.com/kb/en/group_concat/

    group_concat 안에도 서브쿼리처럼 사용할 수 있으며, 정렬과 Limit 제한까지 가능한 모양이다.


    SELECT name FROM test;
    MySQL 쿼리 결과 합치기 - MySQL kwoli gyeolgwa habchigi

    만약 이렇게 test라는 table에 값이 있다고 치자. 얘를 조회하면 컬럼의 길이가 3으로 나뉜다.

    얘를 한 컬럼으로 합치고 싶을 때 group_concat()을 사용하면 된다.

    SELECT GROUP_CONCAT(name) as nameList FROM test
    MySQL 쿼리 결과 합치기 - MySQL kwoli gyeolgwa habchigi

    이렇게하면 test테이블에 있는 결과를 ,를 구분자로 하여서 한 컬럼으로 출력하게 된다.


    SELECT GROUP_CONCAT(name, '&') as nameList FROM test
    MySQL 쿼리 결과 합치기 - MySQL kwoli gyeolgwa habchigi

    이렇게 group으로 합칠 때 추가할 문자를 입력할 수 있는데, 쉼표가 나와서 썩 좋아보이진 않다...

    그래도 유용하게 쓰일 듯 하다!


    활용

    난 얘를 INSERT INTO의 VALUE값에 넣어주려고 찾게 되었다.

    value값에 서브쿼리를 넣는 것이 가능했는데, 서브쿼리의 결과가 1개가 아니라서 문제가 생겼었다.

    -- 기존 생각
    INSERT INTO test2(content) VALUES ((SELECT name FROM test WHERE name like "%o%"));
    -- 변경
    INSERT INTO test2(content) VALUES ((SELECT GROUP_CONCAT(name) FROM test WHERE name like "%o%"));

    insert나 update의 value에 서브 쿼리가 들어간다는 것도 신기했는데,

    저렇게 조회한 결과를 하나로 합쳐서 반환해주는 함수가 있다는 것도 참 신기했다.

    모르는 기능을 2개나 발견하게 되어서 기쁜 날이 되었따!!

    끝~~