Whiteship's Note

Chapter 7: Querying Multiple Tables

DB/SQL : 2008.01.06 14:17


참조 : The Programmer's Guide to SQL

조인은 두 집합에 대한 곱셈연산인 데카르트 곱이다. 데카르트 곱이란 예를 들어, 집합 {a, b, c} 와 집합 {a, b}가 있을 때 그 결과는 {(a, a), (a, b), (b, a), (b, b), (c, a), (c, b)}다.

기본 문법(데카르트 곱)
    SELECT Class.ClassID, Class.Time, Room.RoomID
    FROM Room, Class;

크로스 조인
    - 기본 문법과 동일한 결과를 보여주지만, 다음과 같이 사용할 수 있다.
    - SQL-92 표준이다.
    SELECT Table1.Column1, Table1.Column2, Table2.Column3
    FROM Table1 CROSS JOIN Table2
    - 대부분 데카르트 곱을 결과로 원하지는 않을 것이다. Table1의 어떤 레코드가 Table2의 어떤 레코드와 조인되는지 명시할 필요가 있다. 이 때 보통 테이블의 관계를 이용한다.

Equi 조인
    - 다음과 같이 WHERE 절을 사용하여 컬럼 값을 동일성으로 레코드를 연결할 수 있다.
    SELECT Table1.Column1, Table1.Column2, Table2.Column3 FROM Table1, Table2
    WHERE Table1.Column1 = Table2.Column2
    - 좀 더 명시적으로 JOIN ON을(보다 명시적으로는 INNER JOIN ON) 사용할 수 있다.
    SELECT Table1.Column1, Table1.Column2, Table2.Column3 FROM Table1 JOIN Table2
    ON Table1.Column1 = Table2.Column2
    - 오라클에서 NATUAL JOIN을 사용할 수 있다.
    SELECT Class.ClassID,
        Class.CourseID,
        Class.Time,
        Room.Comments AS RoomName
    FROM Class NATURAL JOIN Room
    ORDER BY ClassID;
    - 오라클에서 USING을 사용할 수 있다.
    SELECT Room.Comments, Class.Time
    FROM Class
       JOIN Room
       USING (RoomID);

Non-Equi 조인
    - 두 개 이상의 테이블을 꼭 동일성으로 연결하지 않아도 된다.
    SELECT * FROM Table1, Table2
    WHERE Table1.Column1 < Table2.Column2
    - 이것도 물론 JOIN ON 문법을 사용할 수 있다.
    SELECT Room.RoomID, Class.Time
    FROM Room JOIN Class ON Room.RoomID <> Class.RoomID;

INNER 조인
    - 두 개 이상의 테이블에 모두 나타나는 결과만을 보여준다.

Outer 조인
    LEFT OUTER 조인
       - 관계에서 왼쪽에 위치한 테이블의 모든 레코드를 보여주며, 그에 대응하는 값이 없을 때는 NULL을 표시한다.
    RIGHT OUTER 조인
       - 관계에서 오른쪽에 위치한 테이블의 모든 레코드를 보여주며, 그에 대응하는 값이 없을 때는 NULL을 표시한다.
    FULL OUTER 조인
       - 관계를 맺는 테이블의 모든 레코드를 보여주며, 그에 대응하는 값이 없을 때는 NULL을 표시한다.


top

TAG ,

Write a comment.