본문 바로가기

분류 전체보기

(145)
[ ORACLE ] HAVING 절 -- ■■■ HAVING ■■■-- -- ● EMP 테이블에서 부서번호가 20, 30 인 부서를 대상으로 -- 부서의 총 급여가 10000보다 적을 경우만 부서별 총 급여를 조회한다. SELECT DEPTNO, SUM(SAL) FROM EMP WHERE DEPTNO IN (20,30) GROUP BY DEPTNO; /* 309400 2010875 */ SELECT DEPTNO, SUM(SAL) FROM EMP WHERE DEPTNO IN (20,30) AND SUM(SAL) < 10000 GROUP BY DEPTNO; /* ORA-00934: group function is not allowed here 00934. 00000 - "group function is not allowed here" *Cau..
[ORACLE ] ROLLUP() CUBE() GROUPING SETS() SELECT USER FROM DUAL; --==>>SCOTT SELECT CASE GROUPING(DEPTNO) WHEN 0 THEN TO_CHAR(DEPTNO) ELSE '모든부서' END "부서번호" , SUM(SAL) "급여합" FROM TBL_EMP GROUP BY ROLLUP(DEPTNO); /* 10 8750 20 10875 30 9400 (널) 8000 모든부서37025*/ SELECT CASE GROUPING(DEPTNO) WHEN 0 THEN NVL(TO_CHAR(DEPTNO),'인턴') ELSE '모든부서' END "부서번호" , SUM(SAL) "급여합" FROM TBL_EMP GROUP BY ROLLUP(DEPTNO); /* 10 8750 20 10875 30 9400 인턴 800..
[ ORACLE ] GROUP BY GROUP BY ROLLUP() GROUPING() SELECT DEPTNO, SUM(SAL) FROM EMP GROUP BY DEPTNO ORDER BY DEPTNO; --===>> /* 108750 2010875 309400*/ SELECT DEPTNO "부서번호", SUM(SAL) "급여합" FROM EMP GROUP BY ROLLUP(DEPTNO); /* 10 8750 20 10875 30 9400 (NULL)29025*/ --→ 전체 합까지 나온다. SELECT * FROM TBL_EMP; -- ● 데이터 입력 INSERT INTO TBL_EMP VALUES (8001, '수지', 'CLERK', 7566, SYSDATE, 1500, 10, NULL); --==>> 1 행 이(가) 삽입되었습니다. INSERT INTO TBL_EMP VALUES ..
[ ORACLE ] 그룹함수 : SUM() AVG() COUNT() MAX() MIN() VARIANCE() STDDEV() -- ※ 그룹 함수의 가장 큰 특징은 -- 처리해야 할 데이터들 중 NULL이 존재하면 -- 이 NULL 은 제외하고 연산을 수행한다는 것이다 . -- ■■■ 그룹 함수 ■■■ --- SUM() 합 , AVG()평균, COUNT() 카운트, MAX() 최대값 , MIN() 최소값 --VARIANCE() 분산 , STDDEV() 표준편차 -- ※ 그룹 함수의 가장 큰 특징은 -- 처리해야 할 데이터들 중 NULL이 존재하면 -- 이 NULL 은 제외하고 연산을 수행한다는 것이다 . -- ●SUM() --EMP 테이블을 대상으로 전체 사원들의 급여 총합을 조회한다. SELECT SAL,SUM(SAL) FROM EMP; --===>> 오류뜸 SELECT SUM(SAL) FROM EMP; --==>>29025 ..
[ ORACLE ] RANK() DENSE_RANK() -- ● 문제 -- 서브쿼리를 활용하여 TBL_SAWON 테이블을 다음과 같이 조회할 수 있도록 한다. /* ------------------------------------------------------------------ 사원명 성별 현재나이 급여 나이보너스 ------------------------------------------------------------------ 단, 나이보너스는 현재 나이가 40세 이상이면 급여의 70% 30세 이상 40 세 미만이면 급여의 50% 20세 이상 30세 미만이면 급여의 30% 또한, 완성된 조회 구문을 기반으로 VIEW_SAWON2 라는 이름의 VIEW 를 생성한다. */ CREATE OR REPLACE VIEW VIEW_SAWON2 AS SELECT..
[ ORACLE ] SUB_QUERY, CREATE AND REPLACE 'VIEW' SELECT T.연봉 * 2 "연봉두배" FROM { SELECT 연봉 FROM TBL_EMP }T; --● 문제 -- TBL_SAWON 테이블을 활용하여 다음과 같은 항목들을 조회한다. -- 사원번호, 사원명, 주민번호, 성별, 현재나이, 입사일, -- 정년퇴직일, 근무일수, 남은일수 , 급여, 보너스 -- 단, 현재나이는 한국나이 계산법에 따라 연산을 수행한다. -- 또한 , 정년퇴직일은 해당 직원의 나이가 한국나이로 60 세가 되는 해(년도)의 -- 그 직원의 입사 월, 일로 연산을 수행한다. -- 그리고 보너스는 1000일 이상 2000일 미만 근무한 사원은 -- 그 사원의 원래 급여 기준 30% 지급 -- 2000일 이상 근무한 사원은 그 사원의 원래 급여 기준 50% 할 수 있도록 처리한다. ..
[ ORACLE ] CASE 구문(조건문, 분기문 ) / CASE WHEN THEN ELSE END 구문 DECODE() -- ■■■ CASE 구문(조건문 , 분기문)■■■ /* CASE WHEN THEN ELSE END 구문으로 부른다. 케이스웬덴엘스엔드 */ SELECT CASE 5+2 WHEN 7 THEN '5+2=7' ELSE '5+2는 몰라요' END "결과 확인" FROM DUAL; --==>> 5+2=7 SELECT CASE 5+2 WHEN 9 THEN '5+2=9' ELSE '5+2는몰라요' END "결과확인" FROM DUAL; --==>>5+2는몰라요 SELECT CASE 1+1 WHEN 2 THEN '1+1=2' WHEN 3 THEN '1+1=3' WHEN 4 THEN '1+1=4' ELSE '몰라' END "결과 확인" FROM DUAL; --==>> 1+1=2 -- ● DECODE() SELECT D..
[ ORACLE ] 변환함수 TO_CHAR() TO_DATE() TO_NUMBER() EXTRACT() TO_YMINTERAL() TO_DSINTERVAL() -- ■ 변환 함수 /* TO_CHAR() : 숫자나 날짜 데이터를 문자 타입으로 변환시켜주는 함수 TO_DATE() : 문자 데이터(날짜 형식)를 날짜 타입으로 변환시켜주는 함수 TO_NUMBER() : 문자 데이터(숫자 형식)를 숫자 타입으로 변환시켜주는 함수*/ SELECT 10 "숫자 10이다", TO_CHAR(10) "문자형태의 10이다" FROM DUAL; --==>> (우측정렬)(좌측정렬) 1010 -- ※ 날짜나 통화 형식이 맞지 않을 경우 세션 설정값을 통해 -- 설정할 수 있도록 한다, ALTER SESSION SET NLS_DATE_LANGUAGE = 'KOREAN'; --===>>Session이(가) 변경되었습니다. ALTER SESSION SET NLA_LANGUAGE = 'KOR..