SQLite 결합 방식: 자연 좌측 외측, 내측, 테이블을 사용한 교차 결합

⚡ 스마트 요약

SQLite JOIN 절은 INNER JOIN, JOIN USING, NATURAL JOIN, LEFT OUTER JOIN 및 CROSS JOIN을 사용하여 두 개 이상의 테이블에서 행을 결합합니다. 이를 통해 공유 열을 기준으로 관련 레코드를 일치시키고 정규화된 데이터베이스에서 데이터를 읽을 수 있습니다.

  • 🔗 조인 조항: JOIN 절은 ON 또는 USING 조건으로 정의된 공통 열을 기준으로 두 개 이상의 테이블 또는 하위 쿼리를 연결합니다.
  • 🎯 내부 조인: INNER JOIN은 두 테이블에서 조인 조건이 일치하는 행만 반환하고 일치하지 않는 행은 버립니다.
  • 🧩 천연 성분 사용: JOIN USING은 하나의 공통 열을 지정하는 반면, NATURAL JOIN은 이름이 동일한 모든 열을 자동으로 일치시킵니다.
  • ↩️ 왼쪽 외부 조인: LEFT OUTER JOIN은 왼쪽 테이블의 모든 행을 유지하고 일치하지 않는 오른쪽 테이블 열에는 NULL 값을 채웁니다.
  • ✖️ 크로스 조인: CROSS JOIN은 왼쪽 테이블의 모든 행과 오른쪽 테이블의 모든 행을 짝지어 카르테시안 곱을 반환합니다.
  • 🤖 AI 지원: AI 텍스트-SQL 도구 및 GitHub Copilot을 사용하여 생성합니다. SQLite 일반적인 영어 프롬프트에서 JOIN 쿼리를 실행합니다.

SQLite 가입하기

SQLite 다양한 유형을 지원합니다. SQL INNER JOIN, LEFT OUTER JOIN, CROSS JOIN과 같은 조인입니다. 이 튜토리얼에서 볼 수 있듯이 각 JOIN 유형은 다양한 상황에 사용됩니다.

장점 소개 SQLite JOIN 절

여러 테이블이 있는 데이터베이스에서 작업할 때 이러한 여러 테이블에서 데이터를 가져와야 하는 경우가 많습니다.

JOIN 절을 사용하면 두 개 이상의 테이블이나 하위 쿼리를 조인하여 연결할 수 있습니다. 또한 테이블을 연결해야 하는 열과 조건을 정의할 수 있습니다.

모든 JOIN 절은 다음 구문을 가져야 합니다.

SQLite JOIN 절 구문

각 조인 절에는 다음이 포함됩니다.

  • 왼쪽 테이블인 테이블 또는 하위 쿼리. 조인 절 앞의 테이블 또는 하위 쿼리(왼쪽)
  • JOIN 연산자 - 조인 유형(INNER JOIN, LEFT OUTER JOIN 또는 CROSS JOIN)을 지정합니다.
  • JOIN 제약 – 조인할 테이블이나 하위 쿼리를 지정한 후 조인 유형에 따라 해당 조건과 일치하는 행이 선택되는 조건인 조인 제약 조건을 지정해야 합니다.

다음 모든 사항에 대해서는 다음을 참고하세요. SQLite JOIN 테이블 예제에서는 sqlite3.exe를 실행하고 다음과 같이 샘플 데이터베이스에 대한 연결을 열어야 합니다.

단계 1) 이 단계에서는 내 컴퓨터를 열고 "C:\sqlite" 디렉터리로 이동한 다음 "sqlite3.exe"를 실행합니다.

sqlite 디렉토리에서 sqlite3.exe를 실행하세요.

단계 2) 다음 명령어를 사용하여 "TutorialsSampleDB.db" 데이터베이스를 엽니다.

TutorialsSampleDB 데이터베이스를 엽니다.

이제 데이터베이스에서 모든 유형의 쿼리를 실행할 준비가 되었습니다.

SQLite 내부 결합

SQLite 내부 결합 벤 다이어그램

INNER JOIN은 조인 조건과 일치하는 행만 반환하고 조인 조건과 일치하지 않는 다른 모든 행을 제거합니다.

예시

다음 예시에서는 “Students” 테이블과 “Departments” 테이블을 DepartmentId를 기준으로 조인하여 각 학생의 학과명을 다음과 같이 가져옵니다.

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students
INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

코드 설명

INNER JOIN은 다음과 같이 작동합니다.

  • Select 절에서는 참조된 두 테이블에서 선택하려는 열을 선택할 수 있습니다.
  • INNER JOIN 절은 "From" 절로 참조되는 첫 번째 테이블 뒤에 작성됩니다.
  • 그러면 조인 조건이 ON으로 지정됩니다.
  • 참조된 테이블에 대해 별칭을 지정할 수 있습니다.
  • INNER 단어는 선택사항이므로 JOIN만 작성하면 됩니다.

