풀스택과정 DB - LIKE | IN | 단일행함수 | GROUP
💡 2025 05 19
1. LIKE 연산자와 와일드 카드
2. IN 연산자
3. 단일행함수
- 문자 함수
- 숫자 함수
- 날짜 함수
- 변환 함수
서버와 DB사이에서 가장 많은 디벨롭이 일어난다.
코드가 짧아지면 에러 확률도 낮아짐
- JDBC
- MyBatis - Maven
- JPA - Spring Boot
라이브러리가 많아지게 되면 일종의 규칙대로 라이브러리를 사용해야 함 → 프레임워크
우리나라 개발자가 가장 좋아하는 프레임워크 : 마이바티스 → 프레임, MAVEN에 대한 이해가 된다
MAVEN 환경을 직접 다뤄봐야 함
백엔드에서 DAO가 가장 중요함
관계형 DB의 특징
테이블과의 소속 관계
기본키 - 외래키
LIKE 연산자와 와일드카드
특정한 패턴 조건으로
- 성씨가 김으로 시작하는 사람
- 81년도에 태어난 사람
- 서울시에 거주하는 사람 ..
와일드카드와 함께 사용 !
- % : 0이나 여러 개(없을 수도 있고 여러 개 일 수 있음)
- _ : 딱 한 개
SELECT ename, sal job
FROM emp
WHERE ename LIKE '_A%';
IN 연산자
여러 개 중에서 어느 하나와 일치하는지 여부
SELECT ename, empno, job
FROM emp
WHERE empno IN(SELECT mgr FROM emp); <- 서브쿼리
-- emp 테이블에서 부하직원을 가지지 않는 사원 검색
SELECT ename, empno, job
FROM emp
WHERE empno NOT IN(SELECT mgr FROM emp);
-- 이건 결과가 안 나온다 : 아마 ! 이게 붙으면서 OR 연산이 AND 연산이 된 것 같음 그래서 null이 있어서 전체가 null이 되어 연산이 X
SELECT ename, empno, job
FROM emp
WHERE empno != (empno IN(SELECT mgr FROM emp));
이렇게 사용할 수 있다.
숫자 함수
round : 반올림 (자릿수 지정)
truncate : 버림 (자릿수 지정)
ceiling : 올림
floor : 버림
sign : 1 | -1 | 0
(oracle에는 없는 MySQL에만 있는 함수)
greatest(숫자1, 숫자2, 숫자3…) : 주어진 수에서 가장 큰 수 반환
least(숫자1, 숫자2, 숫자3…) : 주어진 수에서 가장 작은 수 반환
날짜
날짜 + 숫자 = 날짜
날짜 - 숫자 = 날짜
날자 - 날짜 = 기간(숫자)
-날짜-
SELECT curdate(); SELECT current_date(); SELECT date("2025-05-19");
다 같음
-년월일시분초-
SELECT sysdate();
SELECT now();
SELECT day(curdate());
SELECT dayname(curdate());
-날짜 사이의 차(기간)을 구하는 함수-
SELECT datediff(curdate(), date("2002-09-14"));
💡 2025 05 20 수업 이슈
1. 변환함수
2. Group 함수
3. Group by절
4. Having절
-- emp 테이블에서 5월에 입사한 사원의 이름과 입사일(입사년도, 입사월), 업무
-- 입사일순으로 정렬(연도 -> 월)
SELECT ename, hiredate, year(hiredate) 입사년도, month(hiredate) 입사월, job 업무
FROM emp
WHERE month(hiredate)=5
ORDER BY 3, 4;
-- 이거 안 된다 ! where절에서는 Alias 사용 못 함!
SELECT ename 이름, hiredate 고용일, year(hiredate) 입사년도, month(hiredate) 입사월, job 업무 <- 3번째 실행
FROM emp <- 1번째 실행
WHERE 입사월=5 <- 2번째 실행
ORDER BY 3, 4;
서버 실행 순서 때문에 WHERE절에서는 Alias ❌
FROM → WHERE → SELECT (여기서 행 만드니까..)
변환 함수
- 암시적 변환 : 변환함수 없이도 어느 정도는 자동으로 변환됨
- 명시적 변환 : 자동으로 변환되지 않을 때는 명시적인 변환 함수 사용 (강제 변환)
- str_to_date()
- SELECT CURDATE() - STR_TO_DATE('2025-05-18', '%Y-%m-%d') 기간;
- cast()
- SELECT curdate() - CAST('2025-05-18' AS date) 기간;
- convert()
- SELECT curdate() - CONVERT('2025-05-18', date) 기간;
- date_format()
- SELECT date_format(curdate(), '%Y %m %d') TODAY;
- str_to_date()
가장 일반적으로 MySQL에서 사용되는 형변환 함수는 CONVERT, CAST이다.
이 둘은 형식만 조금 다를 뿐 거의 비슷한 기능을 수행한다.
CAST(expression AS 데이터형식[길이])
CONVERT(expression, 데이터형식[길이])
이 외에도
STR_TO_DATE
DATE_FORMAT
위 4가지 함수는 반드시 기억하자 !
3자리수마다 콤마 찍을 때
FORMAT(sal, 0)
int로 형 변환 할 때
SELECT ename, sal, convert(sal*12 + ifnull(comm, 33.2), SIGNED INTEGER) 연봉 FROM emp;
조건형
CASE 여러 조건을 지정할 때 사용
WHEN과 THEN은 반드시 한 쌍이어야 하고, 다수 존재할 수 있다.
ELSE가 존재하면 위 조건에 해당되지 않는 경우 반환값을 책임진다. → 조건도 ELSE도 없다면 NULL 반환
GROUP
- Group by 절 - 그룹 나누기
- Having 절 - 그룹 제한
- ROLLUP 연산 - 하위 총계 값 계산
집계 함수
SUM, AVG, MIN, MAX, COUNT
집계를 한 그룹 안에서 해야 한다.
그룹 함수는 null을 건너 뛴다 ! ⭐
empno 기본키 제약조건 : not null + unique
- count
- 해당 테이블의 전체 레코드 수를 반환
- -1은 마지막을 의미. 성능 상 더 좋다.
- SELECT count(*) 직원수 FROM emp; SELECT count(-1) 직원수 FROM emp;
COUNT, MIN, MAX : 숫자, 문자, 날짜
SUM, AVG : 숫자 타입에만 가능
그룹 함수에 포함되지 않는 컬럼이 select절 뒤에 명시될 수 없다.
아래 sql문이 실행되려면 deptno로 그룹을 세분화시켜야 한다.
SELECT deptno, round(avg(sal))
FROM emp;
group by절이 필요하다.
SELECT deptno DNumber, round(avg(sal)) AvgSalary
FROM emp
GROUP BY DNumber;
FROM → WHERE → GROUP BY → SELECT
실행 순서를 감안하면 GROUP BY절에서 alias를 못 쓴다.
근데 ❓❓ 왜 될까
-> DBMS에 따라 다르게 처리되기 때문 !
편의성을 위해 구현된 허용된 비표준 동작임.