2017-12-13 23 views
1

enter image description here외부 조인을 사용하여 SQL에서 3 개의 테이블을 조인 할 수 있습니까?

그래서 저는이 세 테이블을 결합하여 특정 회사에서 제공하는 제품의 이름과 가격을 나열하려고합니다.

자연 결합을 사용해 보았지만 올바른 출력을 얻지 못하고있는 것 같습니다. (I는 3 개 행이 반환 될 것으로 예상하고 있지만 그 이상을 얻고있다)

모든 답변을 여기에 나는 내부 조인을 사용할 것을 제안하지만 행

감사

의 모든 조합을받지 않으

편집 :

내가 쓴 쿼리 :

SELECT Pieces.Name, Provides.Price 
FROM Pieces 
JOIN Provides JOIN Providers 
WHERE Providers.Name LIKE "Honda"; 

쿼리와 내가 어떤 결과를 얻을 위

아래 그림은 내가 을 기대하고있는 결과를 보여줍니다 enter image description here

+2

보유하고있는 것을 보여줄 수 있습니까? 너무 운이 좋았 니? – MaxZoom

+2

기존 검색어를 볼 수 있습니까? 당신은 3 행을 기대한다고 말하지만, 왜 특별히 그 행이 있습니까? 솔직히 말하면, 공급자가없는 부분이나 실제로 아무 것도 제공하지 않는 공급자를 포함시키지 않는 한 내부 조인 상황처럼 보입니다. –

+0

안녕하세요. 'inner join'은'on'으로 주어진 조건으로 제한된'cross join' 행 (모든 조합)입니다. 'inner'가없는'join'은'inner join'입니다. 'where'는 모든 join 뒤에 나오는 on과 같습니다. MySQL은''in''없이''join''을 허용합니다. 이것은''cross join''을 의미합니다. 게다가 구현/실행을위한 처방이 아닌 결과 *에 대한 설명입니다. 이것이 우리가 쿼리를 작성하는 방법입니다. "나는 모든 조합을 원하지 않는다"는 것을 오해하고 있습니다. 추신 : "시도했다"& "나는 기대했다"는 말은하지 않았다. "결과가 없다"는 말은 "행이없는 결과"를 의미합니다. 명확하게. 무슨 일이 있었는지 보여줘. (예제와 마찬가지로) [mcve] – philipxy

답변

1

그들이 일을 어떻게의 당신의 마음에 더 명확한 구분을 그리기의 목표로, 조인에 대해 조금 이야기하고 싶습니다 :

INNER JOIN은 "모든 행 조합"을 초래하지 않습니다 - 교차 결합이하는 것입니다.

OUTER JOIN은 모든 값 (솔리드 테이블)을 가진 하나의 테이블을 가지고 있고 다른 테이블에 참여해야 할 때 유용합니다 반드시 단색 테이블과 관련된 행을 포함하지 않는 테이블 - 데이터 테이블에있는 희소한 테이블입니다. 외부 조인은 왼쪽, 오른쪽 및 전체의 3 가지 맛이 있습니다. 왼쪽과 오른쪽은 같은 것으로, 테이블의 순서에 따라 적절한 키워드를 선택하면됩니다. 본질적으로 a left join bb right join a은 같은 것으로 간주됩니다. 왼쪽/오른쪽 키워드는 단단한 것으로 간주되는 테이블과 스파 스로 간주되는 테이블을 선언합니다.

솔리드 테이블과 스파 스 테이블 쌍의 내부 조인은 결과에서 일부 단색 행을 제거하여 스파 스 행 및 관련 단색 행만 남겨 둡니다. 외부 조인은 모든 단색 행을 나타내며 일치하는 희소 행이없는 빈 셀을 나타냅니다.

자연 조인은 테이블이 어떻게 관련되는지 명시 적으로 나타내지 않는 JOIN이므로 데이터베이스를 동일한 열 두 테이블의 이름. 자연스러운 JOIN을 사용하지 마십시오. 거의 항상 어리석은 아이디어와 좌절스러운 디버깅을 위해 몇 초의 키 스트로크를 저장하는 무의미한 "최적화"

여기에서 쿼리는 외부 JOIN을 필요로하지 않습니다. 당신은 당신이 ... 그건 어느 회사가 제공하는 조각을 알고 싶어 명시 단지

SELECT c.* FROM 
    Provider r 
    JOIN Provides s ON r.code = s.provider 
    JOIN Pieces c ON c.code = s.piece 
WHERE 
    R.Name = 'Mattel' 

편집 : Philipxy는, 키워드는 "고체"와 "스파 스"수학에 특별한 의미를 가지고 합리적인 지점을했다 및 나는 수학의 특정 양상을 끌어 들이기보다는 개념을 전달하기 위해 여기에 그것들을 사용하고 있음을 지적하고자한다.당신이 이해를 찾고있을 때, 저는 제가 고전적인 방법으로 학습자가 개념을 이해할 수있는 방법을 찾았 기 때문에 이런 방식으로 사물을 토론 할 것이라고 생각했습니다. 그러나 이것은 본질적으로 데이터베이스의 형태를 언급하는 자신의 용어입니다 당신이 작업하고있는 데이터와 나는 반드시 수학의 이해에 많은 투자를하고있는 미래의 동료 전문가가 자신이 사용하는/사용하는 키워드를 사용한다면 말하고있는 것의 의미를 파악할 수 있다고 보장하지 않습니다. 특별한 방식으로 이해합니다. 이 경우 "고체"와 "희소"를 사용하는 경우 유사한 감각 표현을 추가해야 할 수도 있습니다. 수학적 의미가 아니라 일반적으로 허용되는 영어 언어 의미를 의미합니다.

+0

도움말 및 설명 주셔서 감사합니다. SQL JOINS는 나에게 혼란 스럽지만 그 설명으로 모든 혼란은 사라졌습니다 – aspire29

+0

이 블로그 게시물을 좋아할 수도 있습니다 - https://blog.codinghorror.com/a-visual-explanation -of-SQL-joins/ –

+0

@ aspire29 & CaiusJard 링크가 엉망입니다. [INNER JOIN]과 [OUTER JOIN]의 차이점은 무엇입니까?] (https://stackoverflow.com/q/38549/3404097) 및 [SQL Server 2008의 내부 조인 (JOIN) 비교] (https://stackoverflow.com/q/17759687/3404097). – philipxy