[DB] - 기능적 관점으로 구분하는 결합의 종류 1부 (6장) #104
Unanswered
Irisation23
asked this question in
c. Database
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
0. SQL 의
결합
SQL은 이와 같이 결합을 위한 옵션이 많이 제공되고 있다.
지금부터 정리하게 될 내용은
결합
의 종류에 따른 특징이다.1. 크로스 결합 - 모든 결합의 모체
크로스 결합
은 자주 사용되는 결합의 종류는 아니다.하지만 결합이라는 개념의 이해를 위해서는 필수적인 내용이다.
1.1 크로스 결합의 동작
크로스 결합을 위한 테이블은
사원(Employees)
과Department(부서)
이다.테이블은 아래와 같이 구성된다.
해당 두 테이블의 크로스 결합은 몇개의 레코드를 반환할까?
결과 보기
크로스 결합은 데카르트 곱이라 불리는 연산으로 2개 테이블의 레코드에서 가능한 모든 조합을 구하는 연산이다.
따라서 사원 테이블 1개에 대해 부서 테이블 4개가 결합하므로 6x4 = 24 가 된다.
크로스 결합은 결합의 모체이긴 하지만 실무에선 사용될 가능성이 굉장히 낮다.
2. 내부 결합 - 왜 '내부' 라는 말을 사용할까?
사원 테이블만으로는 사원의 부서 이름을 알 수 없다.
현재 알 수 있는 것은 부서 ID 뿐이다. 이 부서 ID를 통해 결합을 한 뒤
dept_name
필드에 있는 정보를 가져와야 한다.해당 쿼리의 결과는 크로스 결합의 부분 집합의 결과와 같다.
이같은 이유로
내부 결합
이라는 용어를 사용하게 되는 것이다.2.1 내부 결합과 같은 기능을 하는 상관 서브쿼리
위의 내부 결합 쿼리는
상관 서브쿼리
로도 해결이 가능하다.상관 서브쿼리 내부에서 결합 조건을 기술하고 있는데, dept_id는 부서 테이블의 기본 키이므로, 이를 조건으로 지정하면 레코드가 한개로 한정 된다.
즉 이는 상관 서브쿼리를 스칼라 서브쿼리로 이용할 수 있다.
하지만 일반적으로 상관 서브쿼리를 스칼라 서브쿼리로 사용하면 레코드 수만큼 상관 서브쿼리를 실행해 비용이 꽤 높다.
3. 외부 결합 - 왜 '외부'라는 말을 사용할까?
내부 결합과 외부결합은 배타적인 연산이다.
'외부' 는 데카르트 곱의 부분 집합 일 수도 아닐 수도 있다.
왜 일 수도 아닐 수 있는걸까?
3.1 외부 결합의 작동
외부 결합은 세 종류가 있다.
왼쪽 외부와 오른쪽 외부는 실질적으로 같은 기능을 한다.
마스터가 되는 테이블을 왼쪽에 적으면 왼쪽 외부 결합, 오른쪽에 적으면 오른쪽 외부 결합이라는 차이 밖에 없다.
아래의 쿼리는 완전히 같은 결과를 도출한다.
실행 결과의 마지막 레코드를 보면 알 수 있듯이, 마스터 테이블 쪽에만 존재하는 키가 있을 때는 해당 키를 제거하지 않고 결과에 보존한다.
따라서 키를 모두 가진 레이아웃의 리포트를 만들 때 자주 사용한다.
4. 외부 결합과 내부 결합의 차이
실행 결과를 보면 앞에서 본 6개의 레코드는 내부 결합과 결과가 같다. 마지막에 보이는 하나의 행이 결과가 다르다.
해당 레코드가 바로
외부 결합
에서의외부
의 의미이다.외부 결합 결과가 크로스 결합 결과의 부분집합이 아닌 이유는 이렇게, 외부 결합이 마스터 테이블의 정보를 모두 보존하고자 NULL을 생성하기 때문이다.
반면 크로스 결합과 내부 결합은 NULL을 생성하지 않는다.
Beta Was this translation helpful? Give feedback.
All reactions