SQL

[SQL] INSERT

Potato Ongsim 2023. 7. 19. 00:12
반응형

INSERT

INSERT 는 테이블에 데이터를 삽입하는 명령어이다.

INSERT INTO 테이블[(열1, 열2, ...~)] VALUES (값1, 갑2, ...~)

SEQUENCE

시퀸스는 값을 자동으로 증가시켜준다.

 

CREATE TABLE testTbl
(
id NUMBER(4),
userName NCHAR(3),
age NUMBER(2),
nation NCHAR(4) DEFAULT "대한민국"
);

CREATE SEQUENCE idSEQ
	START WITH 1
	INCREMENT BY 1;

INSERT INTO testTbl VALUES (idSEQ.NEXTVAL, '이름', '나이', DEFAULT);
INSERT INTO testTbl VALUES (idSEQ.NEXTVAL, '이름', '나이', '나라');
SELECT * FROM testTbl;

id값에 다른 값을 넣어줄려면 원하는 값을 그냥 입력하면 된다.

그리고 시퀸스의 시작값을 다시 설정해 주려면, 증가값을 새로운 시작값만큼 증가시킨 후에 다시 1로 변경하면 된다.

 

CREATE TABLE testTbl
(
id NUMBER(3)
);
CREATE SEQUENCE idSEQ
	START WITH 100   --시작값
	INCREMENT BY 300 --증가값
	MINVALUE 100     --최소값
	MAXVALUE 300     --최대값
	CYCLE            --반복 설정
	NOCACHE          --캐쉬 사용안함
INSERT INTO testTbl VALUES(idSEQ,NEXTVAL);
INSERT INTO testTbl VALUES(idSEQ,NEXTVAL);
INSERT INTO testTbl VALUES(idSEQ,NEXTVAL);

SELECT * FROM testTbl;

testTbl 테이블 안에 ID는 NUMBER(3)크기 만큼 100부터 100씩 증가하여 초소값은 100, 최대값은 300씩 반속한다, 캐쉬는 사용안한다. 쿼리를 돌리면

  1. 100
  2. 200
  3. 300
  4. 100 이런 식으로 테이블 데이터가 나온다.

UPDATE

기존에 입력되어 있는 값을 수정하는 구문.

 

UPDATE 테이블이름
	SET 열1=값1, 열2=값2, ...~
	WHERE 조건;

--예시

UPDATE buyTbl SET price = price * 1.5;

WHERE 절을 생략하면 테이블 내의 모든 데이터가 수정되므로 주의하여야 한다.

DELETE FROM

DELETE는 행 단위로 삭제한다.

 

DELETE FROM 테이블이름 WHERE 조건;

--예시

DELETE FROM 테이블이름 WHERE 첫번째이름 = '김' AND ROWNUM <=2;

ROWNUM을 사용하여 김씨중 중상위 2건만 삭제한다.

MERGE

조건부 데이터 변경, MERGE문은 하나의 문장에서 경우에 따라서 INSERT, UPDATE, DELETE를 수행할 수 있는 구문이다.

 

MERGE [hint]
INTO [schema.] {table | view} [t_alias]
USING {[schema.] {table | view} | subquery} [t_alias]

ON (condition)
[WHEN MATCHED THEN UPDATE SET colum = {expr | DEFAULT | [,colum = {expr | DEFAULT}]..~
[where_clause]
[DELETE where_clause]]
[WHEN NOT MATCHED THEN INSERT [(column[,colum]...)] VALUES({expr[, expr]...|DEFAULT})
[where_clause]]
[LOG ERRORS [INTO [schema.] table] [(simple_expression)] [REJECT LIMIT{integer | UNLIMITED}]];
--예시
MERGE INTO testTbl M --변경될 테이블(target 테이블)
--변경할 기준이 되는 테이블(source 테이블)
USING (SELECT ...~) C
ON (M.~ = C.~) --~를 기준으로 두 테이블을 비교한다.

--target 테이블에 source 테이블의 행이 있으면 ~를 변경한다.
WHEN MATCHED THEN
	UPDATE SET M.~ = C.~

	--target 테이블에 source 테이블의 행이 있고, 사유가 '~'라면 해당 행을 삭제한다.
	DELETE WHERE C.~= "~"

	--target 테이블에 source 테이블의 행이 없으면 새로운 행을 추가한다.
	WHEN NOT MATCHED THEN
		INSERT(~,~,~) VALUES(C.~, C.~, C.~);
반응형