데이터와 그 구조를 정의
데이터의 검색과 수정 등의 처리
데이터베이스 트랜잭션 제어
전체 컬럼과 매칭되는 데이터를 행단위로 모두 검색
SELECT empno, ename, job, mgr, hiredate, sal, comm, deptno FROM emp;
일부 컬럼과 매칭되는 데이터를 행단위로 검색
SELECT ename, job, sal FROM emp;
*를 이용해서 전체 컬럼 호출
SELECT * FROM emp;
주석
SELECT * /*주석*/ FROM emp;
함수 및 계산의 결과를 볼 때 사용할 수 있는 공용(PUBLIC)테이블
SELECT SYSDATE FROM dual;
SELECT ASCII('A') FROM dual;
SELECT ASCII(0) FROM dual;
SELECT 7 + 10 FROM dual;
SELECT ename, sal, sal+300 FROM emp;
SELECT ename, sal, sal*12 FROM emp;
SELECT ename, sal, (sal+300)*12 FROM emp;
SELECT ename, sal*12 ASal FROM emp;
SELECT ename, sal*12 AS ASal FROM emp;
1) 대소문자 구별을 원할 때
2) 공백 포함시
3) _,#등 특수문자 사용시
4) 숫자로 시작할 경우
SELECT ename, sal*12 "Annual Salary" FROM emp;
SELECT ename || ' has $' || sal FROM emp;
중복행 삭제
SELECT DISTINCT deptno FROM emp;
조건을 명시해서 원하는 행을 검색
WHERE절에는 열 Alias를 사용할 수 없음
SELECT * FROM emp WHERE deptno=10;
SELECT * FROM emp WHERE ename = 'SMITH';
SELECT * FROM emp WHERE hiredate = '81/12/03';
SELECT * FROM emp WHERE hiredate = '81-12-03';
SELECT * FROM emp WHERE hiredate < '81/05/01';
SELECT * FROM emp WHERE hiredate >= '81/05/01';
SELECT * FROM emp WHERE sal != 3000;
SELECT * FROM emp WHERE sal ^= 3000;
SELECT * FROM emp WHERE sal <> 3000;
SELECT * FROM emp WHERE sal>2000 AND sal<5000;
SELECT * FROM emp WHERE sal>=2000 AND sal<=5000;
두 값 사이(지정한 값 포함)
SELECT * FROM emp WHERE sal BETWEEN 1000 AND 1500;
SELECT * FROM emp WHERE sal NOT BETWEEN 1000 AND 1500;
SELECT * FROM emp WHERE ename BETWEEN 'KING' AND 'SMITH';
SELECT * FROM emp WHERE hiredate BETWEEN '80/12/17' AND '81/09/28';
값 목록 중의 값과 일치
SELECT * FROM emp WHERE sal IN (1300,2450,3000);
SELECT * FROM emp WHERE sal NOT IN (1300,2450,3000);
SELECT * FROM emp WHERE ename IN ('ALLEN','FORD');
패턴을 사용해서 일치하는 정보를 검색
%는 0개 이상의 문자를 나타냄
_는 한 문자를 나타냄
SELECT * FROM emp WHERE ename LIKE '%S%';
SELECT * FROM emp WHERE ename NOT LIKE '%S%';
22로 끝나는 입사일
SELECT * FROM emp WHERE hiredate LIKE '%22';
FOR 다음에 꼭 한 글자
SELECT * FROM emp WHERE ename LIKE 'FOR_';
SELECT * FROM emp WHERE comm IS NULL;
SELECT * FROM emp WHERE comm IS NOT NULL;
SELECT empno,ename,job,sal FROM emp
WHERE sal>=2000 AND job LIKE '%MAN%';
SELECT empno,ename,job,sal FROM emp
WHERE sal>=2000 OR job LIKE '%MAN%';
SELECT ename,job FROM emp WHERE job NOT IN ('CLERK','SALESMAN');
정렬
SELECT * FROM emp ORDER BY sal ASC;
SELECT * FROM emp ORDER BY sal;
SELECT * FROM emp ORDER BY sal DESC;
SELECT * FROM emp ORDER BY sal DESC, ename DESC;
SELECT empno,ename,sal*12 annsal FROM emp ORDER BY annsal;
SELECT ename,job,deptno,hiredate FROM emp ORDER BY 3;
NULLS FIRST 또는 NULLS LAST 키워드를 사용하여 반환된 행 중
NULL값을 포함하는 행이 정렬 순서상 맨 처음에 나타나거나 마지막에 나타나도록 지정
SELECT * FROM emp ORDER BY comm ASC NULLS FIRST;
SELECT * FROM emp ORDER BY comm DESC NULLS LAST;
SELECT LOWER('HELLO') FROM dual;
SELECT UPPER('hello') FROM dual;
SELECT INITCAP('hello wORLD') FROM dual;
SELECT INITCAP(ename) FROM emp;
문자열1과 문자열2를 연결하여 하나의 문자열로 반환
SELECT CONCAT('Hello','World') FROM dual;
SELECT CONCAT(ename,job) FROM emp;
(대상문자열,인덱스)
대상문자열에서 지정한 인덱스부터 문자열을 추출
주의 인덱스1부터 시작
SELECT SUBSTR('Hello World',3) FROM dual;
SELECT SUBSTR('Hello World',3,3) FROM dual; --대상문자열,인덱스,개수
SELECT SUBSTR('Hello World',-3) FROM dual; --뒤에서 3번째부터 끝까지 추출
SELECT SUBSTR('Hello World',-3,2) FROM dual; --뒤에서 3번째부터 2개만 추출
문자열의 개수
SELECT LENGTH('Hello World') FROM dual;
SELECT ename, LENGTH(ename) FROM emp;
SELECT INSTR('Hello World','e') FROM dual;
SELECT INSTR('Hello World','E') FROM dual;--검색문자가 없을 경우 0 반환
SELECT INSTR('Hello World','o') FROM dual;
SELECT INSTR('Hello World','o',6) FROM dual;--(대상문자열,검색문자,검색인덱스:해당위치부터 검색)
SELECT INSTR('Hello World','o',1,2) FROM dual;--(대상문자열,검색문자,검색인덱스,반복횟수)
지정한 길이에 문자열을 출력하는데 공백은 왼쪽에 지정한 문자로 채움
SELECT LPAD('Hello',10,'*') FROM dual;
지정한 길이에 문자열을 출력하는데 공백은 오른쪽에 지정한 문자로 채움
SELECT RPAD('Hello',10,'*') FROM dual;
문자열에서 공백이나 특정 문자를 제거한 다음 값을 반환
방향 -> leading(왼쪽), trailing(오른쪽), both(양쪽,default)
SELECT TRIM(LEADING 'h' FROM 'habchh') FROM dual;
SELECT TRIM(BOTH 'h' FROM 'habchh') FROM dual;
문자열의 왼쪽에서 공백이나 특정 문자를 제거
SELECT LTRIM('habchh','h') FROM dual;
문자열의 오른쪽에서 공백이나 특정 문자를 제거
SELECT RTRIM('habchh','h') FROM dual;
대상문자열에서 OLD문자를 NEW문자로 대체
SELECT REPLACE('010.1234.5678','.','-') FROM dual;
SELECT ename, LOWER(SUBSTR(ename,1,3)) FROM emp;
올림 처리한 정수값을 반환
SELECT CEIL(1.4) FROM dual;
버림 처리한 정수값을 반환
SELECT FLOOR(1.7) FROM dual;
반올림
SELECT ROUND(45.926,2) FROM dual;
SELECT ROUND(45.926) FROM dual;
SELECT empno,ename,sal,ROUND(sal*1.15) "New Salary" FROM emp;
버림
SELECT TRUNC(45.926,2) FROM dual;
SELECT TRUNC(45.926) FROM dual;
나머지값
SELECT MOD(17,2) FROM dual;
SYSDATE(ORACLE 서버의 현재 날짜와 시간을 반환)
SELECT SYSDATE FROM dual;
날짜에 산술 연산자 사용
SELECT ename, TRUNC((SYSDATE - hiredate)/7) AS WEEKS FROM emp;
두 날짜 간의 월 수
SELECT MONTHS_BETWEEN('2012-03-23','2010-01-23') FROM dual;
SELECT ename,hiredate,
TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)) months_worked
FROM emp ORDER BY months_worked;
특정 날짜의 월에 정수를 더한 다음 해당 날짜를 반환
SELECT ADD_MONTHS('2022-01-01',8) FROM dual;
지정된 요일의 다음 날짜
SELECT NEXT_DAY('2022-05-05','월요일') FROM dual;
월의 마지막 날
SELECT LAST_DAY('2022-05-13') FROM dual;
TO_CHAR : 숫자 -> 문자, 날짜 -> 문자
TO_NUMBER : 문자 -> 숫자
TO_DATE : 문자 -> 날짜
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD') FROM dual;
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') FROM dual;
SELECT TO_CHAR(1234,9999) FROM dual;
SELECT TO_CHAR(1234,'9999') FROM dual;
SELECT TO_CHAR(1234,'0000') FROM dual;
SELECT TO_CHAR(1234,0000) FROM dual;
SELECT TO_CHAR(1234,999) FROM dual;
SELECT TO_CHAR(1234,'999') FROM dual;
SELECT TO_CHAR(1234,'000') FROM dual;
SELECT TO_CHAR(1234,99999) FROM dual; -- 1234
SELECT TO_CHAR(1234,'99999') FROM dual;-- 1234
SELECT TO_CHAR(1234,'00000') FROM dual;-- 01234
SELECT TO_CHAR(1234,9999.99) FROM dual;
SELECT TO_CHAR(1234,'9999.99') FROM dual;
SELECT TO_CHAR(1234,'0000.00') FROM dual;
SELECT TO_CHAR(25.897,'99.99') FROM dual;
인상된 급여를 소수점 첫째자리까지 표시
SELECT TO_CHAR(sal*1.15,'9,999.9') FROM emp;
SELECT TO_CHAR(sal*1.15,'9,999.0') FROM emp;
- 통화표시
SELECT TO_CHAR(1234,'$0000') FROM dual;
지역통화표시
SELECT TO_CHAR(1234,'L0000') FROM dual;
SELECT ename,TO_CHAR(sal,'$9,999') FROM emp;
SELECT TO_DATE('22-05-13','YYYY-MM-DD')FROM dual;
포맷 형식 생략 가능
SELECT TO_DATE('22/05/13') FROM dual;
SELECT TO_NUMBER('100','999') FROM dual;
SELECT TO_NUMBER('100','000') FROM dual;
포맷형식 생략 가능
SELECT TO_NUMBER('200') FROM dual;
value1이 null이면 value2를 쓴다.
value1과 value2의 자료형이 일치
SELECT ename,sal,comm, NVL(comm,0)+100 FROM emp;
숫자 -> 문자
SELECT ename,comm,NVL(TO_CHAR(comm),'No Commission') FROM emp;
value1 null이면 value3, null이 아니면
value2 사용, 자료형이 일치하지 않아도 됨
SELECT NVL2(comm,'Commission','No commission') FROM emp;
두개의 값이 일치하면 null, 두개의 값이 일치하지
않으면 value1 사용
SELECT NULLIF(LENGTH(ename),LENGTH(job)) FROM emp;
null값이 아닌 값을 사용(자료형 일치)
SELECT comm,mgr,sal, COALESCE(comm,mgr,sal) FROM emp;
CASE 컬럼 WHEN 비교값 THEN 결과값
WHEN THEN
WHEN THEN
(ELSE 결과값)
END
SELECT ename,sal,job,
CASE job WHEN 'SALESMAN' THEN sal*0.1
WHEN 'MANAGER' THEN sal*0.2
WHEN 'ANALYST' THEN sal*0.3
ELSE sal*0.4
END "Bonus"
FROM emp;
select * from tab;