2023. 10. 21. 18:42ㆍCS Life/Database
Joined Relations
- Takes two relations and returns as a result another relation
- 두 relation 의 tuple 이 일치하는 Cartesian 곱
- 두 테이블에 공통된 값을 사용하여 두 테이블의 열을 결합하는 데 사용
Natural Join
- 모든 common attributes 에 대해서 동일한 값을 가진 tuple 을 일치시킨다
- 각 공통 열의 복사본을 하나만 유지
→ 두 쿼리는 동일한 작동 - 연결된 테이블 의 동일하거나 일치하는 열 값에 대한 JOIN 을 수행
- 연결된 테이블의 이름이 같은 columns 는 한번만 나타난다
- 열은 동일한 data type 이어야 한다!
Join Condition
- ON 조건은 조인되는 관계에 대한 general predicate 를 허용한다
- ON 을 쓰는 것 이외에는 WHERE 절처럼 작성한다
Inner Join = 교집합
- 두 테이블에 일치하는 값이 있는 record 를 선택
→ 두 테이블을 조인하려면 Company_ID 가 같아야한다는 조건이 필요하다
Outer Join = 합집합
- 정보가 손실되지 않는 Join 이라고 볼 수 있음
- 조인을 계산한 다음 일치하지 않는 관계에 있는 튜플들을 추가한다
- NULL value 사용
Left Outer Join
두 테이블에서 일치하는 모든 행 + 두번째 테이블과 일치하지 않는 첫번째 테이블의 행
→ 첫번째 테이블 (NULL 값 포함)
- The result is NULL from the right side, if there is no match
company_id 가 동일한 값에 대해서 company 와 food 테이블을 합친다. 이때 company 와 food 테이블의 동일한 값 + company 만 가지고 있는 값에 대해서 각 column 들을 선택해서 출력한다
Right Outer Join
- 두 테이블이 일치하는 행을 가져오고, 두번째 테이블의 값을 가져온다
The result is NULL from the left side, if there is no match
Full Outer Join
results of both left and right outer joins and returns all
Difference Between Inner & Outer
Inner Join : 일치하는 값을 출력하는 Join
→ 두 테이블의 공통 필드 또는 열을 기반으로 일치시키는 비교 연산자가 필요
Outer Join :
→ 조건을 충족하는 테이블의 모든 행을 반환
→ 조건과 일치하지 않는 행도 나타난다
View
- 항상 모든 유저가 데이터베이스의 모든 관계나 데이터를 볼 수 있는 것이 좋은 것은 아니다.
- 특정 사용자가 데이터베이스를 확인할 때 특정 데이터를 숨길 수 있는 메커니즘을 제공
- Table(virtual relation) 으로 표시되는 모든 관계를 View 라고 한다
[! View 의 특징]
뷰는 기본테이블로부터 유도된 테이블이기 때문에 기본 테이블과 같은 형태의 구조를 사용하며, 조작도 기본 테이블과 거의 같다.
뷰는 가상 테이블이기 때문에 물리적으로 구현되어 있지 않다.
데이터의 논리적 독립성을 제공할 수 있다.
필요한 데이터만 뷰로 정의해서 처리할 수 있기 때문에 관리가 용이하고 명령문이 간단해진다.
뷰를 통해서만 데이터에 접근하게 하면 뷰에 나타나지 않는 데이터를 안전하게 보호하는 효율적인 기법으로 사용할 수 있다.
기본 테이블의 기본키를 포함한 속성(열) 집합으로 뷰를 구성해야지만 삽입, 삭제, 갱신, 연산이 가능하다.
일단 정의된 뷰는 다른 뷰의 정의에 기초가 될 수 있다.
뷰가 정의된 기본 테이블이나 뷰를 삭제하면 그 테이블이나 뷰를 기초로 정의된 다른 뷰도 자동으로 삭제된다.
[! View 추가 정리]
일반적으로 말하는 뷰(View)를 저장된 뷰(Stored View) 라고 한다. (View)
- 여기서 말하는 저장은 데이터 저장이 아닌, 쿼리 저장을 의미한다.
- 쿼리 안에 서브쿼리 개념으로 포함된 뷰를 inline view 라고 한다. (Inline View)
- 1번의 뷰를 쿼리에서 사용하면 실제로는 2번처럼 동작한다.
- 뷰의 결과 데이터를 저장하는 뷰는 Materialized View 라고 한다. (Materialized View)
Index
두개의 table 을 비교할 때 A 끼리 비교하면 1GB 만 필요한 것을 table1 을 전체 읽으면 100GB 가 필요함 이것은 매우 비효율적인 작업이 된다 → 이 문제를 해결하기 위한 방법 중 하나가 Index
→ Many queries reference only a small proportion of the records in a table
- An Index in an attribute of a relation : 데이터베이스 시스템이 관계의 모든 튜플을 스캔하지 않고도 해당 속성에 대해 지정된 값을 가진 관계의 튜플을 효율적으로 찾을 수 있도록 하는 데이터 구조
- 인덱스는 SELECT, DELETE 및 UPDATE 문과 같은 연산을 더 빠르게 수행하여 많은 양의 데이터를 다룰 수 있다.
Without Index
- 전체 테이블을 읽으면서 쿼리를 진행하기 때문에 문제가 많다
- The larger the table, the more this costs
Examples
create table student (ID varchar(5), name varchar(20) not null, dept_name varchar(20), tot_cred numeric(3,0) default 0, primary key (ID)) --Create Index create index studentID_index on student(ID) -- query with index select * from student where ID = '12345'
→ 위와 같이 한 테이블의 모든 기록을 보지 않고도 인덱스를 사용해서 필요한 기록만 찾아 실행
Reference
“이 글은 Obsidian 에서 작성되어 업로드 되었습니다”
'CS Life > Database' 카테고리의 다른 글
Week 5 - Introduction to SQL (1) (0) | 2023.10.24 |
---|---|
[프로그래머스] SELECT 문제풀이 (0) | 2023.10.23 |
Week 6 - Introduction to SQL (2) (0) | 2023.10.21 |
Week 3 - Introduction to Relation Model (0) | 2023.10.20 |
Week 2 - Introduction (1) | 2023.10.20 |