SQL

MySQL 함수들과 조건 검색, 그리고 JDBC 연결 구조

개발자 누렁이 2025. 5. 19. 18:18
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
반응형