산출

INNER JOIN은 학생 테이블과 학과 테이블에서 "Students.DepartmentId = Departments.DepartmentId" 조건을 만족하는 레코드를 가져옵니다. 조건을 만족하지 않는 행은 무시되고 결과에 포함되지 않습니다.

SQLite 내부 조인 예시 결과

바로 이러한 이유로 IT, 수학, 물리학과에 속한 10명의 학생 중 8명만 해당 쿼리에서 반환되었습니다. "Jena"와 "George" 학생은 부서 ID가 null이어서 부서 테이블의 departmentId 열과 일치하지 않기 때문에 포함되지 않았습니다. 자세한 내용은 다음과 같습니다.

SQLite INNER JOIN 일치하는 행

SQLite 가입… 사용 중

INNER JOIN은 중복을 피하기 위해 “USING” 절을 사용하여 작성할 수 있으므로 “ON Students.DepartmentId = Departments.DepartmentId”라고 쓰는 대신 “USING(DepartmentID)”만 쓰면 됩니다.

조인 조건에서 비교할 컬럼이 동일한 이름일 때마다 “JOIN .. USING”을 사용할 수 있습니다. 이러한 경우 on 조건을 사용하여 이를 반복할 필요가 없으며 열 이름과 열 이름만 명시하면 됩니다. SQLite 그것을 감지할 것이다.

INNER JOIN과 JOIN .. USING의 차이점:

"JOIN … USING" 구문을 사용하면 조인 조건을 작성하는 대신, 두 테이블에서 공통으로 사용되는 조인 열만 작성합니다. 예를 들어, "table1 JOIN table2 ON table1.cola = table2.cola"와 같이 작성하는 대신 "table1 JOIN table2 USING(cola)"와 같이 작성합니다.

예시

다음 예시에서는 “Students” 테이블과 “Departments” 테이블을 DepartmentId를 기준으로 조인하여 각 학생의 학과명을 다음과 같이 가져옵니다.

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students
INNER JOIN Departments USING(DepartmentId);

설명

  • 이전 예시와 달리, 우리는 “ON Students.DepartmentId = Departments.DepartmentId”라고 쓰지 않고 “USING(DepartmentId)”라고만 썼습니다.
  • SQLite 조인 조건을 자동으로 추론하고 학생 및 학과 테이블의 DepartmentId를 비교합니다.
  • 비교하는 두 열의 이름이 같을 때마다 이 구문을 사용할 수 있습니다.

산출

그러면 이전 예제와 정확히 동일한 결과가 제공됩니다.

SQLite 예시 결과를 사용하여 결합

SQLite 자연 조인

NATURAL JOIN은 JOIN…USING과 유사하지만 두 테이블에 존재하는 모든 열의 값이 같은지 자동으로 테스트한다는 차이점이 있습니다.

INNER JOIN과 NATURAL JOIN의 차이점은 다음과 같습니다.

  • 내부 조인(INNER JOIN)에서는 두 테이블을 조인하는 데 사용할 조인 조건을 지정해야 합니다. 반면 자연 조인(Natural JOIN)에서는 조인 조건을 작성할 필요가 없습니다. 두 테이블의 이름만 입력하면 됩니다. 그러면 자연 조인은 모든 열의 값이 두 테이블 모두에 존재하는지 자동으로 확인합니다. 자연 조인은 조인 조건을 자동으로 추론합니다.
  • NATURAL JOIN에서는 동일한 이름을 가진 두 테이블의 모든 열이 서로 일치됩니다. 예를 들어 두 개의 열 이름이 공통된 두 개의 테이블이 있는 경우(두 개의 열이 두 테이블에 동일한 이름으로 존재함) 자연 조인은 한 열의 값이 아닌 두 열의 값을 비교하여 두 테이블을 조인합니다. 열.

예시

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students
Natural JOIN Departments;

설명

  • (INNER JOIN에서처럼) 열 이름을 사용하여 조인 조건을 작성할 필요가 없습니다. (JOIN USING에서처럼) 열 이름을 한 번도 작성할 필요가 없습니다.
  • 자연 조인은 두 테이블의 두 열을 모두 검색합니다. 두 테이블 Students 및 Departments 모두의 DepartmentId를 비교하는 조건이 구성되어야 함을 감지합니다.

산출

내추럴 조인은 이너 조인 및 조인 USING 예제와 동일한 결과를 제공합니다. 왜냐하면 예제에서는 세 가지 쿼리가 모두 동일하기 때문입니다. 하지만 경우에 따라 내추럴 조인과 이너 조인의 결과가 다를 수 있습니다. 예를 들어, 같은 이름을 가진 테이블이 여러 개 있는 경우 내추럴 조인은 모든 열을 서로 비교합니다. 그러나 이너 조인은 조인 조건에 포함된 열만 비교합니다.

