Computer >> 컴퓨터 >  >> 프로그램 작성 >> SQL Server

SQL 서버에서 조인

SQL Server(Transact-SQL)에서 JOIN은 여러 테이블에서 데이터를 검색하는 데 사용되며 SQL 명령에서 둘 이상의 테이블이 함께 연결될 때 발생합니다. 다음은 SQL Server의 4가지 유형의 JOIN입니다.

  1. 내부 조인 - 단순 연결 형식이라고도 함
  2. 왼쪽 외부 조인 - 또는 왼쪽 조인
  3. 오른쪽 외부 조인 - 또는 RIGHT JOIN
  4. 완전한 외부 조인 - 또는 전체 조인

이제 SQL Server의 JOIN을 더 잘 이해할 수 있도록 구문, 그림 및 예를 살펴보겠습니다.

내부 조인

특정 명령에서 이미 INNER JOIN을 사용했을 가능성이 큽니다. 연결 조건이 충족되면 테이블의 모든 행을 반환하는 가장 일반적인 연결 유형입니다.

INNER JOIN 구문

  SELEC T cot 
FROM bang1
INNER JOIN bang2
ON bang1. cot = bang2.cot;

SQL 서버에서 조인
INNER JOIN 일러스트 이미지

반환된 결과는 state1과 bang2 사이의 공통 레코드입니다.

INNER JOIN의 예

  SELECT nhacung.nhacung _id, nhacung.nhacung_ten, donhang.donhang_ngay 
FROM nhacung
INNER JOIN donhang
ON nhacung.nhacung_id = d onhang.nhacung_id;

위의 예에서 반환된 결과는 nhacung_id의 값이 2개의 테이블과 같을 때 'supplier' 테이블과 'order' 테이블의 정보 행입니다.

이해를 돕기 위해 특정 데이터가 포함된 예를 살펴보겠습니다.

nhacung 테이블에는 nhacung_id 및 nhacung_ten의 2가지 정보 필드가 있습니다.

nhacung_id 나쿵_텐 10000 IBM 10001 Hewlett Packard 10002 Microsoft 10003 NVIDIA

donhang 테이블은 donhang_id, nhacung_id 및 donhang_ngay의 3개 필드로 구성됩니다.

donhang_id nhacung_id donhang_ngay 500125 10000 2003/05/12 500126 10001 2003/05/13 500127 10004 2003/05/14

SELECT 명령을 실행하는 경우(아래 INNER JOIN 사용)

  SELECT nhacung. nhacung_id, nhacung.nhacung_ten, donhang.donhang_ngay 
FROM nhacung
INNER JOIN donhang
ON nhacung.nhacung_ id = donhang.nhacung_id;

반환된 결과 집합입니다.

nhacung_id 10 IBM donhang_ngay 10000 2003/05/12 10001 Hewlett Packard 2003/05/13

nhacung_id(10002 및 10003)가 1개의 테이블에서만 사용 가능하기 때문에 테이블에서 Microsoft 및 NVIDIA 제품이 삭제되었습니다. nhacung_id 10004가 nhacung 테이블에 없기 때문에 donhang 테이블의 행 500127(donhang_id)이 제거되었습니다.

INNER JOIN의 이전 구문

INNER JOIN은 아래와 같이 기존 구문으로 다시 작성할 수 있지만 INNER JOIN 키워드가 포함된 구문을 사용하는 것이 좋습니다.

  SELECT music ung.nhacung_id, nhacung.nhacung_ten, donhang.donhang_ngay 
FROM donhang, nhacung
WHERE nhacung.n hacung_id = donhang.nhacung_id;

왼쪽 외부 조인

일부 데이터베이스는 LEFT OUTER JOIN 대신 LEFT JOIN을 사용합니다. 이 연결 유형은 ON 조건에서 왼쪽 패널의 행을 반환하고 설정된 조건을 충족하는 나머지 테이블만 사용합니다.

구문 왼쪽 조인

  SELE CT cot 
FROM bang1
LEFT [OUTER] JOIN bang2
ON bang1.co t = bang2.cot;

SQL 서버에서 조인
파란색 영역의 결과로 LEFT JOIN 표시

반환된 결과는 state1과 state1에 할당된 bang2에 있는 레코드(그림의 파란색 영역)로 구성됩니다.

LEFT JOIN의 예

  SELECT nh acung.nhacung_id, nhacung.nhacung_ten, donhang.donhang_ngay 
FROM nhacung
LEFT OUTER JOIN donhang
ON nhacung.nhac ung_id = donhang.nhacung_id;

위의 예는 테이블의 모든 행과 donhang 테이블의 요구 사항을 충족하는 행만 반환합니다. 테이블의 nhacung_id 값이 donhang 테이블에 없으면 donhang의 모든 필드가 결과 테이블에 결과를 표시합니다.

아래는 구체적인 예입니다. 테이블에는 nhacung_id 및 nhacung_ten이 포함되어 있습니다.

nhacung_id 나쿵_텐 10000 IBM 10001 Hewlett Packard 10002 Microsoft 10003 NVIDIA

Donhang 테이블에는 donhang_id, nhacung_id 및 donhang_ngay가 포함됩니다.

donhang_id nhacung_id donhang_ngay 500125 10000 2003/05/12 500126 10001 2003/05/13

아래 SELECT 명령을 실행하는 경우:

  SELECT nhacu ng.nhacung_id, nhacung.nhacung_ten, donhang.donhang_ngay 
FROM nhacung
LEFT OUTER JOIN donhang
ON nhacung.nhacun g_id = donhang.nhacung_id;

