본문 바로가기

SQL/모두를 위한 postgreSQL

[PostgreSQL] 5. 데이터의 결합_3

728x90

5. 여러 개의 테이블을 로우로 연결하기
    1) 명령어의 전제 조건
    -서로 다른 테이블을 세로 방향으로 합치기 위해서는 2개의 쿼리문 사이에 연결하는 명령어 추가
    -2개의 쿼리문으로 하나의 테이블을 만드는 것인 만큼 전제조건이 성립되어야 한다
        (1) 두 SQL은 서로 컬럼의 개수가 동일해야 한다
        (2) 같은 위치에 동일한 형식과 의미의 정보가 담겨야 한다

    2) UNION / UNION ALL
    (1)두 명령어의 차이점
        -UNION 명령어는 중복되는 로우는 하나의 로우로만 표현한다
        -UNION ALL 명령어는 중복여부를 확인하지 않고 그냥 두 테이블을 결합해서 출력한다
        
    (2) UNION 명령어의 중복 제거
        -UNION명령어는 두 테이블을 결합할 때 두 테이블에 중복되는 로우만 제거해서출력하는 것이 아니라
         두 테이블을 먼저 합치고 합친 로우들을 모두 검사하여 중복이 있으면 제거한다
        
    3) INTERSECT / INTERSECT ALL
        -INTERSECT 명령어는 두 테이블에 공통되는 로우만을 남기는 명령어
        -INTERSECT 명령어는 중복되는 결과를 한 번만 출력하고, 
         INTERSECT ALL 명령어는 중복을 제거하지 않는다

    4) EXCEPT / EXCEPT  ALL
        -EXCEPT 명령어는 두 테이블의 로우 정보 중 중복되지 않는 부분만을 출력하는 명령어
        -차집합과 동일한 결과이다 즉, A-B :  A집합에서 B집합과 중복되는 데이터를 제거하고 A집합을 출력
        -EXCEPT은 중복을 제거한 명령어, EXCEPT  ALL은 중복을 제거하지 않은 명령어 이다



6. 여러 개의 테이블을 컬럼으로 연결하기
    -연결된 관계를 읽기 편하게 만드는 방법은 두가지가 있다
    -첫번째는 두 테이블을 합친 후 WHERE절을 이용하는 방법
    -두번째는 JOIN문을 사용하는 것

    1) FROM과 WHERE절을 이용한 데이터 결합

    (1) 두 테이블을 모두 FROM 절에 불러오는 의미
        -두 테이블의 각각의 로우에 대한 모든 조합이다
        -두 테이블을 FROM절에 놓는 것은 테이블을 교차조인(CROSS JOIN)한다는 의미이다
        -두 테이블의 각각의 로우가 서로 한번씩 결합시키는 것을 교차조인이라고 한다
        -FROM 컬럼명 , 컬렴명   또는   FROM 컬러명 CROSS JOIN 컬럼명

    (2) WHERE절로 결합된 데이터 고르기
        -FROM절에 2개의 테이블을 올린후 원하는 정보만 걸러내는 것
        -FROM과 WHERE절을 이용하여 여러 테이블의 컬럼 정보를 결합하기 위해서는
         1.FROM절에 두 테이블을 모두 적어서 두 테이블 로우의 모든 조합을 먼저 구한다
         2.각 테이블의 로우의 모든 조합에서 우리가 생각하기에 컬럼사이의 관계가 의미있는 
            정보만 남도록 WHERE절에 조건을 걸면 두 테이블의 관계가 연결된 조합만 남게된다


    2) JOIN을 이용한 데이터 결합
    -FROM절에 단순히 나열해서 놓는 것이 아닌 JOIN문을 활용해서 두 테이블을 서로 연결할 것임을 명시적으로 표현한다

        (1) 다양한 JOIN의 종류
            -JOIN문은 여러 테이블의 컬럼정보를 결합하는 결합 구문이다
            -외부조인과 내부조인 구문으로 구분할 수 있다 (INNER JOIN / OUTER JOIN)
            -내부조인문은 두 테이블 값이 서로 연결되는 부분만 결과로 출력
            -외부조인문은 서로 연결되지 않고 한쪽에만 데이터가 있는 로우도 출력


            -INNER JOIN = JOIN (축약)
            -LEFT OUTER JOIN = LEFT JOIN (축약)
                >LEFT JOIN 명령어는 명령어 앞에 쓰인 테이블을 기준으로 뒤에 쓰인 테이블과 연결되는 정보만 불러온다
                >연결된 정보가 없다면 NULL값으로 출력한다
            -RIGHT OUTER JOIN = RIGHT JOIN(축약)
                >LEFT JOIN 명령어와는 반대로 뒤에 적힌 테이블을 기준으로 정보를 출력한다
            -FULL OUTER JOIN = FULL JOIN 
                >연결된 로우는 서로 연결하여 출력하고, 

                 서로 연결되지 않은 로우는 연결되지 않은 부분의 정보를 NULL값으로 비워둔 채 출력

        (2) JOIN문이 사용되는 위치
            -FROM절 뒤에 위치해 있다
            -FROM절 안에 JOIN문이 들어있고 WHERE절은 그 다음에 위치해 있다

        (3) JOIN문 뒤에 오는 명령어
            
            테이블 JOIN 테이블 ON 연결할 조건
            테이블 JOIN 테이블 USING (연결할 컬럼 목록)

            -ON 명령어 뒤에는 테이블을 연결하는 조건을 적는다
            -USING 명령어 뒤에는 두 테이블을 연결할 공통된 컬럼 이름을 적는다
             (만약 두 테이블을 연결하는 컬럼의 이름이 서로 다르다면 USING절을 사용할 수 없다)

    (3) JOIN과 함께 쓰이는 함수
        
        1) COALESCE
            -COALESCE(인자1, 인자2,..,인자N)
            -COALESCE함수는 첫번째 인자부터 순서대로 NULL값이 아니면 그 값을 반환하고, 

             만약 NULL 값이라면 다음 인자를 확인한다
             즉, 인자를 순서대로 확인해서 NULL값이 아닌 값이 나오면 그 값을 반환하는 함수이다
            -EX) SELECT div, COALESCE(div, 0) 

                    FROM table_a;

                   = > div컬럼의 값중 null이 있다며 출력할때 0으로 출력해라

728x90