서브쿼리
서브쿼리를 사용하면 질의를 실행해서 추출한 데이터를 이용해서 다시 질의를 실행하는 2단계의 처리를 할 수 있다.
ex) select * from tb where max(sales);
위 쿼리를 사용하면 에러가 납니다. 이유는 쿼리문에서 준 조거 max(sales) 조건의 값을 아직 알지 못하기 때문입니다.
따라서 다음과 같은 조건을 만족시키기 위해서는 아래 서브쿼리를 사용 쿼리문을 사용해야합니다.
ex) select * from tb where sales in (select max(sales) from tb);
in(?)에서 ?부분이 1단계 쿼리부분입니다. 즉 1단계 쿼리문의 결과에 대한 2단계 값을 추출하는 과정입니다.
ex) select * from tb1 where age >= (select avg(age) from tb1);
첫번째 쿼리문과 이번 쿼리문의 차이는 in의 유무입니다.
잘 비고해서 생각해 보기 바랍니다.
다음과 같이 두테이블에 서브쿼리를 적용한 예입니다.
ex) select * from tb1 where number in (select number from tb where sales>=200);
만약 in 대신 등호를 사용한다면?
다음과 같은 에러가나는데 이유는 number = '하위쿼리 결과값' 인데 이때 하위쿼리의 결과값이 하나가 아니기 때문이다.
에러구문이 설명해 주고 있는 내용이다.
따라서 다음과 같은 구문으로 에러는 피할 수 있지만, 올바른 방법은 아니다.