Pablo Santa Cruz가 제공한 답변은 정확합니다. 하지만 누군가 이 페이지를 우연히 발견하고 더 자세한 설명이 필요한 경우 여기에 자세한 내용이 나와 있습니다.
예시표
다음 테이블이 있다고 가정해 보겠습니다.
으아악
내부 연결
아래 그림과 같은 내부 연결:
으아악
아래와 같이 두 테이블 모두에 나타나는 레코드만 볼 수 있습니다.
으아악
내부 조인은 명시적으로 양방향이므로 방향(예: 왼쪽 또는 오른쪽)이 없습니다. 양쪽이 일치해야 합니다.
외부 조인
반면 외부 조인은 다른 테이블에서 일치하지 않을 수 있는 레코드를 찾는 데 사용됩니다. 따라서 연결의 어느 쪽 에 레코드 누락이 허용되는지 지정해야 합니다.
의 약어. 외부 조인과 내부 조인의 개념을 강화하기 위해 아래에서 전체 이름을 사용하겠습니다. LEFT JOIN和RIGHT JOIN是LEFT OUTER JOIN和RIGHT OUTER JOIN
왼쪽 외부 조인
아래 그림과 같이 왼쪽 외부 조인:
으아악
...다음과 같이 오른쪽 테이블에 일치 항목이 있는지 여부에 관계없이 왼쪽 테이블의 모든 레코드를 가져옵니다.
으아악
오른쪽 외부 조인
아래 그림과 같이 오른쪽 외부 조인:
으아악
...왼쪽 테이블에 일치 항목이 있는지 여부에 관계없이 다음과 같이 오른쪽 테이블의 모든 레코드를 가져옵니다.
으아악
완전 외부 조인
완전한 외부 조인은 다른 테이블에 일치 항목이 있는지 여부에 관계없이 두 테이블의 모든 레코드를 제공하거나 그렇지 않은 경우 양쪽에 NULL을 제공합니다. 결과는 다음과 같습니다:
으아악
그러나 Pablo Santa Cruz가 지적했듯이 MySQL은 이를 지원하지 않습니다. 다음과 같이 왼쪽 조인과 오른쪽 조인의 UNION을 사용하여 시뮬레이션할 수 있습니다.
으아악
을 "이 두 쿼리를 실행한 다음 결과를 함께 쌓는다"고 생각할 수 있습니다. 일부 행은 첫 번째 쿼리에서 나오고 일부는 두 번째 쿼리에서 나옵니다.
UNIONMySQL의
는 정확한 중복을 제거합니다. Tim은 여기 두 쿼리에 모두 표시되지만
에 대한 결과에는 Tim이 한 번만 나열됩니다. 내 동료 데이터베이스 전문가들은 이 동작에 의존해서는 안 된다고 생각합니다. 따라서 이를 더욱 명확하게 하기 위해 두 번째 쿼리에 WHERE 절을 추가할 수 있습니다. UNION 会消除精确的重复项:Tim 会出现在此处的两个查询中,但 UNION 的结果仅列出他一次。我的数据库专家同事认为不应依赖这种行为。因此,为了更明确地说明这一点,我们可以向第二个查询添加一个 WHERE
으아악
Pablo Santa Cruz가 제공한 답변은 정확합니다. 하지만 누군가 이 페이지를 우연히 발견하고 더 자세한 설명이 필요한 경우 여기에 자세한 내용이 나와 있습니다.
예시표
다음 테이블이 있다고 가정해 보겠습니다.
으아악내부 연결
아래 그림과 같은 내부 연결:
으아악아래와 같이 두 테이블 모두에 나타나는 레코드만 볼 수 있습니다.
으아악내부 조인은 명시적으로 양방향이므로 방향(예: 왼쪽 또는 오른쪽)이 없습니다. 양쪽이 일치해야 합니다.
외부 조인
반면 외부 조인은 다른 테이블에서 일치하지 않을 수 있는 레코드를 찾는 데 사용됩니다. 따라서 연결의 어느 쪽 에 레코드 누락이 허용되는지 지정해야 합니다.
의 약어. 외부 조인과 내부 조인의 개념을 강화하기 위해 아래에서 전체 이름을 사용하겠습니다.
왼쪽 외부 조인LEFT JOIN
和RIGHT JOIN
是LEFT OUTER JOIN
和RIGHT OUTER JOIN
으아악
...다음과 같이 오른쪽 테이블에 일치 항목이 있는지 여부에 관계없이 왼쪽 테이블의 모든 레코드를 가져옵니다.으아악
오른쪽 외부 조인으아악
...왼쪽 테이블에 일치 항목이 있는지 여부에 관계없이 다음과 같이 오른쪽 테이블의 모든 레코드를 가져옵니다.으아악
완전 외부 조인으아악
그러나 Pablo Santa Cruz가 지적했듯이 MySQL은 이를 지원하지 않습니다. 다음과 같이 왼쪽 조인과 오른쪽 조인의 UNION을 사용하여 시뮬레이션할 수 있습니다. 으아악UNION
MySQL의에 대한 결과에는 Tim이 한 번만 나열됩니다. 내 동료 데이터베이스 전문가들은 이 동작에 의존해서는 안 된다고 생각합니다. 따라서 이를 더욱 명확하게 하기 위해 두 번째 쿼리에
반면에 어떤 이유로든WHERE
절을 추가할 수 있습니다.UNION
会消除精确的重复项:Tim 会出现在此处的两个查询中,但UNION
的结果仅列出他一次。我的数据库专家同事认为不应依赖这种行为。因此,为了更明确地说明这一点,我们可以向第二个查询添加一个WHERE
으아악중복 항목을 보고 싶다면 을 사용할 수 있습니다.
UNION ALL
MySQL에는 전체 연결이 없지만 확실히 시뮬레이션할 수 있습니다.
코드 예제 는 이 스택 오버플로 질문
에서 복사되었습니다.다음이 있습니다.
테이블 t1과 t2가 두 개 있습니다.
으아악 위 쿼리는 완전한 외부 조인 작업이 중복 행을 생성하지 않는 특별한 경우에 적합합니다. 위 쿼리는 UNION 집합 연산자를 사용하여 쿼리 패턴으로 인해 발생한 중복 행을 제거합니다. 두 번째 쿼리에서
anti-join🎜 패턴을 사용한 다음 UNION ALL 집합 연산자를 사용하여 두 집합을 결합하면 중복 행이 발생하는 것을 방지할 수 있습니다. 완전 외부 조인이 중복 행을 반환하는 보다 일반적인 경우에는 다음과 같이 할 수 있습니다. 🎜 으아악