SQLite 내추럴 조인 예시 결과

SQLite 왼쪽 외부 조인

SQL 표준은 LEFT, RIGHT, FULL의 세 가지 유형의 외부 조인을 정의하지만, SQLite 자연스러운 LEFT OUTER JOIN만 지원합니다.

LEFT OUTER JOIN을 사용하면 왼쪽 테이블에서 선택한 열의 모든 값이 쿼리 결과에 포함됩니다. 따라서 값이 조인 조건과 일치하는지 여부와 관계없이 모든 값이 결과에 포함됩니다.

따라서 왼쪽 테이블에 'n'개의 행이 있으면 쿼리 결과에도 'n'개의 행이 포함됩니다. 하지만 오른쪽 테이블에서 가져오는 열의 값 중 조인 조건과 일치하지 않는 값이 있으면 해당 열에는 "null" 값이 포함됩니다.

따라서 왼쪽 조인의 행 수와 동일한 수의 행을 얻게 됩니다. 그러면 두 테이블(예: INNER JOIN 결과)에서 일치하는 행과 왼쪽 테이블에서 일치하지 않는 행을 얻을 수 있습니다.

예시

다음 예에서 우리는 두 테이블 "Students"와 "Departments"를 조인하기 위해 "LEFT JOIN"을 시도할 것입니다:

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students             -- this is the left table
LEFT JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

설명

  • SQLite LEFT JOIN 구문은 INNER JOIN과 동일합니다. 두 테이블 사이에 LEFT JOIN을 작성한 다음 ON 절 뒤에 조인 조건이 옵니다.
  • from 절 다음의 첫 번째 테이블은 왼쪽 테이블입니다. 반면 자연 LEFT JOIN 다음에 지정된 두 번째 테이블은 오른쪽 테이블입니다.
  • OUTER 절은 선택 사항입니다. LEFT 자연 OUTER JOIN은 LEFT JOIN과 동일합니다.

산출

보시다시피 학생 테이블의 모든 행, 즉 총 10명의 학생이 포함되어 있습니다. 네 번째 학생인 제나와 마지막 학생인 조지의 departmentId가 학과 테이블에 존재하지 않더라도 이들도 포함됩니다.

이 경우, 부서 테이블에 해당 departmentId 값과 일치하는 departmentName이 없기 때문에 Jena와 George 모두의 departmentName 값은 "null"이 됩니다.

SQLite LEFT OUTER JOIN 예시 결과

이제 벤 다이어그램을 이용하여 왼쪽 조인을 사용한 이전 쿼리를 더 자세히 설명해 보겠습니다.

SQLite 왼쪽 외부 결합 벤 다이어그램

LEFT JOIN은 학생 테이블에 있는 모든 학생 이름을 가져옵니다. 학생의 학과 ID가 departments 테이블에 존재하지 않는 경우에도 마찬가지입니다. 따라서 INNER JOIN처럼 일치하는 행만 가져오는 것이 아니라, 왼쪽 테이블(학생 테이블)에서 일치하지 않는 행까지 포함하여 전체 결과를 반환합니다.

일치하는 부서가 없는 학생 이름에는 일치하는 값이 없고 해당 값은 일치하지 않는 행의 값이기 때문에 부서 이름에 "null" 값이 있습니다.

SQLite 크로스 가입

CROSS JOIN은 첫 번째 테이블의 모든 값을 두 번째 테이블의 모든 값과 일치시켜 조인된 두 테이블의 선택된 열에 대한 데카르트 곱을 제공합니다.

따라서 첫 번째 테이블의 모든 값에 대해 두 번째 테이블에서 'n'개의 일치 항목을 얻습니다. 여기서 n은 두 번째 테이블 행의 수입니다.

INNER JOIN 및 LEFT OUTER JOIN과 달리 CROSS JOIN에서는 조인 조건을 지정할 필요가 없습니다. SQLite 크로스 조인에는 필요하지 않습니다.

The SQLite 첫 번째 표의 모든 값과 두 번째 표의 모든 값을 결합하여 논리적인 결과 집합을 얻게 됩니다.

예를 들어, 첫 번째 테이블에서 열(colA)을 선택하고 두 번째 테이블에서 열(colB)을 선택했다고 가정해 보겠습니다. colA에는 두 개의 값(1,2)이 있고 colB에도 두 개의 값(3,4)이 있습니다.

