SUB QUERY 서브쿼리
쿼리 안에 또다른 쿼리가 담겨 있는 것
SELECT
FROM
WHERE 조건 연산자 (SELECT --- FROM --- WHERE ---) ;
마지막에 () 괄호안에 있는것이 SUB QUERY
괄호 밖에 있는것이 MAIN QUERY
실행 순서는 서브쿼리 --> 메인쿼리
주의!
서브쿼리는 반드시 WHERE 절에 연산자 오른쪽에 위치해야하고 괄호로 꼭꼭 묵어줘야함
서브쿼리 절에는 ORDER BY 가 올 수 없다.
1. 단일행 SUB QUERY
--> 서브쿼리를 수행한 결과가 1건만 나오는 것
2. 다중행
--> 서브쿼리 결과가 2건 이상 출력될 때
다중행 서브쿼리에서 사용되는 별도의 연산자가 있음.
IN = 같은값
>ANY, <ALL = 최소값
<ANY, >ALL = 최대값
3. 다중칼럼
--> 서브쿼리의 결과가 여러 칼럼인 경우
칼럼끼리 비교할 때 비교하는 칼럼끼리 데이터형이 같아야한다.
숫자는 숫자, 문자는 문자
4. Scalar Sub Query 스칼라서브쿼리
--> SELECT 절에 오는 서브쿼리
문법:
FROM 절에서의 테이블명은 dept2 d, emp2 e 이런식으로 써줘야함, JOIN 에서 쓰는것 마냥
그리고 스칼라서브쿼리 안에서 WHERE 조건을 써줘야함. 등가조인에서 쓰는 조건 써줘야함 서브쿼리 안에다가!!
JOIN이랑 같은데
스칼라 서브쿼리는 제품코드나 사원코드같은 데이터, 데이터 종류가 많지 않은 것을 뽑을 때 속도 빠름
스칼라 서브쿼리를 먼저 수행한 후 메모리에 갖다두고 뽑아내니까 속도가 빠름
하지만 데이터 종류가 많을 때는 그냥 JOIN 을 쓰는데 더 빠르다.
즉, 서로 테스트를 해봐야함 스칼라서브쿼리가 빠른지 아니면 JOIN이 빠른지
시간 재보고 빠른걸로 쓰면 됨.
'SQL + PL/SQL > SQL' 카테고리의 다른 글
DDL (0) | 2013.01.13 |
---|---|
DML (0) | 2013.01.13 |
JOIN (0) | 2013.01.04 |
SQL 그룹함수 (0) | 2013.01.04 |
SQL 단일 행 함수 - 문자함수 (0) | 2012.12.23 |