BumCode

SQL 4

7장 복수의 테이블 다루기


[집합연산]

테이블의 한 행이 집합에서 원소 한 개임.
테이블의 집합연산에서는 세로(행) 방향으로 데이터가 늘거나 줄어듦

[UNION]

합집합

SELECT명령 UNION SELECT명령;

각각의 SELECT명령의 열의 내용은 서로 일치해야함
열 구성이 다른 테이블은 UNION X

-ORDER BY로 정렬
가장 마지막 SELECT명령에 ORDER BY를 지정해야함
지정하는 열은 SELECT명령에서 별명을 통해 일치시켜야함.

UNION : 중복X
UNION ALL : 중복O

[교집합과 차집합]

MySQL에서는 지원하지 않음
교집합 : INTERSECT
차집합 : EXCEPT MINUS(Oracle)

[테이블 결합]

결합에서는 가로(열) 방향으로 데이터가 늘어남

-곱집합
A={1,2,3}, B={a,b}라고할 때
A와 B의 곱집합 : {(1,a),(1,b),(2,a),(2,b),(3,a),(3,b)}

-교차결합(Cross Join)
FROM구에 복수의 테이블 지정 시 교차결합

곱집합으로 계산됨
SELECT * FROM 테이블1, 테이블2;

2개 이상의 테이블도 교차결합이 가능하지만 테이블 수가 많아지면 조합 수가 늘어 집합이 거대해짐

-내부결합 : 교차결합으로 계산된 곱집합에서 원하는 조합을 검색하는 것.

SELECT * FROM 상품 AS A, 재고수 AS B WHERE A.상품코드 = B.상품코드 AND A.상품분류 = "식료품";

-INNER JOIN으로 내부결합

SELECT * FROM 상품 AS A INNER JOIN 재고수 AS B ON A.상품코드=B.상품코드 WHERE A.상품분류 = "식료품";

ON을 사용해 결합조건 지정

-외부키 :

  • 다른 테이블의 기본키를 참조하는 열

-자기결합(Self Join) :

  • 테이블에 별명을 붙이는 기능을 이용해 같은 테이블끼리 결합하는 것.
    사용할 일은 거의 없으나 자기 자신의 기본키를 참조하는 열을 자기 자신이 가지는 데이터 구조일 경우 사용됨

-외부결합 :

  • 어느 한 쪽에만 존재하는 데이터행을 어떻게 다룰지.

ex) 상품 테이블과 재고 테이블이 있을 때, 상품 테이블에 새로운 상품을 추가하여 재고 테이블에는 해당하는 상품 행이 없을 경우
위와 같은 경우 내부결합의 결과에서 새로운 상품은 제외됨

LEFT JOIN 또는 RIGHT JOIN을 통해 기준으로 삼을 테이블을 지정할 수 있음

위와 같은 상황에서

상품 LEFT JOIN 재고 ...

와 같이 할 경우, JOIN의 왼쪽인 상품테이블이 기준이 되어 새로운 상품도 표시할 수 있다.