[sql] SQL Server에서 왼쪽 조인과 오른쪽 조인의 차이점

SQL Server의 조인에 대해 알고 있습니다.

예를 들어. Table1, Table2의 두 테이블이 있습니다.

그들의 테이블 구조는 다음과 같습니다.

create table Table1 (id int, Name varchar (10))

create table Table2 (id int, Name varchar (10))

다음과 같은 Table1 데이터 :

    Id     Name
    -------------
    1      A
    2      B    

다음과 같은 Table2 데이터 :

    Id     Name
    -------------
    1      A
    2      B
    3      C

아래 언급 된 SQL 문을 모두 실행하면 두 출력이 동일합니다.

select *
from Table1
  left join Table2 on Table1.id = Table2.id

select *
from Table2
  right join Table1 on Table1.id = Table2.id

위의 SQL 문에서 왼쪽과 오른쪽 조인의 차이점을 설명하십시오.



답변

Select * from Table1 left join Table2 ...

Select * from Table2 right join Table1 ...

실제로 완전히 호환됩니다. 그러나 차이점을 보려면 Table2 left join Table1(또는 동일한 쌍 Table1 right join Table2)을 시도 하십시오. Table2에는 Table1에없는 id를 가진 행이 있으므로이 쿼리는 더 많은 행을 제공해야합니다.


답변

Codeproject에는 다음과 같은 SQL 조인의 간단한 기본 사항을 설명하는이 이미지가 있습니다. http://www.codeproject.com/KB/database/Visual_SQL_Joins.aspx
SQL 조인 설명


답변

데이터를 가져 오는 테이블은 ‘LEFT’입니다.
가입하려는 테이블이 ‘RIGHT’입니다.
왼쪽 가입 : 왼쪽 테이블에서 모든 항목을 가져오고 오른쪽 테이블에서 일치하는 항목 만 가져옵니다.
RIGHT JOIN : 오른쪽 테이블에서 모든 항목을 가져오고 왼쪽 테이블에서 일치하는 항목 만 가져옵니다.
그래서:

Select * from Table1 left join Table2 on Table1.id = Table2.id  

제공합니다 :

Id     Name
-------------  
1      A
2      B      

그러나:

Select * from Table1 right join Table2 on Table1.id = Table2.id

제공합니다 :

Id     Name
-------------  
1      A
2      B
3      C  

당신은 바로 더 행이 테이블에 적은 행이 테이블에 합류했다

더 많은 행과 함께 테이블에 적은 행이 테이블에 합류 왼쪽, 다시
시도하십시오

 If Table1.Rows.Count > Table2.Rows.Count Then
    ' Left Join
 Else
    ' Right Join
 End If  


답변

(INNER) JOIN : 두 테이블에서 일치하는 값을 가진 레코드를 반환합니다.

LEFT (OUTER) JOIN : 왼쪽 테이블에서 모든 레코드를 반환하고 오른쪽 테이블에서 일치하는 레코드를 반환합니다.

RIGHT (OUTER) JOIN : 오른쪽 테이블에서 모든 레코드를 반환하고 왼쪽 테이블에서 일치하는 레코드를 반환합니다.

FULL (OUTER) JOIN : 왼쪽 또는 오른쪽 테이블에 일치하는 항목이 있으면 모든 레코드를 반환합니다

예를 들어 다음과 같은 레코드가있는 두 개의 테이블이 있다고 가정합니다.

표 A

id   firstname   lastname
___________________________
1     Ram         Thapa
2     sam         Koirala
3     abc         xyz
6    sruthy       abc

표 B

id2   place
_____________
1      Nepal
2      USA
3      Lumbini
5      Kathmandu

내부 조인

참고 : 두 테이블의 교차점을 제공합니다.

내부 조인

통사론

SELECT column_name FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;

샘플 테이블에 적용하십시오.

SELECT TableA.firstName,TableA.lastName,TableB.Place FROM TableA INNER JOIN TableB ON TableA.id = TableB.id2;

