[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
답변
데이터를 가져 오는 테이블은 ‘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
.