쌍용교육(JAVA)/SQL

쌍용교육 -SQL 수업 20일차 (테이블 생성,테이블 관리,실습문제)

구 승 2024. 4. 12. 10:18

테이블 생성

테이블의 생성
CREATE TABLE employee(
empno NUMBER (6), --소괄호 안에 숫자는 사이즈를 의미 , 프라이머리 키 이기 때문에 무조건 입력해야됨.
name VARCHAR2 (30) NOT NULL, --30은 byte 한글은 3byte이므로 한글 10자 입력가능하다. 영어는 1byte기 때문에 30자, not null이기 때문에 무조건 입력해야됨.
salary NUMBER (8,2),
hire_date DATE DEFAULT SYSDATE,
CONSTRAINT employee_pk PRIMARY KEY (empno) --프라이머리 키 제약조건을 호출할 때는 CONSTRAINT를 쓴다.  
);
--행 추가
INSERT INTO employee (empno,name,salary)
VALUES (100,'홍길동',1000.23);
COMMIT;--확정짓기

--테이블 보기
SELECT * FROM employee;
-테이블 생성시 PRIMARY KEY 및 FOREIGN KEY 제약 조건 추가하기
CREATE TABLE SUSER(
id VARCHAR2(20),
name VARCHAR2(30),
CONSTRAINT suser_pk PRIMARY KEY (id)
);
CREATE TABLE sboard(
num NUMBER,
id VARCHAR2(20) NOT NULL,
content VARCHAR2(4000) NOT NULL,
CONSTRAINT sboard_pk PRIMARY KEY (num),
CONSTRAINT sboard_fk FOREIGN KEY (id) REFERENCES suser (id)
);
--값넣기
INSERT INTO suser (id,name) VALUES ('dragon','홍길동');
INSERT INTO suser (id,name) VALUES ('tmdghl','구승회');

INSERT INTO sboard (num,id,content) VALUES (1,'tmdghl','오늘은 금요일');
INSERT INTO sboard (num,id,content) VALUES (2,'dragon','내일은 토요일');
--INSERT INTO sboard(num,id,content) VALUES(3,'blue','모레는 토요일');--에러남. 부모키가 없는걸 저장하면 무결정에 위배되기 때문에 에러남.

--삭제
--DELETE FROM suser WHERE id = 'tmdghl';

COMMIT;
--테이블 확인해보기
SELECT * FROM suser;
SELECT * FROM sboard;

두개의 테이블 조인
SELECT * FROM suser JOIN sboard USING(id);

테이블 관리

테이블의 관리
ADD 연산자 : 테이블에 새로운 컬럼(열)을 추가
ALTER TABLE employee ADD(addr VARCHAR(2));  --addr이라는 이름의 새로운 컬럼 추가

제약 조건 추가
ALTER TABLE employee ADD CONSTRAINT employee_pk PRIMARY KEY(empno);

MODIFY 연산자 : 테이블의 컬럼을 수정하거나 NOT NULL 컬럼으로 변경할 수 있음.
ALTER TABLE employee MODIFY (salary NUMBER(10,2) NOT NULL); --원래 salary NUMBER (8,2) 에다가 NOT NULL명시 안했었음

컬럼명 변경
ALTER TABLE employee RENAME COLUMN salary TO sal; --salary를 sal로 변경한다.

테이블명 변경
RENAME employee TO employ2;

테이블의 삭제
DROP TABLE employ2; --ROLLBACK불가 

ON DELETE CASCADE : 부모 테이블의 컬럼을 삭제하면서 자식 테이블의 자식 데이터를 모두 삭제 

CREATE TABLE s_member (
id VARCHAR2(20) PRIMARY KEY, --기본키 축약형
name VARCHAR2(30)
);

CREATE TABLE s_member_detail( 
num NUMBER PRIMARY KEY,
content VARCHAR2(4000) NOT NULL,
id VARCHAR2(20) NOT NULL REFERENCES s_member(id) --외래키 축약형
ON DELETE CASCADE
);

INSERT INTO s_member (id,name) VALUES ('dragon','홍길동');
INSERT INTO s_member(id,name) VALUES ('sky','박문수');

INSERT INTO s_member_detail (num,content,id)
VALUES (1,'오늘은 금요일','sky');
INSERT INTO s_member_detail (num,content,id)
VALUES (2,'내일은 토요일','sky');
INSERT INTO s_member_detail (num,content,id)
VALUES (3,'모레은 일요일','sky');

DELETE FROM s_member WHERE id = 'sky'; --member_detail 테이블이 지워짐 why? ON DELETE CASCADE를 사용했기 때문에

COMMIT;

실습문제

[실습문제]
1.student라는 이름으로 테이블 생성 
컬럼명                 id                  name            age              score
데이터타입       varchar2(10)   varchar2(30)     number(3)    number(3)
제약조건         primary key       not null             not null        not null
CREATE TABLE student(
id VARCHAR2(10) PRIMARY KEY,
name VARCHAR2(30)NOT NULL,
age NUMBER(3)NOT NULL,
score NUMBER(3) NOT NULL
);
2.데이터를 아래와 같이 입력하시오.
id              name            age         score
dragon      홍길동             21          100
sky           장영실            22           99
blue          박문수           34            88
INSERT INTO student (id,name,age,score)
VALUES('dragon','홍길동',21,100);
INSERT INTO student (id,name,age,score)
VALUES('sky','장영실',22,99);
INSERT INTO student (id,name,age,score)
VALUES('blue','박문수',34,88);

3.데이터 읽기
student 테이블에서 성적 합계를 구하시오.
SELECT SUM(score) "성적 합계"FROM student;