• 카테고리

    질문 & 답변
  • 세부 분야

    데이터베이스

  • 해결 여부

    미해결

확인 부탁 드립니다.

23.07.28 01:04 작성 조회수 234

0

-- 직원의 가장 최근 부서 근무이력 조회. 비상관 서브쿼리

select * from hr.emp_dept_hist_01 a where (empno, todate) in (select empno, max(todate) from hr.emp_dept_hist_01 x

group by empno);

 

위 설명을 하실때, 해당 서브쿼리는 XXX 서브 쿼리는 아니다 라고 말씀 하셨는데 제가 반복해서 들어도 어떤 말씀을 하는지 잘 안들려서 뭐라고 말씀 하셨는지 알고 싶습니다.

 

그리고 서브쿼리에 where절을 넣어 1건만 나오게 하셨는데, 그러면 in이 아니라 비교 연산자를 사용하는게 맞는거 아닌가요? 아니면 in을 사용하더라도 1건만 나오게 하는게 맞는 경우라 이해를 하면 되는걸까요?

답변 2

·

답변을 작성해보세요.

0

bluebamus님의 프로필

bluebamus

질문자

2023.07.28

감사합니다.

0

안녕하십니까?

  1. 위 설명을 하실때, 해당 서브쿼리는 XXX 서브 쿼리는 아니다 라고 말씀 하셨는데 제가 반복해서 들어도 어떤 말씀을 하는지 잘 안들려서 뭐라고 말씀 하셨는지 알고 싶습니다.

    => 강의의 몇분 몇초 영상을 말씀하시는지 정확히는 모르겠지만, 아마 "온라인성" 쿼리라고 얘기한 부분을 말씀하신것 같군요(아니면 다시 말씀해 주십시요). 온라인성 쿼리는 일반적으로 온라인 업무에 사용되는 쿼리들을 의미합니다. 그러니까, 전체 범위 처리나 넓은 범위의 처리가 필요한 분석성 쿼리가 아니라 pk 값이나 보다 적은 범위의 처리를 빠르게 수행하는 쿼리 입니다.

     

  2. where조건을 넣어서 1건이 나오면 = 을 사용해도 됩니다(물론 in을 사용해도 됩니다). 하지만, 서브쿼리에 where절을 넣은 건 온라인성 쿼리를 보여 드리기 위한 것입니다. 이건 실습 문제가 아닙니다.

     

    감사합니다.