Oracle - 실전 SQL [DDL 위주]

IRISH·2024년 1월 11일
0

Oracle

목록 보기
2/17

작성 계기 및 실습 소감

  • 회사에서 입사하고 나서 Front 개발과 더불아 DB를 함께 다루게 됐다. DDL 뿐만 아니라, DML 관련 쿼리도 많이 만들었는데 이번 포스팅에서는 DDL 위주로 했던 쿼리들은 업로드 해볼까 한다.
  • 그나마 여기서 조금 신기하다고 생각했던 것은 "테이블 구조만 복사"를 할 때 사용했던 쿼리에 있다. 해당 쿼리에서는 WHERE 1 = 2 를 사용하는데, 왜 이렇게 사용하는가였다.
    • 다행히, CHAT GPT 님이 해결해주셨다. 자세한 내용은 해당 목차에서 확인하시길 바란다 :)
  • 대학교 전공 수업에서는 간단한 DDL 정도였는데, [테이블 복사 및 구조 복사 / 테이블 설명 / VISIBLE & INVISIBLE / 기본키 등록 및 삭제] 등 다양한 것을 배울 수 있어서 아주 좋았다.

테이블 생성

/* 테이블 생성*/
CREATE TABLE TB_A (
	COL_A CHAR(50) NOT NULL PRIMARY KEY,
	COL_B VARCHAR2(10) NULL
);

테이블명 변경

/* 테이블명 변경 (RENAME) >>> https://trustall.tistory.com/8 */
ALTER TABLE TB_A RENAME TO TB_B;

테이블 구조만 복사

--테이블 구조만 복사하기
CREATE TABLE new_table_name ****AS SELECT * FROM old_table_name ****WHERE 1=2
  • WHERE 1=2
    • WHERE 1=2 절은 항상 false인 조건입니다. 즉, 기존 테이블의 어떤 행도 이 조건을 충족하지 않는다는 의미입니다. 결과적으로 새 테이블에는 기존 테이블과 동일한 열 정의가 있지만 'SELECT' 문이 false 조건으로 인해 레코드를 반환하지 않기 때문에 행이 없습니다.

      성명서의 내용은 다음과 같습니다.

    • CREATE TABLE new_table_name : 지정된 이름을 가진 새 테이블 생성을 시작합니다.

    • AS SELECT * FROM old_table_nameold_table_name과 동일한 열 정의를 사용하여 새 테이블을 생성해야 함을 지정합니다.

    • WHERE 1=2 : 이 조건은 항상 false이므로 SELECT 문은 빈 세트를 반환합니다. 즉, 데이터는 복사되지 않고 구조만 복사됩니다.

      이 기술은 기존 테이블과 동일한 스키마를 가진 새 테이블이 필요하지만 데이터를 복사하고 싶지 않을 때 일반적으로 사용됩니다.

테이블 구조 복사 + 데이터 복사

/* [Oracle] 테이블 구조 복사 및 데이터 복사 하기 >>> https://javaoop.tistory.com/94 */
CREATE TABLE TB_A AS SELECT * FROM TB_B;

테이블 컬럼 이름만 수정

ALTER TABLE TB_A RENAME COLUMN COL_A TO COL_B; -- 컬럼명 변경

테이블 컬럼 속성(TYPE)만 수정 - MODIFY

-- 형식
ALTER TABLE 테이블명 MODIFY 컬럼명 새로운_데이터_유형;

-- 예시
ALTER TABLE TB_A MODIFY NEW_COL_A NUMBER(15,0);

테이블 설명(코멘트)

COMMENT ON TABLE TB_A IS '테이블 코멘트 내용';

테이블 컬럼 설명(코멘트)

-- 테이블 컬럼 코멘트
COMMENT ON COLUMN TB_A.COL_A IS '컬럼 코멘트 내용';

테이블 컬럼 삭제 (한 개 OR 여러개)

-- 하나만 삭제 
ALTER TABLE TB_A DROP COLUMN COL_A;

-- 여러개 삭제 시 > 괄호가 포함 / 키워드 COLUMN 삭제 / 콤마 추가
ALTER TABLE TB_A DROP (COL_A, COL_B, COL_C);

테이블 원하는 위치에 컬럼 추가 - ADD [+ INVISIBLE / VISIBLE]

  • 단계
    • 먼저 넣고 싶은 위치 이후에 있는 컬럼을 안보이게 하기
    • 넣을 컬럼 추가
    • 이후에 INVISIBLE 했던 COLUMN 추가하기
-- STEP1. 먼저 넣고 싶은 위치 이후에 있는 컬럼을 안보이게 하기
ALTER TABLE TB_A MODIFY COL_A INVISIBLE;

-- STEP2. 넣을 컬럼 추가
ALTER TABLE TB_A ADD(COL_B VARCHAR2(100));

-- STEP3. 이후에 INVISIBLE 했던 COLUMN 추가하기
ALTER TABLE TB_A MODIFY COL_A VISIBLE;

NULL 칼럼을 NOT NULL 칼럼으로 변경

/* NULL 값인 컬럼을 NOT NULL 컬럼으로 속성 변경 */
-- 형식 : ALTER TABLE 테이블명 MODIFY 컬럼명 데이터_타입 NOT NULL;

ALTER TABLE TB_A MODIFY COL_A VARCHAR(10) NOT NULL;

기존 기본키 삭제하기

/* 기존 기본키 삭제 */
ALTER TABLE 테이블명 DROP PRIMARY KEY;

기본키 등록하기

/* 새로운 기본키 등록 */
alter table 테이블명
add constraint 기본키명 -- (예 : pk_test) 
primary key(기본키1, 기본키2, ..., 기본키 N);

컬럼에 존재하는 모든 데이터 삭제 [단, 컬럼 자체는 유지]

/* 특정 컬럼에 존재하는 데이터 삭제 */
UPDATE TB_A SET COL_A = NULL;
profile
#Software Engineer #IRISH

0개의 댓글

관련 채용 정보