목록sql (52)
컴공생의 다이어리
[SQL] WITH 절 WITH 절은 복잡한 쿼리문에서 반복되는 서브쿼리를 임시 테이블처럼 활용할 수 있는 가상 테이블의 개념이다. 일종의 이름을 붙인 서브쿼리라고 할 수 있다. 주요 RDBMS(MySQL, Oracle, Postgresql...)에서 제공하는 기능이다. WITH 절을 사용하면 반복되는 블록을 재사용함으로써 코드 가독성을 높일 수 있으며 실행 속도 시간을 최적화할 수 있다. WITH 절은 아래와 같이 별칭(서브쿼리의 이름)을 지정하고 별칭에 해당하는 쿼리문을 지정해주면된다. WITH 별칭1 AS (SELECT 문), 별칭2 AS (SELECT 문) ... SELECT FROM 별칭1, 별칭2 ...; # example WITH LIST AS ( SELECT * FROM TEST_TB WH..
[Oracle] 오라클 실수로 삭제 후 커밋한 데이터 복구 - AS OF TIMESTAMP 최근 실수로 데이터를 삭제하고 커밋(commit)해버려 엄청 당황스러웠던 일이 있었다. 어떻게 복구할 수 있을까 찾던 중 AS OF TIMESTAMP 를 활용하여 복구하는 방법에 대해 알게 되었고 그 방법에 대해 이 글에 정리하고자 한다. FlashBack은 DB에서 데이터 수정 및 삭제를 하고 커밋을 한 이후더라도 특정한 시간이나 특정 시점으로 되돌릴 수 있는 기능이다. Oracle 9i 이후부터 지원되는 기능으로 잘못된 DML operation으로 인한 복구를 쉽게 할 수 있다. FlashBack 기능을 통해 AS OF TIMESTAMP를 활용하여 삭제 전 데이터를 조회할 수 있으며 이를 활용하여 데이터 복구가..
[프로그래머스] 오프라인/온라인 판매 데이터 통합하기 - MySQL SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT FROM ( SELECT SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT FROM ONLINE_SALE UNION ALL SELECT SALES_DATE, PRODUCT_ID, NULL AS USER_ID, SALES_AMOUNT FROM OFFLINE_SALE ) T WHERE SALES_DATE LIKE '2022-03%' ORDER BY SALES_DATE, PRODUCT_ID, USER_ID; https://school.programm..
[프로그래머스] 성분으로 구분한 아이스크림 총 주문량 - MySQL SELECT INGREDIENT_TYPE, SUM(TOTAL_ORDER) AS TOTAL_ORDER FROM FIRST_HALF INNER JOIN ICECREAM_INFO ON FIRST_HALF.FLAVOR = ICECREAM_INFO.FLAVOR GROUP BY INGREDIENT_TYPE ORDER BY TOTAL_ORDER ASC; https://school.programmers.co.kr/learn/courses/30/lessons/133026 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmer..
[프로그래머스] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 - MySQL SELECT MONTH(START_DATE) AS MONTH, CAR_ID, COUNT(HISTORY_ID) AS RECORDS FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE CAR_ID IN ( SELECT CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE DATE_FORMAT(START_DATE,'%Y-%m') BETWEEN '2022-08' AND '2022-10' GROUP BY CAR_ID HAVING COUNT(CAR_ID) >= 5 ) AND DATE_FORMAT(START_DATE,'%Y-%m') BETWEEN '2022-08' AN..
[프로그래머스] 가격이 제일 비싼 식품의 정보 출력하기 - MySQL SELECT * FROM FOOD_PRODUCT WHERE PRICE = (SELECT MAX(PRICE) FROM FOOD_PRODUCT); https://school.programmers.co.kr/learn/courses/30/lessons/131115 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr
[프로그래머스] 주문량이 많은 아이스크림들 조회하기 - MySQL SELECT F.FLAVOR FROM FIRST_HALF F LEFT JOIN ( SELECT FLAVOR, SUM(TOTAL_ORDER) AS TOTAL_ORDER FROM JULY GROUP BY FLAVOR ) J ON F.FLAVOR = J.FLAVOR ORDER BY (F.TOTAL_ORDER + J.TOTAL_ORDER) DESC LIMIT 3; https://school.programmers.co.kr/learn/courses/30/lessons/133027 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. pr..
[프로그래머스] 상품 별 오프라인 매출 구하기 - MySQL SELECT P.PRODUCT_CODE, SUM(O.SALES_AMOUNT)*P.PRICE AS SALES FROM PRODUCT P JOIN OFFLINE_SALE O ON P.PRODUCT_ID=O.PRODUCT_ID GROUP BY P.PRODUCT_CODE ORDER BY SALES DESC, P.PRODUCT_CODE; https://school.programmers.co.kr/learn/courses/30/lessons/131533 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr
[프로그래머스] 즐겨찾기가 가장 많은 식당 정보 출력하기 - MySQL SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES FROM REST_INFO WHERE (FOOD_TYPE, FAVORITES) IN ( SELECT FOOD_TYPE, MAX(FAVORITES) FROM REST_INFO GROUP BY FOOD_TYPE ) ORDER BY FOOD_TYPE DESC; https://school.programmers.co.kr/learn/courses/30/lessons/131123 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programme..
[프로그래머스] 과일로 만든 아이스크림 고르기 - MySQL SELECT FIRST_HALF.FLAVOR FROM FIRST_HALF JOIN ICECREAM_INFO ON FIRST_HALF.FLAVOR=ICECREAM_INFO.FLAVOR WHERE FIRST_HALF.TOTAL_ORDER>3000 AND ICECREAM_INFO.INGREDIENT_TYPE='fruit_based' ORDER BY FIRST_HALF.TOTAL_ORDER DESC; https://school.programmers.co.kr/learn/courses/30/lessons/133025 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞..