[실무에서 바로 쓰는 SQL 기본과 SQL 튜닝][ORACLE] 16강

MinHee·2023년 5월 20일
0
post-thumbnail

SELECT FOR UPDATE

SELECT절 마지막에 'FOR UPDATE'

SELECT를 실행하면서, 해당 행에 대해서 LOCK을 걸 수 있음
검색하는 동안에 그 누구도 갱신이 불가능함

SELECT문을 실행했음에도 COMMIT을 실행해야지, 접근이 가능함

SELECT ENAME, SAL, DEPTNO
FROM EMP
WHERE ENAME = 'JONES'
FOR UPDATE;

서브 쿼리를 사용하여 데이터 입력 (INSERT)

INSERT문 아래에 입력하고자 하는 데이터를 가져오는 서브쿼리 입력
단일 행이 아닌 다중 행을 입력하고자 할때 사용

CREATE TABLE EMP2
AS
SELECT *
FROM EMP;

테이블을 백업할 때 많이 사용되는 쿼리문

CREATE TABLE EMP3
AS
SELECT *
FROM EMP
WHERE 1=2; -- FALSE

데이터 없이 테이블 구조만 복사함

INSERT INTO emp2(empno, ename, sal, deptno)
SELECT empno, ename, sal, deptno
FROM emp
WHERE deptno = 10;

부서 테이블과 같은 구조의 테이블을 DEPT2라는 이름으로 생성하고 부서번호가 20, 30번의 모든 컬럼의 데이터를 DEPT2에 입력

CREATE TABLE DEPT2
AS
SELECT *
FROM DEPT
WHERE 1=2;

INSERT INTO DEPT2
SELECT *
FROM DEPT
WHERE DEPTNO IN (20,30);

서브쿼리를 사용하여 데이터 수정 (UPDATE)

SET절에 서브쿼리 작성

UPDATE emp
SET sal = (SELECT sal
FROM emp
WHERE ename = 'ALLEN')
WHERE job= 'SALESMAN';

부서번호가 30번인 사원들의 직업을 MARTIN의 직업으로 변경하세요

UPDATE emp
SET job = (SELECT job
FROM emp
WHERE ename = 'MARTIN')
WHERE DEPTNO = 30;

서브쿼리를 사용하여 데이터 삭제 (DELETE)

DELETE FROM emp
WHERE sal > (SELECT sal
FROM emp
WHERE ename = 'SCOTT');

서브쿼리를 사용하여 데이터 합치기 (MERGE)

ALTER TABLE dept
ADD sumsal number(10);

sum(sel)에 대한 쿼리문
SELECT deptno, sum(sal)
FROM emp
group by deptno;

MERGE INTO dept d
USING (SELECT deptno, sum(sal) as sumsal -- using 절에 작성함
FROM emp
GROUP BY deptno) v
ON (d.deptno = v.deptno)
WHEN MATCHED THEN
UPDATE SET d.sumsal = v.sumsal;

merge문 작성 시 alias는 매우 중요
into절의 테이블 값(혹은 서브쿼리)
using절의 테이블 값(혹은 서브쿼리)
alias 작성은 구분이 쉽게 되도록 작성

부서 테이블에 cnt라는 칼럼을 추가하고, 해당 부서 번호의 인원수로 값을 갱신하시오

alter table dept
add cnt number(10);

merge into dept d
USING (SELECT deptno, count(*) as cnt
FROM emp
GROUP BY DEPT) c
ON (d.deptno = c.deptno)
WHEN MATCHED THEN
UPDATE SET d.cnt = c.cnt;

profile
성장하는 개발자

0개의 댓글