basic/sql

SQL[08] - 테이블/컬럼/레코드, 생성/추가/삭제/수정 ⋯

못지(Motji) 2021. 5. 31. 23:58

*오라클 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
);
더보기
테이블 생성이 완료되면 결과창에 위와 같은 정보가 뜬다.
레코드 값은 넣지 않고 테이블 구조(컬럼)만 넣어 만든것이라서 테이블을 클릭해보면 이렇게 정보가 뜬다.
조회를 해보면 이렇게 컬럼명만 보여요.     SELECT * FORM TEST01;

 

⌨ 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 컬럼명;

초기 생성한 TEST TABLE. 이걸 기준으로 아래에서 컬럼 수정 진행


⌨ 컬럼 추가해보기 ALTER - ADD

∙ 컬럼 추가시 기존 테이블 마지막 컬럼 다음으로 순서대로 생성됨

-- TEST 테이블에 컬럼명 NAME의 데이터타입은 문자형(글자길이값50), 옵션X을 생성
ALTER TABLE TEST ADD(NAME1 VARCHAR2(50));

 

⌨ 컬럼 타입 수정해보기 ALTER - MODIFY

∙ 데이터 유형을 병경할시 열은 비어 있어야 함 (값 NULL인 상태)

ALTER TABLE TEST MODIFY (NAME NUMBER);
더보기
컬럼의 타입은 테이블 정보에서 확인할 수 있으며 결과창에서 조회된 TABLE을 보면 컬럼면 왼쪽위에 있는 아이콘으로도 확인이 가능함. ABC : 문자 /시계 : 날짜 /123 : 숫자 타입이다.

 

⌨ 컬럼 이름 변경해보기 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 조건절;