ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL 첫걸음 CH07. 복수의 테이블 다루기
    Sql 2023. 3. 17. 09:06

    1 _ 집합 연산

     : 데이터 베이스의 데이터를 집합으로 간주해 다루기 쉽게 하자. 또한 집합으로 취급하기 때문에 일반 연산과는

    다름을 주의하자

     

     - UNION

     : 두 집합을 합치는 것으로 '합집합'의 개념과 같다. 따라서 , 중복되는 값이 있다면 하나로 취급한다.

     - {1,2,3} 인 71_a와 {2, 10, 11}인 71_b를 UNION 하자 중복값인 2는 1개로 취급하는 열이 생성됬다.

     - 위와같이 열의 갯수가 다른 테이블을 UNION 하고싶다면, 열의 갯수를 맞춰줘야한다.

     - sample 71_a,b와 맞춰서 열의 갯수 1개가 되도록 sample31 에서 특정 열 1개를 선택해서 union 했다.


    ** union 구에 order by를 사용하려면

     : union 구의 제일 마지막 select 구에 order by를 사용해야 error가 나지 않는다,

    select 구들에서 선택한 열의 이름이 모두 같다면, order by 열명 을 사용할 수 있지만, 대부분의 경우

    그렇지 않기 때문에, order by 별명 을 설정하도록 하자.


      - UNION ALL

     : 합집합이지만, 중복값을 허용하고 순서대로 저장하는 방법

     - 중복 값인 2가 사라지지 않고 select 된다.

     


     - 교집합과 차집합

     : 교집합 -> INTERSECT  /  차집합 -> EXCEPT (Oracle의 경우 MINUS)

    하지만, mysql에서는 두 기능이 지원되지 않는다.


    2 _ 테이블 결합

     : 집합 연산의 곱집합과 매우 유사하다.

     

     - 교차결합

     - { A, B, C } 인 x와 { 1,2,3 }인 y를 곱집합으로 만들었다.

    곱집합을 할 경우 항상 테이블이 가로로 늘어난다.

     


     - 내부결합

     - 콤마와 where을 이용해서 내부결합

    상품코드 열을 기준으로 두 개의 테이블을 결합했다.

     - join과 on 으로 내부결합

    상품코드 열을 기준으로 두 개의 테이블을 결합했다.

     


     - inner join 과 on 을 사용해서 만들었다. 메이커 코드를 양쪽 테이블 모두 가지고 있는 경우

    어느쪽 데이터를 쓸지 지정해줘야한다. ( select 뒤에 상품2.메이커코드 )

     - 위와 같은 결과를 출력하지만, 문법에서 차이가 있따.

     - 위의 두 문법은 같은 결과를 출력하므로, 현업에서 사용하고 있는 방법을 선택하자

     

    내부결합(Inner Join): 두 개 이상의 테이블에서 공통된 데이터를 추출하는 방법입니다. 즉, 기준이 되는 두 개의 테이블에서 공통된 컬럼을 이용하여 데이터를 합칩니다.

    예를 들어, "Order"와 "Product" 라는 두 개의 테이블이 있다고 가정해보겠습니다. "Order" 테이블에서는 주문번호(order_id)와 제품번호(product_id)가 저장되어 있고, "Product" 테이블에서는 제품번호(product_id)와 제품명(product_name)이 저장되어 있습니다. 이때, 두 개의 테이블에서 제품번호를 기준으로 내부결합을 수행하면, 주문한 제품에 대한 정보와 제품명을 함께 추출할 수 있습니다.


     - 외부결합

     : 외부결합(Outer Join): 두 개 이상의 테이블에서 공통된 데이터뿐만 아니라, 각각의 테이블에서 고유한 데이터까지 모두 추출하는 방법입니다. 즉, 두 개의 테이블에서 공통된 컬럼을 이용하여 데이터를 합치며, 각 테이블에서 고유한 데이터가 존재하는 경우에는 NULL 값을 반환합니다.

    예를 들어, "Order"와 "Customer"라는 두 개의 테이블이 있다고 가정해보겠습니다. "Order" 테이블에서는 주문번호(order_id)와 고객번호(customer_id)가 저장되어 있고, "Customer" 테이블에서는 고객번호(customer_id)와 고객명(customer_name)이 저장되어 있습니다. 이때, 두 개의 테이블에서 고객번호를 기준으로 외부결합을 수행하면, 주문한 고객과 고객명을 함께 추출할 수 있습니다. 이때, "Order" 테이블에는 존재하지만 "Customer" 테이블에는 존재하지 않는 주문도 존재할 수 있으므로, 이 경우에는 고객명 컬럼에는 NULL 값이 반환됩니다.

     

     - left : 기준으로 잡고싶은 테이블을 왼쪽에 둔다

     - right : 기준으로 잡고싶은 테이블을 오른쪽에 둔다.

    기준이 되는 테이블에 없는 자료는 나타내지 않는다.

    기준이 되는 테이블에는 있는데 결합하는 테이블에 없는 자료는 NULL 값을 넣는다.

     


     

Designed by Tistory.