DB - Oracle
SQL - 집합 연산자, CRUD
H_eh
2022. 6. 17. 18:16
집합연산자
- 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