데이터베이스 객체(테이블,뷰,인덱스,...)의 구조를 정의
데이터의 삽입,삭제,갱신등을 처리
INSERT INTO table_name(column1,colum2,...)
VALUES(데이터,'데이터',...);
INSERT INTO table_name(column1,column2,...)
SELECT column1,column2,....
FROM table_name
WHERE 조건
--모든 데이터를 입력할 경우
SQL> INSERT INTO emp
VALUES(7369,'SMITH','CLERK',7902,TO_DATE('80/12/17'),800,NULL,20);
--- 원하는 데이터만 입력할 경우
SQL> INSERT INTO dep (deptno,dname)
VALUES(10,'ACCOUNTING');
-- SELECT 문장을 이용한 INSERT
SQL> INSERT INTO dept2
SELECT * FROM dept;
테이블안의 데이터를 수정함
UPDATE table_name
SET column1 =값(고칠내용), column2=값,...
WHERE 조건
---사원수가 7902번인 사원의 부서번호를 30으로 수정
SQL> UPDATE emp
SET deptno=30
WHERE empno=7902;
--- 부서번호가 20의 사원들의 급여가 10%인상
SQL> UPDATE emp
SET sal=sal*1.1
WHERE deptno=20;
---모든 사원의 입사일을 오늘로 수정
SQL> UPDATE emp
SET hiredate= SYSDATE
사용하지 않는 데이터를 삭제함
DELTE FROM table_name WHERE 조건;
---사원번호가 7902번인 사원의 데이터를 삭제
SQL>DELETE FROM emp
WHERE empno=7902;
---평균급여보다 적게 받는 사원삭제
SQL> DELTE FROM emp
WHERE sal< (SELECT avg(sal) FROM emp);
---모든 행 삭제
SQL> DELTE FROM emp;
MERGE [ hint ]
INTO [ schema. ] { table | view } [ t_alias ]
USING { [ schema. ] { table | view }
| subquery
} [ t_alias ]
ON ( condition )
WHEN MATCHED THEN
UPDATE SET column = { expr | DEFAULT }
[, column = { expr | DEFAULT } ]...
[ DELETE where_clause ]
WHEN NOT MATCHED THEN
INSERT [ (column [, column ]...) ]
VALUES ({ expr [, expr ]... | DEFAULT })
부서번호20,30의 사원이 존재하면 급여를 10%인상하고, 존재하지 않으면 급여가 1000보다 큰 사원정보를등록하는예(INSERT,UPDATE예제)
---부서번호10,20의 사원정보를 갖는 테스트테이블생성
SQL> CREATE TABLE emp_merge_test
AS SELECT empno,deptno,sal FROM emp WHERE deptno IN (10,20);
--- 사원이 존재하면 10%인상 없으면 급여가 1000보다 큰 사원정보를 등록
MERGE INTO emp_merge_test m
USING (SELECT empno,deptno,sal
FROM emp
WHERE deptno IN (20,30)) e
ON (m.empno = e.empno)
WHEN MATCHED THEN
UPDATE SET m.sal = ROUND(m.sal*1.1)
WHEN NOT MATCHED THEN
INSERT (m.empno,m.deptno,m.sal)
VALUES (e.empno,e.deptno,e.sal)
WHERE e.sal>1000
COMMIT;
-- 20부서의 급여가 10%증가했고, 30부서는 등록되었는지 확인해 보자
SELECT * FROM emp_merge_test;
-- 다음 테스트를 위해서 emp_merge_test 테이블에 30부서 데이터를 삭제하자
-- 부서번호 10과 20의 사원정보만 남을 것이다.
DELETE FROM emp_merge_test WHERE deptno = 30;
COMMIT;
부서번호 10의 사원 급여를 10%인상하고, 부서번호20의 사원정보는 삭제하며,부서번호30의 사원급여20%인상하는예(INSERT,UPDATE,DELETE예제)
---MEGER문작성
MERGE emp_merge_test m
USING emp e
ON (m.empno=e.empno)
WHEN MATCHED THEN
UPDATE SET m.sal=ROUND(m.sal*1.1)
DELTE WHERE (m.deptno =20)
WHEN NOT MATCHED THEN
INSERT (m.empno,m.deptno,m.sal)
VALUES (e.empno,e.detpno,ROUND(e.sal*1.2)
WHERE e.deptno=30
COMMIT;
-- 정상적으로 변경되었는지 확인해 보자
SELECT * FROM emp_merge_test;
-- 테스트 테이블은 삭제하자
DROP TABLE emp_merge_test;
SELECT문은 데이터베이스로 부터 저장된 데이터를 검색하는데 사용
IN연산자 예시
--- 사번이 7900,7934번인 사원의 사번과 성명을 출력
SQL> SELECT empno, ename
FROM emp
WHERE empno IN (7900,7934);
EMPNO ENAME
--------- -------------
7934 MILLER
7900 JAMES
NOT IN연산자예시
---사번이 7900,7934번이 아닌 사원의 사번과 성명을 출력
SQL> SELECT empno, ename
FROM emp
WHERE empno NOT IN (7900,7934);
EMPNO ENAME
-------- --------------
7369 SMITH
7499 ALLEN
7698 BLAKE
....
a와 b사이의 데이터를 출력 (a,b값 포함)
AND를 이용해 두조건을 결합한 검색과 같은 결과값을 보여줌
--- 급여가 3000에서 5000사이인 사원만 조회
SQL> SELECT empno,ename
FROM emp
WHERE sal BETWEEN 3000 AND 5000;
EMPNO ENAME
------- ------
7788 SCOTT
7839 KING
7902 FORD
--- 'K'문자가 들어있는 사원 정보 조회
--- UPPER()함수는 k를 대문자로 변환하여 'K'fhdlstlr
SQL> SELECT empno, ename
FROM emp
WHERE UPPER(ename) LIKE '%K%';
EMPNO ENAME
------- -----------
7698 BLAKE
7782 CLARK
7839 KING
-- '_'를 이용한 LIKE검색
SQL> SELECT empno,ename
FROM emp
WHERE UPPER(ename) LIKE '_I%'; -- I가 두번째위치한 데이터들만 검색
EMPNO ENAME
------- ----------
7839 KING
7934 MILLER
ORDER BY절은 데이터의 정렬을 위해 사용 ex)ASC(오름차순),DESC(내림차순)
-- 아래 두 개의 쿼리는 동일한 결과를 반환함
-- 이름을 ASC로 정렬
SQL> SELECT empno, ename
ROM emp
WHERE deptno =30
ORDER BY ename ASC;
-- 두 번째 컬럼을 디폴트(ASC) 순으로 정렬
SQL> SELECT empno, ename
FROM emp
WHERE deptno = 30
ORDER BY 2
EMPNO ENAME
-------- ---------
7499 ALLEN
7698 BLAKE
7900 JAMES
...
-- 사원수가 3명이 넘는 부서의 부서명과 사원수 조회
SQL> SELECT a.dname, b.cnt
FROM dept a, (SELECT deptno, COUNT(empno) cnt
FROM emp
GROUP BY deptno) b
WHERE a.deptno = b.deptno
AND b.cnt>3
DNAME CNT
----------------- ----------
RESEARCH 5
SALES 6
위 쿼리에서는 3개의 Alias가 사용되었다
1. dept테이블을 a라는 alias
2. 부서의 사원수인 COUNT(empno)를 cnt로 alias
3. 부서별 사원수를가져오는 쿼리를 b로 alias
예명은 컬럼에만 주는 것이 아니라. 쿼리 문 및 테이블에도 사용할 수 있다