SELECT COUNT(ID) AS FISH_COUNT
FROM FISH_INFO
WHERE LENGTH IS NULL;
SELECT CONCAT(MAX(LENGTH), 'cm') AS MAX_LENGTH
FROM FISH_INFO;
SELECT ROUND(AVG(DAILY_FEE), 0) AS AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE = 'SUV';
SELECT *
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
SELECT CAR_ID, CAR_TYPE, DAILY_FEE, OPTIONS
FROM CAR_RENTAL_COMPANY_CAR
WHERE FIND_IN_SET('네비게이션', OPTIONS)
ORDER BY CAR_ID DESC;
SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPER_INFOS
WHERE SKILL_1 = 'Python'
OR SKILL_2 = 'Python'
OR SKILL_3 = 'Python'
ORDER BY ID ASC;
SELECT ROUND(AVG(
CASE WHEN LENGTH IS NULL THEN 10 ELSE LENGTH END
), 2) AS AVERAGE_LENGTH
FROM FISH_INFO;
SELECT COUNT(ID) AS FISH_COUNT
FROM FISH_INFO
WHERE TIME >= '2021/01/01'
AND TIME < '2022/01/01';
SELECT MAX(DATETIME) AS '시간'
FROM ANIMAL_INS;
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_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE BETWEEN '2022-09-01' AND '2022-09-30'
ORDER BY HISTORY_ID DESC;
SELECT ID, LENGTH
FROM FISH_INFO
ORDER BY LENGTH IS NULL, LENGTH DESC, ID ASC
LIMIT 10;
SELECT B.TITLE, B.BOARD_ID, U.REPLY_ID, U.WRITER_ID, U.CONTENTS,
DATE_FORMAT(U.CREATED_DATE,'%Y-%m-%d') AS CREATED_DATE
FROM USED_GOODS_BOARD B
JOIN USED_GOODS_REPLY U ON B.BOARD_ID = U.BOARD_ID
WHERE B.CREATED_DATE BETWEEN '2022-10-01' AND '2022-10-31'
ORDER BY U.CREATED_DATE ASC, B.TITLE ASC;
SELECT NAME, COUNT(NAME) AS COUNT
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
GROUP BY NAME
HAVING COUNT(NAME) >= 2
ORDER BY NAME;
| 방법 | 설명 | 대소문자 구분 |
|---|---|---|
| LIKE '%문자%' | 문자열 포함 여부 확인 | ❌ (기본적으로 구분 안 함) |
| BINARY LIKE '%문자%' | 대소문자 구분 포함 여부 확인 | ✅ |
| REGEXP_LIKE(컬럼, '문자') | 정규표현식으로 포함 여부 확인 | ❌ (BINARY 붙이면 ✅) |
| BINARY REGEXP_LIKE(컬럼, '문자') | 정규표현식 + 대소문자 구분 | ✅ |
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE ANIMAL_TYPE = 'DOG'
AND NAME LIKE '%EL%'
ORDER BY NAME;
SELECT COUNT(ANIMAL_ID) AS COUNT
FROM ANIMAL_INS;
SELECT ANIMAL_TYPE,
CASE WHEN NAME IS NULL THEN 'No name' ELSE NAME END AS NAME,
SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
SELECT ANIMAL_ID, NAME, DATE(DATETIME) AS '날짜'
FROM ANIMAL_INS;
SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE
FROM FOOD_PRODUCT
ORDER BY PRICE DESC
LIMIT 1;
WITH PRODUCT_CTE AS (
SELECT PRODUCT_CODE, SUBSTRING(PRODUCT_CODE, 1, 2) AS CATEGORY
FROM PRODUCT
)
SELECT CATEGORY, COUNT(PRODUCT_CODE) AS COUNT
FROM PRODUCT_CTE
GROUP BY CATEGORY
ORDER BY CATEGORY;
SELECT SUM(PRICE) AS TOTAL_PRICE
FROM ITEM_INFO
WHERE RARITY = 'LEGEND';
SELECT COUNT(DISTINCT NAME)
FROM ANIMAL_INS
WHERE NAME IS NOT NULL;
SELECT ANIMAL_ID, NAME,
CASE WHEN SEX_UPON_INTAKE LIKE '%Neutered%'
OR SEX_UPON_INTAKE LIKE '%Spayed%' THEN 'O'
ELSE 'X' END AS '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
SELECT MCDP_CD AS '진료과코드', COUNT(MCDP_CD) AS '5월예약건수'
FROM APPOINTMENT
WHERE '2022-05-01' <= APNT_YMD AND '2022-06-01' > APNT_YMD
GROUP BY MCDP_CD
ORDER BY 5월예약건수 ASC, 진료과코드 ASC;
SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE) AS count
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
HAVING ANIMAL_TYPE IN ('DOG', 'CAT')
ORDER BY ANIMAL_TYPE ASC;
SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE) AS count
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
HAVING ANIMAL_TYPE IN ('DOG', 'CAT')
ORDER BY
CASE ANIMAL_TYPE
WHEN 'CAT' THEN 1
WHEN 'DOG' THEN 2
ELSE 3
END;
| 구분 | 함수 | 설명 |
|---|---|---|
| 날짜 | DATE() | 날짜만 추출한다. |
| YEAR() | 연도만 추출한다. | |
| MONTH() | 월만 추출한다. | |
| DAY() | 일(day)만 추출한다. | |
| 시간 | HOUR() | 시(hour)만 추출한다. |
| MINUTE() | 분(minute)만 추출한다. | |
| SECOND() | 초(second)만 추출한다. | |
| 포맷 | DATE_FORMAT() | 원하는 형식으로 날짜 및 시간을 포맷한다. |
| 요일 | DAYNAME() | 요일 이름을 반환한다. (예: Monday) |
| DAYOFWEEK() | 요일 번호를 반환한다. (1=일요일, 7=토요일) | |
| 계산 | DATE_ADD() | 날짜/시간을 더한다. |
| DATE_SUB() | 날짜/시간을 뺀다. | |
| TIMESTAMPDIFF() | 두 날짜/시간의 차이를 구한다. |
HAVING은 그룹핑된 데이터 범위 안에서만 적용할 수 있는 조건을 사용해야 한다. 광범위하게 먼저 걸러야할 것은 WHERE에서 먼저 거르고 오자.
WITH HOUR_DTS AS (
SELECT HOUR(DATETIME) AS HOUR_DT
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) >= 9 AND HOUR(DATETIME) < 20
)
SELECT HOUR_DT AS HOUR, COUNT(HOUR_DT) AS COUNT
FROM HOUR_DTS
GROUP BY HOUR_DT
ORDER BY HOUR_DT ASC;
옵션에 특정 물품이 포함됐는지 봐야한다? -> FIND_IN_SET
SELECT CAR_TYPE, COUNT(CAR_TYPE) AS CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE FIND_IN_SET('통풍시트', OPTIONS)
OR FIND_IN_SET('열선시트', OPTIONS)
OR FIND_IN_SET('가죽시트', OPTIONS)
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE ASC