2017-01-31 1 views
0

학교용 Oracle SQL을 배우고 있으며 접근 방법을 모르는 문제가 있습니다. 몇 가지 테이블이 있는데, 하나는 Employees 테이블이고 다른 하나는 작업 테이블입니다. 직원 테이블에는 이름, 주소, 작업 코드 등의 정보가 들어 있습니다. 작업 코드는 작업 코드와 작업 제목을 일치시키는 작업 테이블의 외래 키입니다. 나는 출납원의 직위를 모른다는 가정하에 계산원의 이름을 반환하는 성명서를 작성해야합니다.일치하는 외래 키를 찾고 일치하는 결과를 반환하는 쿼리?

내가 그 일 코드로 직원을 반환하는 작업 코드 번호를 사용하여 다음이 '캐셔'에 대한 작업 테이블을 검색하고 접근하고 Jobcode 번호를 받고, 그리고 생각하는 유일한 방법. 나는 일자리 코드를 얻은 후에 조인을 사용할 것이라고 생각했지만, 처음에는 일자리 코드를 "찾는"초기 부분을 어떻게 수행해야할지 모르겠다. 1 개의 성명서에서이 모든 것을 할 수있는 방법이 있습니까? 은 응답에 수집

+1

힌트 :'JOIN'. 그것은 두 테이블을 결합합니다. –

+1

** 조인 **을 사용하면 작업 코드를 알 필요가 없습니다. 두 개의 테이블을'job_code' 컬럼에 조인합니다. 이제는 각 직원의 이름과 주소뿐만 아니라'Job' 테이블에서 작업에 대한 모든 정보를 포함하는 긴 행을 갖습니다. job_code '값은 두 테이블 중 하나에 있습니다. 그럼에도 불구하고 조인을 사용하면 작업 설명 ** (모든 열에서)이 "출납원"인 직원 만 필터링하도록 필터링 할 수 있습니다 ('where' 절). 그런 다음 '선택'에서 직원 이름 만 선택하거나 필요한 것을 선택할 수 있습니다. – mathguy

+0

@mathguy Ahh 저는 이것이 어떻게 합류 하는지를 몰랐습니다. 조인은 각 테이블의 일치하는 값을 반환해야한다고 생각했습니다.고맙습니다. –

답변

0

는 생각의 일부 나 댓글을 통해 공유 :

확실한 솔루션입니다 - 두 테이블 where 절에 출납원을 필터링 한 후 (이에 대한 작업 코드를 알 필요가 없습니다)에 가입 . 주의 사항은 cashier의 대소 문자로 처리해야하며 테이블에 저장된 내용과 일치해야합니다. (.. 테이블이 자본 C와 Cashier을 말한다면, 다음도 해결이 where 조건이 있습니다해야하지만 이것이 최선의 선택은)

select e.first_name, e.last_name 
from employee e join job j on e.job_code = j.job_code 
where j.job_name = 'cashier' 

이 많은 작업처럼 보인다 : 우리는에만 관심이있는 경우 계산원, 왜 우리는 두 테이블을 완전히 결합합니까? job 테이블에 행이 많은 경우 낭비되는 작업이 많지 않을까요? 우리는 그 테이블에서 한 행만 필요합니다! 올바른입니다

. 필터링을 먼저 수행하고 마지막으로 조인을 수행하도록 쿼리를 작성하는 것이 좋습니다. 뭔가 같이 :

select e.first_name, e.last_name 
from employee e join (select job_code from job where job_name = 'cashier') j 
        on e.job_code = j.job_code 

다행히, 우리는 첫 번째 양식의 쿼리를 작성하는 경우에도, 비용 기반 최적화 (쿼리 파서/컴파일러의 기본 구성 요소는) 두 번째 양식으로 변환됩니다. "Explain Plans"에 익숙하다면 시도해 볼 수 있습니다 :이 두 가지 쿼리와 비슷한 두 가지 쿼리를 작성하면 Explain Plan이 동일하다는 것을 알 수 있습니다.

이것은 개발자의 부분 개입없이 수행하고, 우리에게 약간의 유연성 (그것이 자신에게 참조 때 나는 그것을 "게으름"을 고려)을 할 수있다. - 예상되는 하위 쿼리를

select e.first_name, e.last_name 
from employee 
where job_code = (select job_code from job where job_name = 'cashier') 

이 쿼리는 where 절에 "스칼라 하위 쿼리를"사용 : 물론

는 두 번째 양식은 모든 조인 쿼리도없이 작성 될 수 있음을 시사한다 한 열에 정확히 한 행을 생성하십시오.

관련 문제