SQLD 1과목 데이터 모델과 SQL
<목차> |
2. 관계와 조인의 이해
관계
엔터티의 인스턴스 사이의 논리적인 연관성으로서 존재의 형태로서나 행위로서
서로에게 연관성이 부여된 상태
1) 관계의 정의
- 사전적으로 정의하면 상호 연관성이 있는 상태
- 관계는 엔터티와 엔터티 간 연관성을 표현하기 때문에 엔터티의 정의에 따라 영향을 받기도 하고, 속성 정의 및 관계 정의에 따라서도 다양하게 변할 수 있음.
2) 관계의 페어링
- 엔터티 안에 인스턴스가 개별적으로 관계를 가지는 것
- 개별 인스턴스가 각각 다른 종류의 관계를 가지고 있다면 두 엔터티 사이에 두 개 이상의 관계가 형성될 수 있음
3) 관계의 분류
ㄱ. 존재에 의한 관계 / 행위에 의한 관계
- 황경빈이란 사원이 DB 팀에 소속되어 있기 때문에 나타나는 즉 존재의 형태에 의해 관계 형성
- 김정재 고객의 '주문한다'라는 행위를 하였기 때문에 주문번호 발생되었으므로,
두 엔터티 사이의 관계는 행위에 의한 관계
ㄴ. UML (Unified Modeling Language) - 클래스다이어그램의 연관관계 / 의존관계
연관관계: 항상 이용하는 관계로 존재적 관계에 해당
의존관계: 상대방 클래스의 행위에 의해 관계가 형성될 때 구분하여 표현
> ERD에서는 존재적 관계와 행위에 의한 관계를 구분하지 않고 표현
> 클래스다이어그램에서는 이것을 구분하여 연관관계와 의존관계로 표현
클래스다이어그램 분류 | 표현방법 | 비고 |
연관관계 | 실선 | 소스코드에서 멤버변수로 선언하여 사용 |
의존관계 | 점선 | Operation 코드에서 파라미터 등으로 이용 |
4) 관계의 표기법
- 관계명 (Membership): 관계의 이름
- 관계차수 (Cardinality) : 1:1, 1:M, M:N
- 관계선택사양 (Optionality): 필수관계, 선택관계
ㄱ. 관계명
- 엔터티가 관계에 참여하는 형태
- 각각의 관계는 두 개의 관계명을 가지고 있음
- 각각의 관계명에 의해 두 가지의 관점으로 표현될 수 있음
- 관계시작점: 엔터티에서 관계가 시작되는 편
- 관계끝점: 엔터티에서 관계를 받는 편
* 관계명 명명규칙
- 애매한 동사를 피함 ex) 관계된다, 관련이 있다, ~이다, ~하다 등 > 구체적이지 않음.
- 현재형으로 표현 ex) 수강 신청한다, 강의를 한다 / 수강을 신청했다 (X)
ㄴ. 관계차수
- 두 개의 엔터티간 관계에서 참여자의 수를 표현하는 것
- 가장 중요한 사항은 한 개의 관계가 존재하느냐 아니면 두 개 이상의 멤버십이 존재하는지를 파악하는 것
ㄷ. 관계선택사양
- 관계를 통한 상대방과의 업무적인 제약조건을 표현하는 것으로서 간단하면서 아주 중요한 표기법.
- 필수참여: 참여하는 모든 참여자가 타 엔터티의 참여자와 연결이 되어야 하는 관계
ex) 주문서는 반드시 주문목록을 가져야 함.
- 선택참여: 연관은 있으나 서로가 필수적인 관계는 아닌 관계
ex) 목록은 주문이 될 수도 있고 주문이 되지 않은 목록이 있을수도 있음.
* 선택참여로 지정해야 할 관계를 필수참여로 잘못 지정하면 애플리케이션에서 데이터가 발생할 때 반드시 한 개의 트랜잭션으로 제어해야 하는 제약사항 발생.
> 설계단계에서 필수참여와 선택참여는 개발시점에 업무 로직과 직접적으로 관련된 부분이므로 반드시 고려되어야 함.
5) 관계의 정의 및 읽는 방법
ㄱ. 관계 체크사항
- 두 개의 엔터티 사이에서 관계를 정의할 때 다음 사항 체크
- 두 개의 엔터티 사이에 관심있는 연관규칙이 존재하는가?
- 두 개의 엔터티 사이에 정보의 조합이 발생되는가?
- 업무기술서, 장표에 관계연결에 대한 규칙이 서술되어 있는가?
- 업무기술서, 장표에 관계연결을 가능하게 하는 동사(Verb) 가 있는가?
ㄴ. 관계읽기
- 기준(Source) 엔터티를 한 개(One) 또는 각 (Each)으로 읽음.
- 대상(Target) 엔터티의 관계참여도 즉 개수 (하나, 하나 이상)를 읽음.
- 관계선택사양과 관계명을 읽음.
조인 (JOIN)
1) JOIN 개요
- 두 개 이상의 테이블들을 연결 또는 결합하여 데이터를 출력하는 것
- 관계형 데이터베이스의 가장 큰 장점이면서 대표적인 핵심 기능
- PK와 FK의 값을 기반으로 JOIN 성립
- 조인은 여러 테이블을 하나의 테이블로 만드는 과정
- 조인을 잘못하면 데이터 많아짐. (중복된 데이터가 있을 때 JOIN을 신중히 해야 함.)
2) EQUI JOIN (등가 조인)
- 두 개의 테이블 간에 칼럼 값들이 서로 정확하게 일치하는 경우에 사용되는 방법
- PK ↔ FK 의 관계를 기반으로 함.
- JOIN의 조건은 WHERE 절에 기술하게 되는데 "=" 연산자를 사용해서 표현
- 참여하는 대상 테이블이 N개라고 했을 때, N개의 테이블로부터 필요한 데이터를 조회하기 위해 필요한 JOIN 조건은
"N-1"
ex) FROM 절에 테이블이 3개가 표히되어 있다면 JOIN 조건은 3-1=2개 이상이 필요
- SELECT 절에서 칼럼에 대한 ALIAS를 사용하는 것처럼 FROM 절의 테이블에 대해서도 ALIAS 사용 가능
( 테이블에 대한 ALIAS를 적용해서 SQL 문장을 작성했을 경우, WHERE 절과 SELECT 절에는 테이블명이 아닌 테이블에 대한 ALIAS 사용해야 함.)
[EQUI JOUN의 대략적인 형태]
SELECT 테이블1.칼럼명, 테이블2.칼럼명, ... FROM 테이블1, 테이블2 WHERE 테이블1.칼럼명1 = 테이블2.칼럼명2; > WHERE 절에 JOIN 조건을 넣음. |
[ANSI/ISO SQL 표준 방식]
SELECT 테이블1.칼럼명, 테이블2.칼럼명, ... FROM 테이블1 INNER JOIN 테이블2 ON 테이블1.칼럼명1 = 테이블2.칼럼명2; > ON 절에 JOIN 조건 넣음. |
2-1) ANSI/SO SQL의 FROM 절 JOIN 형태
JOIN 명 | 특징 |
INNER JOIN(내부조인) | JOIN 조건에서 동일한 값이 있는 행만 반환 (CROSS JOIN, OUTER JOIN 과는 같이 사용 불가) |
NATURAL JOIN | INNER JOIN의 하위 개념. 두 테이블 간의 동일한 이름을 갖는 모든 칼럼들에 대해 EQUI JOIN 수행(NATURAL INNER JOIN 이라고도 표시) |
USING 조건절 | USING 절에 두 테이블에 존재하는 공통된 컬럼명 사용. 데이터 유형도 동일해야 함. (SQL Server에서는 미지원) |
ON 조건절 | JOIN 조건이 숨이 있지 않고, 명시적으로 JOIN 조건을 구분할 수 있고, NATURAL JOIN이나 USING 조건절처럼 칼럼명이 똑같아야 된다는 제약 없이 칼럼명이 상호 다르더라도 JOIN 조건으로 사용 가능. 다만, FROM 절에 테이블이 많아 사용될 경우 다소 복잡하게 보여 가독성이 떨어지는 단점. |
CROSS JOIN | 테이블 간 JOIN 조건이 없는 경우 생길 수 있는 모든 데이터의 조합 |
OUTER JOIN (외부조인) | JOIN 조건에서 동일한 값이 없는 행도 반환할 때 사용 가능 |
LEFT OUTER JOIN | 조인 수행 시 먼저 표기된 좌측 테이블에 해당하는 데이터를 먼저 읽은 후, 나중 표기된 우측 테이블에서 JOIN 대상 데이터를 읽어옴. 우측 JOIN 칼럼에서 같은 값이 없는 경우에는 우측 테이블에서 가져오는 칼럼들은 NULL 값으로 표기 |
RIGHT OUTER JOIN | 우측 테이블이 기준이 되어 결과 생성. |
FULL OUTER JOIN | 조인 수행 시 좌측, 우측 테이블의 모든 데이터를 읽어 JOIN 하여 결과 생성. UNION ALL 이 아닌, UNION 기능과 동일. (모든 중복된 행은 하나의 행으로 만듦.) |
3) NON EQUI JOIN (비등가 조인)
- 두 개의 테이블 간에 칼럼 값들이 서로 정확하게 일치하지 않는 경우에 사용
- "=" 연산자가 아닌 다른 (Between, >, >=, <, <= 등) 연산자들을 사용하여 JOIN 수행
- 데이터 모델에 따라서 Non EQUI JOIN이 불가능한 경우도 있음.
SELECT 테이블1.칼럼명1, 테이블2.칼럼명2, ... FROM 테이블1, 테이블2 WHERE 테이블1.칼럼명1 BETWEEN 테이블2.칼럼명1 AND 테이블2.칼럼명2; |
이전글
다음글
'자격증 > SQLD' 카테고리의 다른 글
데이터 모델과 SQL - Null 속성의 이해 (1) | 2024.01.04 |
---|---|
데이터 모델과 SQL - 모델이 표현하는 트랜잭션의 이해 (1) | 2024.01.02 |
데이터 모델과 SQL - 정규화 (2) | 2023.12.30 |
데이터 모델링의 이해 - 식별자 (1) | 2023.12.27 |
데이터 모델링의 이해 - 관계 (0) | 2023.12.27 |