복붙노트

[SQL] 의 차이는 왼쪽 조인과 오른쪽 SQL 서버에 참여

SQL

의 차이는 왼쪽 조인과 오른쪽 SQL 서버에 참여

나는 약 SQL 서버에 조인 알고있다.

예를 들어. 두 테이블 표 1, 표 2있다.

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

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

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

표 1의 데이터는 다음과 같습니다 :

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

표 2의 데이터는 다음과 같습니다 :

    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 문에 참여하시기 바랍니다.

해결법

  1. ==============================

    1.

    Select * from Table1 left join Table2 ...
    

    Select * from Table2 right join Table1 ...
    

    실제로 완전히 교환 할 수있다. 표 2 차이를보고 표 (또는 동일한 쌍 표 바로 가입 표 2)에 가입 좌측 단보십시오. 표 2는 표 1에 존재하지 않는 ID로 행을 포함하고 있기 때문에이 쿼리는 더 많은 행을 제공해야합니다.

  2. ==============================

    2.http://www.codeproject.com/KB/database/Visual_SQL_Joins.aspx : CodeProject의은에서 가져온 조인 SQL의 간단한 기본 설명이 이미지가

    http://www.codeproject.com/KB/database/Visual_SQL_Joins.aspx : CodeProject의은에서 가져온 조인 SQL의 간단한 기본 설명이 이미지가

  3. ==============================

    3.데이터를 복용하고있는 표는 '왼쪽'입니다. 당신이 합류 표 'RIGHT'입니다. 왼쪽 가입 : 왼쪽 테이블과 오른쪽 테이블에서 (만)과 일치하는 모든 항목을 가져 가라. RIGHT 가입 : 오른쪽 테이블과 왼쪽 테이블에서 (만)과 일치하는 모든 항목을 가져 가라. 그래서:

    데이터를 복용하고있는 표는 '왼쪽'입니다. 당신이 합류 표 'RIGHT'입니다. 왼쪽 가입 : 왼쪽 테이블과 오른쪽 테이블에서 (만)과 일치하는 모든 항목을 가져 가라. RIGHT 가입 : 오른쪽 테이블과 왼쪽 테이블에서 (만)과 일치하는 모든 항목을 가져 가라. 그래서:

    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  
    
  4. ==============================

    4.(INNER)는 가입 : 두 테이블에서 일치하는 값이 반환 기록을.

    (INNER)는 가입 : 두 테이블에서 일치하는 값이 반환 기록을.

    LEFT (OUTER)는 가입 : 돌아 왼쪽 테이블의 모든 레코드, 오른쪽 테이블에서 일치하는 기록.

    RIGHT (OUTER)는 가입 : 반환을 오른쪽 테이블의 모든 레코드, 왼쪽 테이블에서 일치하는 기록을.

    FULL (OUTER)는 가입 : 반환을 모든 레코드를 하나 왼쪽 또는 오른쪽 테이블에서 일치가있을 때

    예를 들어, 우리는 다음과 같은 기록을 두 개의 테이블이 있다고 가정 할 수 있습니다 :

    id   firstname   lastname
    ___________________________
    1     Ram         Thapa
    2     sam         Koirala
    3     abc         xyz
    6    sruthy       abc
    
    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
    

    왼쪽 가입

    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
    

    오른쪽 가입

    통사론:

    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;
    

    될 것입니다 결과 :

    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;
    

    샘플 테이블에 적용 :

    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 조인의 경우 순서는 중요하지 않습니다

    (LEFT, RIGHT 또는 FULL) OUTER 조인 순서의 문제에 대한

    W3 스쿨에서 더 찾기

  5. ==============================

    5.

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

    이 예시에서 TABLEA에서의 표는 관계의 왼쪽에있다.

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

    그래서 당신이 바로 테이블 (TableB의)에서과 일치하는 데이터가 존재하지 않는 경우에도 왼쪽 테이블 (TABLEA)에서 모든 행을하려는 경우, 당신은 "왼쪽 가입"을 사용할 수 있습니다.

    왼쪽 테이블 (TABLEA)에는 일치가없는 경우에도 오른쪽 테이블 (TableB의)에서 모든 행을하려는 경우, 당신은 잘 조인을 사용합니다.

    따라서, 다음의 질의는 상기 사용 된 것과 동일하다.

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

    6."나는 왜 RIGHT OUTER 전혀 JOIN 구문을 가지고 LEFT OUTER 다음 JOIN 구문을 사용하여 조인 RIGHT OUTER를 다시 쓸 수 있다면?"당신은, 묻는 것 같다 나는 언어의 디자이너는 테이블의 순서를 변경하는 사용자를 강제하는 (그리고 나는 그들이 그랬다면 그들은 비판 한 것이라고 생각) 사용자에 대한 이러한 제한을 배치하지 않았기 때문에이 질문에 대한 대답은, 생각 어떤 상황에서 FROM 절에 단지가 조인 유형을 변경하는 경우.

    "나는 왜 RIGHT OUTER 전혀 JOIN 구문을 가지고 LEFT OUTER 다음 JOIN 구문을 사용하여 조인 RIGHT OUTER를 다시 쓸 수 있다면?"당신은, 묻는 것 같다 나는 언어의 디자이너는 테이블의 순서를 변경하는 사용자를 강제하는 (그리고 나는 그들이 그랬다면 그들은 비판 한 것이라고 생각) 사용자에 대한 이러한 제한을 배치하지 않았기 때문에이 질문에 대한 대답은, 생각 어떤 상황에서 FROM 절에 단지가 조인 유형을 변경하는 경우.

  7. ==============================

    7.당신의 두 명령문은 동일합니다.

    당신의 두 명령문은 동일합니다.

    대부분의 사람들은 단지 그것을 더 직관적 보이기 때문에 LEFT JOIN을 사용하고, 그것은 보편적 인 문법이다 - 나는 모든 RDBMS 지원 RIGHT 가입 생각하지 않습니다.

  8. ==============================

    8.나는 우리가 필요로하고 우리는 노동 조합 B 마이너스 상호 작용 B의 원하는 결과를 얻을 외부 제외의 마지막 그림의 절은 이렇게 가입 어디에서 조건이 있습니다 느낀다 나는 쿼리의 요구가 업데이트되는 느낌

    나는 우리가 필요로하고 우리는 노동 조합 B 마이너스 상호 작용 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
    

    우리가 사용 또는 경우에, 우리는 노동 조합 B의 모든 결과를 얻을 것이다

  9. ==============================

    9.고르다 * 표 1에서   왼쪽 Table1.id = Table2.id에 표 2에 가입

    고르다 * 표 1에서   왼쪽 Table1.id = Table2.id에 표 2에 가입

    왼쪽 가입 첫 번째 쿼리에서 마우스 오른쪽 양면 테이블 표 2에 왼쪽 양면 테이블 표를 비교합니다.

    표 2 만 속성이있는 조건이 true 얻을 표시됩니다 반면 어떤에서 표 1의 모든 속성이 표시됩니다.

    고르다 * 표 2에서   바로 Table1.id = Table2.id의 표에 가입

    마우스 오른쪽 단추로 가입 첫 번째 쿼리에서 왼쪽 양면 테이블 표 2에 오른쪽 양면 테이블 표를 비교합니다.

    표 2 만 속성이있는 조건이 true 얻을 표시됩니다 반면 어떤에서 표 1의 모든 속성이 표시됩니다.

    가입 당신이 왼쪽에 표 1과 표 2를 선언과 오른쪽 각각 왼쪽 첫번째 쿼리에 가입하고, 또한 오른쪽 표 1과 표 2를 선언하고 두 번째 우측에 각각 남아있는 것처럼 쿼리에 테이블 선언의 순서가 다르기 때문에 두 쿼리는 동일한 결과를 줄 것이다 질문.

    이것은 당신이 두 쿼리에서 동일한 결과를 얻고있는 이유입니다. 서로 다른 결과가 다음 각각이 두 개의 쿼리를 실행하고자한다면,

    고르다 * 표 1에서   왼쪽 Table1.id = Table2.id에 표 2에 가입

    고르다 * 표 1에서   바로 Table1.id = Table2.id에 표 2에 가입

  10. ==============================

    10.t1.id = t2.id에 표 2 (T2)에 참여 왼쪽 T1 표에서 선택 * 정의에 의하면 : 왼쪽 선택을 표 1에서 "선택"키워드와 "의"키워드 다음 기준과 일치 표 2에서 열이 언급 한 모든 열을하세요.

    t1.id = t2.id에 표 2 (T2)에 참여 왼쪽 T1 표에서 선택 * 정의에 의하면 : 왼쪽 선택을 표 1에서 "선택"키워드와 "의"키워드 다음 기준과 일치 표 2에서 열이 언급 한 모든 열을하세요.

    마찬가지로, 정의에 의해 : 마우스 오른쪽 버튼을 선택하여 표 2에서 "선택"키워드와 "의"키워드 다음 기준과 일치 표 1에서 열이 언급 한 모든 열을하세요.

    귀하의 질문을 참조하면, 두 테이블의 id는 출력에 던져 질하는 데 필요한 모든 열이 비교된다. 그래서, 1과 2는 모두 테이블에 당신이 순서대로 제 1 및 제 2 테이블에서 ID와 이름 열 네 개의 열이있을 것이다 결과에서 결과로 일반적인 IDS.

    *고르다 * 표 1에서   왼쪽 Table1.id = Table2.id에 표 2에 가입

    상기 식, 그것은 표 2에서, 표 1 및 표 2에서의 ID 일치하여, 레코드 (행) 및 표 1 열의 모든 걸린다.

    고르다 * 표 2에서   바로 ** Table1.id = Table2.id의 표에 가입

    마찬가지로, 상기 식으로부터, 모든 표 2 (기억에서, 표 1 및 표 2에서 일치하는 ID를 함께 표 1 열의 레코드 (행)을 얻어, 이것은 바로 표 2와하지에서 그래서 모든 열을 조인 표 1에서) 간주됩니다.

  11. from https://stackoverflow.com/questions/4715677/difference-between-left-join-and-right-join-in-sql-server by cc-by-sa and MIT license