[SQL] MySQL 격리 수준
·
SQL
✅ 트랜잭션 격리 수준이란?트랜잭션의 격리 수준(isolation level)이란 여러 트랜잭션이 동시에 처리될 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 말지를 결정하는 것입니다.격리 수준은 크게 `READ UNCOMMITTED`, `READ COMMITTED`, `REPEATABLE READ`, `SERIALIZABLE`로 4가지로 나뉘며, 순서대로 뒤로 갈수록 각 트랜잭션 간의 데이터 격리(고립) 정도가 높아지고 동시 처리 성능이 떨어진다고 볼 수 있습니다. ✅ READ UNCOMMITTED`READ UNCOMMITTED` 격리 수준에서는 다음 시퀀스 다이어그램과 같이 각 트랜잭션에서의 변경 내용이 `commit`이나 `rollback` 여부에 상관없이 ..
[SQL] 실행 계획 분석해 성능 개선하기(MariaDB)
·
SQL
✅ 기존 쿼리 및 실행 계획 분석기존 쿼리 ↓더보기더보기analyzeselect a1_0.accommodation_id as '숙소 ID', a1_0.title as '숙소 제목', max(ap1_0.price) as '가격', coalesce(avg(r2_0.rating), 0.0) as '평균 평점', ai1_0.image_url as '썸네일', w1_0.wishlist_id is not null as '위시리스트 등록 여부', w1_0..
[프로그래머스 SQL] Lv.3 - 있었는데요 없었습니다
·
SQL/JOIN
https://school.programmers.co.kr/learn/courses/30/lessons/59043 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제 풀이ANIMAL_INS 테이블과 ANIMAL_OUTS 테이블을 아이디를 기준으로 조인한다.ANIMAL_INS의 보호 시작일보다 ANIMAL_OUTS의 입양일이 빠른 행을 필터링한다.아이디와 이름을 조회한다.보호 시작일을 기준으로 오름차순 정렬한다.SELECT A.ANIMAL_ID, A.NAMEFROM ANIMAL_INS AS A JOIN ANIMAL_OUTS AS B ON A.ANIMAL_ID = B.ANIMAL_..
[프로그래머스 SQL] Lv.3 - 없어진 기록 찾기
·
SQL/JOIN
https://school.programmers.co.kr/learn/courses/30/lessons/59042 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제 풀이ANIMAL_INS 테이블과 ANIMAL_OUTS 테이블을 동물 ID를 기준으로 조인한다. 이때 RIGHT JOIN으로 ANIMAL_INS 테이블에는 없는 ANIMAL_OUTS 테이블의 데이터가 NULL로 조회되도록 한다.ANIMAL_INS 테이블의 동물 ID가 NULL인 행을 필터링한다.ANIMAL_OUTS 테이블의 동물 ID와 이름을 조회한다.동물 ID를 기준으로 오름차순 정렬한다.SELECT B.ANIMAL_ID, B.NAM..
[프로그래머스 SQL] Lv.2 - 상품별 오프라인 매출 구하기
·
SQL/JOIN
https://school.programmers.co.kr/learn/courses/30/lessons/131533 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제 풀이PRODUCT 테이블과 OFFLINE_SALE 테이블을 상품 ID를 기준으로 조인한다.상품코드를 기준으로 그룹핑한다.상품 코드와 SUM 키워드로 상품 코드별 매출액의 합계를 조회한다.매출액을 기준으로 내림차순 정렬, 상품 코드를 기준으로 오름차순 정렬한다.SELECT P.PRODUCT_CODE, SUM(P.PRICE * O.SALES_AMOUNT) AS SALESFROM PRODUCT P JOIN OFFLINE_SA..
[프로그래머스 SQL] Lv.2 - 조건에 맞는 도서와 저자 리스트 출력하기
·
SQL/JOIN
https://school.programmers.co.kr/learn/courses/30/lessons/144854 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제 풀이BOOK 테이블과 AUTHOR 테이블을 저자 ID(AUTHOR_ID)를 기준으로 조인한다.BOOK 테이블의 카테고리가 "경제"인 행을 필터링한다.도서 ID, 저자명, 출판일을 조회한다. 출판일은 DATE_FORMAT 키워드로 포맷을 맞춰준다.출판일을 기준으로 오름차순 정렬한다.SELECT B.BOOK_ID, A.AUTHOR_NAME, DATE_FORMAT(B.PUBLISHED_DATE, '%Y-%m-%d') AS ..
[프로그래머스 SQL] Lv.4 - 연간 평가점수에 해당하는 평가 등급 및 성과금조회하기
·
SQL/GROUP BY
https://school.programmers.co.kr/learn/courses/30/lessons/284528 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제 풀이HR_EMPLOYEES 테이블과 HR_GRADE 테이블을 조인한다.이때 HR_GRADE 테이블은 서브 쿼리로 평가 등급을 구해야 한다. 사번을 기준으로 그룹핑하고, 평가 점수의 평균에 따라 S, A, B, C 중 하나로 조회한다.사번, 성명, 평가 등급, 성과금을 조회한다. 성과금은 서브 쿼리에서 조회한 등급에 맞게 알맞은 값으로 계산해 준다.사번을 기준으로 오름차순 정렬한다.SELECT E.EMP_NO, E.EMP_NAME..
[프로그래머스 SQL] Lv.4 - 언어별 개발자 분류하기
·
SQL/GROUP BY
https://school.programmers.co.kr/learn/courses/30/lessons/276036 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제 풀이DEVELOPERS 테이블과 SKILLCODES 테이블을 조인한다. 이때 ON 조건에 CODE와 SKILL_CODE를 AND 연산하면 SKILL_CODE에 해당하는 모든 CODE를 가져올 수 있다.ID와 EMAIL을 기준으로 그룹핑한다. 이때 아무런 GRADE를 가지고 있지 않은 행이 있을 수 있기 때문에 HAVING절에서 필터링해준다.GRADE와 ID, EMAIL을 조회한다. GRADE는 GROUP_CONCAT 키워드를 사용해서 그룹..
[프로그래머스 SQL] Lv.4 - 입양 시각 구하기(2)
·
SQL/GROUP BY
https://school.programmers.co.kr/learn/courses/30/lessons/59413 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제 풀이재귀 쿼리를 연습해 볼 수 있는 문제인 것 같다.재귀 쿼리로 0시에서 23시까지 생성하는 테이블을 만든다.재귀 쿼리로 만든 가상의 테이블과 ANIMAL_OUTS 테이블을 조인한다. 이때 입양이 발생하지 않는 경우에도 0건으로 조회해야 하기 때문에 LEFT JOIN으로 조인해 준다.시간대별로 그룹핑한다.시간대와 COUNT 키워드로 시간대별 입양 건수를 조회한다. 이때 LEFT JOIN이기 때문에 IFNULL 키워드를 같이 사용하여 입양 건..
[프로그래머스 SQL] Lv.4 - 년,월,성별 별 상품 구매 회원 수 구하기
·
SQL/GROUP BY
https://school.programmers.co.kr/learn/courses/30/lessons/131532 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제 풀이USER_INFO 테이블과 ONLINE_SALE 테이블을 조인한다.IN NOT NULL 키워드로 성별 정보가 있는 행만 필터링한다.년, 월, 성별을 기준으로 그룹핑한다.년, 월, 성별을 조회한다. 그리고 COUNT 키워드로 그룹핑된 회원 수를 조회한다. 이때 하나의 회원을 중복 계산하는 것을 방지하기 위해 DISTINCT 키워드로 중복을 제거한다.년, 월, 성별을 기준으로 오름차순 정렬한다.SELECT YEAR(B.SALES_D..