이 자습서에서는 프로그래밍 예제와 함께 PL SQL INSERT, UPDATE, DELETE 및 SELECT 명령을 사용하는 방법을 설명합니다.
이 기사에서는 계속해서 PL / SQL 시리즈 . 에서 PL / SQL 데이터 유형, 상수 및 변수 튜토리얼에서 프로그래밍 예제를 통해 PL SQL 데이터 유형, 변수, 상수 및 리터럴에 대해 자세히 배웠습니다. 여기서는 PL SQL DML 문과 작동 방식에 대해 설명합니다.
PL / SQL 테이블의 데이터를 조작하기 위해 PL SQL INSERT, DELETE, UPDATE 및 SELECT 명령을 살펴 보겠습니다.
BEGIN INSERT INTO MANAGER (CODE, NAME, AGE) SELECT CODE, NAME, AGE FROM EMPLOYEE WHERE CODE = 1; END;
위 코드의 출력 :
SELECT * from MANAGER;
부분 데이터 삽입
부분 데이터를 다른 테이블에 삽입 할 수도 있습니다. 먼저 MANAGERDETAIL 아래 쿼리를 사용하여 EMPLOYEE 테이블의 테이블.
CREATE TABLE MANAGERDETAIL AS SELECT * FROM EMPLOYEE WHERE 1 = 0;
여기, 1 = 0 인 경우 CODE 인 EMPLOYEE 테이블의 첫 번째 열을 참조합니다.
다음으로 INSERT INTO SELECT 문을 사용하여 EMPLOYEE 테이블의 데이터를 MANAGERDETAIL 테이블로 복제합니다.
INSERT INTO SELECT로 코드 구현;
BEGIN INSERT INTO MANAGERDETAIL SELECT CODE, NAME, AGE FROM EMPLOYEE WHERE CODE! = 0 END;
위 코드의 출력 :
SELECT * from MANAGERDETAIL;
위의 예에서는 SELECT 명령의 출력에 MANAGERDETAIL 테이블 열과 일치하는 값이 있기 때문에 INSERT 명령에서 열 이름을 언급하지 않았습니다. 또한 WHERE 절에 조건을 포함했습니다.
부분 데이터 및 리터럴 삽입
부분 데이터와 리터럴 값을 테이블에 삽입 할 수 있습니다.
먼저 아래 쿼리를 사용하여 MANAGERCONTACT 테이블을 생성하겠습니다.
CREATE TABLE MANAGERCONTACT ( CODE INT NOT NULL, NAME VARCHAR (15) NOT NULL, AGE INT NOT NULL, PRIMARY KEY (CODE) );
이제 다시 EMPLOYEE 테이블의 도움을 받아 EMPLOYEE 테이블의 데이터를 MANAGERCONTACT 테이블로 복제 해 보겠습니다.
INSERT INTO를 사용한 코드 구현 :
BEGIN INSERT INTO MANAGERCONTACT (CODE, NAME, AGE) SELECT CODE, NAME, 0 FROM EMPLOYEE; END;
위 코드의 출력 :
SELECT * from MANAGERCONTACT;
위의 예에서는 EMPLOYEE 테이블에서 값을 가져 왔고 MANAGERCONTACT 테이블에서 AGE 열의 값을 0으로 수정 한 INSERT 문에도 0 리터럴을 포함했습니다.
모두 삽입
INSERT ALL 문은 단일 테이블 또는 여러 테이블에 둘 이상의 행을 추가하는 데 사용됩니다. 다중 테이블 명령이라고도하며 조건부 및 무조건 두 가지 유형이 있습니다.
# 1) 조건없는 모두 삽입
테이블에 둘 이상의 행을 삽입하려면 INSERT ALL 문이 사용됩니다.
통사론:
INSERT ALL INTO <
> (c1, c2, c3) VALUES (v1, v2, v3) INTO <
> (c1, c2, c3) VALUES (v4, v5, v6) INTO <
> (c1, c2, c3) VALUES (v7, v8, v9)
여기서 c1, c2 및 c3은 열 이름이고 v1, v2 및 v3은 삽입 할 값입니다. 경우에 따라 하위 쿼리 대신 리터럴 값을 사용해야합니다. 아래 쿼리를 사용해야합니다.
SELECT * FROM dual;
아래 주어진 SQL 문을 사용하여 SOCCERPLAYERS 테이블을 만들었습니다.
CREATE TABLE SOCCERPLAYERS ( PLAYERID INT NOT NULL, NAME VARCHAR (15) NOT NULL, COUNTRY VARCHAR (15), PRIMARY KEY (PLAYERID) );
INSERT ALL을 사용한 코드 구현 :
BEGIN INSERT ALL INTO SOCCERPLAYERS (PLAYERID, NAME, COUNTRY) VALUES (4, 'DANIEL', 'USA') INTO SOCCERPLAYERS (PLAYERID, NAME, COUNTRY) VALUES (8, 'DANNY', 'ITALY') INTO SOCCERPLAYERS (PLAYERID, NAME, COUNTRY) VALUES (7, 'FRANK', 'FRANCE') SELECT 1 FROM dual; END;
위 코드의 출력 :
SELECT * from SOCCERPLAYERS;
위의 예에서는 INSERT ALL 명령을 사용하여 테이블에 한 번에 3 개의 행이 삽입되었습니다.
여러 테이블에 둘 이상의 행을 삽입하려면 INSERT ALL 문이 사용됩니다.
통사론:
INSERT ALL INTO <> (c1, c2, c3) VALUES (v1, v2, v3) INTO <> (c1, c2, c3) VALUES (v4, v5, v6) INTO <> (c1, c2, c3) VALUES (v7, v8, v9) Subquery;
여기서 c1, c2 및 c3은 열 이름이고 v1, v2 및 v3은 삽입 할 값입니다. table_name1, table_name2 및 table_name3은 테이블 이름입니다.
# 2) 조건부 모두 삽입
INSERT ALL 문은 일부 조건에 따라 테이블에 둘 이상의 행을 삽입 할 수 있습니다.
통사론:
INSERT (ALL | FIRST) WHEN cond1 THEN INTO table_name1 <> VALUES <> WHEN cond2 THEN INTO table_name2 <> VALUES <> ELSE INTO table_name3 <> VALUES <> Subquery;
키워드 ALL은 WHERE 절의 모든 조건이 실행되도록 지정하는 데 사용됩니다. 조건이 충족되면 해당 INTO 절이 실행됩니다.
키워드 FIRST가 사용되면 하위 쿼리에서 얻은 각 개별 행에 대해 Oracle은 WHEN 절의 기준을 위에서 아래로 실행합니다. 조건이 충족되면 해당 INTO 절이 실행되고 해당 행의 다른 WHEN 절로 이동합니다.
아래에 제공된 SQL 문을 사용하여 VEHICLE, CARS, SMALLCARS 및 LARGECARS 테이블을 만들었습니다.
CREATE TABLE VEHICLE ( CARID INT NOT NULL, NAME VARCHAR (15) NOT NULL, COLOR VARCHAR (15), PRIMARY KEY (CARID) );
VEHICLE 테이블에 아래 값을 삽입하십시오.
INSERT INTO VEHICLE VALUES (1, 'AUDI', 'RED'); INSERT INTO VEHICLE VALUES (4, 'BMW', 'WHITE'); INSERT INTO VEHICLE VALUES (7, 'KIA', 'GREEN'); CREATE TABLE CARS ( CARID INT NOT NULL, NAME VARCHAR (15) NOT NULL, COLOR VARCHAR (15), PRIMARY KEY (CARID) ); CREATE TABLE SMALLCARS AS SELECT * FROM CARS; CREATE TABLE LARGECARS AS SELECT * FROM CARS;
INSERT ALL을 사용한 코드 구현.
BEGIN INSERT ALL WHEN CARID = 1 THEN INTO CARS WHEN CARID = 4 THEN INTO SMALLCARS WHEN CARID = 7 THEN INTO LARGECARS SELECT CARID, NAME, COLOR FROM VEHICLE; END;
UPDATE 문은 테이블의 값을 수정하는 데 사용됩니다. 그것은 또한 데이터 조작 언어 . 테이블, 열 및 값의 이름을 입력으로 사용하고 테이블의 값을 수정합니다.
통사론:
UPDATE <
> SET <>=<>, <>=<>,… WHERE <>;
SET 키워드는 새 값으로 열 값을 변경하는 데 사용됩니다. 선택적으로 WHERE 키워드가 사용되며 생략하면 전체 테이블에서 지정된 열의 값이 수정됩니다.
한 행의 단일 열 업데이트
EMPLOYEE 테이블을 다시 고려해 보겠습니다.
UPDATE를 사용한 코드 구현 :
BEGIN UPDATE EMPLOYEE SET NAME = 'HENRY' WHERE CODE=1; END;
위 코드의 출력 :
SELECT * from EMPLOYEE;
한 행의 여러 열 업데이트
EMPLOYEE 테이블을 다시 고려해 보겠습니다.
UPDATE를 사용한 코드 구현 :
BEGIN UPDATE EMPLOYEE SET NAME = 'COMO', AGE = 30 WHERE CODE=2; END;
위 코드의 출력 :
SELECT * from EMPLOYEE;
여러 행 업데이트
EMPLOYEE 테이블을 다시 고려해 보겠습니다.
UPDATE를 사용한 코드 구현 :
BEGIN UPDATE EMPLOYEE SET AGE = AGE +1; END;
위 코드의 출력 :
SELECT * from EMPLOYEE;
위의 예에서 모든 직원의 AGE가 1 증가했습니다.
PL SQL 삭제 명령
DELETE 문은 테이블에서 전체 레코드를 제거하는 데 사용됩니다. 그것은 또한 데이터 조작 언어.
통사론:
DELETE FROM <
> WHERE <>;
FROM 키워드는 필수가 아니며 쿼리에 FROM이 추가되거나 추가되지 않으면 DELETE 문이 동일한 결과를 생성합니다. 선택적으로 WHERE 키워드를 사용하고 생략하면 전체 테이블이 삭제됩니다.
표에서 단일 행 삭제
EMPLOYEE 테이블을 다시 고려해 보겠습니다.
DELETE를 사용한 코드 구현 :
BEGIN DELETE FROM EMPLOYEE WHERE CODE=2; END;
위 코드의 출력 :
SELECT * from EMPLOYEE;
테이블에서 여러 행 삭제
MANAGERDETAIL 테이블을 다시 고려해 보겠습니다.
DELETE를 사용한 코드 구현 :
BEGIN DELETE FROM MANAGERDETAIL WHERE CODE > 0; END;
위 코드의 출력 :
SELECT * from MANAGERDETAIL;
표에서 전체 행 삭제
VEHICLE 테이블을 다시 고려해 보겠습니다.
DELETE를 사용한 코드 구현 :
BEGIN DELETE FROM VEHICLE; END;
위 코드의 출력 :
SELECT * from VEHICLE;
PL SQL 선택 명령
SELECT 문은 데이터베이스에서 데이터를 가져 오는 데 사용됩니다. SELECT INTO 문은 데이터베이스에서 값을 검색하여 PL / SQL에서 도입 한 로컬 변수에 저장하는 데 사용됩니다.
SELECT 문만 사용하는 경우 단일 레코드를 반환합니다. SELECT 문이 여러 값을 가져 오는 경우 TOO_MANY_ROWS PL / SQL에서 예외가 발생했습니다. SELECT INTO 문을 사용하는 동안 변수에 하나 이상의 값을 할당합니다. 그러나 데이터베이스에서 레코드를 가져 오지 않으면 데이터가 없습니다 예외가 발생합니다.
열 수 및 유형은 INTO 키워드에있는 변수 및 유형의 수와 같아야합니다. 값은 SELECT 문에 정의 된 것과 동일한 순서로 데이터베이스에서 가져옵니다.
SELECT 문 내의 WHERE 키워드는 선택 사항이며 특정 기준을 충족하는 레코드를 얻을 수 있습니다. DELETE, UPDATE 및 INSERT 명령이있는 SELECT 쿼리에는 INTO 절이 없다는 점에 유의해야합니다.
통사론:
SELECT <>, <>, ..<> INTO <>, <>, … <> FROM <
> WHERE <>;
테이블의 모든 열에서 데이터 가져 오기
EMPLOYEE 테이블을 다시 고려해 보겠습니다.
SELECT를 사용한 코드 구현 :
BEGIN SELECT * FROM EMPLOYEE WHERE CODE=1; END;
위 코드의 출력 :
예외를 발생시키는 SELECT 문을 사용한 코드 구현 :
BEGIN SELECT * FROM EMPLOYEE WHERE CODE=2; END;
위 코드의 출력 :
데이터베이스에 CODE 2를 가진 직원이 없기 때문에 SELECT 문이 지정된 조건과 일치하는 행을 가져 오지 못했기 때문에 데이터를 찾을 수 없음 예외가 발생합니다.
테이블 열에서 데이터 가져 오기
EMPLOYEE 테이블을 다시 고려해 보겠습니다.
BEGIN SELECT CODE FROM EMPLOYEE; END;
위 코드의 출력 :
테이블의 여러 열에서 데이터 가져 오기
EMPLOYEE 테이블을 다시 고려해 보겠습니다.
BEGIN SELECT CODE, NAME FROM EMPLOYEE; END;
위 코드의 출력 :
위의 예에서는 두 개의 열 CODE 및 NAME이 SELECT 문에 추가되었습니다.
자주 묻는 질문과 답변
Q # 1) SQL에서 INSERT, UPDATE 및 DELETE는 무엇입니까?
대답: INSERT, UPDATE 및 DELETE는 데이터를 조작하고 업데이트하는 데 도움이되는 SQL의 명령입니다. INSERT 문은 테이블에 행을 삽입합니다. DELETE 문은 테이블에서 행을 삭제하고 UPDATE 문은 테이블 행의 값을 업데이트합니다.
Q # 2) SQL 뷰에서 INSERT, UPDATE 및 DELETE를 할 수 있습니까?
대답: 예, SQL의 뷰에서 INSERT, UPDATE 및 DELETE를 할 수 있습니다. 뷰가 테이블간에 조인 된 경우 INSERT 및 UPDATE 작업 만 수행 할 수 있지만 DELETE 작업은 수행 할 수 없습니다. DROP 문은 뷰를 삭제하는 데 사용됩니다.
대답: INSERT는 DML 또는 데이터 조작 언어입니다). 다른 DML 문에는 UPDATE, DELETE 등이 포함됩니다. DDL 문은 테이블, 스키마 및 데이터베이스를 생성 할 수 있습니다.
Q # 4) JOIN IN 삭제 쿼리를 사용할 수 있습니까?
대답: 예, 테이블에서 행을 삭제하기 위해 DELETE 명령에서 INNER JOIN 문을 사용할 수 있습니다.
Q # 5) 자르기 명령과 삭제 명령의 차이점은 무엇입니까?
대답: TRUNCATE는 DDL 문이고 DELETE는 DML입니다. TRUNCATE 명령은 전체 테이블을 제거 할 수 있습니다. 테이블의 무결성을 유지하지 않습니다. DELETE 문은 테이블의 특정 데이터 만 삭제할 수 있습니다. 삭제 조건을 통합 할 수도 있습니다.
Q # 6) DML, DCL 및 DDL은 무엇입니까?
대답: SQL 문은 DML, DCL 및 DML 유형입니다.
데이터 정의 언어 또는 DDL에는 ALTER, DROP, CREATE, RENAME, TRUNCATE 및 COMMENT와 같은 명령이 포함됩니다. 데이터 조작 언어 또는 DML에는 INSERT, DELETE, MERGE, UPDATE, CALL, LOCK TABLE 및 EXPLAIN PLAN과 같은 명령이 포함됩니다.
데이터 제어 언어 또는 DCL에는 GRANT 및 REVOKE와 같은 명령이 포함됩니다.
Q # 7) 잘라내 기가 드롭보다 빠르나요?
대답: 예, TRUNCATE 작업은 DROP보다 빠릅니다. TRUNCATE 명령은 테이블에서 데이터 만 삭제합니다. DROP 명령은 테이블 구조와 테이블에서 데이터를 지 웁니다.
결론
이 튜토리얼에서는 지식을 개발하는 데 필수적인 PL SQL 명령의 몇 가지 기본 개념에 대해 자세히 설명했습니다. 아래에 나열된 다음 주제를 다루었습니다.