[기본형식]
SELECT 칼럼명1, 칼럼명2,...
FROM 테이블명
WHERE 조건절
GROUP BY 칼럼명
HAVING 조건절
ORDER BY 칼럼명 [ASC|DESC]
예제
SQL> select ename "이름" , job as 업무, hiredate 입사일 from emp; 이름 업무 입사일 ---------- --------- -------- SMITH CLERK 80/12/17 ALLEN SALESMAN 81/02/20 WARD SALESMAN 81/02/22 JONES MANAGER 81/04/02 MARTIN SALESMAN 81/09/28 BLAKE MANAGER 81/05/01 CLARK MANAGER 81/06/09 SCOTT ANALYST 87/04/19 KING PRESIDENT 81/11/17 TURNER SALESMAN 81/09/08 ADAMS CLERK 87/05/23 JAMES CLERK 81/12/03 FORD ANALYST 81/12/03 MILLER CLERK 82/01/23 14 개의 행이 선택되었습니다.
select 컬럼명,... from 테이블명,... where 컬럼명 조건;
① from : 현재 유저가 테이블을 소유하고 있는지 확인한다.
→ 테이블 전체가 후보가 됨.
② where : 행(데이터)을 제한한다.
→ where절이 참인 행만 추출
③ select - 컬럼을 제한한다.
- 산술연산자 : +, -, *, /, mod
- 관계연산자 : =, ≠, (<>), >, <, ≥, ≤
- 문자열 연산자 : like (% 모든 문자, _ 한 개의 문자)
- 논리연산자 : not, and, or (두 개의 조건을 묻는 연산)
예제
부서 번호가 20번인 사람select deptno, ename from emp where deptno = 20;
급여가 1000 ~ 2000인 사람
SQL> select ename, sal from emp where sal >= 1000 and sal <= 2000; ENAME SAL ---------- ---------- ALLEN 1600 WARD 1250 MARTIN 1250 TURNER 1500 ADAMS 1100 MILLER 1300 6 개의 행이 선택되었습니다.
급여가 1000 ~ 2000이 아닌 사람
SQL> select ename, sal from emp where sal < 1000 or sal > 2000; ENAME SAL ---------- ---------- SMITH 800 JONES 2975 BLAKE 2850 CLARK 2450 KING 5000 JAMES 950 FORD 3000 7 개의 행이 선택되었습니다.
업무가 ‘salesman’, ‘clerk’ 인 사람
SQL> select ename, job from emp 2 where job = 'SALESMAN' or job = 'CLERK'; ENAME JOB ---------- --------- SMITH CLERK ALLEN SALESMAN WARD SALESMAN MARTIN SALESMAN TURNER SALESMAN ADAMS CLERK JAMES CLERK MILLER CLERK 8 개의 행이 선택되었습니다.
커미션이 NULL인 사원
SQL> select ename 이름, sal 급여, comm 커미션, sal+nvl(comm, 0) 총급여 from emp; 이름 급여 커미션 총급여 ---------- ---------- ---------- ---------- SMITH 800 800 ALLEN 1600 300 1900 WARD 1250 500 1750 JONES 2975 2975 MARTIN 1250 1400 2650 BLAKE 2850 2850 CLARK 2450 2450 SCOTT 3000 3000 KING 5000 5000 TURNER 1500 0 1500 ADAMS 1100 1100 이름 급여 커미션 총급여 ---------- ---------- ---------- ---------- JAMES 950 950 FORD 3000 3000 MILLER 1300 1300
이름의 두 번째 문자가 L인 사람
SQL> select ename from emp where ename like '_L%'; ENAME ---------- ALLEN BLAKE CLARK
함수의 종류
- 단일행 함수 : 하나의 row 당 하나의 결과값을 반환하는 함수
- input 하나의 행 → output 하나
- 데이터 종류별로 여러 개의 함수가 있다.
- 복수행 함수 : 여러개의 row 당 하나의 결과값을 반환하는 함수
- input 여러 개의 행 → output 하나
- 계산과 관련된 함수가 주를 이룬다.
- count, max, min, sum
- 계산함수, 그룹함수 라고도 한다.
단일행 함수
1. 문자열 함수
trim
: 양쪽 공백 제거rtrim
: 오른쪽 공백 제거ltrim
: 왼쪽 공백 제거lower
: 모든 문자를 소문자로upper
: 모든 문자를 대문자로initcap
: 단어의 첫글자만 대문자로concat
: 문자열 연결replace
: 문자열을 바꿔줌substr
: 문자열의 n1번째 위치에서 n2개 만큼 문자열 빼옴length
: 문자열 길이를 반환least
: 문자열 중에 가장 앞의 값을 리턴nvl
: 해당 칼럼이 null인 경우 정해진 값을 반환
- 수학 함수
round
: 자릿수 지정 반올림trunc
: 자릿수 지정 버림floor
: 최하 정수 리턴ceil
: 최상 정수 리턴abs
: 절대값으로 반환
- 날짜 함수
sysdate
: 현재 시간을 리턴add_months
: 날짜, 더해질 월last_day
: 해당날짜의 마지막 날짜 반환months_between
: 두 날짜 사이의 월 수예시
select to_char(sysdate, 'yy') "yy", to_char(sysdate, 'year') "year", // twenty twenty-two to_char(sysdate, 'month') "month", to_char(sysdate, 'mon') "mon", to_char(sysdate, 'mm') "mm", to_char(sysdate, 'q') "q", // 분기 to_char(sysdate, 'd') "d", // 요일을 숫자로 일 - 0 to_char(sysdate, 'day') "day", // 수요일 to_char(sysdate, 'dy') "dy", // 수 to_char(sysdate, 'dd') "dd", to_char(sysdate, 'ddd') "ddd", // 201 - 365일 기준 to_char(sysdate, 'hh') "hh", to_char(sysdate, 'hh24') "hh24", to_char(sysdate, 'miss') "miss", to_char(sysdate, 'am') "am", to_char(sysdate, 'pm') "pm" from dual; select to_char(sysdate, 'fmyyyy.mm.dd day am hh:mi:ss') from dual; // fm - 07월 -> 7월 select to_char(sysdate, 'fmyyyy.mmsp.dd day am hh:mi:ss') from dual; // sp - 영문으로 추출 select to_char(sysdate, 'fmyyyy.mm.ddth day am hh:mi:ss') from dual; // th - th붙이기
- 숫자 변환함수, 날짜 변환함수
to_number
: 숫자로 변환to_date
: 날짜로 변환
복수행(그룹) 함수
count
: 해당 칼럼이 존재하는 row의 개수를 반환
(null인 칼럼은 세지 않는다)sum
: 칼럼의 값을 모두 더한 값 리턴avg
: 평균값을 리턴 (null 칼럼 제외)max
: 최대값 리턴min
: 최소값 리턴예시
부서별 평균 급여 구하기SELECT deptno, AVG(sal) FROM emp GROUP BY deptno DEPTNO AVG(SAL) ---------- ---------- 30 1566.66667 20 2258.33333 10 2916.66667