Programing

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

lottogame 2020. 4. 25. 09:48
반응형

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.


나는 우리가 원하는 결과를 얻도록 마지막 그림의 절에 AND조건 이 필요할 수 있다고 생각 합니다. 검색어를 업데이트해야한다고 생각합니다.whereOuter Excluding JOINA Union B Minus A Interaction B

SELECT <select_list>
FROM Table_A A
FULL OUTER JOIN Table_B B
ON A.Key = B.Key
WHERE A.Key IS NULL AND B.Key IS NULL

를 사용 OR하면 모든 결과를 얻을 수 있습니다.A Union B


Table1.id = Table2.id의 Table1 왼쪽 조인 Table2에서 *를 선택하십시오.

첫 번째 쿼리에서 왼쪽 조인왼쪽 테이블 table1오른쪽 테이블 table2를 비교 합니다.

table1의 모든 속성 이 표시되는 반면 table2 에는 조건이 true 인 속성 만 표시됩니다.

Table1.id = Table2.id의 Table2 오른쪽 조인 Table1에서 *를 선택하십시오.

첫 번째 쿼리에서 오른쪽 조인오른쪽 테이블 table1왼쪽 테이블 table2를 비교 합니다.

table1의 모든 속성 이 표시되는 반면 table2 에는 조건이 true 인 속성 만 표시됩니다.

첫 번째 왼쪽 조인 쿼리 에서 table1table2각각 왼쪽과 오른쪽으로 선언 하고 두 번째 오른쪽 조인 에서 table1table2각각 오른쪽과 왼쪽 으로 선언하는 것처럼 쿼리에서 테이블 선언 순서가 다르기 때문에 두 쿼리 모두 동일한 결과를 제공합니다. 질문.

이것이 두 쿼리에서 동일한 결과를 얻는 이유입니다. 다른 결과를 원한다면이 두 쿼리를 각각 실행하십시오.

Table1.id = Table2.id의 Table1 왼쪽 조인 Table2에서 *를 선택하십시오.

Table1.id = Table2.id의 Table1 오른쪽 조인 Table2에서 *를 선택하십시오.


Select * from Table1 t1 Left Join Table2 t2 on t1.id=t2.id 정의 : 왼쪽 조인은 "on"키워드 다음의 기준과 일치하는 표 1의 "select"키워드로 언급 된 모든 열과 표 2의 열을 선택합니다.

마찬가지로 정의에 의해 : 오른쪽 조인은 "on"키워드 뒤의 기준과 일치하는 표 2의 "select"키워드로 언급 된 모든 열과 표 1의 열을 선택합니다.

귀하의 질문을 참조하면, 두 테이블의 id는 출력에 던져지는 데 필요한 모든 열과 비교됩니다. 따라서 id 1과 2는 두 테이블에서 공통적이며 결과적으로 첫 번째두 번째 테이블의 idname이있는 네 개의 열이 순서대로 표시됩니다.

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

위의 표현식은 표 1의 모든 레코드 (행)와 표 1 및 표 2 의 ID 가 일치하는 열을 표 2에서 가져옵니다.

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

위의 식과 마찬가지로 표 1과 표 2 일치하는 ID 와 표 2 일치하는 테이블 1과 열의 모든 레코드 (행)를 가져옵니다 . (이것은 올바른 조인이므로 table2의 모든 열은 그렇지 않습니다. table1에서 고려됩니다).

참고 URL : https://stackoverflow.com/questions/4715677/difference-between-left-join-and-right-join-in-sql-server

반응형