CS/데이터베이스

[데이터베이스] 16. 뷰와 삽입 SQL

JIN-JJS 2025. 4. 18. 19:02

1. 뷰와 삽입 SQL 예문

1) 삽입 SQL의 개념

• 데이터베이스에 새로운 레코드(행)를 추가하는 데 사용되는 SQL 명령문으로, 데이터베이스 테이블에 새로운 데이터를 입력하고 저장하는 데 사용됨.

 

2) 삽입 SQL의 구문

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

- 테이블명: 데이터를 삽입할 대상 테이블의 이름

- 칼럼1, 칼럼2, 칼럼3,...: 데이터를 삽입할 칼럼들의 이름

- 값1, 값2, 값3,...: 해당 칼럼들에 삽입할 실제 값들

 

3) 삽입 SQL의 특징

• 데이터 입력: 삽입 SQL은 새로운 데이터를 데이터베이스 테이블에 입력하는 데 사용됨.

• 고유성 제약 조건: 데이터베이스는 중복된 데이터를 허용하지 않으며, 중복 삽입 시 오류 발생 가능.

• 트랜잭션 지원: 삽입 SQL은 데이터베이스 트랜잭션 내에서 사용 가능하여, 여러 삽입 작업을 하나의 논리적 단위로 묶을 수 있음.

• 데이터 유효성 검사: 데이터 삽입 전에 데이터의 유효성을 검사하고 필드 유형 및 길이 제한을 준수해야 함.

 

4) 삽입 SQL의 장점

• 간단하고 직관적: 데이터베이스에 새로운 레코드를 추가하는 간단하고 직관적인 방법 제공.

• 높은 유연성: 다양한 데이터 유형 및 테이블 구조에 대해 유연하게 적용 가능.

• 효율적인 데이터 삽입: 대량의 데이터를 한 번에 삽입할 수 있어 대규모 데이터베이스 작업에 유용.

 

5) 삽입 SQL의 단점

• 보안 문제: SQL 삽입 공격에 취약할 수 있으며, 적절한 보안 조치가 필요함.

• 성능 문제: 대량의 데이터를 삽입할 때 성능 저하 가능성이 있음.

• 데이터 무결성 위험: 부적절한 데이터 삽입으로 인해 데이터 무결성 문제가 발생할 수 있음.

 

6) 삽입 SQL의 공격: 보안 문제

• 악의적인 사용자가 웹 애플리케이션 또는 데이터베이스 시스템에 공격을 시도하는 방법 중 하나로, 사용자 입력을 통해 SQL 쿼리를 조작하여 데이터베이스에

접근하거나 수정하는 행위를 의미함.

 

7) SQL 삽입 공격 방지 요건

• 입력 검증: 사용자 입력을 검증하여 예상된 형식인지 확인.

• 매개변수화된 질의 사용: SQL 쿼리를 생성할 때 매개변수를 사용하여 직접 입력되지 않도록 함.

• 권한 제어: 최소한의 권한만 부여하여 데이터베이스 접근을 제한함.

• 보안 업데이트: 데이터베이스 및 웹 애플리케이션 소프트웨어를 최신 버전으로 유지하고 보안 패치를 적용해야 함.

 

8) 커서가 필요한 삽입 SQL

• 커서(cursor): 수행 결과로 반환된 여러 행을 한 번에 하나씩 가리키는 포인터.

• 커서를 사용하는 이유: 여러 개의 행을 반환하는 SELECT 문을 프로그램에서 사용할 때 필요함.

• 커서 선언 형식:

EXEC SQL DECLARE 커서_이름 CURSOR FOR SELECT 문;

• 명시적(Explicit) 커서: 사용자가 선언 후 사용하는 SQL 커서.

• 묵시적(Implicit) 커서: 오라클에서 자동으로 선언하는 SQL 커서.

 

9) 커서를 이동시키는 삽입 SQL문

• 커서를 이동하여 다음 행을 가리키고, 해당 행의 속성 값을 변수에 저장

• 반복문(for, while)과 함께 사용 가능

• 커서 이동 형식:

EXEC SQL FETCH 커서_이름 INTO 변수_리스트;

 

10) 커서 사용 종료

• 커서를 닫는 명령어:

EXEC SQL CLOSE 커서_이름;

 

11) 커서가 필요 없는 삽입 SQL

• 단일 레코드 검색, 삽입, 수정, 삭제 시 사용

• 단순한 INSERT, DELETE, UPDATE 문에서 커서 없이 실행 가능

• 예제:

INSERT INTO 테이블이름 (열1, 열2, 열3) VALUES (값1, 값2, 값3);

 

 

 

2. 뷰(View)의 활용

1) 뷰의 활용

• 임시 테이블 생성:

CREATE TABLE TB_EMP AS SELECT employee_id, first_name, salary_fee FROM employees;

• VIEW 생성 및 확인:

CREATE OR REPLACE VIEW ST_VIEW(empno, ename, sal) AS
SELECT employee_id, first_name, salary_fee FROM TB_EMP
WITH READ ONLY;

• WITH READ ONLY: 읽기 전용 뷰 설정

• WITH CHECK OPTION: CHECK 제약 조건 적용

 

2) 뷰 활용 예제

• 뷰에 데이터 삽입:

INSERT INTO ST_VIEW(empno, ename, sal) VALUES (101, '세종대왕', 10000);

• 뷰를 이용한 데이터 조회:

SELECT * FROM ST_VIEW;

 

3) 조인 및 뷰 활용

• 사원번호, 이름, 부서번호, 부서명, 지역명을 포함하는 뷰 생성:

CREATE OR REPLACE VIEW DEPT_EMP_LOC_VIEW AS
SELECT e.employee_id, e.first_name, d.department_id, d.department_name, l.city
FROM employees e, departments d, locations l
WHERE e.department_id = d.department_id
AND d.location_id = l.location_id;

 

4) 삽입 SQL 예제

• 명시적 커서 활용:

DECLARE
  emp_id NUMBER(3);
  emp_name VARCHAR2(8);
  emp_salary NUMBER(10);
  CURSOR cul IS SELECT empno, ename, sal FROM emptest1 WHERE deptno = 30;
BEGIN
  OPEN cul;
  LOOP
    FETCH cul INTO emp_id, emp_name, emp_salary;
    EXIT WHEN cul%NotFound;
    DBMS_OUTPUT.PUT_LINE(emp_id || ' ' || emp_name || ' ' || emp_salary);
  END LOOP;
  CLOSE cul;
END;

 


이 내용은 휴넷사회복지평생교육원의 데이터베이스 강의를 듣고 정리한 것입니다.