복붙노트

[SQL] SQL은 벤 다이어그램으로 조인

SQL

SQL은 벤 다이어그램으로 조인

나는 문제가 이해가 SQL에 조인했고 나는 나를 도움이 될 생각이 이미지에 온했습니다. 문제는 내가 완전히 이해하지 않는다는 것입니다. 예를 들어,이 원 B처럼 보일 전체 B 원은 붉은 색과 이미지가 만들어 A.에서 만 중복 색상 이미지의 오른쪽 상단 모서리에 조인 SQL 문의 주요 초점하지만, SQL 문입니다 자체는로 시작하여, A는 SQL 문의 초점이 될 것 즉 것을, 나에게 반대의 느낌을 전달 (B에 가입, A로부터 선택).

마찬가지로, 그 아래의 이미지 만 B의 원 데이터를 포함, 그래서 A는 모든 부분에 포함하는 이유는 문을 가입?

질문 : 근무 상단의 오른쪽에서 시계 방향으로 중심에 마무리 캔 누군가가 설명, 각 SQL 이미지의 표현에 대한 자세한 정보를 제공

a)는 (예를 들어, 특히 상황에서 각각의 경우에 필요한 것 가입 이유없이 여기서 A 또는 B, 즉 A 또는 B 만 큰 데이터의 있지만 모두 착색되지 않음)

b) 상기 이미지는 SQL 좋은 이유 명확히 표현하는 어떤 다른 세부

