풀스택과정

풀스택과정 DB - LIKE | IN | 단일행함수 | GROUP

바닷가쟤 2025. 5. 20. 17:36
💡 2025 05 19

1. LIKE 연산자와 와일드 카드
2. IN 연산자
3. 단일행함수
  - 문자 함수
  - 숫자 함수
  - 날짜 함수
  - 변환 함수

 

서버와 DB사이에서 가장 많은 디벨롭이 일어난다.

코드가 짧아지면 에러 확률도 낮아짐

  1. JDBC
  2. MyBatis - Maven
  3. 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;

가장 일반적으로 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 여러 조건을 지정할 때 사용

WHENTHEN반드시 한 쌍이어야 하고, 다수 존재할 수 있다.

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에 따라 다르게 처리되기 때문 !

편의성을 위해 구현된 허용된 비표준 동작임.

728x90