인프런 커뮤니티 질문&답변
WHERE 서브쿼리
작성
·
233
1
강사님 안녕하세요. WHERE - IN 서브쿼리 질문 드립니다.
저는 group by가 쓰이면 select 절에는 꼭 기준 컬럼이 함께 들어가야 한다고 알았거든요.
그런데 where -in 서브쿼리 안에는 group by가 사용되어도 기준 컬럼이 안들어가도 되는 것 같더라고요.
예를 들면 아래처럼요.
SELECT EMPNO, ENAME, DEPTNO, SAL
FROM EMP
WHERE SAL IN (SELECT MAX(SAL)
FROM EMP
GROUP BY DEPTNO);
서브쿼리는 이 법칙에서 예외인지요??
답변 1
1
윤선미
지식공유자
안녕하세요.
꼭 WHERE 서브쿼리가 아니어도, SELECT 에 컬럼 명시 없이 GROUP BY 사용이 가능하긴 합니다. (GROUP BY 사용에 제약이 심한 DB들은 간혹 불가능하기도 합니다.)
하지만, SELECT에 명시하지 않았기 때문에 어떤 그룹에서 나온 연산 값인지 알 수가 없어 권장되는 방법은 아닙니다.
예를 들어, 위의 쿼리에서 MAX(salary)로 3000, 4000이 연산되어 WHERE 서브쿼리에 들어갔다고 생각하면 employee 테이블 전체에서 salary가 3000, 4000인 값들이 department와 상관없이 선택되어 출력 될 겁니다.
관련 링크들을 드리니 GROUP BY 심화 공부 하시는데 도움이 되길 바랍니다.
- https://stackoverflow.com/questions/2176715/can-i-group-by-something-that-isnt-in-the-select-line
- https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions-and-modifiers.html
감사합니다 :)





