전체 글 126

SQL 성능 향상을 위한 공부: 1-3) 쿼리 평가엔진에 대하여

쿼리평가 엔진이란?- 사용자로부터 SQL 구문을 입력받아 분석하고- 데이터 접근 절차(실행 계획)를 결정하고 실행하는 모듈이다. 쿼리평가 엔진이 쿼리를 처리하는 흐름쿼리평가 엔진은 사용자로부터 SQL을 입력받은 후, 크게 3단계에 걸쳐 SQL을 처리한다. stage 1. Parser- Parsing: 입력받은 SQL 문(자연어)을 Parse Tree로 번역- Transformation Process: Parse Tree를 전달받아 Query Tree로 번역↓ stage 2. Optimizer시스템 카탈로그에 있는 테이블의 통계 정보를 바탕으로 다양한 실행 계획을 생성한 후, 가장 효율적으로 동작하는 실행 계획을 선택↓ stage 3. Executor (plan evaluation)선택한 실행 계획 순서..

DAY 36 / [프로그래머스] SQL 연습문제 5개 풀기

1. 조건에 맞는 회원수 구하기 (난이도 1)2. 나이 정보가 없는 회원 수 구하기 (난이도 1)3. 경기도에 위치한 식품창고 목록 출력하기 (난이도 1) 4. 강원도에 위치한 생산공장 목록 출력하기 (난이도 1) 5. 최댓값 구하기 (난이도 1) 1. 조건에 맞는 회원수 구하기SELECT COUNT(*) AS USERSFROM USER_INFOWHERE JOINED >= '2021-01-01' AND JOINED 2. 나이 정보가 없는 회원 수 구하기SELECT COUNT(*) AS USERSFROM USER_INFOWHERE AGE IS NULL 3. 경기도에 위치한 식품창고 목록 출력하기SELECT WAREHOUSE_ID , WAREHOUSE_NAME , ADDRESS ..

DAY 35 / [프로그래머스] SQL 연습문제 5개 풀기

1. 과일로 만든 아이스크림 고르기 (난이도 1) 2. 인기있는 아이스크림 (난이도 1) 3. 흉부외과 또는 일반외과 의사 목록 출력하기 (난이도 1)4. 12세 이하인 여자 환자 목록 출력하기 (난이도 1)5. 가장 비싼 상품 구하기 (난이도 1)1. 과일로 만든 아이스크림 고르기SELECT o.FLAVORFROM FIRST_HALF AS oINNER JOIN ICECREAM_INFO AS i ON o.FLAVOR = i.FLAVORWHERE o.TOTAL_ORDER > 3000 AND i.INGREDIENT_TYPE = 'fruit_based'ORDER BY o.TOTAL_ORDER DESC 2. 인기있는 아이스크림SELECT FLAVORFROM FIRST_HALFORDER BY TOTAL_OR..

DAY 34 / [프로그래머스] SQL 연습문제 3개 풀기

1. 자동차 대여 기록에서 장기/단기 대여 구분하기 (난이도 1)2. 평균 일일 대여 요금 구하기 (난이도 1)3. 조건에 맞는 도서 리스트 출력하기 (난이도 1) 1. 자동차 대여 기록에서 장기/단기 대여 구분하기SELECT HISTORY_ID , CAR_ID , DATE_FORMAT(START_DATE, '%Y-%m-%d') AS START_DATE , DATE_FORMAT(END_DATE, '%Y-%m-%d') AS END_DATE , CASE WHEN DATEDIFF(END_DATE, START_DATE) + 1 >= 30 THEN '장기 대여' ELSE '단기 대여' END AS RENT_TYPEFROM CAR_RENTAL_COMPANY_RENTAL_HISTORYW..

DAY 33 / [프로그래머스] SQL 연습문제 3개 풀기

1. Python 개발자 찾기 (난이도 1) 2. 조건에 부합하는 중고거래 댓글 조회하기 (난이도 1) 3. 특정 옵션이 포함된 자동차 리스트 구하기 (난이도 1) 1. Python 개발자 찾기-- 방법 1.SELECT ID , EMAIL , FIRST_NAME , LAST_NAMEFROM DEVELOPER_INFOSWHERE SKILL_1 = 'Python' OR SKILL_2 = 'Python' OR SKILL_3 = 'Python'ORDER BY ID-- 방법 2.SELECT ID , EMAIL , FIRST_NAME , LAST_NAMEFROM DEVELOPER_INFOSWHERE 'Python' IN (SKILL_1, SKILL_2, SKIL..

DAY 32 / [프로그래머스] SQL 연습문제 3개 풀기

1. 잡은 물고기 중 가장 큰 물고기의 길이 구하기 (난이도 1) 2. 잡은 물고기의 평균 길이 구하기 (난이도 1)3. 잔챙이 잡은 수 구하기 (난이도 1) 1. 잡은 물고기 중 가장 큰 물고기의 길이 구하기SELECT CONCAT(MAX(LENGTH), 'cm') AS MAX_LENGTHFROM FISH_INFO CONCAT 함수를 쓰면서 헷갈렸던 점- 같은 데이터 형식만 연결할 수 있는 거였나? 이 문제는 숫자와 문자열을 연결해서 출력해야 하는데, 이게 CONCAT으로 가능한지 헷갈렸다.- 공식문서를 다시 찾아보니 -> CONCAT()은 여러 값을 한 줄의 문자열로 이어 붙이는 함수인데, 숫자든 문자열이든 넣을 수 있다. 숫자는 자동으로 문자열로 바꿔서 이어붙여 준다. 그리고 인자는 하나 이상 가..

DAY 31 / [프로그래머스] SQL 연습문제 3개 풀기

1. 특정 형질을 가지는 대장균 찾기 (난이도 1) 2. 가장 큰 물고기 10마리 구하기 (난이도 1) 3. 한 해에 잡은 물고기 수 구하기 (난이도 1) 특정 형질을 가지는 대장균 찾기SELECT COUNT(DISTINCT ID) AS "COUNT"FROM ECOLI_DATAWHERE BIN(GENOTYPE) & 2 != 2 AND (BIN(GENOTYPE) & 1 = 1 OR BIN(GENOTYPE) & 4 = 4) 2진수를 10진수로 표현해보면 아래와 같다.-- 0001 -> 1-- 0010 -> 2-- 0011 -- 0100 -> 3 -- 0101 -- 0110 -- 0111 -- 1000 -> 4 -- 1001 -- 1010 -- 1100 -- 1101 -- 1011 -- 1110 -- ..