English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SQLite 연결

SQLite 조인구문은 데이터베이스 중 두 개나 많은 테이블의 레코드를 병합하는 데 사용됩니다. JOIN은 각 테이블의 공통 값을 사용하여 두 테이블의 필드를 결합하는 방법입니다.

SQL은 주요 연결 유형이 세 가지입니다-

  • 交叉联接

  • 내부 연결

  • 외부 연결

계속하기 전에, 두 개의 테이블인 COMPANY와 DEPARTMENT를 고려해 보겠습니다. COMPANY 테이블을 채우기 위해 INSERT 문을 보여주었습니다. 따라서 COMPANY 테이블에서 사용할 수 있는 기록 목록을 가정해 보겠습니다-

ID NAME AGE ADDRESS SALARY
----------  ----------  ----------  ----------  ----------
1           폴        32          캘리포니아  20000.0
2           알렌       25          텍사스       15000.0
3           Teddy       23          노르웨이      20000.0
4           Mark        25          리치-몬드   65000.0
5           David       27          텍사스       85000.0
6           Kim         22          서드-할  45000.0
7           제임스       24          休스턴     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 - 交叉联接

CROSS JOIN将第一个表的每一行与第二个表的每一行匹配。如果输入表分别具有x和y行,则结果表将具有x * y行。由于CROSS JOINs可能会生成极大的表,因此必须注意仅在适当的时候使用它们。

以下是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 - 내부 연결

INNER JOIN은 연결 조건을 기반으로 두 테이블을 결합하여 (table1과 table2의 열 값으로 새로운 결과 테이블을 생성합니다. 이 쿼리는 table1와의 각 행과 비교하여 join 조건을 만족하는 모든 행 쌍을 찾습니다. join 조건이 만족되면, A와 B의 각 일치하는 행 쌍의 열 값이 결과 행으로 결합됩니다.2의 각 행을 table

INNER JOIN은 가장 일반적인 기본 연결 유형입니다. INNER 키워드를 사용할 수 있습니다.

아래는 INNER JOIN의 문법입니다:-

SELECT ... FROM table1 [INNER] JOIN table2 ON 조건식 ...

중복을 피하고 문장을 단축하기 위해USING표현식을 통해 INNER JOIN 조건을 선언합니다. 이 표현식은 하나나 여러 개의 열 목록을 지정합니다.

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 - 외부 연결

OUTER JOIN은 INNER JOIN의 확장입니다. SQL 표준은 LEFT, RIGHT, FULL 세 가지 외부 연결 유형을 정의했지만 SQLite는 단지LEFT OUTER JOIN.

외부 연결 조건은 내부 연결 조건과 동일하며 ON, USING 또는 NATURAL 키워드를 사용하여 표현합니다. 초기 결과 테이블의 계산 방법은 동일합니다. 주 JOIN이 계산되면, OUTER JOIN은 하나나 두 개의 테이블에서 모든 연결되지 않은 행을 가져와 NULL로 채우고 그들을 결과 테이블에 추가합니다.

아래는 LEFT OUTER JOIN의 문법입니다:-

SELECT ... FROM table1 LEFT OUTER JOIN table2 ON 조건식 ...

중복을 피하고 문장을 단축하기 위해 USING 표현식을 통해 OUTER JOIN 조건을 선언할 수 있습니다. 이 표현식은 하나나 여러 개의 열 목록을 지정합니다.

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