SQLite 조인: 자연 왼쪽 외부, 내부, 테이블과 교차 예
SQLite 다양한 유형을 지원합니다. SQL INNER JOIN, LEFT OUTER JOIN, CROSS JOIN과 같은 조인입니다. 이 튜토리얼에서 볼 수 있듯이 각 JOIN 유형은 다양한 상황에 사용됩니다.
장점 소개 SQLite JOIN 절
여러 테이블이 있는 데이터베이스에서 작업할 때 이러한 여러 테이블에서 데이터를 가져와야 하는 경우가 많습니다.
JOIN 절을 사용하면 두 개 이상의 테이블이나 하위 쿼리를 조인하여 연결할 수 있습니다. 또한 테이블을 연결해야 하는 열과 조건을 정의할 수 있습니다.
모든 JOIN 절은 다음 구문을 가져야 합니다.
각 조인 절에는 다음이 포함됩니다.
- 왼쪽 테이블인 테이블 또는 하위 쿼리. 조인 절 앞의 테이블 또는 하위 쿼리(왼쪽)
- JOIN 연산자 - 조인 유형(INNER JOIN, LEFT OUTER JOIN 또는 CROSS JOIN)을 지정합니다.
- JOIN 제약 – 조인할 테이블이나 하위 쿼리를 지정한 후 조인 유형에 따라 해당 조건과 일치하는 행이 선택되는 조건인 조인 제약 조건을 지정해야 합니다.
다음 모든 사항에 대해서는 다음을 참고하세요. SQLite JOIN 테이블 예제에서는 sqlite3.exe를 실행하고 다음과 같이 샘플 데이터베이스에 대한 연결을 열어야 합니다.
단계 1) 이 단계에서,
- 내 컴퓨터를 열고 다음 디렉토리로 이동합니다.C:\sqlite"및
- 그런 다음 “sqlite3.exe":
단계 2) 데이터베이스 열기 “튜토리얼SampleDB.db다음 명령을 사용하여:
이제 데이터베이스에서 모든 유형의 쿼리를 실행할 준비가 되었습니다.
SQLite 내부 결합
INNER JOIN은 조인 조건과 일치하는 행만 반환하고 조인 조건과 일치하지 않는 다른 모든 행을 제거합니다.
예시
다음 예에서는 두 테이블을 조인합니다.학생들"및"부서”를 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 = 부서.DepartmentId “. 일치하지 않는 행은 무시되며 결과에 포함되지 않습니다.
- 그래서 IT, 수학, 물리학과가 있는 이 쿼리에서 8명의 학생 중 10명의 학생만 반환되었습니다. 반면 학생 "Jena"와 "George"는 포함되지 않았습니다. 왜냐하면 이들은 departments 테이블의 departmentId 열과 일치하지 않는 null department ID를 가지고 있기 때문입니다. 다음과 같습니다.
SQLite 가입… 사용 중
INNER JOIN은 중복을 피하기 위해 “USING” 절을 사용하여 작성할 수 있으므로 “ON Students.DepartmentId = Departments.DepartmentId”라고 쓰는 대신 “USING(DepartmentID)”만 쓰면 됩니다.
조인 조건에서 비교할 컬럼이 동일한 이름일 때마다 “JOIN .. USING”을 사용할 수 있습니다. 이러한 경우 on 조건을 사용하여 이를 반복할 필요가 없으며 열 이름과 열 이름만 명시하면 됩니다. SQLite 그것을 감지할 것이다.
INNER JOIN과 JOIN의 차이점 .. 사용:
“JOIN … USING”을 사용하면 조인 조건을 작성하지 않고 table1 “INNER JOIN table2 ON table1.cola = table2.cola”를 작성하는 대신 조인된 두 테이블 사이에 공통된 조인 열만 작성합니다. "table1 JOIN table2 USING(cola)"과 같습니다.
예시
다음 예에서는 두 테이블을 조인합니다.학생들"및"부서”를 DepartmentId와 함께 사용하여 다음과 같이 각 학생의 학과 이름을 가져옵니다.
SELECT Students.StudentName, Departments.DepartmentName FROM Students INNER JOIN Departments USING(DepartmentId);
설명
- 이전 예와 달리 “ON Students.DepartmentId = Departments.DepartmentId“. 우리는 방금 “USING(부서 ID)".
- SQLite 조인 조건을 자동으로 추론하고 학생 및 학과 테이블의 DepartmentId를 비교합니다.
- 비교하는 두 열의 이름이 같을 때마다 이 구문을 사용할 수 있습니다.
산출
- 그러면 이전 예제와 정확히 동일한 결과가 제공됩니다.
SQLite 자연 조인
NATURAL JOIN은 JOIN…USING과 유사하지만 두 테이블에 존재하는 모든 열의 값이 같은지 자동으로 테스트한다는 차이점이 있습니다.
INNER JOIN과 NATURAL JOIN의 차이점은 다음과 같습니다.
- INNER JOIN에서는 내부 조인이 두 테이블을 조인하는 데 사용하는 조인 조건을 지정해야 합니다. 반면 자연 조인에서는 조인 조건을 작성하지 않습니다. 아무 조건 없이 두 테이블의 이름만 적으면 됩니다. 그런 다음 자연 조인은 두 테이블에 존재하는 모든 열의 값이 같은지 자동으로 테스트합니다. 자연 조인은 조인 조건을 자동으로 추론합니다.
- NATURAL JOIN에서는 동일한 이름을 가진 두 테이블의 모든 열이 서로 일치됩니다. 예를 들어 두 개의 열 이름이 공통된 두 개의 테이블이 있는 경우(두 개의 열이 두 테이블에 동일한 이름으로 존재함) 자연 조인은 한 열의 값이 아닌 두 열의 값을 비교하여 두 테이블을 조인합니다. 열.
예시
SELECT Students.StudentName, Departments.DepartmentName FROM Students Natural JOIN Departments;
설명
- INNER JOIN에서 했던 것처럼 열 이름으로 조인 조건을 작성할 필요가 없습니다. JOIN USING에서 했던 것처럼 열 이름을 한 번도 쓸 필요가 없었습니다.
- 자연 조인은 두 테이블의 두 열을 모두 검색합니다. 두 테이블 Students 및 Departments 모두의 DepartmentId를 비교하는 조건이 구성되어야 함을 감지합니다.
산출
- Natural JOIN은 INNER JOIN과 JOIN USING 예제에서 얻은 출력과 정확히 동일한 출력을 제공합니다. 예제에서 세 가지 쿼리가 모두 동일하기 때문입니다. 하지만 어떤 경우에는 출력이 Natural Join과 Inner Join에서 다를 수 있습니다. 예를 들어, 이름이 같은 테이블이 더 있는 경우 Natural Join은 모든 열을 서로 일치시킵니다. 하지만 Inner Join은 Join 조건의 열만 일치시킵니다(자세한 내용은 다음 섹션에 있습니다. Inner Join과 Natural Join의 차이점).
SQLite 왼쪽 외부 조인
SQL 표준은 LEFT, RIGHT, FULL의 세 가지 유형의 OUTER JOIN을 정의하지만 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명의 학생이 포함됩니다. 네 번째와 마지막 학생인 Jena와 George의 학과 ID가 Departments 테이블에 존재하지 않는 경우에도 포함됩니다.
- 그리고 이러한 경우 부서 테이블에 DepartmentId 값과 일치하는 DepartmentName이 없기 때문에 Jena와 George 모두의 DepartmentName 값은 "null"이 됩니다.
Van 다이어그램을 사용하여 왼쪽 조인을 사용하는 이전 쿼리에 대해 더 자세히 설명하겠습니다.
LEFT JOIN은 학생이 부서 테이블에 존재하지 않는 부서 ID를 가지고 있는 경우에도 학생 테이블의 모든 학생 이름을 제공합니다. 따라서 쿼리는 INNER JOIN으로 일치하는 행만 제공하는 것이 아니라 학생 테이블인 왼쪽 테이블에서 일치하지 않는 행이 있는 추가 부분을 제공합니다.
일치하는 부서가 없는 학생 이름에는 일치하는 값이 없고 해당 값은 일치하지 않는 행의 값이기 때문에 부서 이름에 "null" 값이 있습니다.
SQLite 크로스 가입
CROSS JOIN은 첫 번째 테이블의 모든 값을 두 번째 테이블의 모든 값과 일치시켜 조인된 두 테이블의 선택된 열에 대한 데카르트 곱을 제공합니다.
따라서 첫 번째 테이블의 모든 값에 대해 두 번째 테이블에서 'n'개의 일치 항목을 얻습니다. 여기서 n은 두 번째 테이블 행의 수입니다.
INNER JOIN 및 LEFT OUTER JOIN과 달리 CROSS JOIN에서는 조인 조건을 지정할 필요가 없습니다. SQLite CROSS JOIN에는 필요하지 않습니다.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 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의 경우 조인 조건을 지정하지 않고 두 테이블 사이에 CROSS JOIN을 결합한 것뿐입니다.
산출
보시다시피 결과는 40개 행입니다. students 테이블의 10개 값이 departments 테이블의 4개 학과와 일치합니다. 다음과 같습니다.
- 학과 테이블의 XNUMX개 학과에 대한 XNUMX개 값이 첫 번째 학생 Michel과 일치합니다.
- 두 번째 학생 John과 일치하는 부서 테이블의 XNUMX개 부서에 대한 XNUMX개 값입니다.
- 학과 테이블의 XNUMX개 학과에 대한 XNUMX개의 값이 세 번째 학생 Jack과 일치합니다…
요약
사용 SQLite JOIN 쿼리를 사용하면 하나 이상의 테이블이나 하위 쿼리를 함께 연결하여 두 테이블이나 하위 쿼리 모두에서 열을 선택할 수 있습니다.