SELECT COLUMN1, COLUMN2 FROM TABLE --- 메인쿼리 ---
WHERE[COLUMN] =
(SELECT COLUMN FROM TABLE WHERE COLUMN=[VALUE]) --- 서브쿼리 ---
SELECT (SubQuery) ---스칼라 서브쿼리---
FROM (SubQuery) ---인라인 뷰---
a WHERE[COLUMN] = (SubQuery) ---일반 서브쿼리---
SELECT name, email FROM member WHERE id=(SELECT id FROM bbs where idx=192)
단일 행 반환
SELECT name, email FROM member WHERE id in(SELECT id FROM)
다중 행 반환
select name, (select 1,2) from member;
하나의 컬럼을 넣어야 에러가 나지 않습니다.
select name, (select 1 union select 2) from member;
두 개의 레코드가 반환되어야 하지만 에러가 발생합니다.
select name, (select email from member where seq=a. seq) from member a;
이 예제 같은 경우 먼저 from절이 실행이 되는데 이 from절에 a란 별칭이 있습니다. a란 별칭을 사용하지 않으면 시퀀스가 동일한 컬럼이기 때문에 충돌이 발생합니다. 이 테이블에 대한 별칭을 줌으로써 이 a.seq는 해당 컬럼이다라고 지시를 하는겁니다.
select * from (select * from member);
에러 발생
select * from (select * from member)a;
select * from (select * from member)a where a.seq=1;
select * from member where seq=(select 1);
select * from member where seq=(select seq from member where name='guest');
from 절에서 멤버 값을 받아서 반환이 되고 그 다음 where 절이 실행됩니다. where 절에서 특정 시퀀스 값이 세팅되어 있고,(1이 아니면 2로, ... 맞는 값이 될때까지 적용됩니다) name이 게스트 인 것에 대한 시퀀스 값이 반환이 됩니다.