[sql]subquery - select //1=1부분 추가 수정 필요

1. 스칼라 서브쿼리는 한 행, 한 칼럼(1 Row 1 Column)만을 반환하는 서브쿼리를 말한다.
2. 예시
SELECT PLAYER_NAME 선수명
     , HEIGHT 키
     , ( SELECT AVG(HEIGHT) 
           FROM PLAYER X 
          WHERE X.TEAM_ID = P.TEAM_ID) 팀평균키 

  FROM PLAYER P;

*메인 쿼리에서 추출되는 데이터 건 수 만큼 수행되기 때문에
 조인으로 수행 될 때보다 수행회수가 적을 수 있다.
*일치하는 값이 없는 경우 NULL을 반환 한다.
*코드성 테이블에서 코드값을 조회 할 때, 불필요한 조인을 하지 않기 위해 많이 사용한다.

-- 직업이 ‘MANAGER’인 사원의 사원명, 부서명을 조회하는 예제
SELECT ename,
       (SELECT dname
         FROM dept d
         WHERE d.deptno = e.deptno) deptno
FROM emp e
WHERE job ='MANAGER';
 
ENAME      DEPTNO
---------- --------------
JONES      RESEARCH
BLAKE      SALES
CLARK      ACCOUNTING

-- Scalar Subquery는 일치하는 값이 없으면 NULL을 반환하므로 Outer Join과 같은 형태이다.
-- 아래는 부서별 최대 급여정보 조회 예이다.
-- 부서 40에 해당하는 직원이 없기 때문에 최대 급여가 조회 되지 않는다.
SELECT d.deptno, d.dname,
       (SELECT MAX(sal)
          FROM emp
         WHERE deptno = d.deptno) sal
  FROM dept d;
 
 
-- 결과가 동일한 Outer Join 예이다.
SELECT d.deptno, d.dname, MAX(e.sal)
  FROM dept d, emp e
 WHERE d.deptno = e.deptno(+)    --NULL이여도 조회할꺼에요..!
 GROUP BY d.deptno, d.dname
 ORDER bY d.deptno;
 
DEPTNO DNAME          SAL
------ -----------  -----
    10 ACCOUNTING    5000
    20 RESEARCH      3000
    30 SALES         2850
    40 OPERATIONS


*여담이지만..
단순 SELECT을 수행할때 "1=1"을 아무 이유없이 사용하는 이유가 뭘까??..

마이그레이션 ??

동적쿼리에서 if문을 사용하여 조건을 유동적으로 바꾸고 싶을때 WHERE 1=1 으로 첫 조건을 선언 후

AND 조건을 유동으로 바꾸어도 WHERE이라는 구문은 신경쓰지 않아도 된다.

 

동적 쿼리문이라도 첫 WHERE 조건이 명확하다면 1=1을 사용하지 않고 첫번째 조건의 컬럼을 사용하면 된다.


일반 쿼리문 작성 시 WHERE 조건에 1=1는 무의미 하다. 사용하지 말것.



동적 쿼리문을 작성 시 첫번째 조건 WHERE 구문에 어떤 조건이 해당될지 불명확할 때는

WHERE 조건줄을 1=1로 작성 후 조건에 맞는 if문에 해당되면 조건이 만들어 진다.

댓글

이 블로그의 인기 게시물

[sql] 테이블 생성