예시로 사용할 DEPT 테이블, EMP 테이블은 아래와 같다.
테이블이나 뷰에 있는 데이터를 조회할 때 사용하는 문장.
SELECT * 혹은 컬럼
FROM [스키마.] 테이블명 혹은 [스키마.] 뷰명
WHERE 조건
AND 조건
ORDER BY 컬럼;
모든 컬럼을 보려면 *
키워드를 사용한다.
신규로 데이터를 입력할 때 사용.
INSERT INTO [스키마.] 테이블명(컬럼1, 컬럼2, ...)
VALUES (값1, 값2, ...);
반드시 나열하는 컬럼과 값의 갯수
, 순서
, 데이터 타입
이 일치해야만 한다. 일치하지 않으면 오류 발생.
INSERT INTO [스키마.] 테이블명
VALUES (값1, 값2, ...);
컬렴명을 기술하지 않지만 VALUES절에 테이블의 컬럼 순서대로 해당 컬럼의 값을 입력해야 한다.
컬럼명을 기술하지 않는다는것은 테이블에 있는 모든 컬럼에 값을 입력한다는 의미.
INSERT INTO [스키마.] 테이블명(컬럼1, 컬럼2, ...)
SELECT 문;
다른 테이블이나 뷰의 조회 결과로 나온 데이터를 또 다른 테이블에 넣는 방식.
INSERT ALL | FIRST
WHEN 조건1 THEN
INTO [스키마.] 테이블명(컬럼1, 컬럼2, ...) VALUES(값1, 값2, ...)
WHEN 조건2 THEN
INTO [스키마.] 테이블명(컬럼1, 컬럼2, ...) VALUES(값1, 값2, ...)
...
ELSE
INTO [스키마.] 테이블명(컬럼1, 컬럼2, ...) VALUES(값1, 값2, ...)
SELECT문;
ex) 다중 테이블 INSERT 예시
CREATE TABLE EMP10 (
eno number(6), // 사원번호
ename varchar2(30), // 사원명
payM number(10), // 월급여
payY number(20), // 연봉
dno number(2) // 부서번호
);
CREATE TABLE EMP20 (
eno number(6), // 사원번호
ename varchar2(30), // 사원명
payM number(10), // 월급여
payY number(20), // 년봉
dno number(2) // 부서번호
);
CREATE TABLE EMPETC (
eno number(6), // 사원번호
ename varchar2(30), // 사원명
payM number(10), // 월급여
payY number(20), // 년봉
dno number(2) // 부서번호
);
INSERT ALL
WHEN deptno=10 THEN
INTO emp10 values(empno, ename, sal, sal*13, deptno)
WHEN deptno=20 THEN
INTO emp20 values(empno, ename, sal, sal*13, deptno)
ELSE
INTO empetc values(empno, ename, sal, sal*13, deptno)
SLEECT empno, ename, sal, sal*13, job, deptno
FROM emp
WHERE deptno=10 or deptno=20 or deptno=30;
테이블에 있는 기존 데이터를 수정할 때 사용.
UPDATE [스키마.] 테이블명
SET 컬럼1 = 변경값1,
컬럼2 = 변경값2,
...
WHERE 조건;
이미 입력된 데이터를 변경해야 하므로 변경할 테이블
, 컬럼
, 변경할 값
이 필요하다.
테이블에 있는 데이터를 삭제할 때 사용.
DELETE [FROM] [스키마.] 테이블명
WHERE 삭제조건;
DELETE [FROM] [스키마.] 테이블명 PARTITION (파티션명)
WHERE 삭제조건;
두 문자를 붙이는 연산을 수행
- 예시
select deptno || '-' || dname from dept;
- 결과
DEPTNO||'-'||DNAME**텍스트**
-------------------
10-ACCOUNTING
20-RESEARCH
30-SALES
40-OPERATIONS
90-dept90
91-dept91
92-회계부
93-영업부
95-정동진
96-최강개발96
97-개발부
98-개발부
1개 이상의 표현식과 논리연산자가 결합된 식.
TRUE
, FALSE
, UNKNOWN
3가지의 타입을 반환한다.
ANY
, SOME
, ALL
키워드로 비교하는 조건식
ANY와 SOME의 경우 문장중에 1가지라도 일치하는 모든것을 추출.
ALL의 경우 모든 조건을 동시에 만족해야 한다.
- 예시1
select * from dept
where deptno = ANY (10, 20, 30);
- 결과1
DEPTNO DNAME LOC
---------- -------------- ------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
- 예시2
select * from emp
where sal = ALL (800, 1600, 2400);
- 결과2
no rows selected (선택된 행 없음)
AND
, OR
, NOT
을 사용하는 조건식
- 예시
select * from emp
where NOT(sal>=1000);
- 결과
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
------ ------ ------ ----- --------- ----- ------ -----
7369 SMITH CLERK 7902 80/12/17 800 (null) 20
7900 JAMES CLERK 7698 81/12/03 950 (null) 30
범위에 해당하는 값을 찾을 때 사용.
- 예시
select ename, job, sal from emp
where sal BETWEEN 1500 AND 2500;
- 결과
ENAME JOB SAL
------- --------- ------
ALLEN SALESMAN 1600
CLARK MANAGER 2450
TURNER SALESMAN 1500
조건절에 명시한 값이 포함된 건을 반환.
- 예시
select ename, job, sal from emp
where sal IN (3000, 5000);
- 결과
ENAME JOB SAL
------- --------- ------
KING CLERK 5000
CLARK MANAGER 3000
문자열의 패턴을 검색할 때 사용되는 조건식.
- 예시
select ename, job, sal from emp
where ename like 'J%'; // 이름의 첫글자가 J로 시작하는
- 결과
ENAME JOB SAL
------- ------ -------
JONES MANAGER 2975
JAMES CLERK 950
출처
- 오라클 SQL과 PL/SQL을 다루는 기술 (책)