- 작성 순서
SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY
- MySQL에서는 일반적으로 AND가 OR보다 우선순위가 높음
→ OR가 섞이면 괄호로 의도를 고정하는게 실무 습관!
- IN ('KR', 'JP', "CH')
- LIKE
- %: 글자 0개 이상 (아무 길이)
- _: 글자 1개 (정확히 한 글자)
- NULL은 무조건 IS NULL / IS NOT NULL로 비교
- CASE WHEN
select
logid,
game_account_id,
level as lv,
case
when level >= 30 then 'high'
when level >= 15 then 'mid'
else 'low'
end as level_group
from basic.game_logs
order by
case level_group
when 'high' then 1
when 'mid' then 2
when 'low' then 3
end
limit 100;
- level_group 열에서 알파벳 순서가 아닌 직접 순서를 설정하고 싶다면
- order by 절에서 case level_group 을 따로 작성하여 각각의 순서를 정해줄 수 있음
- 단, 이건 MySQL 전용 (다른 DB에선 안되는 경우 있음)
- 조건부 카운트 (case를 '집계'에 섞어보기)
SELECT
COUNT(*)AS total_enrollments,
SUM(CASE WHEN coupon_code IS NOT NULL THEN 1 ELSE 0 END)AS coupon_used_cnt,
SUM(CASE WHEN coupon_code IS NULL THEN 1 ELSE 0 END)AS no_coupon_cnt
FROM basic.enrollments;
- 테이블 데이터 삭제 (DELETE vs. TRUNCATE vs. DROP)
- DELETE FROM table;
- DML (데이터 조작어)
- 한 줄씩, 조건에 따라 삭제 가능 (WHERE 사용 가능)
- AUTO_INCREMENT 초기화되지 않음
- 트랜잭션 내에서 ROLLBACK 가능
- TRUNCATE TABLE table;
- DDL (데이터 정의어)
- 테이블 전체를 한 번에 삭제 (WHERE 사용 불가)
- AUTO_INCREMENT 1부터 다시 시작하도록 초기화됨
- ROLLBACK 불가능
- DROP TABLE table;
- 테이블 존재 자체를 삭제
- CREATE TABLE부터 다시 해야함
'SQL 공부' 카테고리의 다른 글
| Ifnull / Coalesce 함수, 윈도우 함수 (0) | 2026.01.10 |
|---|---|
| 서브쿼리(상관/FROM), IN, EXISTS 함수, CTE(WITH) (0) | 2026.01.10 |
| UNION, JOIN (0) | 2026.01.10 |
| DBeaver 설치하기 (MySQL 연결) (0) | 2026.01.10 |
| 날짜 포맷, 날짜 함수 (0) | 2026.01.10 |