04-1 조인
p.138 ~ 161
1.
조인은 2개 이상의 테이블을 통합하여 검색 한다.
예를들어,
stock 테이블과 nasdaq_company 테이블에서
A사의 주식을 검색할 때 조인을 하면,
2개 테이블에 존재하는 열 데이터를 한 번에 확인할 수 있다.
조인을 알고 잘 활용하면,
여러 테이블에 흩어진 데이터를 손쉽게 통합해 분석할 수 있다.
2.
테이블을 2개 이상 조인한다는 의미 ?
잘 설계한 관계형 데이터베이스의 테이블은 1가지 이상의 엔티티를 포함 한다.
엔티티 ? == entity
저장되고 관리되어야 할 데이터로,
해당 책에서의 엔티티는
날짜나 종목 코드 등과 같은 식별자 정보를 의미 한다.
3.
조인은 테이블 A의 열과 테이블 B의 정보를 포함해
검색할 수 있게 만들어 준다.
데이터를 중복 저장하면 저장할 공간이 더 필요한 문제와,
중복 저장한 열 데이터를 수정할 경우,
해당 열을 가진 테이블의 데이터를 모두 찾아 수정해야 하는 문제가 발생한다.
결국 데이터 중복을 최소화 하는 설계를 피할 순 없으므로,
조인을 사용해 2개 이상의 테이블을 조합한 결과를 검색하는 방식이 효율적 이다.
4.
데이터 중복 없이 구성한 데이터 구조를 데이터 모델링에서는
정규화 2단계 라고 한다.
반면에 데이터를 중복해서 저장하는 데이터 구조를
반정규화 또는 역정규화 테이블 이라고 한다.
5.
데이터 모델링이란 주어진 상황에서 논리 데이터 모델을 구성하는 작업을 말한다.
정규화는 논리 데이터 모델의 중복을 제거해서 일관성 있고 안정적인 자료 구조를
만드는 단계 이다.
정규화는 세부적으로 1차 정규형부터 5차 정규형 까지, BCNF 정규형을 포함 한다.
일반적으로는 3차 정규형을 사용 한다.
3차 정규형은 데이터 모델이 적절한 일관성을 유지하면서도,
중복이 없는 논리 데이터 모델을 구성하는 것을 말한다.
위의 내용을 좀 더 자세히 파고 싶으면,
데이터 모델링 또는 데이터베이스 모델링 키워드로 검색하면 될듯 하다.
6.
내부 조인 ( INNER JOIN)
조인은 상황에 따라 여러 종류로 구분해 사용한다.
가장 많이 사용되는 조인인 내부 조인은 보통 "조인"이라고 한다.
그정도로 내부 조인이 많이 사용되기 때문이다.
내부 조인의 기본 형식
SELECT [ 열 이름 ]
FROM [ 테이블 1 ]
INNER JOIN [ 테이블 2 ] ON [ 테이블 1.열 ] = [ 테이블 2.열 ]
WHERE [ 검색 조건 ]
예시)
카트 테이블에 칼럼명이 NUM인 것과
북 테이블에 칼럼명이 NUM인 것을
조건으로 해서,
해당 열에 같은 ROW (행) 값이 있으면,
가져와라 !
14, 15가 같으니까 2개를 가져온 모습을 확인할 수 있다.
INNER JOIN 문의 기본 개념.
벤 다이어그램으로 표현.
고객 테이블
고객 번호 | 고객 이름 |
0001 | 박현규 |
0002 | 김은숙 |
0003 | 한승우 |
주문 테이블
주문 번호 | 고객 번호 | 주문 날짜 |
100 | 0001 | 2021-11-16 |
101 | 0002 | 2021-11-17 |
102 | 0004 | 2021-11-18 |
고객 테이블과 주문 테이블이 있다.
고객 테이블에는 고객 번호와 고객 이름이 저장.
주문 테이블에는 주문 번호, 고객 번호, 주문 날짜가 저장.
만약 고객의 주문 내역을 모두 확인 하려면 ?
고객 테이블과 주문 테이블을 조인하되,
고객 번호를 조인 조건으로 삼아야 한다.
내부조인을 통한 결과는 아래와 같다.
고객 번호 | 고객 이름 | 주문 번호 | 고객 번호 | 주문 날짜 |
0001 | 박현규 | 100 | 0001 | 2021-11-16 |
0002 | 김은숙 | 101 | 0002 | 2021-11-17 |
결과를 보면, INNER JOIN 으로 두 테이블을 조합해 총 2건의 데이터를 검색 했다.
즉, 두 테이블의 고객 번호가 서로 같은 0001과 0002에 해당하는 데이터만 조합해서 검색 했다.
그러면, 조건이 고객 번호인것도 알 수 있다.
INNER JOIN 문을 적용한 쿼리
SELECT
[고객.고객 번호], [고객], [고객 이름], [주문.주문 번호], [주문.고객 번호], [주문.주문 날짜]
FROM [고객]
INNER JOIN [주문] ON [고객.고객 번호] = [주문.고객 번호]
7.
조인은 2개 이상의 테이블을 전제로 하며,
실제 쿼리를 작성할 때는 SELECT 문에 다른 문을 추가하는 것이 아니라,
FROM 문에 조인할 테이블 나열 한다.
8.
테이블의 열 이름이 유일하다면 별칭을 사용하지 않아도 된다.
하지만, 유일하지 않으면, 별칭을 꼭 사용 해야 한다.
유일하지 않을때, 별칭 사용을 안하면,
데이터베이스 엔진은 어떤 테이블의 열을 검색 할지 판단할 수 없어서 에러가 발생 한다.
9.
ON 문은 테이블을 조인할 때 조인 조건으로 사용할 열을 지정 한다.
10.
ON 문과 WHERE 문의 차이
많은 사람이 조인을 학습할 때, ON 문과 WHERE 문의 역할을 혼동한다.
두 구문은 데이터를 필터링 한다는 점에서 역할이 비슷해 보이지만,
실제로는 완전히 다르다.
ON문은 조인할 때 조인 조건을 위해서만 사용하며,
WHERE 문은 조인을 완료한 상태에서 조건에 맞는 값을 가져오고자 사용 한다.
물론 ON 문에 조건을 다양하게 부여해서, WHERE 문과 같은 효과를 내게 할 수
있지만, 조인 조건을 만족하는 데이터 매칭 과정에서 오차가 발생하므로,
그렇게 하지 않는다.
반드시 ON문과 WHERE 문의 성격을 생각해서 분리하여 사용하자.
11.
별칭을 사용하지 않으면 ?
조인을 할 때 열 이름이 유일하지 않으면, 데이터베이스 엔진은
무슨 테이블의 열을 검색해야 하는지 판단을 하지 못한다.
8번에서 정리했듯이, 열 이름이 유일하지 않으면 별칭을 사용해서 에러를 해결 하자.
12.
3개 이상 테이블의 INNER JOIN 기본 형식
SELECT [열 이름]
FROM [테이블 1]
INNER JOIN [테이블 2] ON [테이블 1.열] = [테이블 2.열]
INNER JOIN [테이블 3] ON [테이블 2.열] = [테이블 3.열]
WHERE [검색 조건]
'Do it! SQL 입문 > 이론' 카테고리의 다른 글
서브 쿼리 (0) | 2023.07.02 |
---|---|
테이블을 서로 통합하는 조인 2 (0) | 2023.06.25 |
SQL 시작하기 (0) | 2023.06.21 |
SQL 시작하기 (0) | 2023.06.18 |
나만의 SQL 실습 환경 만들기 (0) | 2023.06.18 |