SQL[08] - 테이블/컬럼/레코드, 생성/추가/삭제/수정 ⋯
*오라클 oracle 기준
들어가기에 앞서 간단 용어 정리👀
❔ 테이블
행, 열의 구조로 데이터 저장
▸열 COLUMN : 속성
▸행 ROW, 레코드 : 값
❔ 데이터 타입
▸문자 : varchar2(글자길이값)
▸숫자 : number
▸날짜 : date
테이블 생성 : CREATE
CREATE TABLE 테이블명 (
컬럼명 컬럼데이터타입 옵션들,
컬럼명 컬럼데이터타입 옵션들,...
);
옵션 : 제약조건 Constraint
부적절한 자료(데이터)가 입력되는 것을 방지하기 위해서 여러가지 규칙을 적용해 놓은것
- NOT NULL : NULL 값이 들어올 수 없다.
- UNIQUE : 중복 요소가 올수 없다.
- CHECK : 조건 체크 등 검사하고 들어갈 수 있는것
- DEFAULT : 값을 추가하지 않을시 들어가는 기본 값 설정
- PRIMARY KEY : NOT NULL + UNIQUE
∙ 테이블당 한개만 지정가능
∙ 레코드들을 구분지을 수 있는 기준임
∙ 글 고유 번호 같은 것 - FOREIGN KEY : 두개 테이블을 연결시킬때 다른 테이블의 프라이머리 키가되는 현재 테이블의 컬럼에 지정
테이블 생성시 주의사항
- 테이블이름과 컬럼은 항상 알파벳 문자로 시작. $ # _ 사용가능, 공백허용 X, 알파벳으로 시작
- 컬럼명 예약어 사용 불가
- 한 테이블안에서 컬럼명은 같을 수 없으나, 다른 테이블에서는 컬럼이름 같을 수 있다.
⌨ TABLE 만들어보기
CREATE TABLE test01(
id varchar2(50) PRIMARY KEY,
pw varchar2(50) NOT NULL,
age NUMBER DEFAULT 1,
reg DATE DEFAULT sysdate
);



⌨ TABLE 만들어보기 (2)
테이블을 생성할때 옵션이름을 붙여 줄 수 있다.
CREATE TABLE new_emp (
NO NUMBER CONSTRAINT new_emp_pk PRIMARY KEY,
name varchar2(20) CONSTRAINT new_emp_name_nn NOT null, -- 옵션 이름 붙여줄 수 있다.
hiredate DATE,
bonus NUMBER CONSTRAINT new_emp_bonus_fk REFERENCES test(age) -- test 테이블의 age가 FOREIGN key
);
⌨ 테이블 생성 후, 제약 조건 추가
∙ table 컬럼 REFERENCES 할때 데이터 타입이 맞아야함
∙ 옵션 이름을 붙여즌 경우 컬럼명 대신 옵션이름으로 적어줘도 됨
ALTER TABLE NEW_EMP
ADD CONSTRAINT new_emp_num_fk FOREIGN key(bonus) REFERENCES test(age);
-- 데이터 타입이 맞아야 한다
⌨ CTAS (Create Table As Select) 시타스
∙ 새로운 테이블을생성할 때 이미 만들어져있는 기존의 테이블의 컬럼과 데이터를 똑같이 복제하여 생성하는 것
∙ 컬럼 전체 또는 원하는 컬럼만 복제하여 생성할 수 있음
-- 전체 컬럼 복제하여 생성
-- new_emp2 테이블을 생성하는데 test 테이블의 컬럼의 데이터를 복제하여 생성한다.
CREATE TABLE new_emp2
AS SELECT * FROM test;
-- 원하는 컬럼만 복제하여 생성
-- new_emp2 테이블을 생성하는데 test 테이블의 컬럼 중 id,pw, age를 복제하여 생성한다.
CREATE TABLE new_emp2
AS SELECT id, pw, age FROM test;
테이블 삭제 : DROP
테이블 자체를 삭제 하는 것
DROP TABLE 테이블명;
📌 삭제 키워드만 모아모아
# DROP : 테이블 전체 삭제, 남는것 없음 NOTHING
# ALTER - DROP : 컬럼 삭제
# TRUNCATE : 테이블 생성한 후로 초기화 (레코드 삭제, 테이블 용량도 초기화)
# DELETE : 레코드만 삭제
## 아래에 각각의 자세한 설명 및 예제가 있음
테이블 정보 수정 : ALTER
컬럼명 수정, 컬럼 추가 등등에 사용
컬럼 추가 : ALTER - ADD
ALTER TABLE 테이블명 ADD (컬럼명 데이터타입 옵션);
∙ 컬럼과 컬럼사이에 추가 불가, 항상 뒤에 추가
∙ 이미 데이터가 들어가 있을때는 NOT NULL 옵션은 줄 수 없다.
컬럼 (타입) 변경 : ALTER - MODIFY
ALTER TABLE 테이블명 MODIFY (컬럼명 데이터타입 옵션);
## 컬럼 변경시 고려사항
∙ 해당 컬럼의 크기를 늘릴 수는 있지만 줄이지는 못함. 기존의 데이터 훼손 우려
∙ 해당 컬럼이 NULL값만 가지고 있거나 테이블에 아무 레코드도 없으면 크기를 줄일 수 있음
∙ 해당 컬럼이 NULL값만 가지고 있으면 데이터 유형을 변경할 수 있음
∙ 해당 컬럼이 DEFAUTL 값을 바꾸면 변경 작업 이후 발생하는 레코드 삽입에만 영향을 미침
∙ 해당 컬럼이 NULL 값이 없을 경우에만 NOT NULL 제약조건을 추가할 수 있음
컬럼 이름 변경 : ALTER - RENAME
ALTER TABLE 테이블명 RENAME COLUMN 현 컬럼명 TO 새 컬럼명;
컬럼 삭제 : ALTER - DROP
ALTER TABLE 테이블명 DROP COLUMN 컬럼명;
⌨ 컬럼 추가해보기 ALTER - ADD
∙ 컬럼 추가시 기존 테이블 마지막 컬럼 다음으로 순서대로 생성됨
-- TEST 테이블에 컬럼명 NAME의 데이터타입은 문자형(글자길이값50), 옵션X을 생성
ALTER TABLE TEST ADD(NAME1 VARCHAR2(50));
⌨ 컬럼 타입 수정해보기 ALTER - MODIFY
∙ 데이터 유형을 병경할시 열은 비어 있어야 함 (값 NULL인 상태)
ALTER TABLE TEST MODIFY (NAME NUMBER);

