본문 바로가기

카테고리 없음

개발용 SQL (MySQL)

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 형태로 추출합니다.