복붙노트

[SQL] 자연의 차이 가입 및 내부 조인

SQL

자연의 차이 가입 및 내부 조인

자연이 가입하고 내부 조인의 차이점은 무엇입니까?

해결법

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

    1.INNER 사이의 한 가지 중요한 차이점은 가입과 자연이 돌려 열 수 있습니다 가입.

    INNER 사이의 한 가지 중요한 차이점은 가입과 자연이 돌려 열 수 있습니다 가입.

    치다:

    TableA                           TableB
    +------------+----------+        +--------------------+    
    |Column1     | Column2  |        |Column1  |  Column3 |
    +-----------------------+        +--------------------+
    | 1          |  2       |        | 1       |   3      |
    +------------+----------+        +---------+----------+
    

    내부는 TableA의의 가입 및 열 1에 TableB의 반환합니다

    SELECT * FROM TableA AS a INNER JOIN TableB AS b USING (Column1);
    SELECT * FROM TableA AS a INNER JOIN TableB AS b ON a.Column1 = b.Column1;
    
    +------------+-----------+---------------------+    
    | a.Column1  | a.Column2 | b.Column1| b.Column3|
    +------------------------+---------------------+
    | 1          |  2        | 1        |   3      |
    +------------+-----------+----------+----------+
    

    자연은 TableA의의 가입 및 열 1에 TableB의 반환합니다 :

    SELECT * FROM TableA NATURAL JOIN TableB
    +------------+----------+----------+    
    |Column1     | Column2  | Column3  |
    +-----------------------+----------+
    | 1          |  2       |   3      |
    +------------+----------+----------+
    

    반복 된 열은 피할 수있다.

    (표준 문법에서 AFAICT, 당신은 조인 자연에 합류 열을 지정할 수 없으며, 가입되어 엄격하게 이름을 기반 또한 위키 백과를 참조하십시오.).

    (; A와 B 부분은 열 이름에 없을 것이다이 내부에서 속임수 출력 조인입니다.. 당신은 단지 제목으로 1 열, 2 열, 1 열, 3 열이있을 것이다.)

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

    2.자연 조인 때문에이 전염병처럼 조인 자연 사용하지 않는 것입니다 :

    자연 조인 때문에이 전염병처럼 조인 자연 사용하지 않는 것입니다 :

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

    3.자연은 조인은 같은 이름의 간단하고 일치 필드 조인하는 가정으로, 피하기 입력 단지 바로 가기입니다.

    자연은 조인은 같은 이름의 간단하고 일치 필드 조인하는 가정으로, 피하기 입력 단지 바로 가기입니다.

    SELECT
      *
    FROM
      table1
    NATURAL JOIN
      table2
        -- implicitly uses `room_number` to join
    

    와 같다...

    SELECT
      *
    FROM
      table1
    INNER JOIN
      table2
        ON table1.room_number = table2.room_number
    

    바로 가기 형식으로 할 수없는 무엇, 그러나, 조인 더 복잡 ...

    SELECT
      *
    FROM
      table1
    INNER JOIN
      table2
        ON (table1.room_number = table2.room_number)
        OR (table1.room_number IS NULL AND table2.room_number IS NULL)
    
  4. ==============================

    4.SQL은 여러 가지면에서 관계형 모델에 충실하지 않습니다. 이 컬럼 순서 등에 의존하기 때문에 SQL 쿼리의 결과는 '익명'(이름) 열, 중복 행, 널 (null)을 중복 된 이름을 가진 열이있을 수 있으므로 관계없는 등 SQL은 관계로하지 대접 테이블을한다

    SQL은 여러 가지면에서 관계형 모델에 충실하지 않습니다. 이 컬럼 순서 등에 의존하기 때문에 SQL 쿼리의 결과는 '익명'(이름) 열, 중복 행, 널 (null)을 중복 된 이름을 가진 열이있을 수 있으므로 관계없는 등 SQL은 관계로하지 대접 테이블을한다

    SQL에 가입 자연의 뒤에 아이디어는 쉽게 관계형 모델에 더 충실 할 수 있도록하는 것입니다. 자연의 결과는 열 때문에 아니, 이름의 중복 익명 열이 두 가지 테이블로 가입. 마찬가지로, UNION은 대응하는 기존 UNION 구문의 열 순서에 주소 SQL의 의존도에 제공되는 해당 예외입니다.

    그러나, 모든 프로그래밍 기법으로 유용하는 훈련이 필요합니다. 같은 이름 (이 SQL의 열 이름을 변경하기위한 구문은 자세한 것을 수치이지만 부작용베이스의 열 이름을 지정할 때 훈련을 장려하는 것입니다와 열을 암시 조인 때문에 성공적인 자연에 대한 하나 개의 요구 사항은 지속적으로 열을 명명 가입 테이블 및 뷰 :

    참고 SQL 자연 조인이있는 동등 조인 ** 그러나이 유용성에는 줄이 없습니다. 자연이 유일한 조인 유형은 SQL에 지원 가입하면 여전히 관계형 완료 될 것이라고 생각해.

    그것은 모든 자연 INNER JOIN을 투사 (SELECT)를 사용하여 기록 될 수있다 조인 실제로 사실이지만, 어떤 INNER 제품 (CROSS 조인) 및 제한 ()를 이용하여 기록 될 수있다 JOIN 것도 사실이다; CROSS은 가입으로 자연에 공통의 열 이름과 테이블 사이에 가입하는 것이 더 노트는 동일한 결과를 제공 할 것입니다. 당신은 단지 다음 자연이 가입 관계 (그리고 왜 지금하지?!)입니다 결과에 관심이 그래서 경우는 당신이 필요로하는 입력 조인. 물론, 그러한 INNER 같은 언어 설계의 관점에서 shorthands이 가입하고 CROSS 자신의 가치가 가입뿐만 아니라 거의 모든 SQL 쿼리가 10, 구문 다른, 그러나 의미 적으로 동등한 방법으로 작성 될 수 있음을 고려하고이 SQL을 만드는 것입니다 것은 사실이다 그래서 열심히 옵티 마이저를 개발한다.

    여기에 의미 동일 (보통 부품 공급 업체 데이터베이스를 사용) 몇 가지 예를 들어 쿼리는 다음과 같습니다

    SELECT *
      FROM S NATURAL JOIN SP;
    
    -- Must disambiguate and 'project away' duplicate SNO attribute
    SELECT S.SNO, SNAME, STATUS, CITY, PNO, QTY
      FROM S INNER JOIN SP 
              USING (SNO);                        
    
    -- Alternative projection
    SELECT S.*, PNO, QTY
      FROM S INNER JOIN SP 
              ON S.SNO = SP.SNO;
    
    -- Same columns, different order == equivalent?!
    SELECT SP.*, S.SNAME, S.STATUS, S.CITY
      FROM S INNER JOIN SP 
          ON S.SNO = SP.SNO;
    
    -- 'Old school'
    SELECT S.*, PNO, QTY
      FROM S, SP 
     WHERE S.SNO = SP.SNO;
    

    ** 관계 자연 조인은 하나의 투영이다 동등 조인하지 않습니다. - philipxy

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

    5.가입은 천연 INNER 조인 특정 단지 짧은 구문 - 또는 "동등 조인"-와, 구문이 풀어지면 모두 동일한 관계 대수 연산을 나타낸다. 그것은 OUTER (좌 / 우) 또는 CROSS 조인의 경우와 마찬가지로, 조인의 "다른 종류"아니다.

    가입은 천연 INNER 조인 특정 단지 짧은 구문 - 또는 "동등 조인"-와, 구문이 풀어지면 모두 동일한 관계 대수 연산을 나타낸다. 그것은 OUTER (좌 / 우) 또는 CROSS 조인의 경우와 마찬가지로, 조인의 "다른 종류"아니다.

    위키 백과에 섹션을 동등은 조인을 참조하십시오 :

    즉, 모든 자연은 INNER 조인으로 기록 될 수 조인 (그러나 그 반대는 사실이 아니다). 이렇게하려면, 단지 명시 적 술어를 생성 - 예를 들어, 조나단 Leffler의 지적대로, 원하는 경우 "중복"을 피하기 위해 원하는 결과 집합의 열을 선택하고 - 사용 또는 ON.

    해피 코딩.

    (자연 키워드는 LEFT 및 RIGHT인가 조인과 동일하게 적용 할 수있다. 자연은 LEFT / RIGHT는 LEFT / RIGHT 가입에 대한 구체적인 조금만 구문 조인).

  6. ==============================

    6.자연 가입 : 그것은 조합 또는 두 테이블의 모든 열 결합 된 결과이다. 그것은 두 번째 테이블에 대한 첫 번째 테이블의 모든 행을 반환합니다.

    자연 가입 : 그것은 조합 또는 두 테이블의 모든 열 결합 된 결과이다. 그것은 두 번째 테이블에 대한 첫 번째 테이블의 모든 행을 반환합니다.

    내부 가입 : 이것은 작동 조인 열 이름의 두 테이블에서 sxame한다 경우를 제외하고

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

    7.이 개 테이블은 모든 일반적인 열을 기준으로 합류되는 곳 자연 가입이다.

    이 개 테이블은 모든 일반적인 열을 기준으로 합류되는 곳 자연 가입이다.

    일반적인 열 : 두 테이블 +에서 같은 이름을 가진 열이 두 테이블에 호환 가능한 데이터 유형을 가지고있다. 당신은 = 연산자를 사용할 수 있습니다

    이 개 테이블은 ON 절에 언급 된 일반적인 열을 기준으로 결합되어 어디 내부 가입이다.

    일반적인 열 : 두 테이블에서 호환되지 않는 데이터 형식을 가지고 있지만 같은 이름을 가질 필요가 없다 열입니다. 당신은 = 같은 단지 어떤 비교 연산자를 사용할 수 있습니다, <=,> =, <,>, <>

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

    8.차이는 (동등 / 기본값) 내부 조인이 int이며 자연 조인 natuarl 일반적인 열 승리 한 시간 만 내부 / 동등 / 기본 / 간단한에 표시 할 수 일반적인 열이 디스플레이를 두 번 시간이 될 것입니다 가입 것으로 가입 할 수 있습니다.

    차이는 (동등 / 기본값) 내부 조인이 int이며 자연 조인 natuarl 일반적인 열 승리 한 시간 만 내부 / 동등 / 기본 / 간단한에 표시 할 수 일반적인 열이 디스플레이를 두 번 시간이 될 것입니다 가입 것으로 가입 할 수 있습니다.

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

    9.내부 조인과 자연 거의 동일하지만, 그들 사이에 약간의 차이가 가입 할 수 있습니다. 차이는 조건을 지정할 필요에 가입하지 자연에 있지만 내부에서 조건이 의무 가입 할 수 있습니다. 내부 조인에서 우리는 조건을 지정하는 경우,이 테이블을 결과 카티 제품과 같다.

    내부 조인과 자연 거의 동일하지만, 그들 사이에 약간의 차이가 가입 할 수 있습니다. 차이는 조건을 지정할 필요에 가입하지 자연에 있지만 내부에서 조건이 의무 가입 할 수 있습니다. 내부 조인에서 우리는 조건을 지정하는 경우,이 테이블을 결과 카티 제품과 같다.

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

    10.

    mysql> SELECT  * FROM tb1 ;
    +----+------+
    | id | num  |
    +----+------+
    |  6 |   60 |
    |  7 |   70 |
    |  8 |   80 |
    |  1 |    1 |
    |  2 |    2 |
    |  3 |    3 |
    +----+------+
    6 rows in set (0.00 sec)
    
    mysql> SELECT  * FROM tb2 ;
    +----+------+
    | id | num  |
    +----+------+
    |  4 |   40 |
    |  5 |   50 |
    |  9 |   90 |
    |  1 |    1 |
    |  2 |    2 |
    |  3 |    3 |
    +----+------+
    6 rows in set (0.00 sec)
    

    INNER JOIN은 :

    mysql> SELECT  * FROM tb1 JOIN tb2 ; 
    +----+------+----+------+
    | id | num  | id | num  |
    +----+------+----+------+
    |  6 |   60 |  4 |   40 |
    |  7 |   70 |  4 |   40 |
    |  8 |   80 |  4 |   40 |
    |  1 |    1 |  4 |   40 |
    |  2 |    2 |  4 |   40 |
    |  3 |    3 |  4 |   40 |
    |  6 |   60 |  5 |   50 |
    |  7 |   70 |  5 |   50 |
    |  8 |   80 |  5 |   50 |
    .......more......
    return 36 rows in set (0.01 sec) 
    AND NATURAL JOIN :
    
        mysql> SELECT  * FROM tb1 NATURAL JOIN tb2 ;
        +----+------+
        | id | num  |
        +----+------+
        |  1 |    1 |
        |  2 |    2 |
        |  3 |    3 |
        +----+------+
        3 rows in set (0.01 sec)
    
  11. ==============================

    11.내부는 열 이름이 동일한 경우 두 테이블을 조인 가입 할 수 있습니다.

    내부는 열 이름이 동일한 경우 두 테이블을 조인 가입 할 수 있습니다.

    자연, 참여 열 이름과 데이터 유형이 동일한 두 개의 테이블을 조인.

  12. from https://stackoverflow.com/questions/8696383/difference-between-natural-join-and-inner-join by cc-by-sa and MIT license