20221017(월)
- 목차
- 테이블 변경
- 테이블 복사
- 뷰
- 인덱스
- 시노님
- SELECT문
< 테이블 변경 >
(1) 컬럼명 변경: col1 컬럼 이름을 col11으로 변경
ALTER TABLE [스키마.]테이블명 RENAME COLUMN 변경전컬럼명 TO 변경후컬럼명;
ALTER TABLE ex2_10 RENAME COLUMN Col1 TO Col11;
(2) 컬럼 타입 변경: col2 컬럼을 VARCHAR2(10)에서 VARCHAR2(30)으로 변경
ALTER TABLE [스키마.]테이블명 MODIFY 컬럼명 데이터타입;
ALTER TABLE ex2_10 MODIFY Col2 VARCHAR2(30);
(3) 컬럼 추가: col3 NUMBER 타입으로 신규 생성
ALTER TABLE [스키마.]테이블명 ADD 컬럼명 데이터타입;
ALTER TABLE ex2_10 ADD Col3 NUMBER;
(4) 컬럼 삭제: col3 컬럼을 삭제
ALTER TABLE [스키마.]테이블명 DROP COLUMN 컬럼명;
ALTER TABLE ex2_10 DROP COLUMN Col3 ;
(5) 제약조건 추가: col11에 기본키 추가
ALTER TABLE [스키마.]테이블명 ADD CONSTRAINTS 제약조건명 PRIMARY KEY (컬럼명, ..);
ALTER TABLE ex2_10 ADD CONSTRAINTS pk_ex2_10 PRIMARY KEY (col11);
(6) 제약조건 삭제: col11에서 기본키 삭제
ALTER TABLE [스키마.]테이블명 DROP CONSTRAINTS 제약조건명;
ALTER TABLE ex2_10 DROP CONSTRAINTS pk_ex2_10;
✨ 기존 데이터가 있는 상태에서 컬럼 추가시킬 때 NOT NULL 추가는 에러발생한다.
NOT NULL은 데이터를 다 채워야 하니까.. 대신 NULL은 성공함.
< 테이블 복사 >
- 테이블 복사는 제약조건이 복사되지 않는다!!!!
- 상황) 사용하고 있는 기존 테이블의 테이블의 구조를 자주 변경한다면
미리 복사해 만들어 테스트해보거나, 테이블 데이터 자체를 백업용으로 만들어 놓을 수도 있다.
CREATE TABLE [스키마.]테이블명 AS
SELECT 컬럼1, 컬럼2, ...
FROM 복사할 테이블명;
CREATE TABLE ex2_9_1 AS
SELECT *
FROM ex2_9;
< 뷰 >
- 하나 이상의 테이블이나 다른 뷰의 데이터를 볼 수 있게 하는 데이터베이스 객체
- 실제 데이터는 뷰를 구성하는 테이블에 담겨 있지만 마치 테이블처럼 사용할 수 있다.
- 또한 테이블 뿐만 아니라 다른 뷰를 참조해 새로운 뷰를 만들어 사용할 수 있다.
- 데이터를 본다는 의미가 있으므로 뷰의 정의는 데이터를 조회하는 SELECT문으로 구성된다.
(select : 저장의 목적보다는 검색의 목적이 강함)
CREATE OR REPLACE VIEW [스키마.]뷰명 AS
SELECT 문장;
(1) 뷰 생성 및 뷰 사용
(2) 뷰 삭제
< 인덱스 >
- 테이블에 있는 데이터를 빨리 찾기 위한 용도의 데이터베이스 객체
CREATE[UNIQUE] INDEX [스키마명.]인덱스명
ON [스키마명.]테이블명(컬럼1, 컬럼2, ...);
(1) 일반적으로 테이블 전체 로우 수의 15%이하의 데이터를 조회할 때 인덱스를 생성한다
(2) 테이블 건수가 적으면 인덱스를 경유하기보다 테이블 전체를 스캔하는 것이 빠르다.
(3) 데이터의 유일성 정도가 좋거나 범위가 넓은 값을 가진 컬럼을 인덱스로 만드는 것이 좋다
(4) NULL이 많이 포함된 컬럼은 인덱스 컬럼으로 만들기 적당치 않다
(5) 결합 인덱스를 만들 때는, 컬럼의 순서가 중요하다. (보통, 자주 사용되는 컬럼을 순서상 앞에 두는 것이 좋다.)
(6) 테이블에 만들 수 있는 인덱스 수의 제한은 없으나, 너무 많이 만들면 오히려 성능 부하가 발생한다
인덱스는 스캔 성능을 극대화하기 위해 만든 객체인데,
너무 많이 만들면 INSERT, DELETE, UPDATE 시에 부하가 발생해 배보다 배꼽이 더 큰 결과를 초래한다.
< 시노님 >
- Synonym은 ‘동의어’란 뜻
- 데이터베이스 객체는 각자 고유한 이름이 있는데, 이 객체들에 대한 동의어를 만드는 것이 바로 시노님
- 객체명 = 본명 / 시노님명 = a.k.a. 또는 가명
CREATE OR REPLACE [PUBLIC] SYNONYM [스키마명.]시노님명
FOR[스키마명.]객체명;
< 시퀀스 >
- 자동 순번을 반환하는 데이터베이스 객체
- 단순히 증감 연산을 이용해 유일한 숫자를 구할 때는 시퀀스를 사용하면 매우 편리
CREATE SEQUENCE [스키마명.]시퀀스명
INCREMENT BY 증감숫자
START WITH 시작숫자
NOMINVALUE | MINVALUE 최솟값
NOMAXVALUE | MAXVALUE 최댓값
NOCYCLE | CYCLE
NOCACHE | CACHE;
< 파티션 테이블 >
- 테이블에 있는 특정 컬럼 값을 기준으로 데이터를 분할해 저장해 놓는 것
< SELECT문 > - 읽어오는 것
- 가장 기본적인 SQL문
- 테이블이나 뷰에 있는 데이터를 조회할 때 사용하는 문장
SELECT * 혹은 컬럼
FROM [스키마.]테이블명 혹은 [스키마.]뷰명
WHERE 조건
ORDER BY 컬럼;
'🏫 Open API_JAVA' 카테고리의 다른 글
[60일차] 변환 함수 / NULL 관련 함수 / 기타 함수 / GROUP BY 절과 HAVING 절 / ROLLUP 절과 CUBE 절 / 집합 연산자 (0) | 2022.10.21 |
---|---|
[59일차] SQL 문장 살펴보기 (UPDATE / MERGE / DELETE / COMMIT과 ROLLBACK, TRUNCATE / ROWNUM / 함수) (0) | 2022.10.21 |
[57일차] 데이터 타입(문자, 숫자, 날짜, LOB) / NULL vs NOT NULL / 제약조건 (Constraints) (0) | 2022.10.17 |
[56일차] SQL, PS/SQL / 테이블스페이스 생성 (0) | 2022.10.16 |
[55일차] 데이터 베이스 설정 및 샘플 스키마 설치 (0) | 2022.10.14 |