뷰(view)는 데이터베이스에 저장된 SELECT문장이다.

뷰를 통해서 이미 데이터베이스에 있는 데이터에 대해 가상의 뷰를 만들 수 있다.

뷰는 SELECT 문장을 저장한것이기 때문에 뷰가 참조한 테이블의 데이터가 바뀌면 뷰가 출력하는 데이터도 함께 바뀐다.

따라 뷰를 사용하면 데이터베이스가 갱신될 때마다 함께 갱신되는 동적인 테이블을 만들 수 있다.

뷰를 사용할때는 지정하려는 열 이름 앞뒤로 []를 붙여서 사용한다. 

뷰를 불러올 때에는 create할때 지정한 이름으로 똑같이 SELECT *FROM (view name)으로 불러오면 된다.

뷰를 수정하고싶다면 CREATE를 ALTER로 바꾸어 실행해주면 된다. 그러면 저장된 SELECT문장이 변경된다.

뷰를 삭제하려면 DROP VIEW (Viewname)을 사용하면 된다.

 

뷰의 장점으로는 다음이 있다.

1. 복잡성을 줄여준다.
2. 재사용 가능성을 증가시킨다.
3. 데이터를 적절하게 포맷한다.
4. 계산된 열을 생성할 수 있다.
5. 열의 이름을 다시 명명하는데에 사용할 수 있다.
6. 데이터 하위 집합을 생성할 수 있다.
7. 보안 제약을 강화하는 데 사용될 수 있다.

보안 제약의 경우 보안상 사용자에게 데이터를 제공하는데에 있어서 best의 케이스는 api 형태로 제공하는 것이다. 하지만 사용자가 계정을 가지는 경우, 특정 데이터에 접근을 제한해야 하는 경우가 있다. 이럴 때 해당 데이터 테이블에 접근을 제한하면서, 해당 테이블에서 제공해도 되는 데이터를 가진 뷰에 대한 접근을 허가하는것으로 이 문제를 해결할 수 있다.

뷰를 사용하면서 알아야하는 점은 뷰는 disc에 저장되지 않고 메모리에 체류한다는 점이다. 뷰를 생성할때마다 차지하는 메모리가 점점 누적된다.  

자체 조인은 자기 자신을 참조해 테이블을 조인하게 해준다.

위 예시를 보면 첫번째 열에는 직원 ID, 세번째 열에는 해당 열의 매니저의 ID를 가지고 있다.

자체 조인을 통해 해당 테이블에서 직원과 매니저의 관계를 명시하는 테이블을 만들어낼 수 있다.

자체 조인을 시행할 때 내부조인과 외부조인을 모두 사용할 수 있다. 자신이 원하는 테이블의 형태를 고려해 선정하면 된다.   

교차 조인은 외부 조인도 아니고 내부 조인도 아니다.

교차 조인은 테이블간의 관계를 나타내지 않고 조인하는 방법이다.

교차조인은 테이블들에게서 나올 수 있는 행의 모든 조합을 다 만들어낼 수 있다. 이를 Cartesian product라고 부른다.

 위 예시처럼 3가지 size와 4가지 color의 조합으로 12개 행을 가진 테이블을 만들 수 있다.

 또한 교차조인은 위 예시처럼 원하는 행을 선택해서 보는 용도로도 사용할 수 있다.

'DB > 관계형 DB' 카테고리의 다른 글

저장 프로시저  (0) 2021.05.12
서브쿼리(Subqueries)  (0) 2021.05.07
외부 조인(LEFT/RIGHT JOIN, FULL JOIN)  (0) 2021.04.28
내부 조인(INNER JOIN)  (0) 2021.04.28
PIVOT(크로스탭)  (0) 2021.04.28

외부 조인의 유형으로는 왼쪽 조인(LEFT JOIN), 오른쪽 조인(RIGHT JOIN), 전체 조인(FULL JOIN) 세가지가 있다.

 

LEFT/RIGHT JOIN

왼쪽 조인과 오른쪽 조인은 어느 테이블이 왼쪽으로 올지 순서를 제외하고는 본질적으로는 같은 논리를 가지고있다.

위 예시에서는 Customers 테이블을 기준으로 Orders와 Refunds 테이블이 조인된 형태이다.

이 경우에는 Customers가 Primary, Orders와 Refunds가 Secondary 테이블이 된다. 

Secondary테이블을 Primary 테이블에 조인시킬 때, Secondary테이블의 행과 매치되는 행이 없어도 Primary테이블의 모든 행들이 출력된다. 내부 조인에서는 두 테이블 간 매치되는 행이 없는 경우에는 해당 행이 아예 출력되지 않았었다. 

 

위 예시는 Right Join을 사용한 예시이다.

Primary/Secondary관계가 반대로 된것 외에는 Left Join과 결과물이 완전히 같다.

떄문에 Left Join을 활용할 줄 안다면 Right Join은 사용하지 않아도 무방하다.

 

FULL JOIN

FULL JOIN(전체 조인)에서는 Left/Right Join과는 다르게 Primary가 존재하지 않고 양 테이블이 모두 Secondary이다. 

따라서 테이블_1과 테이블_2 사이에 서로 매칭되는 행이 없더라도 서로의 모든 행을 보여줘야 한다.

위 예시에서 확인할 수 있는것처럼 서로 매칭되는 행이 없더라도 해당 행이 출력된다.

'DB > 관계형 DB' 카테고리의 다른 글

서브쿼리(Subqueries)  (0) 2021.05.07
교차 조인(cross join)  (0) 2021.04.29
내부 조인(INNER JOIN)  (0) 2021.04.28
PIVOT(크로스탭)  (0) 2021.04.28
소계(ROLL UP / CUBE)  (0) 2021.04.23

내부 조인은 두 테이블간 공유하는 열을 통해 두 테이블을 조인 시켜주는것이다.

위 예시에서는 CustomerID를 통해 두 테이블을 조인시켰다.

SELECT*
FROM 테이블_1
INNER JOIN 테이블_2
ON 테이블_1.매칭될 열 = 테이블_2.매칭될 열  

위 형태가 내부 조인의 기본적인 형태이다.

테이블_1과 테이블_2의 순서가 바뀌어도 동일한 결과가 출력된다.

 

'DB > 관계형 DB' 카테고리의 다른 글

교차 조인(cross join)  (0) 2021.04.29
외부 조인(LEFT/RIGHT JOIN, FULL JOIN)  (0) 2021.04.28
PIVOT(크로스탭)  (0) 2021.04.28
소계(ROLL UP / CUBE)  (0) 2021.04.23
분할(Partition)  (0) 2021.04.23

PIVOT 함수는 행을 열로 변환할 수 있게 해준다.

사용 예는 다음과 같다.

SELECT
FROM(PIVOT을 적용할 쿼리문) AS result
PIVOT(그룹 함수(집계할 열) FOR PIVOT의대상이 될 열 IN([값1],[값2]...)) AS pivot_result

의 형태를 가진다.

 

'DB > 관계형 DB' 카테고리의 다른 글

외부 조인(LEFT/RIGHT JOIN, FULL JOIN)  (0) 2021.04.28
내부 조인(INNER JOIN)  (0) 2021.04.28
소계(ROLL UP / CUBE)  (0) 2021.04.23
분할(Partition)  (0) 2021.04.23
랭킹 함수(Row_Number, Rank, Dense_Rank, NTile)  (0) 2021.04.22

+ Recent posts