MySQL - 중첩 서브 쿼리(Nested Subquery) - 다중행 서브쿼리(Multiple-Row Subquery) 사용법

     

     

     

    이번 포스팅에서는 중첩 서브 쿼리(Nested Subquery) 의 다중행 서브쿼리(Multiple-Row Subquery)에 대해서 알아보도록 하겠습니다.

     

     

     

     

     

       관련글

     

     

     

     

     

    https://server-talk.tistory.com/521 - MySQL - 서브쿼리(Subquery)란?

     

     

    https://server-talk.tistory.com/522 - MySQL - 스칼라 서브쿼리(Scalar Subquery) 사용법

     

     

    https://server-talk.tistory.com/523 - MySQL - 인라인 뷰(Inline View) 사용법

     

     

    https://server-talk.tistory.com/524 - MySQL - 중첩 서브 쿼리(Nested Subquery) - 단일행 서브쿼리(single-row subquery) 사용법

     

     

     

     

     

       MySQL - 조회 테이블 데이터 생성 및 구조확인

     

     

     

     

     

    1. 조회할 테이블 명세서 - 회원테이블, 회사테이블

     

     

     

     

     

     

    2. 조회할 테이블 생성 - 회원 테이블

     

    CREATE TABLE member_table (
     seq            INT NOT NULL AUTO_INCREMENT,
     company_code   VARCHAR(100),
     mb_id          VARCHAR(20),
     mb_pw          VARCHAR(100),
      PRIMARY KEY(seq)
    ) ENGINE=innodb CHARSET=utf8;

     

     

     

     

     

    3. 조회할 테이블 생성 - 회원정보 테이블

     

    CREATE TABLE member_info_table (
     seq            INT NOT NULL AUTO_INCREMENT,
     company_code   VARCHAR(100),
     mb_id          VARCHAR(20),
     member_name    VARCHAR(20),
     member_age     INT,
     address        VARCHAR(50),
     mb_tell        VARCHAR(50),  
      PRIMARY KEY(seq)
    ) ENGINE=innodb CHARSET=utf8;

     

     

     

     

    4. 조회할 테이블 생성 - 회사 테이블

     

    CREATE TABLE company_table (
     seq                INT NOT NULL AUTO_INCREMENT,
     company_code       VARCHAR(100),
     korea_name         VARCHAR(100),
     company_name       VARCHAR(100),
     company_address    VARCHAR(20),
      PRIMARY KEY(seq)
    ) ENGINE=innodb CHARSET=utf8;

     

     

     

     

    5. 데이터 삽입 - 회원 테이블

     

    INSERT INTO member_table (company_code, mb_id, mb_pw) VALUE('035720', 'build', 'build1');
    INSERT INTO member_table (company_code, mb_id, mb_pw) VALUE('068270', 'talk', 'server2');
    INSERT INTO member_table (company_code, mb_id, mb_pw) VALUE('035420', 'story', 'server3');
    INSERT INTO member_table (company_code, mb_id, mb_pw) VALUE('035720', 'kay1', 'ak74');

     

     

     

     

    6. 데이터 삽입 - 회원정보 테이블

     

    INSERT INTO member_info_table (company_code, mb_id, member_name, member_age, address, mb_tell) VALUE('035720', 'build', '홍길동', 22, '서울특별시 강남구 도곡동', '010-1234-1234');
    INSERT INTO member_info_table (company_code, mb_id, member_name, member_age, address, mb_tell) VALUE('068270', 'talk', '김하니', 32, '경기도 성남시 분당구', '010-2345-2345');
    INSERT INTO member_info_table (company_code, mb_id, member_name, member_age, address, mb_tell) VALUE('035420', 'story', '이성계', 32, '인천광역시 부평구 부평동', '010-3456-3456');
    INSERT INTO member_info_table (company_code, mb_id, member_name, member_age, address, mb_tell) VALUE('035720', 'kay1', '박길동', 33, '서울 용산구 한남대로 98', '010-9876-9876');

     

     

     

     

    7. 데이터 삽입 - 회사 테이블

     

    INSERT INTO company_table (company_code, korea_name, company_name, company_address) VALUE('035420', '네이버', 'NAVER', '경기도 성남시 분당구 불정로 6');
    INSERT INTO company_table (company_code, korea_name, company_name, company_address) VALUE('035720', '카카오', 'KAKAO', '제주특별자치도 제주시 첨단로 242');
    INSERT INTO company_table (company_code, korea_name, company_name, company_address) VALUE('068270', '셀트리온', 'CELLTRION', '인천광역시 연수구 아카데미로 23');

     

     

     

     

     

       MySQL - 중첩 서브 쿼리(Nested Subquery) 사용시 주의사항

     

     

     

     

     

    1. 서브쿼리는 SELECT 문으로만 작성이 가능합니다

     


    2. 서브쿼리는 ( ) - "괄호" 안에 작성해야 됩니다.

     


    3. ORDER BY 절에서는 사용할수 없습니다.

     

     

    4. 실행결과가 2개의 행 이상이야 됩니다.

     

     

    5. 다중행 비교 연산자를 사용합니다.

     

     

     

     

     

       MySQL - 중첩 서브 쿼리(Nested Subquery) 다중행 비교 연산자

     

     

     

     

     

    연산자 설 명
    IN 서브쿼리에 조회결과가 1개라도 일지하는 경우
    ANY 메인쿼리와 비교조건과 서브쿼리의 검색결과가 1개라도 일치하는 경우
    EXIST 메인쿼리와 비교조건과 서브쿼리의 검색결과가 1개라도 일치하는 전체 조회

    [다중행 연산자]

     

    다중행 서브쿼리는 IN, ANY, EXIST 로 다중행 연산자를 사용하게 됩니다.

     

     

     

     

     

       MySQL - 중첩 서브 쿼리(Nested Subquery) - 다중행 서브쿼리(Multiple-Row Subquery) 사용법

     

     

     

     

     

    다중행 서브쿼리는 WHERE 절에서 사용되는 쿼리이며, 실행결과가 2개이상의 행일경우 사용 됩니다.

     

     

     

     

    1. 중첩 서브 쿼리(Nested Subquery) 중접행 사용법

     

    사용법 : 
            SELECT  [컬럼명],
                    [컬럼명],                
                    [컬럼명]
              FROM  [Table Name]
             WHERE  [컬럼명] IN (중첨행 서브쿼리)

     

     

     

     

     

    2. 중첩 서브 쿼리(Nested Subquery) 다중행 예제 - IN

     

    select company_code, mb_id, member_name, member_age, address, mb_tell
      from member_info_table
      where company_code in (select company_code 
                               from member_table 
                              where company_code = '035720');

     

    조회결과가 2개의 행이상으로 단일행 서브쿼리인 경우 에러가 발생하지만 다중행 서브쿼리에서는 조회가 가능합니다.

     

     

     

     

    2. 중첩 서브 쿼리(Nested Subquery) 다중행 예제 - IN - 출력결과

     

    +--------------+-------+-------------+------------+-------------------------------------+---------------+
    | company_code | mb_id | member_name | member_age | address                             | mb_tell       |
    +--------------+-------+-------------+------------+-------------------------------------+---------------+
    | 035720       | build | 홍길동      |         22 | 서울특별시 강남구 도곡동            | 010-1234-1234 |
    | 035720       | kay1  | 박길동      |         33 | 서울 용산구 한남대로 98             | 010-9876-9876 |
    +--------------+-------+-------------+------------+-------------------------------------+---------------+

     

     

     

     

    3. 중첩 서브 쿼리(Nested Subquery) 다중행 예제 - EXISTS

     

    select company_code, mb_id, member_name, member_age, address, mb_tell
      from member_info_table
      where exists (select company_code 
                               from member_table 
                              where company_code = '035720');

     

    서브쿼리에 조회결과가 있을 경우 메인쿼리에 내용을 모두 조회하게 됩니다.

     

     

     

     

    3. 중첩 서브 쿼리(Nested Subquery) 다중행 예제 - EXISTS - 출력결과

     

    +--------------+-------+-------------+------------+-------------------------------------+---------------+
    | company_code | mb_id | member_name | member_age | address                             | mb_tell       |
    +--------------+-------+-------------+------------+-------------------------------------+---------------+
    | 035720       | build | 홍길동      |         22 | 서울특별시 강남구 도곡동            | 010-1234-1234 |
    | 068270       | talk  | 김하니      |         32 | 경기도 성남시 분당구                | 010-2345-2345 |
    | 035420       | story | 이성계      |         32 | 인천광역시 부평구 부평동            | 010-3456-3456 |
    | 035720       | kay1  | 박길동      |         33 | 서울 용산구 한남대로 98             | 010-9876-9876 |
    +--------------+-------+-------------+------------+-------------------------------------+---------------+

     

    Posted by 서버이야기