SQLite-가입

SQLite Joins절은 데이터베이스에있는 둘 이상의 테이블에서 레코드를 결합하는 데 사용됩니다. JOIN은 각각에 공통된 값을 사용하여 두 테이블의 필드를 결합하는 수단입니다.

SQL은 세 가지 주요 유형의 조인을 정의합니다.

  • 크로스 조인
  • 내부 조인
  • 외부 조인

계속하기 전에 COMPANY 및 DEPARTMENT 테이블 두 개를 살펴 보겠습니다. COMPANY 테이블을 채우는 INSERT 문을 이미 보았습니다. 따라서 COMPANY 테이블에서 사용 가능한 레코드 목록을 가정 해 보겠습니다.

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

다른 테이블은 다음과 같은 정의를 가진 DEPARTMENT입니다-

CREATE TABLE DEPARTMENT(
   ID INT PRIMARY KEY      NOT NULL,
   DEPT           CHAR(50) NOT NULL,
   EMP_ID         INT      NOT NULL
);

다음은 DEPARTMENT 테이블을 채우는 INSERT 문 목록입니다.

INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES (1, 'IT Billing', 1 );

INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES (2, 'Engineering', 2 );

INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES (3, 'Finance', 7 );

마지막으로, DEPARTMENT 테이블에 다음과 같은 레코드 목록이 있습니다.

ID          DEPT        EMP_ID
----------  ----------  ----------
1           IT Billing  1
2           Engineering 2
3           Finance     7

크로스 조인

CROSS JOIN은 첫 번째 테이블의 모든 행을 두 번째 테이블의 모든 행과 일치시킵니다. 입력 테이블에 각각 x 및 y 행이있는 경우 결과 테이블에는 x * y 행이 있습니다. CROSS JOIN은 매우 큰 테이블을 생성 할 가능성이 있으므로 적절한 경우에만 사용하도록주의해야합니다.

다음은 CROSS JOIN의 구문입니다-

SELECT ... FROM table1 CROSS JOIN table2 ...

위의 표를 기반으로 다음과 같이 CROSS JOIN을 작성할 수 있습니다.

sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY CROSS JOIN DEPARTMENT;

위의 쿼리는 다음 결과를 생성합니다-

EMP_ID      NAME        DEPT
----------  ----------  ----------
1           Paul        IT Billing
2           Paul        Engineering
7           Paul        Finance
1           Allen       IT Billing
2           Allen       Engineering
7           Allen       Finance
1           Teddy       IT Billing
2           Teddy       Engineering
7           Teddy       Finance
1           Mark        IT Billing
2           Mark        Engineering
7           Mark        Finance
1           David       IT Billing
2           David       Engineering
7           David       Finance
1           Kim         IT Billing
2           Kim         Engineering
7           Kim         Finance
1           James       IT Billing
2           James       Engineering
7           James       Finance

내부 조인

INNER JOIN은 join-predicate를 기반으로 두 테이블 (table1 및 table2)의 열 값을 결합하여 새 결과 테이블을 만듭니다. 쿼리는 table1의 각 행을 table2의 각 행과 비교하여 join-predicate를 충족하는 모든 행 쌍을 찾습니다. join-predicate가 충족되면 일치하는 A 및 B 행 쌍의 열 값이 결과 행으로 결합됩니다.

INNER JOIN은 가장 일반적인 기본 유형의 조인입니다. INNER 키워드를 선택적으로 사용할 수 있습니다.

다음은 INNER JOIN의 구문입니다-

SELECT ... FROM table1 [INNER] JOIN table2 ON conditional_expression ...

중복을 방지하고 구문을 짧게 유지하기 위해 INNER JOIN 조건을 다음과 같이 선언 할 수 있습니다. USING표현. 이 표현식은 하나 이상의 열 목록을 지정합니다.

SELECT ... FROM table1 JOIN table2 USING ( column1 ,... ) ...

NATURAL JOIN은 JOIN...USING, 그것은 자동으로 두 테이블에 존재하는 모든 열의 값 사이의 동등성을 테스트합니다-

SELECT ... FROM table1 NATURAL JOIN table2...

위의 테이블을 기반으로 다음과 같이 INNER JOIN을 작성할 수 있습니다.

sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT
   ON COMPANY.ID = DEPARTMENT.EMP_ID;

위의 쿼리는 다음 결과를 생성합니다-

EMP_ID      NAME        DEPT
----------  ----------  ----------
1           Paul        IT Billing
2           Allen       Engineering
7           James       Finance

외부 조인

OUTER JOIN은 INNER JOIN의 확장입니다. SQL 표준은 LEFT, RIGHT 및 FULL의 세 가지 유형의 OUTER JOIN을 정의하지만 SQLite는LEFT OUTER JOIN.

OUTER JOIN에는 ON, USING 또는 NATURAL 키워드를 사용하여 표현 된 INNER JOIN과 동일한 조건이 있습니다. 초기 결과 테이블은 동일한 방식으로 계산됩니다. 기본 JOIN이 계산되면 OUTER JOIN은 하나 또는 두 테이블에서 조인되지 않은 행을 가져 와서 NULL로 채운 다음 결과 테이블에 추가합니다.

다음은 LEFT OUTER JOIN의 구문입니다-

SELECT ... FROM table1 LEFT OUTER JOIN table2 ON conditional_expression ...

중복을 방지하고 구문을 더 짧게 유지하기 위해 OUTER JOIN 조건은 USING 표현식으로 선언 할 수 있습니다. 이 표현식은 하나 이상의 열 목록을 지정합니다.

SELECT ... FROM table1 LEFT OUTER JOIN table2 USING ( column1 ,... ) ...

위의 테이블을 기반으로 다음과 같이 내부 조인을 작성할 수 있습니다.

sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT
   ON COMPANY.ID = DEPARTMENT.EMP_ID;

위의 쿼리는 다음 결과를 생성합니다-

EMP_ID      NAME        DEPT
----------  ----------  ----------
1           Paul        IT Billing
2           Allen       Engineering
            Teddy
            Mark
            David
            Kim
7           James       Finance