해결법

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

    1.나는 당신의 주요 기본 혼란 (예를 들어) 만이 빨간색으로 강조 될 때, 당신이있는 거 복용은 "쿼리가 A로부터 데이터를 반환"하지만 실제로는 쿼리 만 데이터를 반환 "을 의미 의미하는 것으로 생각 A는 기록을 "이 경우. 쿼리는 여전히 B. 데이터가 포함될 수 있습니다 (B 레코드가없는 경우를 들어, 쿼리는 NULL로 대체됩니다.)

    나는 당신의 주요 기본 혼란 (예를 들어) 만이 빨간색으로 강조 될 때, 당신이있는 거 복용은 "쿼리가 A로부터 데이터를 반환"하지만 실제로는 쿼리 만 데이터를 반환 "을 의미 의미하는 것으로 생각 A는 기록을 "이 경우. 쿼리는 여전히 B. 데이터가 포함될 수 있습니다 (B 레코드가없는 경우를 들어, 쿼리는 NULL로 대체됩니다.)

    당신은 의미있는 경우 - 흰색에 전적으로 한 다음, A를 겹치지 않는 B의 부분에 대한 붉은 초승달 모양 거기 이미지 : 그것을 찾는 방법 A는 질의에 나타나는 이유는, A가 있습니다 필요 B의 레코드는 제외합니다. (A 쿼리에 표시되지 않은 경우, 다음 벤 다이어그램은 단지 B를 보여줄 것이며, 원하지 않는 사람에서 원하는 기록을 구별 할 수있는 방법이 없을 것,이없는 것입니다.)

    그렇군요. 이러한 이유로, 오른쪽은 상대적으로 드문 조인; 왼쪽을 사용하는 쿼리는 거의 항상 할 수 있습니다 가입 있지만 대신 RIGHT를 사용하는 JOIN 다시 정렬 (및 그 반대의 경우도 마찬가지)은 좌 가입으로, 일반적으로 사람들은 자신의 쿼리를 작성하고 오른쪽은 가입하지와 함께.

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

    2.여기 벤 다이어그램의 한계에 대해 케이드에 동의합니다. 더 적절한 시각적 표현이 될 수 있습니다.

    여기 벤 다이어그램의 한계에 대해 케이드에 동의합니다. 더 적절한 시각적 표현이 될 수 있습니다.

    크로스 가입 (또는 직교 제품) 두 테이블의 행마다의 조합 결과를 생성한다. 각 테이블은 4 개 행을 가져서,이 결과에서 16 개의 행을 생성한다.

    내부는 논리적으로 십자가에서 모든 행이 조인 조건에 일치하는 가입 리턴 가입 할 수 있습니다. 이 경우 다섯 않습니다.

    내부는 조건이 필요 반드시 평등 조건하지하고 테이블의 양 (또는 중 하나)에서 열을 참조 할 필요가 가입 할 수 있습니다. A.Colour NOT IN 평가 ( '녹색', '파랑') 십자가의 각 행에 반환을 가입 할 수 있습니다.

    내부는 이렇게 두 (SQL 바이올린) 동일 가입 1 = 1의 조건이 십자가의 모든 행에 대해 true로 평가 것입니다 가입 할 수 있습니다.

    왼쪽 테이블의 행 (왼쪽 용 조인) 경우 이너 그것이 대해 NULL 값으로 결과에 보존 전혀 오른쪽 표의 어떤 행이 연결되지 않는다는 점을 제외 결합으로 외부 논리적으로 동일한 방식으로 평가 조인 오른쪽 열입니다.

    이것은 단순히 B.Colour이 NULL이되는 경우에만 행을 반환하기 이전 결과를 제한합니다. 이 특별한 경우에는이은 오른쪽 테이블에 일치 없었다 및 쿼리가 반 반에 가입 표 B.이에 일치하지 않는 단일 빨간색 행이 알려져 반환으로 보존 된 행이 될 것입니다.

    어느 널 (NULL)이 아니거나 어떤 위해가이 일이 어떤 NULL 값은 그냥 행을 가져 제대로 작동하려면이 패턴의 순서를 제외하고 방지 할 것을 조건 보장하지만 가입 NULL 시험 IS에 대한 열을 선택하는 것이 중요하다 유엔 유사한 행 이외에 해당 열의 NULL 값.

    그들은 오른쪽 테이블에서 비 일치하는 행을 보존하고 왼쪽 열을 확장 널 (null)을 제외하고 왼쪽 외부 조인 오른쪽 외부 유사 행위를 결합한다.

    완전 외부 조인 왼쪽, 오른쪽 테이블 모두에서 비 일치하는 행을 보존 오른쪽에서 왼쪽으로의 동작을 결합하여 결합합니다.

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

    3.벤 다이어그램은 UNION로 설정 동작을 표현하기에 적합하다, INTERSECTS는 제외 등등

    벤 다이어그램은 UNION로 설정 동작을 표현하기에 적합하다, INTERSECTS는 제외 등등

    LEFT 같은 것들과 같은 시뮬레이션 EXCEPT 그 설정 작업 rhs.KEY은 NULL이다 WHERE 가입 만 정도로,이 도면은 정확하다.

    그렇지 않으면 잘못된 것입니다. 1 : 예를 들어, 어떤 조인 기준 1없는 곱셈 경우에 행을 일으킬 수 있습니다 가입 할 수 있습니다. 그 설정 작업으로 표현 될 수 없도록 그러나 세트는 별개의 멤버를 포함 할 수 있습니다.

    이 도면이 도시 한 바와 같이 내부에 유사한도가 조인 않으며 생성 된 세트는 실제로 벤 다이어그램에 의해 설명 될 수있다 - 그 후 CROSS 참가하거나 INNER 1 = 1 조인있다. 하지에 다른 가능한 삼각형 조인을 모두 언급, 자신과 같은 안티 조인 :

    lhs INNER JOIN rhs ON rhs.VALUE < lhs.VALUE (triangular)
    

    또는

    SELF self1
    INNER JOIN SELF self2
        ON self2.key <> self1.key
        AND self1.type = self2.type
    

    (- self1 및 self2이 같은 설정하고 결과는 부분 집합이다 자기가 교차하고 자신을 제외한 모든 유사 가족을 찾기 위해 안티 조인)

    에 대항하는 키에 조인은 튜토리얼의 처음 몇 분 동안 괜찮을 수 있지만,이 조인 어떤 학습을위한 가난한 경로에 대한된다 이어질 수 있습니다. 나는 이것이 당신이 발견 한 것입니다 생각합니다.

    벤 다이어그램 대표 할 수있는이 아이디어는이 방법은 멀리 갈 필요 일반적으로 결합한다.

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

    4.당신이 가입 할 때, 당신의 두 테이블이 완벽하게 일치하지 않을 가능성이 있다는 점이다. 특히, B에서 하나의 행과 일치하고, 반대하는 일부 B에 아무것도 일치하지 않는 행 또는 중복 행을있을 수 있습니다.

    당신이 가입 할 때, 당신의 두 테이블이 완벽하게 일치하지 않을 가능성이 있다는 점이다. 특히, B에서 하나의 행과 일치하고, 반대하는 일부 B에 아무것도 일치하지 않는 행 또는 중복 행을있을 수 있습니다.

    이 경우, 당신은 선택의 여지가 :

    센터는 왼쪽과 오른쪽 기술적으로 결합하지만, 무의미한 것들; 그들은 아마도 더 효율적으로 TableA의 A로부터 SELECT 를 작성할 수 WHERE A.Key NOT IN (TableB의 B FROM SELECT B.Key) (또는 그 반대).

    귀하의 혼란에 직접 대답에서, RIGHT 가입 "은 다음과 같은 표현이 쿼리의 초점이다"말했다. 하단 오른쪽 오히려 이상하다, 나는 당신이 원하는 것이 이유가 없습니다. 그것은 두 개의 외부 중간 쿼리, NULL의 반대 테이블의 모든 컬럼에서 혼합 함께에서 결과를 반환합니다.

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

    5.(가) 바로 참여를 들어, 네 구문이 혼동 될 수 있지만, 예 것 같다 것입니다. 당신이 말할 때, 참으로 TableB의 당신이 언급하고 TableA의 단지가 일치하는 레코드가 위치에 걸려있는 기본 테이블이라고 말하고 "TableA의 권리는 TableB의 가입하세요". 당신의 두뇌가 자동으로 TableB의 정말 쿼리에 더 중요한 테이블하더라도, 거기에 더 우선 순위를 할당 있도록 TableA의이 먼저 나열되어 있기 때문에, 쿼리 이상한 읽어 않습니다. 이러한 이유로, 당신은 거의 실제로 바로 실제 코드에 조인을 참조하십시오.

    (가) 바로 참여를 들어, 네 구문이 혼동 될 수 있지만, 예 것 같다 것입니다. 당신이 말할 때, 참으로 TableB의 당신이 언급하고 TableA의 단지가 일치하는 레코드가 위치에 걸려있는 기본 테이블이라고 말하고 "TableA의 권리는 TableB의 가입하세요". 당신의 두뇌가 자동으로 TableB의 정말 쿼리에 더 중요한 테이블하더라도, 거기에 더 우선 순위를 할당 있도록 TableA의이 먼저 나열되어 있기 때문에, 쿼리 이상한 읽어 않습니다. 이러한 이유로, 당신은 거의 실제로 바로 실제 코드에 조인을 참조하십시오.

    그래서 그 대신 A와 B의, 추적하기 쉬운 두 가지를 가지고 있습니다. 가정 우리는 사람들의 정보, SHOESIZE와 IQ에 대한 두 개의 테이블이있다. 당신은 어떤 사람에 대한 SHOESIZE 정보, 어떤 사람에 대한 몇 가지 IQ 정보가 있습니다. 그리고 당신이 가입 할 수있는 두 테이블에 PersonID 있습니다.

    시계 방향으로 오른쪽 상단에서 (심지어 더 복잡하고 고안 경우 일부이 시작 THO) :

  6. from https://stackoverflow.com/questions/13997365/sql-joins-as-venn-diagram by cc-by-sa and MIT license