⌨ 컬럼 이름 변경해보기 ALTER - RENAME
ALTER TABLE TEST RENAME COLUMN NAME1 TO NICKNAME;
⌨ 컬럼 삭제해보기 ALTER - DROP
ALTER TABLE TEST DROP COLUMN NICKNAME;
레코드 추가 : INSERT
• 데이터 모두 기입
INSERT INTO 테이블명 (컬럼명, 컬럼명,...) VALUES (값, 값,...);
∙ 모든 컬럼에 기입시, 테이블명 뒤에 (컬럼명,....) 작성생략가능
∙ 이때, 값들의 나열 순서는 테이블구조상의 컬럼순서대로 작성해야한다.
∙ DEFAULT X
• 원하는 컬럼만 데이터 추가
INSERT INTO 테이블명 (컬럼명, 컬럼명,....) VALUES (값들...);
∙ 기입 안된 컬럼은 DEFAULT 옵션이 지정되어 있다면 DEFAULT값으로 저장됨
∙ NOT NULL 옵션의 컬럼이 있다면 레코드 추가시 꼭 값을 넣어줘야 함
⌨ 레코드 추가하기
--#1 데이터 모두 기입하여 레코드 추가
INSERT INTO test01 values('java03','2222', 20, sysdate);
--#2 원하는 레코드의 데이터만 추가
-- PW 컬럼은 NOT NULL 이기에 레코드 추가시 PW의 값은 항시 넣어줘야함
INSERT INTO TEST01 (ID, PW) VALUES ('sql02','1234');
레코드 수정 : UPDATE
• 일괄수정
UPDATE 테이블명 SET 컬럼명=값;
• 레코드 조건 수정 (특정 레코드 수정할때)
UPDATE 테이블명 SET 컬럼명=값,... WHERE 조건식;
⌨ 레코드 수정해보기
--#1 일괄수정
UPDATE TEST01 SET PW='1111';
--#2 조건수정 - 아이디가 java03인 레코드의 pw 값변경하기
UPDATE TEST01 SET PW='0000' WHERE ID='java03';
--#3 조건수정 - age 컬럼의 값이 2이하인 레코드의 pw 값변경하기
UPDATE TEST01 SET pw='9999' WHERE age <2;
레코드 삭제 : DLLETE
• 전체 레코드 삭제
테이블은 그대로 있고, 안의 레코드들이 삭제, 디스크상의 공간은 유지
DELETE FROM 테이블명;
• TRUNCATE
레코드 전체 삭제, 최초에 테이블을 생성하고, 레코드 삽입이 안된 상태
TRUNCATE TABLE 테이블명;
• 레코드 조건 삭제 : WHERE 절 사용
DELETE FROM 테이블명 WHERE 조건절;