diff --git a/keyword/chapter01/images/join_image.png b/keyword/chapter01/images/join_image.png new file mode 100644 index 0000000..bf8185d Binary files /dev/null and b/keyword/chapter01/images/join_image.png differ diff --git a/keyword/chapter01/keyword.md b/keyword/chapter01/keyword.md new file mode 100644 index 0000000..4e02c69 --- /dev/null +++ b/keyword/chapter01/keyword.md @@ -0,0 +1,71 @@ +- DB Join이란? + - 데이터베이스에서 2개 이상의 테이블을 연결하여 데이터를 검색하는 방법 + - 분산된 데이터의 효율적 검색 및 통합 + - 보통 **PK**혹은 **FK**로 두 테이블을 연결한다. (무조건은 아니다.) + - JOIN을 위해선 적어도 하나의 칼럼은 서로 공유되고 있어야 한다. + + +- Join 종류들 + + ![image.png](./images/join_image.png) + + - **INNER JOIN** + - 교집합 + - 기준 테이블과 JOIN 테이블의 중복된 값 + - **LEFT JOIN (LEFT OUTER JOIN)** + - JOIN 기준 왼쪽 테이블의 모든 레코드가 SELECT되고, 오른쪽 테이블에서 일치하는 레코드를 반환 + - **RIGHT JOIN (RIGHT OUTER JOIN)** + - JOIN 기준 오른쪽의 모든 레코드가 SELECT되고, 왼쪽 테이블에서 일치하는 레커드를 반환 + - **FULL JOIN (FULL OUTER JOIN)** + - 양쪽 테이블의 모든 레코드 반환 + - 일치하지 않는 경우 NULL로 표시 + - **SELF JOIN** + - 테이블이 자기 자신과 조인 + - 같은 테이블에 별칭을 두어 사용하여 두 개의 다른 테이블인 것처럼 취급 + + +- 트랜잭션이란? + - 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위 + - 개별적으로 수행되는 것이 아니라 묶어서 연산을 진행하고 싶은 경우에 + 바로 **트랜잭션을** 사용 + + **트랜잭션의 특징** + + 1. 원자성(Atomicty): 전부 성공하거나, 전부 실패 + 1. 트랜잭션이 DB에 모두 반영되던가, 아니면 전혀 반영되지 않아야 한다. + 2. 일관성(Consistency): 트랜잭션 전 후에 DB는 일관된 상태 + 1. 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다. + 2. 항상 데이터가 우리가 원하는 정의에 일치해야 한다. + 3. 격리성(Isolation): 한 트랜잭션 수행 시, 다른 트랜잭션이 끼어들 수 없다 + 1. 둘 이상의 트랜잭션이 동시에 실행되려고 할 때, 어떤 하나의 트랜잭션이라도 다른 트랜잭션의 연산에 끼어들 수 없다. + 2. 적절한 격리수준을 조절하는 것이 중요 + 4. 지속성(Durablity): 성공한 트랜잭션은 영구적으로 반영 + 1. 트랜잭션이 성공적으로 완료됐을 경우, 결과는 영구적으로 반영되어야 한다는 속성 + + **COMMIT과 ROLLBACK** + + - COMMIT + - 모든 작업을 정상적으로 처리하겠다고 확정하는 명령어 + - 변경된 모든 내용을 영구 저장 + - 하나의 트랜잭션 과정 종료 + - ROLLBACK + - 트랜잭션 처리 과정에서 생긴 변경 사항을 취소 + - 트랜잭션 과정을 종료 + - 이전 COMMIT 위치로 복구 + + +- Join on 과 where의 차이점 + + **핵심 차이점** + + - **JOIN ON**: JOIN 전에 조건을 필터링 + - **WHERE:** JOIN 후에 조건을 필터링 + + **공통점** + + - INNER JOIN 연산에는 큰 차이가 없다. + + **차이점** + + - OUTER JOIN시, ON으로 조건을 적용시켜야 OUTER TABLE에 NULL값이 포함된 행들이 반환된다. + - WHERE을 사용했을 때 JOIN의 모든 조건이 끝나고 WHERE로 추가 조건을 걸어준다. \ No newline at end of file diff --git a/mission/chapter01/images/week01.png b/mission/chapter01/images/week01.png new file mode 100644 index 0000000..9c00393 Binary files /dev/null and b/mission/chapter01/images/week01.png differ diff --git "a/mission/chapter01/images/\354\227\220\353\260\230_\355\224\274\354\226\264\353\246\254\353\267\260_\354\240\234\354\235\264\354\235\230_\354\233\214\355\201\254\353\266\201.png" "b/mission/chapter01/images/\354\227\220\353\260\230_\355\224\274\354\226\264\353\246\254\353\267\260_\354\240\234\354\235\264\354\235\230_\354\233\214\355\201\254\353\266\201.png" new file mode 100644 index 0000000..d73908a Binary files /dev/null and "b/mission/chapter01/images/\354\227\220\353\260\230_\355\224\274\354\226\264\353\246\254\353\267\260_\354\240\234\354\235\264\354\235\230_\354\233\214\355\201\254\353\266\201.png" differ diff --git a/mission/chapter01/mission.md b/mission/chapter01/mission.md new file mode 100644 index 0000000..616c88a --- /dev/null +++ b/mission/chapter01/mission.md @@ -0,0 +1,79 @@ +### 워크북 캡쳐 + +![에반_피어리뷰_제이의_워크북.png](./images/에반_피어리뷰_제이의_워크북.png) + +### 워크북 리뷰 + + + +### 설계한 DB 사진 (0주차 DB 수정 가능!) + +![week01.png](./images/week01.png) + +### 본문 +1) 리뷰 작성하는 쿼리, 사진의 경우는 일단 배제 +```sql +INSERT INTO review (user_id, store_id, score, review_content, created_at, last_modified_at) +VALUES (1, 10, 5, '음 너무 맛있어요 포인트도 얻고 맛있는 맛집도 알게 된 것 같아 너무나도 행복한 식사였답니다. 다음에 또 올게요!!' NOW(), NOW()); +``` +2) 내가 진행중, 진행 완료한 미션 모아서 보는 쿼리(페이징 포함) +```sql +SELECT m.mission_title, m.mission_point, um.is_completed, um.created_at +FROM user_mission um +JOIN mission m ON um.mission_id = m.mission_id +WHERE um.user_id = 1 +ORDER BY um.created_at DESC +LIMIT 10 OFFSET 0; +``` +3) 마이 페이지 화면 쿼리 +```sql +SELECT user_name, user_address, point +FROM user +WHERE user_id = 1; +``` +4) 홈 화면 쿼리(현재 선택 된 지역에서 도전이 가능한 미션 목록, 페이징 포함) +```sql +SELECT s.store_name, m.mission_title, m.mission_point, m.finished_at +FROM mission m +JOIN store s ON m.store_id = s.store_id +WHERE s.store_address LIKE '%안암동%' AND m.is_active = 'TRUE' +ORDER BY m.created_at DESC +LIMIT 15 OFFSET 0; +``` + +### 미션 기록 +1) 리뷰 작성하는 쿼리, 사진의 경우는 일단 배제 + + +2) 내가 진행중, 진행 완료한 미션 모아서 보는 쿼리(페이징 포함) + + +3) 마이 페이지 화면 쿼리 + + +4) 홈 화면 쿼리(현재 선택 된 지역에서 도전이 가능한 미션 목록, 페이징 포함) + \ No newline at end of file