SQLD/SQL 기본과 활용
스칼라 서브쿼리(Scalar SubQuery), 인라인 뷰(Inline View), 뷰(View)
DevPing9_
2020. 8. 28. 19:10
1. 스칼라 서브쿼리(Scalar SubQuery)
- 1 row, 1 column 만 리턴하는 서브쿼리
- 칼럼을 사용할 수 있는 대부분의 곳에서 사용 가능
SQL> SELECT PLAYER_NAME,
HEIGHT
ROUND((SELECT AVG (X.HEIGHT)
FROM PLAYER X
WHERE X.TEAM_ID = P.TEAM_ID),2) AS AVG_HEIGHT
FROM PLAYER P;
# 실행결과
PLAYER_NAME HEIGHT AVG_HEIGHT
-------------------------------------------------------
밀리토 169 177.89
스털링 178 180.01
고종수 188 175.66
김정환 170 179.99
노홍철 180 181.23
이승우 160 176.45
2. 인라인 뷰(Inline View)
- FROM 절에서 사용되는 서브쿼리 (테이블 가공하여 새 테이블을 만드는 것과 같음)
- ORDER BY절로 정렬된 테이블을 만들어 사용 할 수 있다.
SQL> SELECT A.E_NAME,
A.DEPTNO, A.SAL
FROM (SELECT *
FROM EMP
WHERE SAL = '500') A;
# 실행결과 (SAL이 500인 EMP 데이터만 가지고 있는 테이블)
E_NAME DEPTNO SAL
-------------------------------------------------------
밀리토 D01 500
스털링 D01 500
고종수 D02 500
김정환 D03 500
노홍철 D05 500
이승우 D07 500
3. 뷰(View)
- 테이블은 실제 데이터를 가지고 있지만, 뷰는 뷰 정의만을 가지고 있다.
- 뷰를 정의하고 사용하게 되면 DMBS는 내부적으로 SQL 문을 인라인 뷰로 재작성한다.
# 뷰 정의
SQL> CREATE VIEW V_EMP_DEPT AS
SELECT A.E_NAME, B.D_NAME
FROM EMP A, DEPT B
WHERE A.DEPTNO = B.DEPTNO;
# 뷰 사용
SQL> SELECT E_NAME,
D_NAME
FROM V_EMP_DEPT;
# DMBS 내부적으로 재작성 된 모습
SQL> SELECT E_NAME,
D_NAME
FROM (SELECT A.E_NAME, B.D_NAME
FROM EMP A, DEPT B
WHERE A.DEPTNO = B.DEPTNO);
# 실행결과
E_NAME D_NAME
-------------------------------------------------------
밀리토 영업
스털링 영업
고종수 유통
김정환 생산
노홍철 SW개발
이승우 클라우드관리
# 뷰 제거
DROP VIEW V_EMP_DEPT;728x90