Self-Join
앞서 언급했듯이 테이블 별칭을 사용하는 주된 이유 중 하나는 단일 SELECT 문에서 동일한 테이블을 두 번 이상 참조하기 위한 것입니다. 여기에 예가 있습니다.
항목(ID가 DTNTR )에서 문제를 발견하고 이 항목을 생산하는 공급업체가 생산한 다른 항목에도 이러한 문제가 있는지 알고 싶다고 가정해 보겠습니다. 이 쿼리를 수행하려면 먼저 ID가 DTNTR인 품목을 생산하는 공급업체
를 찾은 다음 이 공급업체가 생산한 다른 품목을 찾아야 합니다.
이 문제를 해결하는 한 가지 방법은 다음과 같습니다.
입력:
select prod_id,prod_name from products where vend_id = (select vend_id from products where prod_id = 'DTNTR');
출력:
분석: 이 하위 쿼리를 사용하는 첫 번째 솔루션입니다. 내부 SELECT 문은 간단한 검색을 수행하고 생산 ID가 DTNTR인 품목 공급업체의 vend_id를 반환합니다. 이 ID는 외부 쿼리의 WHERE 절에서 이 공급업체가 생산한 모든 항목을 검색하는 데 사용됩니다.
이제 조인을 사용하여 동일한 쿼리를 살펴보겠습니다.
입력:
select p1.prod_id,p1.prod_name from products as p1,products as p2 where p1.vend_id = p2.vend_id and p2.prod_id = 'DTNTR';
출력:
분석: this 쿼리에 필요한 두 테이블은 실제로 동일한 테이블이므로 FROM 절에 제품 테이블이 두 번 나타납니다. 이는 완전히 합법적이지만 MySQL은 사용자가 참조하는 제품 테이블의 인스턴스가 무엇인지 모르기 때문에 제품에 대한 참조가 모호합니다.이 문제를 해결하기 위해 테이블 별칭이 사용됩니다. 제품의 첫 번째 발생은 별칭 p1 이고 두 번째 발생은 별칭 p2 입니다. 이제 이러한 별칭을 테이블 이름으로 사용할 수 있습니다. 예를 들어 SELECT 문은 p1 접두사를 사용하여 필요한 열의 전체 이름을 명시적으로 제공합니다. 그렇지 않은 경우 각각 prod_id 및 prod_name이라는 두 개의 열이 있기 때문에 MySQL은 오류를 반환합니다. MySQL은 어떤 열이 원하는지 알 수 없습니다(실제로는 동일한 열임에도 불구하고). WHERE(p1의 vend_id와 p2의 vend_id를 일치시켜) 먼저 두 테이블을 조인한 다음 두 번째 테이블의 prod_id를 기준으로 데이터를 필터링하여 필요한 데이터를 반환합니다.
하위 쿼리 대신 셀프 조인을 사용하세요. 셀프 조인은 동일한 테이블에서 데이터를 검색할 때 사용되는 하위 쿼리 문을 대체하기 위해 외부 문으로 사용되는 경우가 많습니다. 최종 결과는 동일하지만 때때로 조인 처리가 하위 쿼리 처리보다 훨씬 빠릅니다. 어느 방법이 더 나은 성능을 발휘하는지 확인하려면 두 가지 방법을 모두 시도해야 합니다.
위 내용은 mysql 고급 조인-셀프 조인 사용 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!