2014-06-16 5 views
-6

많은 필드가 결과 행에 중복 될 수 있기 때문에 왜 join 문이 인기가 있는지 궁금합니다.왜 join 문을 사용합니까?

Supplier(id, name, address) 
Product(id, name, detail) 
Product_Supplier(id, productId, supplierId, quantity) 

SELECT Product.*, 
     Product_Supplier.supplierId, 
     Product_Supplier.quantity 
FROM Product 
INNER JOIN Product_Supplier ON Product.id = Product_Supplier.productId 

결과는 다음과 같이 보일 수 있습니다 : product.detail가 큰 텍스트가

Product.id Product.name Product.detail Product_Supplier.supplierId Product_Supplier.quantity 
1   'Product 1' 'bla bla'  100       20 
1   'Product 1' 'bla bla'  101       30 
1   'Product 1' 'bla bla'  102       20 
1   'Product 2' 'bla bla'  100       120 

그래서이라면 성능은 오른쪽 둔화 될 것인가? 그것이 사실이라면 왜 join statement가 인기가 있습니까?

+4

내가 왜 문에 가입 궁금해 * *이 매우 인기가있다? 트렌드가 있습니까? – Raptor

+0

가능한 복제 [this] (http://stackoverflow.com/questions/2241991/in-mysql-queries-why-use-join-instead-of-where) –

+0

별칭을 사용하여 출력 열 이름의 이름을 바꿉니다. – Bohemian

답변

1

결합은 하나의 명령문에서 여러 소스 (테이블, 함수, 뷰 등)의 데이터를 가져 오는 유일한 방법입니다.

샘플을 고려할 때, 제품 공급 업체와 제품에 대한 모든 정보를 어떻게 얻을 수 있습니까?

물론 여러 테이블을 사용할 수 있으며 그 차이는 그다지 크지 않습니다. 조인은 관계가 복잡 해지면 매우 유용합니다.

SELECT Product.id product_id 
,  ... 
FROM Product 
INNER JOIN Product_Supplier ON Product.id = Product_Supplier.productId 

는 성능 태그를 고려 : 당신의 이름의 충돌에 문제가있는 경우

, 별칭을 추가 항상 다음 더 나은 곳에서 여러 테이블을 수행하지 조인. 오라클은보기 관계 및 ANSI 조인에서보기에 몇 가지 문제가 있습니다.

+0

답변 해 주셔서 감사합니다. 모든 제품에 대한 정보를 얻고 싶습니다. 수량, supplierId 등과 같은 다른 정보를 얻고 싶습니다 ... 하나의 SQL 문으로 모든 작업을 수행하기 위해 조인을 사용합니다. 그래서 좋은 접근 방법입니까? 이 방법을 선택하면 많은 열 필드가 복제됩니다 (예 : 'bla bla'...)? – user3621203

+0

당신은 그것을 막을 수 없습니다.그것이 작동하는 방식이며, 행운을 빌어 데이터베이스의 전송 계층은 라인을 통해 복사 할 때 해당 중복을 필터링합니다. –

+0

위에서 설명한 내 문제는 하나의 조인문 만 사용하거나 여러 개의 select를 사용해야합니다. 먼저 모든 제품을 가져온 다음 제품 ID로 'Product_Supplier'에서 선택 하시겠습니까? 어느 것이 더 좋고 더 편리합니까? – user3621203

3

JOIN은 인기가 없으므로 둘 이상의 표의 데이터로 결과를 작성해야합니다.

제품 및 기타 제품이있는 테이블이 있고 판매되는 제품에 대한 세부 정보를 포함하여 모든 판매 정보를 포함하는 보고서를 생성하는 프로그램을 개발하려고합니다. 어떻게 각 행을 작성해야합니까? 당신은 당신의 프로그램에서 질의와 중간 데이터 구조로 그것을 할 수 있습니다. 아니면 당신을 위해 데이터베이스를 요청할 수 있습니다. 따라서 두 테이블을 조인하십시오.

product.detail이 너무 커서 원하는 결과를 원하지 않으면 선택한 열에 포함시키지 마십시오. 같은 뭔가 대신

SELECT Product.name, 
    Product_Supplier.supplierId, 
    Product_Supplier.quantity 
FROM Product 
INNER JOIN Product_Supplier ON Product.id = Product_Supplier.productId 

SELECT Product.* ...

+0

답변 해 주셔서 감사합니다. 그러나 나는 2 가지 목표를 달성해야한다 : 1. 제품의 모든 정보를 얻는다; 2. 수량과 같은 다른 정보를 얻으십시오 : quantity ... 그래서 join 문을 사용하면 문제가 생깁니다 : 제품 테이블의 모든 열을 포함 시키면 많은 열이 복제됩니다. 크기가 크거나 포함하지 않으면 좋지 않습니다. , 나는 첫 번째 목표를 달성 할 수 없다. 더 좋은 방법이 있습니까? – user3621203

관련 문제