MySQL에서 FULL OUTER JOIN을 수행하는 방법은 무엇입니까?
P粉930534280
P粉930534280 2023-08-23 15:16:38
0
2
508
<p>MySQL에서 <em>완전 외부 조인</em>을 수행하고 싶습니다. 가능합니까? MySQL은 <em>완전 외부 조인</em>을 지원합니까? </p>
P粉930534280
P粉930534280

모든 응답(2)
P粉022723606

Pablo Santa Cruz가 제공한 답변은 정확합니다. 하지만 누군가 이 페이지를 우연히 발견하고 더 자세한 설명이 필요한 경우 여기에 자세한 내용이 나와 있습니다.

예시표

다음 테이블이 있다고 가정해 보겠습니다.

으아악

내부 연결

아래 그림과 같은 내부 연결:

으아악

아래와 같이 두 테이블 모두에 나타나는 레코드만 볼 수 있습니다.

으아악

내부 조인은 명시적으로 양방향이므로 방향(예: 왼쪽 또는 오른쪽)이 없습니다. 양쪽이 일치해야 합니다.

외부 조인

반면 외부 조인은 다른 테이블에서 일치하지 않을 수 있는 레코드를 찾는 데 사용됩니다. 따라서 연결의 어느 쪽 에 레코드 누락이 허용되는지 지정해야 합니다.

의 약어. 외부 조인과 내부 조인의 개념을 강화하기 위해 아래에서 전체 이름을 사용하겠습니다. LEFT JOINRIGHT JOINLEFT OUTER JOINRIGHT OUTER JOIN

왼쪽 외부 조인

아래 그림과 같이 왼쪽 외부 조인:

으아악

...다음과 같이 오른쪽 테이블에 일치 항목이 있는지 여부에 관계없이 왼쪽 테이블의 모든 레코드를 가져옵니다.

으아악

오른쪽 외부 조인

아래 그림과 같이 오른쪽 외부 조인:

으아악

...왼쪽 테이블에 일치 항목이 있는지 여부에 관계없이 다음과 같이 오른쪽 테이블의 모든 레코드를 가져옵니다.

으아악

완전 외부 조인

완전한 외부 조인은 다른 테이블에 일치 항목이 있는지 여부에 관계없이 두 테이블의 모든 레코드를 제공하거나 그렇지 않은 경우 양쪽에 NULL을 제공합니다. 결과는 다음과 같습니다:

으아악

그러나 Pablo Santa Cruz가 지적했듯이 MySQL은 이를 지원하지 않습니다. 다음과 같이 왼쪽 조인과 오른쪽 조인의 UNION을 사용하여 시뮬레이션할 수 있습니다. 으아악

을 "이 두 쿼리를 실행한 다음 결과를 함께 쌓는다"고 생각할 수 있습니다. 일부 행은 첫 번째 쿼리에서 나오고 일부는 두 번째 쿼리에서 나옵니다.

UNIONMySQL의

는 정확한 중복을 제거합니다. Tim은 여기 두 쿼리에 모두 표시되지만

에 대한 결과에는 Tim이 한 번만 나열됩니다. 내 동료 데이터베이스 전문가들은 이 동작에 의존해서는 안 된다고 생각합니다. 따라서 이를 더욱 명확하게 하기 위해 두 번째 쿼리에 WHERE 절을 추가할 수 있습니다. UNION 会消除精确的重复项:Tim 会出现在此处的两个查询中,但 UNION 的结果仅列出他一次。我的数据库专家同事认为不应依赖这种行为。因此,为了更明确地说明这一点,我们可以向第二个查询添加一个 WHERE 으아악

반면에 어떤 이유로든

중복 항목을 보고 싶다면 을 사용할 수 있습니다. UNION ALL

P粉148782096

MySQL에는 전체 연결이 없지만 확실히 시뮬레이션할 수 있습니다.

코드 예제 이 스택 오버플로 질문

에서 복사되었습니다.

다음이 있습니다.


테이블 t1과 t2가 두 개 있습니다.

으아악 위 쿼리는 완전한 외부 조인 작업이 중복 행을 생성하지 않는 특별한 경우에 적합합니다. 위 쿼리는 UNION 집합 연산자를 사용하여 쿼리 패턴으로 인해 발생한 중복 행을 제거합니다. 두 번째 쿼리에서

anti-join🎜 패턴을 사용한 다음 UNION ALL 집합 연산자를 사용하여 두 집합을 결합하면 중복 행이 발생하는 것을 방지할 수 있습니다. 완전 외부 조인이 중복 행을 반환하는 보다 일반적인 경우에는 다음과 같이 할 수 있습니다. 🎜 으아악
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