1. 사원 이름과 입사일 출력, 10번 부서 입사일자를 MAY 1981과 1988년 1월 1일 형태로 출력한다.

 

SELECT ENAME, HIREDATE, TO_CHAR(HIREDATE, 'FMDD MONTH YYYY') T_HIREDATE,

TO_CHAR(HIREDATE, 'YYYY "년" MM"월" DD"일" ') T_KOR FROM EMP

WHERE DEPTNO=10

ORDER BY HIREDATE DESC;

 

2. 20번부서에서 급여앞에 $를 삽입, 천단위 구분자 표시

사원번호, 이름 ,직업, 봉급, 봉급포맷 출력

 

SELECT EMPNO, ENAME, JOB, SAL, TO_CHAR(SAL,'$999,999') FROM EMP

WHERE DEPTNO=20;

#원화표시할꺼면 L999,999

 

3. 현재시간 출력

 SELECT TO_CHAR(SYSDATE, 'YY/MM/DD(DAY) HH:MI:SS AM') TEST FROM DUAL;

=>21/05/21(금요일) 09:26:19 오전

 

SELECT TO_CHAR(SYSDATE, 'WW) A FROM DUAL;

21 (1월 1일부터 WEEK 수)

 

4.연도 출력

 SELECT TO_CHAR( TO_DATE('98','RR'), 'YYYY') TEST1,  1998

TO_CHAR(TO_DATE('05','RR') , 'YYYY') TEST2,  2005

TO_CHAR(TO_DATE('98','YY'), 'YYYY') TEST3, 2098

TO_CHARE(TO_DATE('05','YY), 'YYYY') TEST4 FROM DUAL;  2005

 

SELECT '000123', TO_NUMBER('000123') FROM DUAL;

-> 000123, 123 출력

 

 

#desc table 했는데 너무너무 길게 나오면 set lin 50으로 줄이기

 

5. DROP TABLE TEST;

 

CREATE TABLE TEST ( NO NUMBER(4), CH VARCHAR2(4));

 

DESC TEST;

 

INSERT INTO TEST VALUES(1,1) ;

 

SELECT  * FROM TEST;

 

INSERT INTO TEST VALUES('2', 'A');

 

2. 추가 변환 함수

 

 

 

3. 기타함수

 

 

4. 사원이름, 매니저, 매니저가 없으면 "상위관리자" 있으면 "담당자"

SELECT ENAME, MGR, NVL2(MGR, MGR||'담당자', '상위관리자') FROM EMP;

 

# 짜증나게 여러줄 되면 COL FORMAT A10으로 줄이기. 가장 밑단에 있는 칼럼(=연산으로 길어진것들)

 

5. 사원이름, 직업, 직업이 'CLERK'인 경우 NULL로 출력

SELECT ENAME, JOB, NULLIF(JOB,'CLERK') RES FROM EMP;

 

6. 사원이름, 커미션, 연봉, 커미션이 NULL이 아닌경우 커미션을 , NULL이면 연봉을, 전부 NULL 이면 50 출력

(COALESCE : NVL함수를 일반화 시킨 함수)

 

SELECT ENAME, COMM, SAL, COALESCE(COMM, SAL*12, 50) RES FROM EMP;

 

7. DECODE

CASE WHEN THEN 으로 바꿔서 출력

:

CASE[대상값] WHEN 비교조건1 THEN 처리1

                  WHEN 비교조건2 THEN 처리2

                  ELSE 디폴트처리

END

 

SELECT ENAME, SAL, CASE WHEN SAL <1000 THEN 'A'

WHEN SAL >= 1000 AND SAL <2500 THEN 'B'

ELSE 'C' END GRADE FROM EMP;

 

 

 

 

8. GROUP 함수

 

SELECT MIN(ENAME), MAX(ENAME), MIN(HIREDATE), MAX(HIREDATE) FROM EMP;

 

9.SALESMAN 대해서 급여평균, 최고, 최저, 합계를 구하라 

 

# ENAME 을 추가했을때 오류 뜨는거 확인

ENAME 은 12ROW 리턴하려고 하고, SAL은 ROW 한개임

 

10. 

SELECT DEPTNO FROM EMP GROUP BY DEPNO ----- SELECT 1st (30, 20, 10으로 셀렉)

ORDER BY DEPTNO ; --------SELET 2nd (10 ,20, 30으로 정렬)

 

 

11. 부서별~~ 이라고 하면 group by 사용

직업과 부서별 사원의 기준으로 인원수, 평균급여, 최대급여, 최저급여, 급여의 합을 구하라

SELECT COUNT(*), AVG(SAL), MAX(SAL), MIN(SAL), SUM(SAL) FROM EMP 

GROUP BY JOB, DEPTNO;

 

12. HAVING; 그룹이 생성(행분류) -> 그룹함수 적용-> HAVING 적용

HAVING 절에는 GROUP BY에 참여하는 컬럼이나 AGGREGATE 함수만 가능

 

부서인원이 4명보다 많은 부서의 부서번호, 인원수, 급여의 합을 리턴하라

SELECT DEPTNO, COUNT(*), SUM(SAL) FROM EMP

GROUP BY DEPTNO

HAVING COUNT(*) >4;

 

부서별 평균급여중 최대값이 얼마인지 리턴하라

SELECT MAX( AVG(SAL)  ) FROM EMP

GROUP BY DEPTNO;

 

오류나는 이유. HAVING은 잘 모르겠당 

 

BETWEEN AND

OR 대신 IN

LIKE

GROUP BY 별칭

HAVING

TABLE, COL 별칭

CUBE 

ROLL UP

 

'SQL-오라클' 카테고리의 다른 글

SQL-cmd 6  (0) 2021.05.28
SQL-cmd 5  (0) 2021.05.26
SQL- cmd3- 비주얼툴은 언제 쓰는가...  (0) 2021.05.25
sql 예제  (0) 2021.05.24
sql 자료  (0) 2021.05.24

+ Recent posts