다음 SQL 질문에 대한 인터뷰에서 질문을 받았습니다. 그것이 어떻게 작동하고 그것이 무엇인가에 대해 친절하게 설명하십시오.SQL에서 JOINS를 이해하는 데 도움이 필요합니다.
Q : 테이블 emp에는 10 개의 행이 있고 테이블에는 12 개의 행이 있습니다.
Select * from emp,department;
무엇이 결과이며 어떤 항목입니까?
다음 SQL 질문에 대한 인터뷰에서 질문을 받았습니다. 그것이 어떻게 작동하고 그것이 무엇인가에 대해 친절하게 설명하십시오.SQL에서 JOINS를 이해하는 데 도움이 필요합니다.
Q : 테이블 emp에는 10 개의 행이 있고 테이블에는 12 개의 행이 있습니다.
Select * from emp,department;
무엇이 결과이며 어떤 항목입니까?
지정한 가입은 cross join입니다. 조인중인 테이블의 각 레코드 조합에 대해 하나의 행을 생성합니다.
나는 거기에서 수학을하도록 할 것입니다.
이것은 120 개의 행을 반환하는 교차 결합을 수행합니다. 두 테이블 각각에서 행의 각 쌍별 조합에 대해 하나의 행.
올인원 모두 거의 쓸모없는 조인입니다.
각 행이 함께 결합 된 두 테이블의 모든 행을 가져옵니다.
이것은 데카르트 조인으로 알려져 있으며 매우 나쁩니다.
총 120 개의 행이 표시됩니다.
이것은 또한 기존의 묵시적 구문 (구식 인 18 yeasr)이고 우발적 인 십자가는이 구문을 사용하여 일반적인 문제입니다 합류했다. 하나는 그것을 사용해서는 안됩니다. Explicit 조인은 더 나은 선택입니다. 나는 인터뷰에서 이것을 언급하고 이유를 설명했다. 데이터베이스를 잘못 설계 할 가능성이 매우 높다는 사실을 보여주기 때문에 실제로 이런 허위 구문을 사용하는 경우 작업을 수행하지 못했습니다.
두 테이블의 Cartesian Product를 반환합니다. 즉, emp
및 department
의 모든 조합이 결과에 포함됩니다. 인용문
각 직원에 대한 올바른 부서를 표시하려면 어떻게 :
나는 다음 질문이 될 것이라고 생각? 이다
는 emp
및 직원이 부서에 속하는 department
의 조합을 보여줍니다. (이 질문의이 유형에서 확실히 표준) emp
이 department_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 행을 반환합니다.
인터뷰를 통과하면 취업합니까? –
이것은 숙제입니까, 아니면 인터뷰 후입니까? –
나는 이것 같이 면접 시험 질문이 더 있었으면 좋겠다! –