
코드/길이
ASCII(str), CHAR(n)BIT_LENGTH(str), CHAR_LENGTH(str), LENGTH(str)결합
CONCAT(a,b,...), CONCAT_WS(delim, a,b,...)SELECT CONCAT('호랑이','기린'), CONCAT_WS('-', '2023','05','31');
검색/위치
ELT(pos, ...), FIELD(str, ...), FIND_IN_SET(str, csv), INSTR(str, sub), LOCATE(sub, str)포맷/진법
FORMAT(num, d), BIN(n), OCT(n), HEX(n)부분/치환/반전
INSERT(str, pos, len, new), LEFT(str,n), RIGHT(str,n)SUBSTRING(str, pos[,len]), SUBSTRING_INDEX(str, delim, count)REPLACE(str, from, to), REVERSE(str)대소문자/패딩/공백/반복
LOWER(str), UPPER(str)LPAD(str, len, pad), RPAD(str, len, pad)LTRIM(str), RTRIM(str), TRIM([LEADING|TRAILING|BOTH rem FROM] str)REPEAT(str, count), SPACE(n)기본
ABS(x), CEILING(x), FLOOR(x), ROUND(x)TRUNCATE(x, d) -- d<0 이면 정수 자리에서 버림연산/진법
MOD(a,b) / a % b / a MOD bPOW(a,b), SQRT(x)CONV(val, fromBase, toBase)난수/부호
RAND() (0≤x<1)FLOOR(RAND() * (n - m + 1)) + mSIGN(x) → { -1, 0, 1 }더하기/빼기
ADDDATE(date, INTERVAL expr unit), SUBDATE(...)ADDTIME(dt, 'h:m:s'), SUBTIME(dt, 'h:m:s')현재 시각 계열
CURDATE(), CURTIME(), NOW()/SYSDATE()추출/변환
YEAR(d), MONTH(d), DAYOFMONTH(d)HOUR(t), MINUTE(t), SECOND(t), MICROSECOND(t)DATE(dt), TIME(dt)차이/정보
DATEDIFF(d1, d2) (일수), TIMEDIFF(t1, t2)DAYOFWEEK(d)(1=일), MONTHNAME(d), DAYOFYEAR(d)LAST_DAY(d)생성/분기/초 단위
MAKEDATE(year, dayOfYear), MAKETIME(h, m, s)QUARTER(d), TIME_TO_SEC(t)CREATE VIEW hansik AS
SELECT menu_code, menu_name, menu_price, category_code, orderable_status
FROM tbl_menu
WHERE category_code = 4;
SELECT * FROM hansik;
INSERT/UPDATE/DELETE 하면 베이스 테이블에 반영AUTO_INCREMENT가 아니면 INSERT 시 직접 값 지정 필요INSERT INTO hansik VALUES (99, '수정과맛국밥', 5500, 4, 'Y');
UPDATE hansik SET menu_name='버터맛국밥', menu_price=5700 WHERE menu_code=99;
DELETE FROM hansik WHERE menu_code=99;
CREATE OR REPLACE VIEW hansik AS
SELECT a.menu_code AS '메뉴코드', a.menu_name '메뉴명', b.category_name '카테고리명'
FROM tbl_menu a JOIN tbl_category b USING (category_code)
WHERE b.category_name='한식';
DROP VIEW hansik;
EXPLAIN으로 실행 계획 체크-- 단일
CREATE INDEX idx_name ON phone (phone_name);
-- 복합(선두 컬럼 중요: (a,b) 인덱스는 a만 걸린 조건에도 사용 가능)
CREATE INDEX idx_name_price ON phone (phone_name, phone_price);
SHOW INDEX FROM phone;
SELECT * FROM phone WHERE phone_name='iPhone14pro';
EXPLAIN SELECT * FROM phone WHERE phone_name='iPhone14pro';
ALTER TABLE phone DROP INDEX idx_name;
ALTER TABLE phone ADD INDEX idx_name (phone_name);
-- InnoDB: 테이블/인덱스 최적화
OPTIMIZE TABLE phone;
DROP INDEX idx_name ON phone;
SHOW INDEX FROM phone;