결과는 다음과 같습니다.

nhacung_id 나쿵_텐 10000 IBM donhang_ngay 2003/05/12 10001 Hewlett Packard 2003/05/13 10002 Microsoft 10003 NVIDIA

Microsoft 및 NVIDIA 행은 LEFT OUTER JOIN을 사용하기 때문에 결과 집합에 여전히 있습니다(왼쪽에 있는 모든 테이블 가져오기). . 한편, 이 기록의 donhang_ngay는 유효합니다.

오른쪽 외부 조인

일부 데이터베이스는 RIGHT OUTER JOIN 대신 RIGHT JOIN을 사용합니다. 이 연결 유형은 ON 조건에서 오른쪽 테이블의 행을 반환하고 설정된 조건을 충족하는 나머지 테이블만 가져옵니다.

구문 RIGHT JOIN

  SELECT c ot 
FROM bang1
RIGHT [OUTER] JOIN bang2
ON bang1.cot = bang2.cot;

SQL 서버에서 조인
그림 오른쪽 연결

반환된 결과는 bang2를 포함하고 레코드는 state1에 bang2에 할당됩니다(그림의 파란색 영역).

오른쪽 조인의 예

  SELECT don hang.donhang_id, donhang.donhang_ngay, nhacung.nhacung_ten 
FROM nhacung
RIGHT OUTER JOIN donhang
ON nhacung.nha cung_id = donhang.nhacung_id;

반환된 결과는 donhang 테이블의 모든 행과 nhacung 테이블의 요구 사항을 충족하는 행만 반환됩니다.

donhang 테이블의 nhacung_id 값이 테이블에 없으면 목록의 모든 필드가 결과 테이블에 표시됩니다.

아래는 구체적인 예입니다. 테이블에는 nhacung_id 및 nhacung_ten이 포함되어 있습니다.

nhacung_id 나쿵_텐 10000 Apple 10001 Google

Donhang 테이블에는 donhang_id, nhacung_id 및 donhang_ngay가 포함됩니다.

donhang_id nhcung_id donhang_ngay 500125 10000 2003/08/12 500126 10001 2003/08/13 500127 10002 2003/08/14

아래의 SELECT 명령을 실행하는 경우:

  SELECT donhang.don hang_id, donhang.donhang_ngay, nhacung.nhacung_ten 
FROM nhacung
RIGHT OUTER JOIN donhang
ON nhacung.nhacung_id = donhang.nhacung_id;

결과는 다음과 같습니다.

donhang_id donhang_ngay nhacung_id 500125 2003/08/12 Apple 500126 2003/08/13 Google 500127 2003/08/14

행 500127(donhang_id)은 JOIN이 OUTER이기 때문에 결과 테이블에 여전히 있습니다. 사용. 해당 레코드의 nhacung_ten에 값이 포함되어 있습니다.

완전한 외부 조인

일부 데이터베이스는 FULL OUTER JOIN 대신 FULL JOIN을 사용합니다. 이 연결 유형은 좌우 테이블의 모든 행과 조건에 맞지 않는 조건으로 설정된 NULL 값을 반환합니다.

구문 전체 조인

  SELE CT cot 
FROM bang1
FULL [OUTER] JOIN bang2
ON bang1.c ot = bang2.cot;

SQL 서버에서 조인
풀 JOIN을 녹색 영역의 결과로 설명

반환된 결과에는 bang1 및 bang2의 모든 레코드가 포함됩니다.

전체 조인의 예

  SELECT nhacung. nhacung_id, nhacung.nhacung_ten, donhang.donhang_ngay 
FROM nhacung
FULL OUTER JOIN donhang
ON nhacung.nhacung_i d = donhang.nhacung_id;

위의 예는 테이블과 돈행의 모든 ​​행을 반환하지만 조건이 충족되지 않으면 값이 결과 테이블로 설정됩니다.

음악 패널의 nhacung_id가 donhang 테이블에 없거나 donhang 테이블의 nhacung_id 값이 음악 패널에 없는 경우 정보 필드가 표시됩니다.

아래는 FULL OUTER JOIN의 구체적인 예입니다. 테이블에는 nhacung_id 및 nhacung_ten이 포함되어 있습니다.

nhacung_id 나쿵_텐 10000 IBM 10001 Hewlett Packard 10002 Microsoft 10003 NVIDIA

Donhang 테이블에는 donhang_id, nhacung_id 및 donhang_ngay가 포함됩니다.

donhang_id nhacung_id donhang_ngay 500125 10000 2003/08/12 500126 10001 2003/08/13 500127 10004 2003/08/14

아래의 SELECT 명령을 실행하는 경우:

  SELECT nhacung .nhacung_id, nhacung.nhacung_ten, donhang.donhang_ngay 
FROM nhacung
FULL OUTER JOIN donhang
ON nhacung.nhacung_i d = donhang.nhacung_id;

결과는 다음과 같습니다.

nhacung_id 나쿵_텐 10,000 donhang_ngay IBM 2003/08/12 10001 Hewlett Packard 2003/08/13 10002 Microsoft 10003 NVIDIA 2003/08/14

Microsoft 및 NVIDIA 제품은 다음을 사용하고 있기 때문에 결과 집합에 있습니다. 전체 외부 조인. 그러면 이 레코드의 donhang_ngay에 값이 포함됩니다. nhacung_id의 행은 10004이며 결과 테이블에도 있지만 이러한 레코드의 nhacung_id 및 nhacung_ten에는 값이 포함되어 있습니다.