Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발자의 자기계발 블로그( ੭ ・ᴗ・ )੭

[오라클] SQL문 (1) 본문

ORACLE

[오라클] SQL문 (1)

쪼사원 2024. 4. 2. 10:57

기본적인 dml 구조는 아무래도 익숙하니까 삭- 한 번 정리하고 좀 익숙하지 않은 애들을 위주로 포스팅 해보려 함.

 

✔ SELECT 문

SELECT * 또는 컬럼
FROM 테이블명 또는 뷰명
WHERE 조건
ORDER BY 컬럼;

테이블이나 컬럼 AS 테이블별칭, 컬럼 별칭

AS로 별칭을 붙일 수 있으며 AS는 생략이 가능함.

✔ INSERT 문

 

🔽 기본형태

INSERT INTO 테이블명 (컬럼1, 컬럼2, ...)
VALUES (값1, 값2, ...);

- 나열하는 컬럼과 값의 수, 순서, 데이터 타입이 일치해야 함

 

🔽 컬럼명 기술 생략 형태

INSERT INTO 테이블명
VALUES (값1, 값2, ...);

- 테이블을 생성할 때 기술했던 컬럼 순서대로 값을 나열

 

🔽 INSERT ~ SELECT 형태

INSERT INTO 테이블명 (컬럼1, 컬럼2, ...)
SELECT 문;

-- 아래는 예문 --
INSERT INTO example1 (ID, NAME)
SELECT emp_id, emp_name
FROM employees
WHERE salary > 5000;

 

 

✔ UPDATE 문

UPDATE 테이블명
SET 컬럼1 = 변경값1, 
	컬럼2 = 변경값2, ...
WHERE 조건;

- NULL인 테이블을 찾을 때, 검색 조건에 반드시 IS NULL로 비교해야함

  다른 DBMS는 col = ' ' 조건도 사용할 수 있지만 오라클에서는 반스디 col IS NULL 로 비교해야한다.

 

 

✔ MERGE 문 

 

❓ 조건을 비교해서 테이블에 해당 조건에 맞는 데이터가 없으면 INSERT, 있으면 UPDATE를 수행하는 문장

 

특정 조건에 따라 어떤 때는 INSERT, 다른 경우엔 UPDATE를 해야하는 경우 MERGE문 사용하면 됨!!!

MERGE INTO 테이블명
USING (UPDATE나 INSERT될 데이터 원천)
ON (UPDATE 될 조건)
WHEN MATCHED THEN
SET 컬럼1 = 값1, 컬럼2 = 값2, ...
WHERE update 조건
DELETE WHERE update_delete 조건
WHEN NOT MATCHED THEN
INSERT (컬럼1, 컬럼2, ...) VALUES (값1, 값2, ...)
WHERE INSERT조건;

 

복잡하니 예제로 살펴보자..

MERGE INTO extable d
	USING (SELECT EMPLOYEE_ID, SALARY, MANAGER_ID
    		FROM employees
            WHERE MANAGER_ID = 146) b
    ON ( d.EMPLOYEE_ID = b.EMPLOYEE_ID)
WHEN MATCHED THEN
	UPDATE SET d.BONUS_AMT = d.BONUS_AMT + b.SALARY * 0.01
    DELETE WHERE (b.EMPLOYEE_ID = 161)
WHEN NOT MATCHED THEN
	INSERT (d.EMPLOYEE_ID, d.BONUS_AMT) VALUES (b.EMPLOYEE_ID, b.SALARY * 0.01)
    WHERE b.SALARY < 8000;

ON 조건에 맞으면 UPDATE를, 안맞으면 INSERT를 하는?

DELETE WHERE 구문은 UPDATE될 값을 평가해서 조건에 맞는 데이터를 삭제하는 역할

위 예문에선 EMPLOYEE_ID 가 161번인 사원이 삭제된다.

 

 

✔ DELETE 문

-- 일반 구문
DELETE [FROM] 테이블명
WHERE 조건;

-- 특정 파티션만 삭제할 경우의 구문
DELETE [FROM] 테이블명 PARTITION (파티션명)
WHERE 조건;

-- 파티션 테이블은 특정 파티션만 삭제할 수 있다.
-- 파티션 명은 USER_TAB_PARTITIONS 시스템 뷰를 조회하면 찾아낼 수 있음
SELECT PARTITION_NAME
FROM USER_TAB_PARTITIONS
WHERE TABLE_NAME = '어쩌구';

 

 

✔ COMMIT 과 ROLLBACK / TRUNCATE

 

COMMIT은 변경한 데이터를 데이터베이스에 마지막으로 반영하는 역할

ROLLBACK은 변경한 데이터를 변경하기 이전 상태로 되돌리는 역할

TRUNCATE은 데이터를 삭제하는 역할

DELETE문은 데이터를 삭제한 후에 COMMIT을 실행해야 데이터가 완전히 삭제되고, 반대로 ROLLBACK을 실행하면 데이터가 복구됨.

하지만 TRUNCATE문은 한 번 실행하면 데이터가 바로 삭제되고 ROLLBACK을 실행하더라도 복구되지 않음.

또한 WHERE 조건을 붙일 수 없음. >> 테이블 데이터 전체가 바로 삭제된다는 뜻!

TRUNCATE TABLE 테이블명;

 

'ORACLE' 카테고리의 다른 글

[오라클] SQL 함수  (1) 2024.04.03
[오라클] SQL문 (2)  (0) 2024.04.02
[오라클] DB 구성 객체 - 뷰, 인덱스, 시노님, 시퀀스  (0) 2024.04.01
[오라클] DB 구성 객체 - 테이블  (1) 2024.03.29
[오라클] 기본  (1) 2024.03.28