728x90
반응형
✅ 조건 검색
🔹 LIKE 연산자와 와일드카드
- LIKE '김%' → '김'으로 시작하는 이름
- LIKE '%A%' → 이름에 A가 들어간 경우
- % : 여러 문자 대응
- _ : 단일 문자 대응
🔹 IN 연산자
- 특정 값 목록에 포함되는 경우를 필터링
WHERE deptno IN (10, 20, 30)
🔹 NOT IN의 주의점
- NULL이 포함되면 결과가 아무것도 안 나올 수 있음
-- 부하직원이 없는 사원 찾기
SELECT empno, ename
FROM emp
WHERE empno NOT IN (SELECT mgr FROM emp);
- NOT IN은 내부 서브쿼리에 NULL이 있으면 결과가 없음.
- → 대체 방법: LEFT JOIN ... WHERE mgr IS NULL 방식으로 해결
✅ 단일행 함수
🔸 문자 함수
함수설명
LOWER(), UPPER() | 소문자/대문자 변환 |
INITCAP() | 첫 문자 대문자 |
LENGTH(s) | 문자열 길이 |
CONCAT(s1, s2) | 문자열 연결 |
SUBSTR(s, m, n) | 부분 문자열 |
INSTR(s1, s2) | 문자열 위치 반환 |
TRIM() | 공백 제거 |
SELECT CONCAT(ename, '님') FROM emp;
SELECT TRIM(' Hello ');
🔸 숫자 함수
함수설명
ROUND(n, d) | 반올림 |
TRUNCATE(n, d) | 자릿수 버림 |
CEIL(n) | 올림 |
FLOOR(n) | 버림 |
SIGN(n) | 부호 반환 |
GREATEST(n1, n2, ...) | 가장 큰 수 |
LEAST(n1, n2, ...) | 가장 작은 수 |
SELECT ROUND(45.923, 2); -- 45.92
SELECT TRUNCATE(19.412, 1); -- 19.4
🔸 날짜 함수
SELECT CURDATE(); -- 오늘 날짜
SELECT NOW(); -- 현재 날짜/시간
SELECT DATEDIFF(CURDATE(), '2002-09-14'); -- 날짜 차이 (일수)
SELECT DATE_ADD(NOW(), INTERVAL 10 HOUR); -- 10시간 후
-- 입사일 기준 근무일수, 주차 계산
SELECT
ename, job,
DATEDIFF(CURDATE(), hiredate) AS 근무일수,
ROUND(DATEDIFF(CURDATE(), hiredate) / 7) AS 주차
FROM emp
WHERE job = 'MANAGER';
✅ JDBC 연결
DB에 접속해서 데이터를 가져오려면 JDBC 연결이 필요하다. JDBC는 Java에서 데이터베이스에 접근하기 위한 API다.
📌 JDBC → MyBatis → JPA
- 1단계: JDBC
- 직접 SQL 작성, 커넥션 수동 관리
- 2단계: MyBatis (Maven 기반)
- SQL은 유지하면서 객체 매핑 자동화
- 3단계: JPA (Spring Boot)
- SQL까지 생략 가능, 객체 중심의 데이터 처리
✅ LIMIT, 연산 우선순위
SELECT * FROM emp LIMIT 0, 3;
- LIMIT는 OFFSET부터 시작해서 n개의 결과만 반환
- 성능 이슈 주의 → OFFSET이 크면 풀 스캔 부담 커짐
연산자 우선순위
( ) > NOT > AND > OR
728x90
반응형
'SQL' 카테고리의 다른 글
[MySQL] 변환 함수, 그룹 함수, GROUP BY, HAVING 절 (0) | 2025.05.20 |
---|---|
[DBMS 기초] 관계형 데이터베이스, MySQL CRUD까지 (0) | 2025.05.19 |
SQL 기초 문법 요약: ORDER BY, NULL, LIKE, LIMIT 완벽 이해 (1) | 2025.05.19 |