2010-08-23 6 views
4

다음 SQL 질문에 대한 인터뷰에서 질문을 받았습니다. 그것이 어떻게 작동하고 그것이 무엇인가에 대해 친절하게 설명하십시오.SQL에서 JOINS를 이해하는 데 도움이 필요합니다.

Q : 테이블 emp에는 10 개의 행이 있고 테이블에는 12 개의 행이 있습니다.

Select * from emp,department; 

무엇이 결과이며 어떤 항목입니까?

+6

인터뷰를 통과하면 취업합니까? –

+0

이것은 숙제입니까, 아니면 인터뷰 후입니까? –

+0

나는 이것 같이 면접 시험 질문이 더 있었으면 좋겠다! –

답변

0

지정한 가입은 cross join입니다. 조인중인 테이블의 각 레코드 조합에 대해 하나의 행을 생성합니다.

나는 거기에서 수학을하도록 할 것입니다.

0

이것은 120 개의 행을 반환하는 교차 결합을 수행합니다. 두 테이블 각각에서 행의 각 쌍별 조합에 대해 하나의 행.

올인원 모두 거의 쓸모없는 조인입니다.

0

각 행이 함께 결합 된 두 테이블의 모든 행을 가져옵니다.

이것은 데카르트 조인으로 알려져 있으며 매우 나쁩니다.

총 120 개의 행이 표시됩니다.

0

이것은 또한 기존의 묵시적 구문 (구식 인 18 yeasr)이고 우발적 인 십자가는이 구문을 사용하여 일반적인 문제입니다 합류했다. 하나는 그것을 사용해서는 안됩니다. Explicit 조인은 더 나은 선택입니다. 나는 인터뷰에서 이것을 언급하고 이유를 설명했다. 데이터베이스를 잘못 설계 할 가능성이 매우 높다는 사실을 보여주기 때문에 실제로 이런 허위 구문을 사용하는 경우 작업을 수행하지 못했습니다.

3

두 테이블의 Cartesian Product를 반환합니다. 즉, empdepartment의 모든 조합이 결과에 포함됩니다. 인용문

각 직원에 대한 올바른 부서를 표시하려면 어떻게 :

나는 다음 질문이 될 것이라고 생각? 이다

emp 및 직원이 부서에 속하는 department의 조합을 보여줍니다. (이 질문의이 유형에서 확실히 표준) empdepartment_id라는 필드가 있다고 가정

SELECT * FROM emp LEFT JOIN department ON emp.department_id=department.id; 

department는 일치 id 필드가 :

을 수행 할 수 있습니다.

LEFT JOIN

는 왼쪽 ( emp)에서 모든 항목이 포함되며, 각 종업원이 대응 부서와 매칭된다는 것을 의미한다. 일치하는 부서가 없으면 departments의 결과 필드는 비어 있습니다. 정확히 개의 10 개의 행이 반환됩니다.

유효한 부서 ID를 가진 직원 만 표시하려면 LEFT JOIN 대신 JOIN을 사용하십시오. 이 쿼리는 일치하는 부서 ID 수에 따라 0에서 10 행을 반환합니다.

관련 문제