COALESCE
처음으로 널이 아닌 값을 반환 ( 실무에서 널 방지용으로 쓰임 )
COALESCE(C.depart_name, '미정')
LIKE 사용
SELECT *
FROM CAR_RENTAL_COMPANY_CAR c
WHERE c.OPTIONS LIKE '%네비게이션%'
ORDER BY c.CAR_ID DESC
IN 사용
SELECT d.ID, d.EMAIL, d.FIRST_NAME, d.LAST_NAME
FROM DEVELOPER_INFOS d
WHERE 'Python' IN (d.SKILL_1, d.SKILL_2, d.SKILL_3)
ORDER BY d.id ASC;
이진수 다루기 (& 연산)
SELECT COUNT(*) AS COUNT
FROM ECOLI_DATA
WHERE (GENOTYPE & 2) = 0 -- 2번 형질이 없는 대장균
AND ((GENOTYPE & 1) != 0 -- 1번 형질을 보유
OR (GENOTYPE & 4) != 0); -- 또는 3번 형질을 보유
문자열 합치기
SELECT CONCAT(MAX(f.LENGTH), 'cm') AS MAX_LENGTH
FROM FISH_INFO f;
널 치환 하기 (ROUNT 반올림, AVG 평균 집계 함수)
SELECT ROUND(AVG(IFNULL(LENGTH, 10)), 2) AS AVERAGE_LENGTH
FROM FISH_INFO;
게시글과 댓글 조인
날자 포맷팅 주의 (%Y:2024, %y:24)
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_REPLY R
LEFT JOIN USED_GOODS_BOARD B
ON R.BOARD_ID=B.BOARD_ID
WHERE DATE_FORMAT(B.CREATED_DATE, '%Y-%m') = '2022-10'
ORDER BY R.CREATED_DATE, B.TITLE
분기 태우기
SELECT
CASE
WHEN value > 0 THEN 'Positive'
WHEN value < 0 THEN 'Negative'
ELSE 'Zero'
END AS result
FROM table_name;
서브 쿼리로 테이블 만들고 조인
SELECT
zj.mv_member_id,
zj.mw_balance,
zj.mv_use_balance,
zj.mv_coin,
sq.total_amount,
(zj.mw_balance - sq.total_amount) AS dif
FROM
new_member_wallet_zj zj
JOIN (
SELECT
mt.member_id,
SUM(mt.amount) AS total_amount
FROM
member_transaction mt
WHERE
mt.type = 25
GROUP BY
mt.member_id
) sq ON zj.mv_member_id = sq.member_id
WHERE
zj.mv_coin = 'USDT';
GROUP BY와 서브 쿼리로 테이블 만들고 업데이트 날리기
주의: GROUP BY를 사용하는 경우, 그룹화된 컬럼들은 반드시 SELECT 절에 포함해야 함
SQL은 각 그룹에 대한 값(ex. SUM)을 반환해야 하는데, member_id가 없으면 어떤 그룹의 합계인지 알 수 없기 떄문
UPDATE new_member_wallet_zj zj
JOIN (
SELECT
mt.member_id,
SUM(mt.amount) AS total_amount
FROM
member_transaction mt
WHERE
mt.type = 25
GROUP BY
mt.member_id
) sq ON zj.mv_member_id = sq.member_id
SET
zj.mw_balance = zj.mw_balance - sq.total_amount,
zj.mv_use_balance = zj.mv_use_balance - sq.total_amount
WHERE
zj.mv_coin = 'USDT';
PostgreSQL와 JSON 데이터
->> 와 -> 의 차이
view_data ->> 'key_name' = 'doc_type':
- ->>는 JSON 필드에서 문자열을 추출할 때 사용하는 연산자입니다.
- view_data ->> 'key_name'는 view_data라는 JSON 필드에서 "key_name"이라는 키의 값을 문자열로 추출합니다.
{
"key_name": "doc_type",
"key_value": "Some Document Type"
}
- ->는 JSON 필드에서 JSON 객체 또는 값을 그대로 추출할 때 사용하는 연산자입니다.
- view_data -> 'key_value'는 view_data JSON 필드에서 "key_value"라는 키의 값을 JSON 형태로 추출합니다.