📌 오늘 학습한 주제
- SQL 단일행 함수 (문자열, 숫자, 날짜/시간, 형변환 함수)
- 흐름 제어 함수 (
IF, CASE ~ WHEN ~ THEN ~ END, IFNULL)
- 복수행 집계 함수 (
COUNT, SUM, AVG, MIN, MAX) 및 결과 정렬 (ORDER BY)
- 학사 데이터베이스(Additional SELECT) 실습 문제 풀이
💡 오늘 배운 것 — 나만의 언어로
① 오늘의 목표
- MySQL의 다양한 내장 함수(문자열, 날짜, 형변환, 흐름 제어)의 활용법을 익히고, 집계 함수와 조건 분기를 결합하여 복잡한 데이터 조회 요구사항을 해결하기
② 학습할 내용
- 문자열 함수:
SUBSTRING, LEFT, RIGHT, INSTR, SUBSTRING_INDEX, LPAD/RPAD, TRIM, CHAR_LENGTH 등을 활용하여 특정 위치의 문자열 추출 및 가공 처리 실습.
- 날짜 및 시간 함수:
NOW(), CURDATE(), ADDDATE(), SUBDATE(), DATEDIFF()를 이용해 근속년수 계산, 날짜 연산, 요일 확인(DAYNAME) 처리.
- 형변환 및 수치 연산:
CAST(expr AS TYPE)를 이용한 타입 변환, ROUND(), TRUNCATE(), CEILING(), FLOOR() 수치 제어.
- 흐름 제어:
IF() 및 CASE ~ WHEN 조건식을 이용한 성별 구분, 직급/급여 등급 분류(GRADE) 처리.
💻 오늘 핵심 코드
1. 문자열 및 형변환 함수 활용
SELECT EMAIL,
LEFT(EMAIL, INSTR(EMAIL, '@') - 1) AS `아이디_1`,
SUBSTRING_INDEX(EMAIL, '@', 1) AS `아이디_2`
FROM employee;
SELECT NUM AS `구매번호`,
CONCAT(CAST(PRICE AS VARCHAR(10)), ' * ', CAST(AMOUNT AS VARCHAR(10)), ' = ') AS `총 금액`,
PRICE * AMOUNT AS `구매액`
FROM buytbl;
2. 날짜 연산 및 흐름 제어 (CASE / IF)
SELECT EMP_NAME,
HIRE_DATE,
ROUND(DATEDIFF(CURDATE(), HIRE_DATE) / 365) AS `근속년수`
FROM employee
WHERE HIRE_DATE <= CURDATE() - INTERVAL 30 YEAR;
SELECT EMP_NO,
EMP_NAME,
SALARY,
CASE
WHEN SALARY <= 3000000 THEN '초급'
WHEN SALARY <= 4000000 THEN '중급'
ELSE '고급'
END AS `GRADE`
FROM employee
ORDER BY GRADE;
3. 학사 데이터베이스 함수 실습 문제
SELECT PROFESSOR_NAME AS `교수이름`,
YEAR(NOW()) - (1900 + CAST(SUBSTRING(PROFESSOR_SSN, 1, 2) AS INT)) AS `나이`
FROM tb_professor
WHERE SUBSTRING(PROFESSOR_SSN, 8, 1) = '1'
ORDER BY `나이` ASC;
SELECT RIGHT(PROFESSOR_NAME, CHAR_LENGTH(PROFESSOR_NAME) - 1) AS `이름`
FROM tb_professor;
SELECT ROUND(AVG(POINT), 1) AS `평점`
FROM tb_grade
WHERE STUDENT_NO = 'A517178';
🛠️ 실습 / 결과물 & 참고 자료
③ 실습 / 결과물
- 강의 실습코드: MySQL
lgcns 및 SQLDB 데이터베이스를 대상으로 문자열 가공, 날짜 계산, CASE/IF 조건 제어, 집계 함수(AVG, ROUND) 및 학사 DB 실습 문제 풀이 완료.
④ 참고 자료
🔍 문제와 해결
- 막힌 부분: 한글 문자열 길이 측정 시 바이트 단위(
LENGTH)와 글자 수 단위(CHAR_LENGTH)의 차이로 인해 문자열 슬라이싱 및 길이 비교 시 오류 발생.
- 해결 방법: 글자 수 기준 연산에는
CHAR_LENGTH()를 사용하고, 구분자 기준 분리에는 SUBSTRING_INDEX()를 활용해 안전하게 부분 문자열을 추출함.
🎯 다음에 할 일