SQL 첫걸음 7장

0Chae0·어제

복수의 테이블 다루기

집합 연산

SQL과 집합

UNION: 합집합
SELECT FROM sample71_a UNION SELECT FROM sample71_b;

UNION 이용하면 여러 개의 SELECT 명령을 하나로 묶을 수 있다.

SELECT a FROM sample71_a UNION SELECT b FROM sample71_b ORDER BY b;

UNION으로 SELECT 명령을 연결하는 경우, 가장 마지막 SELECT 명령에 대해서만 ORDER BY 구를 지정할 수 있다! ORDER BY 구에 지정하는 일은 별명을 붙여 이름을 일치시킨다.

SELECT FROM sample71_a UNION ALL SELECT FROM sample71_b;

UNION ALL은 단순하게 합친다. 중복값이 없는 경우에는 오히려 좋은 성능을 보여준다.

INTERSECT / EXCEPT

테이블 결합

곱집합(Cartesian product)과 교차결합(Cross Join)

  • FROM 구에 테이블 두 개를 지정해 곱집합 구하기
    - SELECT * FROM sample72_x, sample72_y;

+) 결합은 열(가로) 방향으로 확대된다.

내부 결합

테이블 수가 너무 많은 경우 교차결합을 사용하면 조합 수가 엄청나게 늘ㅇ나 집합이 거대해진다. 그래서 교차 결합 보다는, 내부 결합을 더 많이 사용한다.

SELECT * FROM 상품, 재고수;

  • 상품코드가 같은 것 찾기
    - 열 이름이 '상품코드'로 서로 동일하므로 WHERE 구에 조건식을 지정할 때 케이블 이름도 같이 지정할 필요가 있다.

    SELECT * FROM 상품, 재고수 WHERE 상품.상품코드 = 재고수.상품코드;

INNER JOIN 으로 내부결합 하기

FROM 구에 테이블 복수 지정해 가로 방향으로 테이블 결합하기
교차결합 시 곱집합으로 계산됨
WHERE 조건을 지정해 곱집합엥서 필요한 조합만 검색할 수 있다.

위에 3가지는 모두 구식이다... INNER JOIN 이 최신식이다!

외부 결합

'어느 한 쪽에만 존재하는 데이터행을 어떻게 다룰지'를 변경할 수 있다.

LEFT JOIN, RIGHT JOIN 으로 외부결합 하기

SELECT 상품3.상품명, 재고수.재고수 FROM 상품3 LEFT JOIN 재고수 ON 상품3.상품코드 = 재고수.상품코드 WHERE 상품3.상품분류 = '식료품';

관계형 모델

관계형 모델은 관계형 데이터베이스의 기반이 되는 이론적 개념으로, 사용되는 용어는 SQL과 일치하지 않는다.
기본 요소 = Relation (테이블)

  • 속성(열) = (속성 이름 + 형 이름)
  • 튜플(행)

관계대수(릴레이션에 대한 연산이 집합에 대한 연산에 대응된다)

  • 규칙
    - 하나 이상의 관계를 바탕으로 연산한다.
    • 연산한 결과, 반환되는 것 또한 관계이다.
    • 연산을 중첩 구조로 실행해도 상관없다.
  • 자주 사용될 것 같은 릴레이션의 연산 방법을 몇 가지 규정한다.
    -합집합(UNION): 릴레이션 끼리의 덧셈
    -차집합(EXCEPT): 릴레이션 끼리의 뺄셈
    -교집합(INTERSECT): 릴레이션 끼리의 교집합
    -곱집합(CROSS JOIN): 릴레이션끼리의 대전표를 조합하는 연산
    -선택(WHERE 구)
    -투영(SELECT 구)
    -결합(JOIN)
profile
아무것도 하지 않으면 아무 일도 일어나지 않기에... 시작하는 컴공생의 블로그

0개의 댓글