데이터의 연결관계와 JOIN 친구들
수강후기(진도율 30% 시점)
- 초반 유닛들이 소리가 왔다갔다해서 볼륨을 조절해야했다.
- 강의소개 - 약간 작음
- section1의 이후 강의 - 매우 큼
- section2,3 - 작음
- 기본이론 + sql 사용법을 숙지하고 있다는 전제 하에 강의를 진행하니, 참고할 것
- pk(primary key) 등의 개념에 대한 설명은 없고, concat을 그냥 이거 콘캣하는거에요~ 하는 정도
- 조인, 서브쿼리, 대충 스키마 이해(예시 테이블 보고 PK 알고 inner join 실행할 수 있을 정도)
- + 개념에 대한 설명을 생략하고 강의를 진행하기에 약~간 두리뭉실하게 설명하시는 부분이 있음!
- 실습에 이용하는 예시 테이블이 전자상거래이기 때문에 인프런 DB에 적용해서 공부하기 좋음. 팀원들이 들으면 많은 공부가 될 것 같다!
- SQL을 쓰고있지만, 정확한 이해는 부족해서 복잡한 쿼리 작성 시 한 번에 원하는 데이터를 출력하지 못하고 여러번 트라이하는 인간(은 나)에게 추천할 수 있을 듯 하다. 타겟이 쬐끔 애매하긴 한 듯.
강의내용
1. 조인 시 데이터 집합 레벨의 변화
1집합 : 개별 키값이 1건만 있는 unique한 집합
M집합 : 여러 건이 있다는 의미가 아닌, 개별 값이 중복으로 있다는 뜻
1집합과 M집합을 조인하면 M집합의 레벨을 그대로 유지함.
인프런의 예 : 즉, user_id기준으로 users(1집합)와 orders(M집합)을 조인하면 orders 테이블의 레벨을 유지한다는 뜻
보통은 1:M 관계가 가장 많다.
결국 조인을 완료했을 때, ‘어떤 수준(레벨)의 테이블이 만들어졌느냐’를 아는 것이 중요하다.
- 예시
select e.ename, empno, job, a.deptno, dname from hr.emp a join hr.dept b on a.deptno = b.deptno order by ename
- M:N 조인을 하는 경우가 있는데, 이 경우 뻥튀기(곱하기)되어서 뒤죽박죽된 결과물이 나오는 경우가 있다.
인프런의 예 : “from carts join orders on carts.user_id = orders.user_id”를 하면 M 곱하기 N개의 결과물이 출력된다.
2. 데이터 연결 관계 이해
- 일반적인 전자상거래 DB의 구조
Customers - Orders - Order_Items - Products인프런의 예 : users - orders - carts - courses)
- order_items의 경우처럼, order - product 간 M:N의 관계일 때 이를 표현하기 위해서 관계테이블을 만든다.
인프런의 예 : groups_users, instructors 등”
- 참고
DBeaver에 ‘다이어그램 보기’ 기능이 있는데, 아주 놀랍다!
entity relationship diagram(ERD)) 도 알아두면 좋다! (닭발 같은거)
<참고 : antman의 다이어그램…ㅎㄷ 이거 뭐야 무서워>
3. 조인 유형의 이해 1 - inner join, outer join, full outer join
설명 쉽다~
아 맞다 DRM 거니까 캡처가 안되네 굳(나도 입사 안했으면 블로그에 캡처뜨다가 운영팀한테 경고먹었을 듯)
어쨌든 다이어그램 대신에 들고오셨던 그림이 아주 이해하기 쉬웠습니다.
대충 아는 내용이니까 복습이 필요하면 강의를 들으세용~
1. Equi 조인
: 조인 시 연결하는 키값이 서로 같은 경우(즉 = 로 연결)
2. Non Equi 조인
: 키값으로 연결 시 =이 아닌 다른 연산자(between, >, >=, <, >=)를 사용하는 조인 같지 않아도 조건만 맞으면 연결할 수 있습니다. between 조인이 많이 사용됩니다.
- between join
인프런의 예 : 멤버로서의(groups_users) 생성일(created_at)과 삭제일(deleted_at)이 있고 오더(orders)의 생성일이 있다고 했을 때, between 조인을 이용해서 해당 오더가 생성되었을 때 어떤 멤버였는지 확인할 수 있겠지
-물론 현재로서는 orders.member_id를 조회하는 것이 훨씬 간편하다. 적절한 설명을 못찾겠네
- cross join(Cartesian Product Join) : 조인 컬럼없이 두 테이블 간 가능한 모든 연결을 결합하는 조인 방식 (이거 어따 씀…?)
아 이거 이미지 리사이징 어떻게 하는거야 웨 않되ㅡㅡ 배워야겠네
참고 : coalesce({컬럼명}, {교체하고싶은 값}) : 출력 데이터가 null인 경우에 교체하고 싶은 값으로 바꿔주는 함수
댓글남기기