※ 뷰

1. 뷰란? - 특정 SELECT문에 이름을 붙여서 재사용이 가능한 가상의 테이블로 실제 데이터는 저장하지 않는다. CREATE를 통행 뷰를 생성하며 REPLACE를 통해 이미 존재하는 뷰를 새로운 뷰로 대체한다. 삭제 할 때는 DROP을 사용한다.

Ex) CREATE OR REPLACE (뷰 이름) AS SELECT COL1, COL2, ... FROM (테이블명) WHERE (조건)

2. 뷰의 특징

① 보안성 

- 보안이 필요한 컬럼을 가진 테이블일 경우 해당 컬럼을 제외한 별도의 뷰를 생성하여 제공함으로서 보안 유지가 가능하다.

② 독립성 

- 테이블 스키마가 변경되었을 경우 어플리케이션은 변경하지 않고 관련 뷰만 수정한다.

③ 편리성 

- 복잡한 쿼리 구문을 뷰명으로 단축시킴으로써 가독성을 높이고 편리하게 사용할 수 있다.

 

 

 

※ 서브쿼리

1. 서브쿼리란? - 메인 쿼리문 안에 존재하는 또 다른 쿼리문으로 위치에 따라 다음과 같이 나눠진다.

1-1. 스칼라 서브쿼리(Scalar Subquery) - 주로 SELECT절에 위치하지만 컬럼이 올 수 있는 대부분의 위치에 사용 가능하다. 컬럼 대신 사용되므로 반드시 하나의 값만 반환해야 하며 그렇지 않은 경우 에러를 발생한다.

1-2. 인라인 뷰(Inline View) - FROM절 등 테이블명이 올 수 있는 위치에 사용가능하다.

1-3 중첩 서브쿼리(Nested Subquery) - WHERE절과 HAVING절에 사용가능하며 메인 쿼리와의 관계에 따라 다음과 같이 나뉜다.

① 메인 쿼리의 컬럼 존재 여부

㉮ 비연관 서브쿼리(Un-Correlated Subquery) - 서브쿼리 내에 메인 쿼리의 컬럼이 존재하지 않는다. 

연관 서브쿼리(Correlated Subquery) - 서브쿼리 내에 메인 쿼리의 컬럼이 존재한다. 

② 반환하는 데이터 형태

㉮ 단일 행 서브쿼리 - 항상 1건 이하의 행만 반환하며 특정 비교 연산자(=, <, <=, >, >=, <>)와 함께 사용한다.  

㉯ 다중 행 서브쿼리 - 2건 이상의 행을 반환하며 특정 비교 연산자(IN, ALL, ANY, SOME, EXISTS)와 함께 사용한다.

* IN 연산자 - 메인 쿼리의 비교조건이 서브쿼리의 출력결과와 하나라도 일치한 데이터를 반환

* ALL 연산자 - 메인 쿼리의 비교조건이 서브쿼리의 출력결과와 모두 일치한 데이터를 반환

* ANY, SOME 연산자 - 메인 쿼리의 비교조건이 서브쿼리의 출력결과와 하나 이상 일치한 데이터를 반환

* EXIST 연산자 - 서브쿼리의 출력결과가 하나라도 존재하면 참

㉰ 다중 컬럼 서브쿼리 

※ STANDARD JOIN

             1. STANDARD JOIN이란? - SQL의 표준이 되는 ANSI SQL 중 하나로 표준 조인이라고 더 불린다. JOIN 조건식에 ON절을 사용한다.

 

       2. INNER JOIN - JOIN 조건에 충족하는 데이터만을 출력

            Ex) SELECT S.STUDENT_NAME, R.TEST_SCORE FROM STUDENT S INNER JOIN RESULT R ON S.STUDENT_ID = R.STUDENT_ID;

 

       3. OUTER JOIN - JOIN 조건에 충족하지 않는 데이터도 출력

           ① LEFT OUTER JOIN - 왼쪽 테이블의 모든 데이터가 조건에 상관없이 출력되며 JOIN되는 데이터가 없는 오른쪽 테이블의 Row들은                    NULL값을 가진다.

           ② RIGHT OUTER JOIN - 오른쪽 테이블의 모든 데이터가 조건에 상관없이 출력되며 JOIN되는 데이터가 없는 왼쪽 테이블의 Row들은                  NULL값을 가진다.

           ③ FULL OUTER JOIN - 왼쪽, 오른쪽 테이블의 데이터가 모두 출력되며 중복값을 제거된다. JOIN되는 데이터가 없는 테이블의                            Row들은 NULL값을 가진다.

 

        4. NATURAL JOIN - A테이블과 B테이블이 동일하게 갖고 있는 컬럼들이 모두 동일한 데이터를 가지고 있으면 JOIN이 된다.                              SQL SERVER에서 사용 불가능하며 ON절을 사용하지 못한다.

 

        5. CROSS JOIN - 별도의 JOIN 조건이 없는 경우 사용되는 JOIN이며 조합할 수 있는 경우를 모두 출력한다.

 

※ JOIN

       1. JOIN이란? - 두 개 이상의 테이블을 연결하여 데이터를 출력하는 것

 

       2. EQUI JOIN - 두 테이블이 공통적으로 갖고 있는 컬럼의 데이터가 일치할 경우 사용하며 JOIN 조건식에 =연산자를 사용한다.

                     Ex) SELECT STUDENT_NAME, TEST_SCORE FROM STUDENT, SCORE WHERE STUDENT.STUDENT_ID = SCORE.STUDENT_ID;

 

       3. Non EQUI JOIN - 두 테이블의 JOIN 조건식에 =연산자를 제외한 비교 연산자(BETWEEN, >, >=, <, <=)를 사용한다.

             Ex) SELECT M.NAME, MS.RANK FROM MEMBER M, MEMBERSHIP MS WHERE M.CARD_USAGE BETWEEN MS.MIN AND MS.MAX;

 

 

       4. OUTER JOIN - JOIN 조건에 만족한 행과 만족하지 않는 행도 출력하는 것으로 LEFT OUTER JOIN과 LIGHT OUTER JOIN이 있다.                      조건절에서 모든 행이 출력되는 테이블의 반대편 테이블의 옆에 (+)를 붙여 작성한다.

             Ex) SELECT P.PRODUCT_ID, R.MEMBER_ID, R.CONTENT FROM PRODUCT P, REVIEW R WHERE P.PRODUCT_ID = R.PRODUCT_ID(+)

+ Recent posts