My Code
-- 생일이 3월 / 여성 회원
-- ID, 이름, 성별, 생년월일을 조회
-- 전화번호 NULL 제외
-- ID 기준 ASC
SELECT MEMBER_ID, MEMBER_NAME, GENDER, DATE_FORMAT(DATE_OF_BIRTH, '%Y-%m-%d') AS DATE_OF_BIRTH
FROM MEMBER_PROFILE
WHERE DATE_OF_BIRTH LIKE '%-03-%'
AND GENDER = 'W'
AND TLNO IS NOT NULL
ORDER BY MEMBER_ID ASC
;
My Code
-- 진료과가 흉부외과(CS)이거나 일반외과(GS)인 의사
-- 의사의 이름, 의사ID, 진료과, 고용일자 조회
-- 고용일자 기준 DESC => 이름 기준 ASC
SELECT DR_NAME, DR_ID, MCDP_CD, DATE_FORMAT(HIRE_YMD, '%Y-%m-%d') as HIRE_YMD
FROM DOCTOR
WHERE MCDP_CD IN ('CS', 'GS')
ORDER BY HIRE_YMD DESC, DR_NAME ASC
;
My Code
-- 12세 이하 / 여자환자
-- 환자이름, 환자번호, 성별코드, 나이, 전화번호 조회
-- 전화번호가 없는 경우, 'NONE'으로 출력
-- 나이 기준 DESC => 환자이름 기준 ASC
SELECT PT_NAME, PT_NO, GEND_CD, AGE, IF(TLNO IS NULL, 'NONE', TLNO) AS TLNO
FROM PATIENT
WHERE AGE <= '12'
AND GEND_CD = 'W'
ORDER BY AGE DESC, PT_NAME ASC
;
My Code
-- 총주문량이 3,000보다 높다 / 주 성분이 과일
-- 총주문량이 큰 순서대로 조회 (DESC)
SELECT H.FLAVOR
FROM FIRST_HALF AS H JOIN ICECREAM_INFO AS I
ON H.FLAVOR = I.FLAVOR
WHERE H.TOTAL_ORDER > 3000
AND I.INGREDIENT_TYPE = 'fruit_based'
ORDER BY TOTAL_ORDER DESC
;
My Code
-- 자동차 종류가 'SUV'
-- 평균 일일 대여 요금 출력
-- 소수 첫 번째 자리에서 반올림 / 컬럼명은 'AVERAGE_FEE'
SELECT ROUND(AVG(DAILY_FEE),0) AS AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE = 'SUV'
;
My Code
-- 2022년 10월에 작성
-- 게시글 제목, 게시글 ID, 댓글 ID, 댓글 작성자 ID, 댓글 내용, 댓글 작성일 조회
-- 댓글 작성일 기준 ASC => 게시글 제목 기준 ASC
SELECT B.TITLE, B.BOARD_ID, R.REPLY_ID, R.WRITER_ID, R.CONTENTS, DATE_FORMAT(R.CREATED_DATE, '%Y-%m-%d') AS CREATED_DATE
FROM USED_GOODS_BOARD AS B JOIN USED_GOODS_REPLY AS R
ON B.BOARD_ID = R.BOARD_ID
WHERE B.CREATED_DATE LIKE "2022-10-%"
ORDER BY R.CREATED_DATE ASC, B.TITLE ASC
;
My Code
-- 서울에 위치한 식당
-- 식당 ID, 식당 이름, 음식 종류, 즐겨찾기수, 주소, 리뷰 평균 점수 조회
-- 평균점수는 소수점 세 번째 자리에서 반올림
-- 평균점수 기준 DESC => 즐겨찾기수 기준 DESC
SELECT I.REST_ID, I.REST_NAME, I.FOOD_TYPE, I.FAVORITES, I.ADDRESS, ROUND(AVG(R.REVIEW_SCORE), 2) AS SCORE
FROM REST_INFO AS I JOIN REST_REVIEW AS R
ON I.REST_ID = R.REST_ID
WHERE I.ADDRESS LIKE '서울%'
GROUP BY I.REST_NAME
ORDER BY SCORE DESC, FAVORITES DESC
;
My Code
-- 동일한 회원이 동일한 상품을 재구매한 데이터를 구하여,
-- 재구매한 회원 ID, 재구매한 상품 ID 출력
-- 회원 ID 기준 ASC => 상품 ID 기준 DESC
SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*) >= 2
ORDER BY USER_ID ASC, PRODUCT_ID DESC
;
My Code
-- 2022년 3월
-- 오프라인/온라인 상품 판매 데이터의 판매 날짜, 상품ID, 유저ID, 판매량 출력
-- OFFLINE_SALE 테이블의 판매 데이터의 USER_ID 값은 NULL
-- 판매일 기준 ASC => 상품 ID 기준 ASC => 유저 ID ASC
-- 두 테이블을 합쳐야 돼! JOIN이 아니다!
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') as SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE
WHERE SALES_DATE LIKE '2022-03-%'
UNION ALL
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') as SALES_DATE, PRODUCT_ID, NULL AS USER_ID, SALES_AMOUNT
FROM OFFLINE_SALE
WHERE SALES_DATE LIKE '2022-03-%'
ORDER BY SALES_DATE ASC, PRODUCT_ID ASC, USER_ID ASC
;
UNION
- 두 개 이상의 SELECT 문 결과를 합쳐서 하나의 결과로 반환한다.
- 중복된 결과를 제거한다.
- 결과를 반환하기 전에 데이터를 정렬하여 중복을 제거하는 과정이 필요하기 때문에, UNION ALL보다 처리 속도가 느릴 수 있다.
UNION ALL
- 두 개 이상의 SELECT 문 결과를 그대로 합쳐서 반환한다.
- 중복된 결과도 모두 포함한다.
- 중복 제거 과정이 없기 때문에 UNION보다 처리 속도가 빠르다.
My Code
-- 동물 보호소에 가장 먼저 들어온 동물
-- 동물 이름 조회
SELECT NAME FROM ANIMAL_INS ORDER BY DATETIME LIMIT 1;
My Code
-- 아이템의 희귀도가 'RARE'인 아이템의 모든 다음 업그레이드 아이템
-- 아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME), 아이템의 희귀도(RARITY) 출력
-- 아이템 ID 기준 DSEC
SELECT ITEM_ID, ITEM_NAME, RARITY
FROM ITEM_INFO
WHERE ITEM_ID IN (
SELECT ITEM_ID
FROM ITEM_TREE
WHERE PARENT_ITEM_ID IN (
SELECT ITEM_ID
FROM ITEM_INFO
WHERE RARITY = 'RARE'
)
)
ORDER BY ITEM_ID DESC
;
My Code
-- Python이나 C# 스킬을 가진 개발자의 정보를 조회
-- 개발자 ID, 이메일, 이름, 성 조회
-- 개발자 ID 기준 ASC
SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPERS
WHERE SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'Python') != 0
OR SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'C#') != 0
ORDER BY ID ASC
;
# SET @Python = (SELECT CODE FROM SKILLCODES WHERE NAME = 'Python');
# SET @C = (SELECT CODE FROM SKILLCODES WHERE NAME = 'C#');
-- 실패 (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET @C_S = (SELECT CODE FROM SKILLCODES WHERE NAME = 'C#');\n\nSELECT ID, EMAIL, F' at line 6")
Hot Point
- ★ SKILL_CODE와 특정 스킬의 CODE를 비트 AND 연산한 결과가 0이 아니라면, 해당 스킬 코드가 SKILL_CODE에 포함되어 있다는 것을 의미한다.
- SET 문을 사용하여 변수를 할당하고 바로 SELECT 쿼리를 실행하려 할 때 발생하는 구문 오류