DB - Oracle

SQL - 집합 연산자, CRUD

집합연산자

  • union       :  결과 합 ( 중복 제거됨)
  • union all  :  결과 합 (중복 포함됨)
  • intersect  :  결과 값의 공통되는 값 (교집합)
  • minus      :  차집합
-- 기존의 student 테이블을 복사함
create table a_student 
    as select * from student 
  where stu_dept in ('기계', '전기전자');
--
create table b_student 
    as select * from student 
  where stu_dept in ('전기전자', '컴퓨터정보');
  
-- 테이블 합치기
-- 중복제거되면서 합쳐짐 (합집합)
SELECT * FROM A_STUDENT 
	UNION SELECT * FROM B_STUDENT;
    
-- 중복 포함되어 합쳐짐 (합집합)
SELECT * FROM A_STUDENT 
	UNION ALL SELECT * FROM B_STUDENT;
    
-- 공통되는 값만 (교집합)
SELECT * FROM A_STUDENT 
	INTERSECT SELECT * FROM B_STUDENT;
    
-- A에는 속하고 B에는 속하지 않는 값 (차집합)
SELECT * FROM A_STUDENT 
	MINUS SELECT * FROM B_STUDENT;

 

 

테이블 삭제

DROP TABLE 테이블 이름;

 

 

테이블 생성

  • CREATE TABEL ...
  • 테이블 복사하여 새로운 테이블 생성하기
CREATE TABLE [새 테이블 이름]
	AS SELECT * FROM [원본 테이블 이름]
-- 2015학번보다 작은 값들만 테이블 복사생성
CREATE TABLE A_ENROL 
  AS SELECT * FROM ENROL WHERE STU_NO < 20150000;
  
-- 학생테이블로부터 학년이 1 또는 2학년인 조건들만 복사하여 student1 테이블을 생성한다.
CREATE TABLE STUDENT1 AS SELECT * FROM STUDENT WHERE STU_GRADE IN(1, 2);

-- 과목테이블을 복사하여 subject1 테이블을 생성한다.
CREATE TABLE SUBJECT1 AS SELECT * FROM SUBJECT;

-- 수강테이블을 복사하여 enrol1 테이블을 생성한다.
CREATE TABLE ENROL1 AS SELECT * FROM ENROL;

 

 

데이터 추가하기

INSERT INTO 테이블 이름 [(열1, 열2, ..., 열N)]
VALUES (열1에 들어갈 데이터, 열2에 들어갈 데이터, ..., 열N에 들어갈 데이터 );
-- 데이터 추가
INSERT INTO A_ENROL VALUES (108, 20151062, 92);
INSERT INTO A_ENROL VALUES (109, 20152088, 85);

-- 일부데이터 추가
INSERT INTO A_ENROL (SUB_NO, STU_NO) VALUES (110, 20152088);
INSERT INTO A_ENROL VALUES (111, 20153075, NULL);

-- 복수행 삽입
SELECT *
    FROM ENROL
  WHERE STU_NO LIKE '2015%';
-- 위 데이터를 A_ENROL 테이블에 추가한다
INSERT INTO A_ENROL
    SELECT * FROM ENROL WHERE STU_NO LIKE '2015%';
    
-- Student1 테이블에 학생 테이블의 3학년 학생들 데이터를 입력하라.
INSERT INTO STUDENT1
    SELECT * FROM STUDENT WHERE STU_GRADE = 3;

 

 

데이터 수정하기

UPDATE [변경할 테이블]
SET [변경할 열1] = [데이터], [변경할 열2] = [데이터], ..., [변경할 열N] = [데이터]
[WHERE 데이터를 변경할 대상 행을 선별하기 위한 조건];
-- 데이터 수정하기
UPDATE A_ENROL
  SET ENR_GRADE = ENR_GRADE + 5;
  
-- 과목번호 101인 과목만 5점씩 증가
UPDATE A_ENROL
  SET ENR_GRADE = ENR_GRADE + 5
WHERE SUB_NO = 101;

-- 시스템분석설계 과목만 5점증가
UPDATE A_ENROL
  SET ENR_GRADE = ENR_GRADE + 5
WHERE SUB_NO = (SELECT SUB_NO FROM SUBJECT 
                  WHERE SUB_NAME='시스템분석설계');

-- 학번 20131001 반을 b로 바꿔라
UPDATE STUDENT1 
    SET STU_CLASS = 'B'
  WHERE STU_NO = 20131001;

-- 20152088 학생의 키가 2cm 자랐다
UPDATE STUDENT1
    SET STU_HEIGHT = STU_HEIGHT + 2
  WHERE STU_NO = 20152088;
  
-- 5.	enrol1테이블에서 subject1에 없는 과목번호를 999로 변경해라.
UPDATE ENROL1
    SET SUB_NO = 999
  WHERE SUB_NO NOT IN (SELECT SUB_NO FROM SUBJECT1);
  
-- 6.	enrol1테이블에서 student1 에 없는 학번을 99999999 로 변경해라.
UPDATE ENROL1
    SET STU_NO = 99999999
  WHERE STU_NO NOT IN (SELECT STU_NO FROM STUDENT1);

 

 

데이터 삭제

DELETE [FROM] [테이블 이름]
[WHERE 삭제할 대상 행을 선별하기 위한 조건식];
DELETE FROM A_ENROL WHERE STU_NO = 20131001;

-- 기계요소설계 과목의 과목번호 삭제
DELETE FROM A_ENROL
  WHERE SUB_NO = (SELECT SUB_NO FROM SUBJECT WHERE SUB_NAME ='기계요소설계');

-- 테이블은 남아있음
DELETE FROM A_ENROL;
-- 테이블까지 삭제됨
DROP TABLE A_ENROL;

 

728x90
728x90

'DB - Oracle' 카테고리의 다른 글

PL/SQL, 저장 프로시저(SP)  (0) 2022.06.21
데이터베이스의 주요 객체 - Object  (0) 2022.06.20
SQL - 트랜잭션 (TRANSACTION)  (0) 2022.06.17
SQL - SUBQUERY (부질의)  (0) 2022.06.16
SQL - JOIN  (0) 2022.06.16