변환함수
-- 1. DATE_FORMAT
SELECT date_format(curdate(), '%y-%m-%d') TODAY;
SELECT date_format(curdate(), '%y %m %d') TODAY;
SELECT date_format(curdate(), '%y.%m.%d') TODAY;
-- 2.
SELECT curdate()-'2025-05-18' 기간; -- 잘못된 값이 출력
SELECT curdate()-str_to_date('25-05-18','%y-%m-%d') 기간; -- 올바른 값이 출력
-- 3.
SELECT (curdate() - CONVERT('25-05-18', DATE)) TODAY;
-- 사원의 연봉을 구함 (모든 연봉에 해당하는 값을 INTEGER로 변환)
-- SAL * 12 IFNULL(COMM, 33.2)
SELECT ename, sal, CONVERT(sal*12+ifnull(comm,33.2), SIGNED INTEGER) 연봉
FROM emp;
-- 4.
SELECT (curdate() - CAST('25-05-18' AS DATE)) TODAY;
-- FORMAT 함수
-- emp테이블에서 사원들의 월급과 연봉을 출려기ㅣ 숫자 3자리수마다 ,를 찍어서 출력
SELECT ename 사원이름, FORMAT(sal, 0) 월급, FORMAT(sal*12+ifnull(comm,0),0) 연봉
FROM emp;
SELECT ename, hiredate, date_format(hiredate, '%Y년 %m월 %d일') t_kor
FROM emp
WHERE deptno = 20
ORDER BY hiredate desc;
-- ifnull()
-- 사장은 상사가 없기 때문에 mgr값을 없음 으로 바꾸고, 컬럼명의 알리아스를 CEO로 지정
SELECT ename 이름, job CEO, ifnull(convert(mgr,char), '없음') MGR
FROM emp
WHERE job = 'PRESIDENT';
-- case문
SELECT
empno, ename, sal, job,
CASE job
WHEN 'ANALYST' THEN sal * 1.1
WHEN 'CLERK' THEN sal * 1.2
ELSE sal
END AS salary
FROM emp;
-- 모든 직원의 이름, 업무, 급여, COMM, 보너스를 검색
-- 보너스는 업무가 MGR인 직원에 적용 급여의 15%를 책정
-- 그 외 업무의 직원은 급여의 13%
SELECT ename, job, sal, comm,
CASE job
WHEN 'MANAGER' THEN CONVERT(sal*0.15, SIGNED INTEGER)
ELSE CONVERT(sal*0.13, SIGNED INTEGER)
END AS bonus
FROM emp;
workshop04
-- ################## 변환 함수 실습 ######################
use kosa;
-- 1) 모든 직원의 이름과 입사일을 ‘1996-5-14’의 형태로 출력 하라.
select ename 이름, date_format(hiredate, '%Y-%m-%d') 입사일
from emp;
-- 2) 모든 직원의 이름과 입사년과 입사월만 '1981.05' 형식으로 출력하라
SELECT ename 이름, date_format(hiredate, '%Y.%m') 입사년월
FROM emp;
-- 3) 모든 직원의 번호, 이름, 급여를 출력하라. 단, 급여앞에 화폐표시($), 그리고 천단위(,)표시, 소수점이하 2자리가 표시되도록 하라.
SELECT empno 번호, ename 이름, concat('$',FORMAT(sal,2))급여
FROM emp;
-- ################## 일반 함수 실습 ######################
-- 1) 모든 직원의 이름, 급여, 커미션을 출력하라. 단, comm이 null이면 '없음'으로 출력하라.
SELECT ename 이름, sal 급여, ifnull(convert(comm, char),'없음') 커미션
FROM emp;
-- 2) 모든 직원의 이름, 직무, 급여, 커미션, 보너스를 출력하라.
-- 보너스는 직무가 MANAGER이면 급여의 150%, 그외 직원은 급여의 130% 이다.(case ~ else 사용)
SELECT ename 이름, job 직무, sal 급여, ifnull(comm, 0) 커미션,
CASE job
WHEN 'MANAGER' THEN sal*1.5
ELSE sal*1.3
END AS bonus
FROM emp;
-- 3) mgr2 컬럼을 하나 더 만들어서
-- mgr이 null이면 상위담당자/ null이면 mgr값을 가지도록 한다.(case ~ else 사용))
SELECT ename 이름,
CASE
WHEN mgr is null THEN '상위담당자'
ELSE mgr
END AS mgr2
FROM emp;
/* 그룹함수 */
SELECT count(*) 직원수 FROM emp;
SELECT * FROM emp; -- 이렇게 했을 때의 행의 수를 반환
-- -1은 데이타의 마지막을 의미, 성능상 더 좋다
SELECT count(-1) 직원수 FROM emp;
-- 그룹함수는 집계시 null 값을 건너뛴다
-- empno 기본키 제약조건
-- not null + unique
SELECT count(empno) FROM emp;
SELECT count(empno) 총인원수, avg(sal) 평균급여, MIN(sal) 최소급여, MAX(sal) 최대급여, SUM(sal) 급여합
FROM emp;
-- emp 테이블에서 입사한 지 가장 오래된 사원과 가장 최근에 입사한 사원을 검색
SELECT MIN(hiredate), MAX(hiredate) FROM emp;
-- emp 테이블에서 부서번호가 10번이거나 20번인 사원 수를 검색
SELECT count(empno)
FROM emp
WHERE deptno IN(10,20);
-- emp테이블에서 등록된 사원 수c1 comm이 null이 아닌 직원수 c2,
-- 직원들의 comm의 평균값을 가각 구하시오
-- comm의 평균값을 구하는 것이기에 직원 전체인원수로 나눠야한다.
SELECT count(-1) c1, count(comm) c2, avg(ifnull(comm,0)) c3
FROM emp;
-- emp 테이블에 등록되어져있는 부서의 갯수, 업부의 개수 를 검색
SELECT count(DISTINCT(deptno)) 부서수,
count(DISTINCT(job)) 업무수
FROM emp;
-- 부서별 평균 급여를 조회
-- 그룸함수에 포함되지 않는 컬럼이 select 뒤에 명시될 수 없다.
SELECT deptno, round(avg(sal))
FROM emp
GROUP BY deptno;
-- 서버 실행 순서
-- FROM --> WHERE --> GROUP BY -> SELECT
-- 실행 순서를 감안하면 group by 절 뒤에 alias사용 못한다
-- 그러데 mysql은 group by 절 뒤에 별칭붙여도 실행된다.
SELECT deptno DNumber, round(avg(sal)) AvgSalary
FROM emp
WHERE deptno != 10
GROUP BY DNumber
ORDER BY 1;
-- 입사년도별 사원수를 출력(2가지 방법)
SELECT year(hiredate) 입사년도, count(-1) 사원수
FROM emp
GROUP BY 입사년도
ORDER BY 1;
SELECT date_format(hiredate, '%Y') 입사년도, count(empno) 사원수
FROM emp
GROUP BY 입사년도
ORDER BY 1;
'KOSA FullStack 교육 > DB' 카테고리의 다른 글
KOSA fullstack 교육(JDBC 4단계 과정) (0) | 2025.05.22 |
---|---|
KOSA fullstack 교육(Having 절, RollUP 절, JDBC 4단계) (3) | 2025.05.21 |
KOSA fullstack 교육 (IN, LIKE 연산자, 단일 행 함수, 숫자함수, 날짜함수) (1) | 2025.05.21 |
KOSA fullstack 교육 (SELECT, ORDER BY, DISTINCT, IFNULL, LIMIT) (0) | 2025.05.16 |
KOSA fullstack 교육(DB 기초) (0) | 2025.05.15 |