인프런 커뮤니티 질문&답변

y42032944님의 프로필 이미지

작성한 질문수

윤재성의 Oracle SQL Database 11g PL/SQL Developer

23강 결과가 하나 이상인 서브쿼리

join 에 in을 사용할때.

23.12.14 10:35 작성

·

150

0

직무가 clerk인 사원과 동일한 부서에 근무하고 있는 사원들의 사원번호, 이름 , 입사일을 가져온다.clerk인 사원이 몇번의 부서에서 일 하는지 모른다.```sqlselect empno, ename, hiredate from emp where deptno in (select deptno from emp where job = "clerk")```부서번호를 가져와야 한다.```sqlselect deptno from emp where job = "clerk"에서 결과가 하나이 상인 서브쿼리에 in을 사용하면 서브쿼리의 결과 중 하나라도 일치하면 조건이 참이 된다라고 했는데 부서 번호를 가져와서 여러개의 결과가 있는데 그중 하나라도 있으니까 in을 쓴다는 말인가요? 일반 서브쿼리를 사용 했을때랑 서브쿼리에 in을 사용했을때 그 에러가 정확히 무슨뜻인지 이해가 안갑니다. 일반서브쿼리를 쓰면 값이 1개가 나오고 in은 결과 값이 여러개가 나오는 경우에 in을 쓴다는 건가요?

답변 1

0

인프런 AI 인턴님의 프로필 이미지

2023. 12. 16. 10:41

안녕하세요, 인프런 AI 인턴입니다.

y42032944님, 질문하신 내용에 대한 답변을 드리겠습니다.

SQL에서 IN 구문을 사용하는 경우 일반적으로 해당 서브쿼리가 여러 개의 결과를 반환할 수 있으며, 이 중 하나라도 부모 쿼리의 조건과 일치하면 그 결과가 포함되도록 합니다. 즉, IN은 서브쿼리의 결과가 여러 개일 때 각각을 개별 조건처럼 처리하여, 주어진 조건을 만족하는 모든 행을 선택할 수 있습니다.

예를 들어, deptno 칼럼 값을 기준으로 ‘clerk’ 직무를 가진 직원이 속한 부서 번호를 서브쿼리로 찾아낸 후, 이 부서 번호에 해당하는 모든 직원의 정보를 조회하는 경우입니다. 만약 ‘clerk’의 deptno가 여러 개라면, 이 여러 부서 번호 중 하나라도 해당하는 empno, ename, hiredate 를 가진 사원들의 정보를 모두 가져오게 됩니다.

IN을 사용하는 이유는 서브쿼리가 단일 값을 반환할 것이라는 보장 없이 여러 값을 반환할 수 있기 때문이며, 여러 값 중 하나라도 일치하면 해당하는 사원의 정보를 가져올 수 있게 됩니다. 반면, 일반 서브쿼리(단일 값을 반환하는 경우)를 사용할 때는 단일 결과만을 기대하는 상황에서 적합합니다.

주어진 SQL 쿼리에서는 ‘clerk’ 직무의 직원이 다수의 deptno를 가질 수 있고, 그 각각의 deptno에 해당하는 모든 사원 정보를 조회하고자 하기 때문에 IN을 사용하는 것이 적절합니다.

서브쿼리에 IN을 사용했을 때 에러가 발생한다면, 그 이유는 서브쿼리의 구문, 데이터 타입 불일치, 혹은 기타 SQL 실행 과정에서 발생하는 문제일 수 있습니다. 구체적인 에러 메시지 없이는 정확한 원인 파악이 어렵지만, 일반적으로 IN 구문의 사용법 자체가 문제가 되는 경우는 드물습니다.

이해에 도움이 되었기를 바랍니다. 추가 질문이 있으시다면 언제든 문의해 주세요.