복붙노트

[SQL] 의 차이는 동등 조인, 가입 시타 및 자연 조인

SQL

의 차이는 동등 조인, 가입 시타 및 자연 조인

세타가 조인 결 합 자연 조인에 온다 때 문제가 이해 관계 대수가 있어요. 누군가가 나를 더 잘 이해하는 데 도움을 주시겠습니까? 나는 세타에 = 기호를 사용하는 경우 정확히 단지 자연 조인을 사용하는 것과 같습니다 가입?

해결법

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

    1.가입 세타 A는 (예 ≥ 같은) 임의의 비교 관계를 허용한다.

    가입 세타 A는 (예 ≥ 같은) 임의의 비교 관계를 허용한다.

    동등 조인은 항등 연산자를 사용하여 가입 세타 A는.

    가입 자연은 각 관계에서 같은 이름을 가진 속성에 동등 조인입니다.

    또한, 자연은 제거합니다에게 평등 비교 각 비해 열 남아 있으므로 단지 1에 포함 된 중복 열을 조인 거친 관계형 대수 측면에서 :     ⋈ πR =, S-AS ○ ⋈aR = AS

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

    2.정확한 차이점을 설명하는 답변을 잘하지만, 나는 관계 대수는 SQL로 변환하고 무엇 세 개념의 실제 값이되는 방법을 보여주고 싶어요.

    정확한 차이점을 설명하는 답변을 잘하지만, 나는 관계 대수는 SQL로 변환하고 무엇 세 개념의 실제 값이되는 방법을 보여주고 싶어요.

    귀하의 질문의 핵심 개념은 조인의 생각이다. A는 당신이 (에 해당하는 크로스가 onedaywhen 포인트 아웃으로 가입 호출되는 예는 SQL을 기반으로) 직교 제품을 이해할 필요가 가입 이해하기;

    이것은 실제로 매우 유용하지 않습니다. 이 예를 생각해 보자.

    Product(PName, Price)
    ====================
    Laptop,   1500
    Car,      20000
    Airplane, 3000000
    
    
    Component(PName, CName, Cost)
    =============================
    Laptop, CPU,    500
    Laptop, hdd,    300
    Laptop, case,   700
    Car,    wheels, 1000
    

    구성 요소 X 데카르트 제품의 제품이 될 것입니다 - 울부 짖는 소리 또는 SQL 바이올린. 당신은 12 개 행이 볼 수 = 물론 3 × 4, 실제로 데카르트의 제품은 거의 사용되지 않는 이유는 "바퀴"아무 의미가 없다, 이것이와 "노트북"등의 행.

    |    PNAME |   PRICE |  CNAME | COST |
    --------------------------------------
    |   Laptop |    1500 |    CPU |  500 |
    |   Laptop |    1500 |    hdd |  300 |
    |   Laptop |    1500 |   case |  700 |
    |   Laptop |    1500 | wheels | 1000 |
    |      Car |   20000 |    CPU |  500 |
    |      Car |   20000 |    hdd |  300 |
    |      Car |   20000 |   case |  700 |
    |      Car |   20000 | wheels | 1000 |
    | Airplane | 3000000 |    CPU |  500 |
    | Airplane | 3000000 |    hdd |  300 |
    | Airplane | 3000000 |   case |  700 |
    | Airplane | 3000000 | wheels | 1000 |
    

    조인은이 제품에 더 많은 가치를 추가하고 여기에 있습니다. 각 구성 요소가 제품에 속하기 때문에 우리가 정말 원하는 것은, 관련 구성 요소와 제품을 "결합"하는 것입니다. 조인으로이 작업을 수행하는 방법은 다음과 같습니다

    이 (당신이 여기 모든 예제와 함께 재생할 수 있습니다)처럼 연결된 SQL 쿼리는 것

    SELECT *
    FROM Product
    JOIN Component
      ON Product.Pname = Component.Pname
    

    그 결과 :

    |  PNAME | PRICE |  CNAME | COST |
    ----------------------------------
    | Laptop |  1500 |    CPU |  500 |
    | Laptop |  1500 |    hdd |  300 |
    | Laptop |  1500 |   case |  700 |
    |    Car | 20000 | wheels | 1000 |
    

    공지 사항 랩톱 3 개 구성 요소를 가지고 있기 때문에 결과는, 단지 4 행을 가지고, 자동차 1과 비행기 없음이 있습니다. 이 훨씬 더 유용하다.

    귀하의 질문에 다시 얻기 모든 약 난 그냥 보여 JOIN의 변화는 당신이 물어 조인

    자연은 가입 =는 (ON 절) 같은 이름을 가진 모든 열을 만들어 조인; 다른 모든 조인에 반대는, 결과에서 중복 열을 제거; 대부분의 DBMS (등 마이크로 소프트의 SQL 서버, 오라클의 MySQL의 다양한 벤더에 의해 생성 된 데이터베이스 시스템)도 그냥 나쁜 관행 (또는 의도적으로 그것을 구현하지 않기로)이 지원 귀찮게하지 않습니다. 개발자가 제공되며 가격에서 비용을 제품에서 두 번째 컬럼의 이름을 변경 상상 해보세요. 그리고 자연 조인 모두가 어떤 번호가 일치하지 않기 때문에 0 행의 결과로, PNAME과 비용에서 수행 될 것이다.

    당신이 조건 (SQL의 ON 절)를 지정할 수 있기 때문에 가입 =이 일반적이다 세타가 모두 사용하는 가입. 당신은 거의 처음 2 개 문자 유사한, 또는 다른 가격이 그 제품에 대한 예를 들어 당신이 원하는 조건을,에 가입 할 수 있습니다. 실제로, 이것은 거의 경우입니다 - 당신이 우리를 인도 동등 조건에 가입 할 경우 95 %에서 :

    동등은 = 실제로 사용되는 가장 일반적인 하나를 가입. 이 예는 위의 가입 동등하다. 데이터베이스는의 조인이 유형에 최적화되어 있습니다! 동등의 oposite 가입 당신이 "="이외의 조건에 가입 할 때 비 동등, 즉 가입입니다. 데이터베이스는이에 최적화되지 않습니다! 둘 다 가입 THETA 일반의 하위 집합입니다. 천연 또한 가입 세타 조인 그러나 조건 (세타)를 암시한다.

    정보의 출처 : 내가 염두에 관계 대수 신선이 있다고 감히 있도록 대학 + 인증 SQL 서버 개발자 +는 최근 스탠포드에서 MOO "데이터베이스에 대한 소개"를 완료했다.

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

    3.관련 관계 간결하고 정확한 @ outis의 대답은 좋다.

    관련 관계 간결하고 정확한 @ outis의 대답은 좋다.

    그러나, 상황은 약간 더 관해서의 SQL로 복잡하다.

    일반 공급 업체 및 부품 데이터베이스를 고려하지만, SQL에서 구현 :

    SELECT * FROM S NATURAL JOIN SP;
    

    열이 ** 결과 집합을 반환

    SNO, SNAME, STATUS, CITY, PNO, 수량

    두 테이블에 같은 이름, SNO와 칼럼에서 수행 조인. 결과 집합 여섯 열이 만 SNO에 대해 하나의 열이 포함되어 있습니다.

    지금의 열 이름 (범위 변수 S와 SP 플러스가 필요합니다) 명시 적으로 지정해야합니다 가입하는 경우, A는 세타 동등 가입을 고려 :

    SELECT * FROM S JOIN SP ON S.SNO = SP.SNO;
    

    결과 집합은 SNO에 대한 두 개의 열 등 7 개 열을해야합니다. 결과 집합의 이름은 SQL 표준 "구현에 의존"등을 의미하지만,이 같은 볼 수 있었다 무엇 :

    SNO, SNAME, STATUS, CITY, SNO, PNO, 수량

    혹은이

    S.SNO, SNAME, STATUS, CITY, SP.SNO, PNO, 수량

    즉, 자연은 중복 결과 집합에서 이름 열을 제거하는 것으로 간주 될 수있는 SQL에 가입 (중복 행을 제거하지 않습니다하지만 슬프게도 - 당신이 DISTINCT 자신을 선택하는 SELECT를 변경해야합니다).

    ** 꽤 무엇 table_expression FROM SELECT의 *의 결과를 모른다; 이다. 나는 다른 이유 가운데는 중복 된 이름이나 이름이없는 컬럼과 컬럼을 가질 수 있기 때문에 관계 없습니다 알고있다. 나는 다른 이유 중 열 순서가 중요하다, 때문에이 설정되어 있지 않은 것을 알고있다. 그것은 심지어 SQL 테이블 또는 SQL 테이블의 표현이 아니다. 나는 결과 집합 호출합니다.

  4. ==============================

    4.자연 세타의 하위 집합입니다 동등의 하위 집합입니다.

    자연 세타의 하위 집합입니다 동등의 하위 집합입니다.

    반드시 그렇지는하지만, 그것은 동등 할 것이다. 모든 이름이 비슷한 컬럼에 일치하는 자연 수단은 동등 그냥 당신이 (등, 등, '미만'이 아니라) 전용 '='를 사용하는 것을 의미

    당신이 년 동안 관계형 데이터베이스 작업을 누구나 사용에게이 용어를들을 수 없었다,하지만 이것은 순수 학계입니다.

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

    5.가입 THETA : 어떤 연산자 (예를 들어,., =, <,>,> = 등)를 사용하여 조인 쿼리를 만들 때, 쿼리 세타 조인에 해당되는 조인. 동등 가입 : 평등 연산자를 사용하여 조인에 대한 쿼리를 만들 때 단지, 다음 쿼리는 동등 조인에 해당되는 조인.

    가입 THETA : 어떤 연산자 (예를 들어,., =, <,>,> = 등)를 사용하여 조인 쿼리를 만들 때, 쿼리 세타 조인에 해당되는 조인. 동등 가입 : 평등 연산자를 사용하여 조인에 대한 쿼리를 만들 때 단지, 다음 쿼리는 동등 조인에 해당되는 조인.

    예:

    > SELECT * FROM Emp JOIN Dept ON Emp.DeptID = Dept.DeptID;
    > SELECT * FROM Emp INNER JOIN Dept USING(DeptID)
    
    This will show:
     _________________________________________________
    | Emp.Name | Emp.DeptID | Dept.Name | Dept.DeptID |
    |          |            |           |             |
    

    참고 : 동등 조인은 조인 THETA입니다! 자연 가입 : 동등의 유형은 두 테이블에 모두 같은 이름의 열을 비교하여 암시 적으로 발생하는 가입.

    참고 : 여기의이 결과는 같은 이름의 컬럼의 각 쌍에 대해 하나의 열이 가입 할 수 있습니다.

     SELECT * FROM Emp NATURAL JOIN Dept
    This will show:
     _______________________________
    | DeptID | Emp.Name | Dept.Name |
    |        |          |           |
    
  6. ==============================

    6.두 테이블의 카티 생성물 수학 두 세트의 교차 곱을 예 튜플 등의 모든 가능한 조합을 제공한다. 많은 시간이 있기 때문에 필요하고 의미가 있습니다 만 속성 값의 조합을 제공 구조에 관해서 너무 그래서 여기에 조인 메모리에 불필요한 공간을 차지 일부 정크 값이 있습니다.

    두 테이블의 카티 생성물 수학 두 세트의 교차 곱을 예 튜플 등의 모든 가능한 조합을 제공한다. 많은 시간이 있기 때문에 필요하고 의미가 있습니다 만 속성 값의 조합을 제공 구조에 관해서 너무 그래서 여기에 조인 메모리에 불필요한 공간을 차지 일부 정크 값이 있습니다.

    내부 조인 자연 조인 반면 여기 두 테이블의 반복 필드를 제공 모두 동일한 작동 단지 반복 열을 필터링 만 once.else를 표시함으로써 문제를 해결한다. 자연은 .Also이 중복 자연 조인 제거 메모리를 보존하기 때문에 더 효율적입니다 가입 할 수 있습니다.

    동등은 다른 테이블의 값과 일치 만 튜플을 표시하도록 두 테이블을 조인. 예를 들어 : 기능 1하자 두 개의 테이블이 될 new2. 기능 1은 new1.id = new.id (ID 두 테이블에 동일한 열 임)에 가입 new2로부터 SQL 질의가 * 선택이라면 new2 테이블에서 시작하고 두 번째 테이블의 ID와 일치하는 조인. 게다가, 비 동등 그들이 가지고 항등 연산자 <,>, 그리고 운영자 사이가없는 가입 할 수 있습니다.

    세타 조인 모든 구성 어떤지 등을 포함하는 비교 연산자 <> 비교 연산자. 그 동등 조인으로 알려져있다 항등 연산자 (=)을 사용하는 경우.

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

    7.자연 가입 : 두 관계에 적어도 하나 개의 공통 속성이있을 때 자연은 할 수 있습니다 가입 할 수 있습니다.

    자연 가입 : 두 관계에 적어도 하나 개의 공통 속성이있을 때 자연은 할 수 있습니다 가입 할 수 있습니다.

    가입 THETA : 세타가 가능 할 수 있습니다 가입 할 때 특정 조건이 개 역할을합니다.

    동등 가입 : 동등 가능할 때 주식 상태에 두 역할을합니다. 세타 조인의 그것은 하나 개의 유형입니다.

  8. from https://stackoverflow.com/questions/7870155/difference-between-a-theta-join-equijoin-and-natural-join by cc-by-sa and MIT license