조건문을 만들 때 사용한다.
LIMIT
구를 이용해 상위 N개 행만 조회한다.
SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1;
12세 이하, "여자"환자 조건을 WHERE를 이용해 조건을 달아주고, IFNULL
을 이용해 NULL을 처리해준다.
SELECT PT_NAME, PT_NO, GEND_CD, AGE, IFNULL(TLNO,"NONE") AS TLNO
FROM PATIENT
WHERE AGE<=12 AND GEND_CD='W'
ORDER BY AGE DESC, PT_NAME;
SELECT IFNULL(Column명, "Null일 경우 대체 값") FROM 테이블명;
20세 이상 29세 이하인 조건을 20<=AGE AND AGE<=29
으로 작성해야한다. 20<=AGE<=29로 하면 제대로 된 답이 나오지 않으니 주의!
SELECT COUNT(USER_ID) AS USERS
FROM USER_INFO
WHERE DATE_FORMAT(JOINED,"%Y")='2021' AND 20<=AGE AND AGE<=29;
SELECT COUNT(USER_ID) AS USERS
FROM USER_INFO
WHERE YEAR(JOINED)='2021' AND 20<=AGE AND AGE<=29;
DATE_FORMAT
과 WHERE
를 이용해 조건을 달아주면 되는 간단한 문제
SELECT DR_NAME, DR_ID, MCDP_CD, DATE_FORMAT(HIRE_YMD,"%Y-%m-%d") AS HIRE_YMD
FROM DOCTOR
WHERE MCDP_CD='CS' OR MCDP_CD='GS'
ORDER BY HIRE_YMD DESC, DR_NAME;
SELECT ROUND(AVG(DAILY_FEE),0) AS 'AVERAGE_FEE'
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE="SUV";
IFNULL
을 사용해 NULL을 "No name"으로 대체해주면 된다.
SELECT ANIMAL_TYPE, IFNULL(NAME,"No name") AS NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS;
컬럼 내 같은 데이터가 존재하면, 중복을 제거하기 위해 DISTINCT를 사용
COUNT는 *
가 아니면 NULL을 세지 않으므로 WHERE 문을 작성하지 않아도 됩니다.
SELECT COUNT(DISTINCT NAME)
FROM ANIMAL_INS;
조건문 사용하기
IF (DATEDIFF(END_DATE,START_DATE)>=29,"장기 대여","단기 대여")
AS RENT_TYPE
CASE WHEN DATEDIFF(END_DATE,START_DATE)>=29 THEN '장기 대여'
ELSE '단기 대여' END
AS RENT_TYPE
DATEDIFF
두 날짜의 차이를 구하는 함수는 DATEDIFF(시작일자,끝일자)
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)>=29 THEN '장기 대여'
ELSE '단기 대여' END
AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE DATE_FORMAT(START_DATE,"%Y-%m")='2022-09'
ORDER BY HISTORY_ID DESC;
SELECT FACTORY_ID, FACTORY_NAME, ADDRESS
FROM FOOD_FACTORY
WHERE ADDRESS LIKE "강원도%"
ORDER BY FACTORY_ID;
IFNULL과 LIKE를 사용해서 간단하게 풀 수 있는 문제
SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS,
IFNULL(FREEZER_YN,"N") AS FREEZER_YN
FROM FOOD_WAREHOUSE
WHERE WAREHOUSE_NAME LIKE "%경기%"
ORDER BY WAREHOUSE_ID;
서브쿼리를 이용해 코드를 작성하는 방법을 알아보자!
해당 쿼리는 가격이 최대인 상품과 최대 가격이 매칭 되지 않는다
SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD,
CATEGORY, MAX(PRICE) AS PRICE
FROM FOOD_PRODUCT;
SELECT *
FROM FOOD_PRODUCT
WHERE PRICE = (SELECT MAX(PRICE) FROM FOOD_PRODUCT);
ORDER BY
와 LIMIT
를 이용해 가격순으로 정렬하고, 제일 위에 있는 행을 출력SELECT *
FROM FOOD_PRODUCT
ORDER BY PRICE DESC
LIMIT 1;
IF
문을 사용해 조건과 참이 될때, 거짓이 될때 값을 각각 주면 된다.
SELECT ANIMAL_ID, NAME,
IF (SEX_UPON_INTAKE LIKE "Neutered%" OR
SEX_UPON_INTAKE LIKE "Spayed%" ,'O','X') AS '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;