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씩 반속한다, 캐쉬는 사용안한다. 쿼리를 돌리면
- 100
- 200
- 300
- 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.~);
반응형