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

y42032944님의 프로필 이미지
y42032944

작성한 질문수

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

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

join 에 in을 사용할때.

작성

·

155

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 인턴입니다.

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

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

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

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

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

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

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

y42032944님의 프로필 이미지
y42032944

작성한 질문수

질문하기