그러면 CROSS JOIN의 결과는 XNUMX개의 행이 됩니다.

  • colA의 첫 번째 값인 1과 colB의 두 값(3,4)((1,3), (1,4))을 결합하여 두 행을 만듭니다.
  • 마찬가지로 colA의 두 번째 값인 2와 colB의 두 값인 (3,4)인 (2,3), (2,4)를 결합하여 두 행을 만듭니다.

예시

다음 쿼리에서는 Students 테이블과 Departments 테이블 사이에 CROSS JOIN을 시도합니다.

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students
CROSS JOIN Departments;

설명

  • . SQLite 여러 테이블에서 선택하려면 Students 테이블에서 "studentname" 열 두 개를 선택하고 Departments 테이블에서 "departmentName" 열 두 개를 선택했습니다.
  • 크로스 조인의 경우, 조인 조건을 따로 지정하지 않고 두 테이블을 중간에 CROSS JOIN으로 결합했습니다.

산출

보시다시피 결과는 40개 행입니다. students 테이블의 10개 값이 departments 테이블의 4개 학과와 일치합니다. 다음과 같습니다.

  • 학과 테이블의 XNUMX개 학과에 대한 XNUMX개 값이 첫 번째 학생 Michel과 일치합니다.
  • 학과표에 있는 네 학과의 값이 두 번째 학생인 존과 일치했습니다.
  • 학과표에 있는 네 학과의 네 가지 값이 세 번째 학생인 잭과 일치했습니다… 이런 식으로 계속됩니다.

SQLite 크로스 조인 예시 결과

자주 묻는 질문

SQLite 2022년에 출시된 버전 3.39.0에서 RIGHT JOIN 및 FULL OUTER JOIN 지원이 추가되었습니다. 이전 빌드에서는 swap 명령어를 사용하여 RIGHT JOIN을 에뮬레이션할 수 있습니다.ping LEFT JOIN을 사용하여 테이블을 결합하고, 두 개의 LEFT JOIN을 UNION으로 결합하여 FULL OUTER JOIN을 수행할 수 있습니다.

셀프 조인은 테이블 별칭을 사용하여 테이블을 자기 자신과 조인하는 방식입니다. 즉, 한 테이블은 왼쪽 테이블 역할을 하고 다른 테이블은 오른쪽 테이블 역할을 합니다. 셀프 조인은 직원과 관리자를 매칭하는 것처럼 동일한 테이블 내의 행들을 비교하는 데 유용합니다.

네. 하나의 SELECT 문에 여러 개의 JOIN 절을 연결할 수 있으며, 각 JOIN 절에는 ON 또는 USING 조건을 지정할 수 있습니다. 예를 들어, FROM A JOIN B ON … JOIN C ON … 와 같이 사용할 수 있습니다. SQLite 왼쪽에서 오른쪽으로 테이블을 결합하여 하나의 통합 결과 집합을 만듭니다.

JOIN만 쓰는 것은 INNER JOIN과 동일합니다. SQLite두 구문 모두 ON 또는 USING 조건을 만족하는 행만 유지하므로 일치하지 않는 행은 삭제됩니다. INNER 키워드는 선택 사항이므로 JOIN과 INNER JOIN은 서로 바꿔 사용할 수 있습니다.

조인 조건에 사용되는 열에 인덱스를 생성하면 다음과 같은 이점을 얻을 수 있습니다. SQLite 전체 테이블을 스캔하지 않고 행만 일치시키므로 대규모 데이터 세트에서 조인 속도가 향상됩니다. 외래 키 열에 인덱싱하고 ANALYZE를 실행하여 통계를 새로 고치면 조인 쿼리 성능이 더욱 향상됩니다.

INNER JOIN은 두 테이블에서 일치하는 행만 반환합니다. LEFT OUTER JOIN은 왼쪽 테이블의 모든 행과 일치하는 오른쪽 테이블의 행을 반환하고, 일치하지 않는 오른쪽 열은 NULL로 채웁니다. 따라서 LEFT JOIN은 왼쪽 테이블의 행을 절대 삭제하지 않습니다.

예. AI 기반 텍스트-SQL 변환 도우미는 일반 영어 요청을 SQL 문으로 변환합니다. SQLite INNER, LEFT, NATURAL 및 CROSS JOIN 문을 사용하세요. 테이블 이름, 열 이름 및 관계를 제공하면 정확도가 향상되며, 생성된 모든 조인은 실제 데이터에 적용하기 전에 검토 및 테스트해야 합니다.

GitHub 부조종사 제안 SQLite 편집기에서 JOIN 쿼리를 인라인으로 실행하려면 다음과 같이 하세요. VS CodeINNER JOIN, LEFT JOIN, 그리고 ON 또는 USING 절을 완성합니다. 주변 스키마와 주석을 읽어들이므로, 제안하는 테이블과 열 이름은 실제 테이블 및 열 이름을 재사용합니다.

이 게시물을 요약하면 다음과 같습니다.