어떤게 더 좋은 쿼리문인지 , 그이유가 무엇인지 좀 알려주시면 감사하겠습니다 0 4 1,105

by apptention [SQL Query] [2018.02.05 14:21:32]


-- Steven King이 부서 관리자로 있는 부서이름 , 해당 부서에 근무하는 사원의 아이디 , 이름을 출력

--1

select D.department_name , E.employee_id , E.first_name || ' ' || E.last_name as full_name
from (select E.department_id as department_id
      from employees E
      where E.first_name || ' ' || E.last_name in 'Steven King') E_KING , employees E , departments D
where E_KING.department_id = D.department_id
and E.department_id = D.department_id;

--2 

select D.department_name , E.employee_id , E.first_name || ' ' || E.last_name as full_name
from employees E , departments D
where E.department_id = D.department_id
and E.department_id in (select department_id
                        from departments
                        where manager_id in (select employee_id
                                             from employees
                                             where first_name || ' ' || last_name in 'Steven King'));

 

by 우리집아찌 [2018.02.05 14:30:13]
위의 SQL문 둘다 IN 절에서 에러날겁니다.
그리고 같은 테이블을 여러번 반복해서 호출하면 좋은 SQL이 아닙니다.


SELECT B.department_name
     , A.employee_id 
     , A.first_name || ' ' || A.last_name
  FROM employees A 
     , departments B
 WHERE A.department_id = B.department_id
   AND A.last_name   = 'Steven King' 
   AND A.부서관리자   = '부서관리자' ;
 

 

 


by apptention [2018.02.05 14:44:26]

답변 감사합니다!!


by 마농 [2018.02.05 14:47:35]

1번 방법은 Steven King 의 부서를 가져와 사용하는데 방법이 틀렸습니다.
2번 방법처럼 Steven King 의 사원번호를 가져온뒤 이를 이용해 부서테이블의 manager_id 검색을 해야 합니다.
서브쿼리 사용보다는 조인으로 푸는 것이 좋습니다.

SELECT d.department_name
     , e.employee_id
     , e.first_name
     , e.last_name
  FROM employees   m
     , departments d
     , employees   e
 WHERE m.first_name    = 'Steven'
   AND m.last_name     = 'King'
   AND m.employee_id   = d.manager_id
   AND d.department_id = e.department_id
;

 


by apptention [2018.02.05 16:04:00]

답변 감사합니다

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입