결과는 다음과 같습니다.

firstName       lastName       Place
_____________________________________
  Ram         Thapa             Nepal
  sam         Koirala            USA
  abc         xyz              Lumbini

왼쪽 조인

참고 : TableA에서 선택한 모든 행과 TableB에서 선택한 모든 일반 행을 제공합니다.

왼쪽 조인

SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name;

샘플 테이블에 적용하십시오

SELECT TableA.firstName,TableA.lastName,TableB.Place FROM TableA LEFT JOIN TableB ON TableA.id = TableB.id2;

결과는 다음과 같습니다.

firstName   lastName    Place
______________________________
 Ram         Thapa      Nepal
 sam         Koirala    USA
 abc         xyz        Lumbini
sruthy       abc        Null

바로 가입

참고 : TableB에서 선택한 모든 행과 TableA에서 선택한 모든 공통 행을 제공합니다.

바로 가입

통사론:

SELECT column_name(s) FROM table1 RIGHT JOIN table2 ON table1.column_name = table2.column_name;

samole 테이블에 적용하십시오.

SELECT TableA.firstName,TableA.lastName,TableB.Place FROM TableA RIGHT JOIN TableB ON TableA.id = TableB.id2;

결과는 bw입니다.

firstName   lastName     Place
______________________________
Ram         Thapa         Nepal
sam         Koirala       USA
abc         xyz           Lumbini
Null        Null          Kathmandu

전체 가입

참고 : 통합 연산과 동일하며 두 테이블에서 선택한 모든 값을 반환합니다.

완전 가입

통사론:

SELECT column_name(s) FROM table1 FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;

samp [le 테이블에 적용하십시오 :

SELECT TableA.firstName,TableA.lastName,TableB.Place FROM TableA FULL JOIN TableB ON TableA.id = TableB.id2;

결과는 다음과 같습니다.

firstName   lastName    Place
______________________________
 Ram         Thapa      Nepal
 sam         Koirala    USA
 abc         xyz        Lumbini
sruthy       abc        Null
 Null         Null      Kathmandu

몇 가지 사실

INNER 조인의 경우 주문은 중요하지 않습니다

(왼쪽, 오른쪽 또는 전체) 외부 조인의 경우 순서가 중요합니다.

w3schools 에서 더 찾기


답변

select fields
from tableA --left
left join tableB --right
on tableA.key = tableB.key

의 테이블 from이 예제에서는 tableA, 관계의 왼쪽에있다.

tableA <- tableB
[left]------[right]

따라서 왼쪽 테이블 ( tableA) 에서 모든 행을 가져 오려면 오른쪽 테이블 ( tableB)에 일치하는 항목이 없더라도 “왼쪽 조인”을 사용합니다.

오른쪽 테이블 ( tableB) 에서 모든 행을 가져 오려면 왼쪽 테이블 ( tableA)에 일치하는 항목이 없더라도을 사용합니다 right join.

따라서 다음 쿼리는 위에서 사용한 것과 동일합니다.

select fields
from tableB
right join tableA on tableB.key = tableA.key


답변

RIGHT OUTER JOIN사용하는 LEFT OUTER JOIN구문을 다시 작성할 수 있다면 왜 RIGHT OUTER JOIN구문이 있는가?” 라고 묻는 것 같습니다. 이 질문에 대한 답은 언어 디자이너가 사용자에게 그러한 제한을두기를 원하지 않았기 때문에 (그리고 그들이 비판을 받았다고 생각하기 때문에) 사용자가 테이블 순서를 변경하도록 강요했기 때문이라고 생각합니다 에 FROM어떤 상황에서 절 단지가 조인 유형을 변경하는 경우.


답변

두 진술은 동일합니다.

대부분의 사람들 LEFT JOIN은 더 직관적 인 것처럼 보이기 때문에 사용 하고 보편적 인 구문이기 때문에 모든 RDBMS를 지원한다고 생각하지는 않습니다 RIGHT JOIN.