SELECT 컬럼명
FROM 테이블명
WHERE 조건문
GROUP BY 컬럼명
HAVING 조건문
ORDER BY 컬럼명/인덱스 번호;
FROM -> JOIN을 통해서 테이블을 생성
WHERE -> 하나의 ROW씩 읽어서 조건을 만족하는 결과를 추출한다.
GROUP BY -> 원하는 행들을 그룹핑한다.
HAVING -> 조건을 만족하는 그룹을 남긴다/리턴한다.
ORDER BY -> 조건에 따라 정렬한다.
SELECT -> 원하는 결과만 출력/PROJECTION한다.
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7369 SMITH CLERK 7902 80/12/17 800 20
7499 ALLEN SALESMAN 7698 81/02/20 1600 300 30
7521 WARD SALESMAN 7698 81/02/22 1250 200 30
7566 JONES MANAGER 7839 81/04/02 2975 30 20
7654 MARTIN SALESMAN 7698 81/09/28 1250 300 30
7698 BLAKE MANAGER 7839 81/04/01 2850 30
7782 CLARK MANAGER 7839 81/06/01 2450 10
7788 SCOTT ANALYST 7566 82/10/09 3000 20
7839 KING PRESIDENT 81/11/17 5000 3500 10
7844 TURNER SALESMAN 7698 81/09/08 1500 0 30
7876 ADAMS CLERK 7788 83/01/12 1100 20
7900 JAMES CLERK 7698 81/10/03 950 30
7902 FORD ANALYST 7566 81/10/03 3000 20
7934 MILLER CLERK 7782 82/01/23 1300 10
-- 사원테이블에서 부서별 봉급의 가장큰값, 작은값, 중간값, 평균, 합계를 구해보자.
SELECT DEPTNO, MAX(SAL), MIN(SAL), MEDIAN(SAL), ROUND(AVG(SAL),-1), SUM(SAL)
FROM C##SCOTT.EMP
GROUP BY DEPTNO;
출력결과
DEPTNO MAX(SAL) MIN(SAL) MEDIAN(SAL) ROUND(AVG(SAL),-1) SUM(SAL)
10 5000 1300 2450 2920 8750
20 3000 800 2987.5 2310 13875
30 2850 950 1375 1570 9400
-- 각 부서별로 봉급으로, 가장큰값, 작은값, 중앙값, 평균, 합계를 구해보자.
-- 단, 급여의 합이 많은 순으로 정렬을 하자.
SELECT DEPTNO, MAX(SAL), MIN(SAL), MEDIAN(SAL), ROUND(AVG(SAL),-1), SUM(SAL)
FROM C##SCOTT.EMP
GROUP BY DEPTNO
ORDER BY SUM(SAL) DESC;
출력결과
DEPTNO MAX(SAL) MIN(SAL) MEDIAN(SAL) ROUND(AVG(SAL),-1) SUM(SAL)
20 3000 800 2987.5 2310 13875
30 2850 950 1375 1570 9400
10 5000 1300 2450 2920 8750
소숫점 이하 숫자 자리
만큼 반올림해서 출력해주는 함수-- 사원테이블에서 급여의 최대가 2900이상인 부서에 대해서 부서번호, 평균, 급여합계를 구하자.
SELECT DEPTNO, ROUND(AVG(SAL),2), SUM(SAL)
FROM C##SCOTT.EMP
GROUP BY DEPTNO
HAVING MAX(SAL) >= 2900;
출력결과
DEPTNO ROUND(AVG(SAL),2) SUM(SAL)
20 2312.5 13875
10 2916.67 8750
-- 사원테이블에서 부서인원이 4명보다 많은 부서의 부서번호, 인원수, 급여의 합을 조회하자.
SELECT DEPTNO, COUNT(*), SUM(SAL)
FROM C##SCOTT.EMP
GROUP BY DEPTNO
HAVING COUNT(*)>4;
출력결과
DEPTNO COUNT(*) SUM(SAL)
30 6 9400
20 6 13875
LOWER(char) : 문자열을 소문자로
UPPER(char) : 문자열을 대문자로
INITCAP(char) : 주어진 문자열의 첫 번째 문자를 대문자로 나머지 문자는 소문자로 변환.
CONCAT(char1, char2) : CONCAT 함수는 Concatenation의 약자로 두 문자를 결합
SUBSTR(s, m ,[n])
INSTR(s1, s2 , m, n)
LENGTH(s) : 문자열의 길이를 리턴
CHR(n) : ASCII값이 n에 해당되는 문자를 리턴
ASCII (s) : 해당 문자의 ASCII값 리턴
LPAD(s1,n,[s2])
RPAD(s1,n,[s2]) : LPAD와반대로 오른쪽에 문자열을 끼어 놓는 역할
LTRIM (s ,c) : 문자열 왼쪽 c문자열 제거
RTRIM (s,c) : 문자열 오른쪽 c문자열 제거
TRIM
REPLACE(s,p,r) : s에서 from 문자열의 각 문자를 to문자열의 각 문자로 변환한다.
TRANSLATE (s,from,to) : s에서 from 문자열의 각 문자를 to문자열의 각 문자로 리턴
-- EMP테이블에서 이름의 첫글자가 'K'보다 크고 'Y'보다 작은 사원의
-- 사원번호, 이름, 업무, 급여, 부서번호를 조회하자.
-- 단, 이름순으로 정렬하자.
SELECT ENAME, EMPNO, JOB, SAL, DEPTNO
FROM C##SCOTT.EMP
WHERE ENAME BETWEEN 'K' AND 'Y'
ORDER BY ENAME;
SELECT ENAME, EMPNO, JOB, SAL, DEPTNO
FROM C##SCOTT.EMP
WHERE SUBSTR(ENAME,1,1)> 'K' AND SUBSTR(ENAME,1,1) <'Y'
ORDER BY ENAME;
출력결과
ENAME EMPNO JOB SAL DEPTNO
MARTIN 7654 SALESMAN 1250 30
MILLER 7934 CLERK 1300 10
SCOTT 7788 ANALYST 3000 20
SMITH 7369 CLERK 800 20
TURNER 7844 SALESMAN 1500 30
WARD 7521 SALESMAN 1250 30
BETWEEN 작은값 AND 큰값
에서 작은값과 큰값에는 문자가 들어갈 수도 있다.__ > 'K' AND < __ 'Y'
와 같이 문자열과 부등호를 사용할 수도 있다.-- EMP 테이블에서 10번 부서의 사원들의 담당 업무에서 좌측에 'A'를 삭제하고
-- 급여에서 좌측의 1을 삭제하여 출력하자.
SELECT JOB, LTRIM(JOB, 'A'), SAL, LTRIM(SAL, 1)
FROM C##SCOTT.EMP
WHERE DEPTNO = 10;
출력결과
JOB LTRIM(JOB,'A') SAL LTRIM(SAL,1)
MANAGER MANAGER 2450 2450
PRESIDENT PRESIDENT 5000 5000
CLERK CLERK 1300 300
SELECT LTRIM('ABC12345', 'XABC')
FROM DUAL;
출력결과
LTRIM('ABC12345','XABC')
12345
SELECT LTRIM('ABC12345' , 'X12')
FROM DUAL;
출력결과
LTRIM('ABC12345','X12')
ABC12345
SELECT LTRIM('ABC12345', '7788A')
FROM DUAL; --이건 왼쪽에 A 있으니까 A만지운다. 약간 AB이면, A먼저 지우고 B다음에 지우고 이런식
출력결과
LTRIM('ABC12345','7788A')
BC12345
-- REPACE함수를 사용하여 사원이름에 SC문자열을 *?로 변경해서 조회하자.
SELECT ENAME, REPLACE(ENAME, 'SC', '*?')
FROM C##SCOTT.EMP;
출력결과
ENAME REPLACE(ENAME,'SC','*?')
SMITH SMITH
ALLEN ALLEN
WARD WARD
JONES JONES
MARTIN MARTIN
BLAKE BLAKE
CLARK CLARK
SCOTT *?OTT
KING KING
TURNER TURNER
ADAMS ADAMS
JAMES JAMES
FORD FORD
MILLER MILLER
-- TRANSLATE함수를 사용하여 사원이름에 SC문자열을 *?로 변경해서 조회하자.
SELECT ENAME, TRANSLATE(ENAME, 'SC', '*?')
FROM C##SCOTT.EMP;
출력결과
ENAME TRANSLATE(ENAME,'SC','*?')
SMITH *MITH
ALLEN ALLEN
WARD WARD
JONES JONE*
MARTIN MARTIN
BLAKE BLAKE
CLARK ?LARK
SCOTT *?OTT
KING KING
TURNER TURNER
ADAMS ADAM*
JAMES JAME*
FORD FORD
MILLER MILLER