728x90
반응형

필드 선택 : SELECT

SELECT ANIMAL_ID,

테이블 선택 : FROM

FROM ANIMAL_INS

필드 조건 지정 : WHERE

WHERE INTAKE_CONDITION = "Sick"

필드 조건 추가 지정 : AND, OR, NOT

WHERE INTAKE_CONDITION = "Sick" AND NAME IS NOT NULL

필드 선택하여 정렬 : ORDER BY ~ ASC
ASC는 생략 가능

ORDER BY id

필드 선택하여 역정렬 : ORDER BY ~ DESC

ORDER BY ANIMAL_ID DESC

개수로 변환 : COUNT
중복 제거 : DISTINCT
조회한 필드 이름 변환 : AS

SELECT COUNT(DISTINCT NAME) AS count

개수 제한 : LIMIT

LIMIT 1

NULL 인지 확인 : IS, IS NOT

WHERE AGE IS NULL

최대, 최소 값 : MAX, MIN

MAX(PRICE) AS MAX_PRICE
MIN(PRICE) AS MIN_PRICE

필드 지정하여 따로 처리하기 : GROUP BY, HAVING 

SELECT NAME, COUNT(NAME) AS COUNT
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
GROUP BY NAME
HAVING COUNT(NAME) > 1
ORDER BY NAME

포함된 글자 찾기(includes) : LIKE
% => 모든 경우, _ => 하나는 존재함 
el이 포함된 경우 => LIKE "%el%"
el로 시작하는 경우 -=> LIKE "el%"
el로 끝나는 경우 -=> LIKE "%el"
el뒤에 한 글자만 오는 경우 => LIKE "%el_"

LOWER(NAME) LIKE "%el%"

시간 포멧(format) 변경 : DATE_FORMAT
Y => 2017, y => 17
M => March, m => 03
D => 1st, d => 01

DATE_FORMAT(HIRE_YMD, "%Y-%m-%d") AS HIRE_YMD

조회 결과가 null인 경우 디폴트값 채워주기 : IFNULL

IFNULL(FREEZER_YN, "N") AS FREEZER_YN

조회 결과를 삼항 연산자처럼 처리하기 : IF

=> IF(조건, 참인 경우의 값, 참이 아닌 경우의 값)

IF(FREEZER_YN IS NULL, "N", FREEZER_YN) AS FREEZER_YN

문자열 자르기 : LEFT, MID, RIGHT, SUBSTRING
SUBSTRING(필드, 시작 위치(1이 맨 앞), 길이)

LEFT(PRODUCT_CODE, 2) AS CATEGORY

SUBSTRING(PRODUCT_CODE, 1, 2)

CONCAT(LEFT(tlno,3), '-', MID(tlno,4,4),'-', RIGHT(tlno,4)) AS 전화번호

문자열 합치기: CONCAT

SELECT USER_ID, NICKNAME, CONCAT(CITY, " ", STREET_ADDRESS1, STREET_ADDRESS2) AS 전체주소, 
FROM USED_GOODS_USER

문자열 중간에 삽입: INSERT

INSERT(INSERT(U.TLNO, 8, 0, '-'), 4, 0, '-') AS 전화번호

필드에 여러 조건 처리 : CASE

SELECT ORDER_ID, PRODUCT_ID, DATE_FORMAT(OUT_DATE, "%Y-%m-%d") AS OUT_DATE, 
    CASE 
        WHEN DATE_FORMAT(OUT_DATE, "%m-%d") <= "05-01"  
            THEN '출고완료'
        WHEN DATE_FORMAT(OUT_DATE, "%m-%d") > "05-01"  
            THEN '출고대기'
        ELSE '출고미정'
    END AS 출고여부
FROM FOOD_ORDER 
ORDER BY ORDER_ID

일치하는 단어 여러 개 찾기 : IN
=> OR LIKE를 여러 번 사용한 것과 같은 효과

WHERE CAR_TYPE IN ("세단", "SUV")

정규표현식 : REGEXP
| => LIKE "%가죽시트%" 를 여러개 한 것과 같은 효과 => 포함된 단어 여러 개 찾기

WHERE NOT AI.SEX_UPON_INTAKE REGEXP('Spayed|Neutered')
    AND AO.SEX_UPON_OUTCOME REGEXP('Spayed|Neutered')

다른 테이블 함께 조회 : join
inner, left, right => 교집합,  왼쪽 원만 포함, 오른쪽 원만 포함

SELECT B.CATEGORY AS CATEGORY, SUM(SALES) AS TOTAL_SALES
FROM BOOK_SALES AS BS
LEFT JOIN BOOK AS B USING(BOOK_ID)

JOIN 문에서 WHERE : ON, USING
ON => WHERE 처럼 사용

LEFT JOIN BOOK AS B ON B.BOOK_ID = BS.BOOK_ID

 USING => 괄호로 쉽게 사용

LEFT JOIN BOOK AS B USING(BOOK_ID)

반올림 : ROUND

SELECT ROUND(SUM(DAILY_FEE) / COUNT(DAILY_FEE)) AS AVERAGE_FEE

내림 : TRUNCATE
group by와 함께 사용하여 가격대 별로 조회가 가능함

SELECT TRUNCATE(SUM(DAILY_FEE) / COUNT(DAILY_FEE)) AS AVERAGE_FEE

SELECT TRUNCATE(PRICE, -4) AS PRICE_GROUP, COUNT(PRODUCT_CODE) AS PRODUCTS
FROM PRODUCT 
GROUP BY PRICE_GROUP

 

 

추가, 수정, 삭제 관련

테이블 추가 : INSERT INTO

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

테이블 수정 : UPDATE ~ SET 

UPDATE table_name
SET column1 = value1

테이블 삭제 : DELETE

DELETE FROM table_name

 

시간 관련

DATETIME 요일 차이 : DATEDIFF

DATEDIFF('2021-12-16', '2020-01-01')

DATETIME에서 year, month, day, hour, month, second 추출
이름 그래도 함수가 존재하여 사용하면 됨

WHERE YEAR(APNT_YMD) = "2022" AND MONTH(APNT_YMD) = "05"

시간 구간 별로 조회 : GROUP BY, HOUR

SELECT HOUR(DATETIME) AS HOUR, COUNT(DATETIME) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME)
HAVING HOUR >= 9 AND HOUR <= 19
ORDER BY HOUR

 

기타 등등

서브 쿼리 => 서브 쿼리가 필요한 경우가 상당히 있다. 

EX) 첫번째 쿼리는 정상 동작하지 않는다. group_by는 조회된 내용 중 제일 상단에 있는 것을 조회할 뿐이어서 FAVORITES의 최대값으로 조회를 한다고 해도 매칭되는 REST_ID, REST_NAME이 조회되지는 않는다.
그렇기에 2번째 쿼리 처럼 서브쿼리를 통해 조회를 해야한다. 

SELECT FOOD_TYPE, REST_ID, REST_NAME, MAX(FAVORITES) AS FAVORITES
FROM REST_INFO 
GROUP BY FOOD_TYPE
ORDER BY FOOD_TYPE DESC
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES AS FAVORITES
FROM REST_INFO 
WHERE (FOOD_TYPE, FAVORITES)
IN (
    SELECT FOOD_TYPE, MAX(FAVORITES) AS FAVORITES
    FROM REST_INFO
    GROUP BY FOOD_TYPE
)
ORDER BY FOOD_TYPE DESC

 

728x90
반응형

+ Recent posts