2024. 9. 11. 16:45ㆍSQL
테이블의 구조변경(DDL)
테이블의 내용이 아닌, 테이블 구조 자체를 변경하는 가장 대표적인 DDL중 하나인 alter에 대해서 알아보자.
alter은 테이블의 구조를 수정하거나 변경할때 사용하며, sql언어마다 대부분 비슷하지만
오라클
- add
- modify
- drop column
- rename to
- rename column to
*오라클의 경우 column이 붙은 명령어는 단일행만 수정가능하다.
mysql(MongDB포함)
- add column
- modify column
- drop column
- rename
- change column
이정도의 차이점이 존재한다.
그럼 일단 alter을 연습할 테이블을 간단하게 하나 만들어주고 시작하자..!
--테이블 생성
create table emp1(
empno number,
ename varchar2(10),
sal number,
deptno number
);
--내용삽입
insert into emp1 values(100, 'king', 240, 10);
insert into emp1 values(101, 'kocchar', 170, 10);
insert into emp1 values(103, 'Hunold', 900, 20);
insert into emp1 values(104, 'Ernst', 600, 30);
insert into emp1 values(105, 'Austin', 480, 40);
select * from emp1;
add(컬럼추가)
실무에서는 create table로 생성한 테이블을 변경하지 않고 끝까지 사용하는 경우는 거의 없다고 볼 수 있다. 컬럼이 추가되기도,삭제되기도 하는데 이때 기존에 만들어둔 테이블에 새로운 컬럼을 추가하고싶다면 add명령어를 사용하여새로운 컬럼을 추가할 수 있다.
--새로운 컬럼 삽입하기
--add 사용
alter table emp1 add comm number;
select * from emp1;
새롭게 추가된 컬럼은 기본적으로 null을 허용한다. 그렇기때문에 새로운 컬럼에는 null이 들어가고 이 null은 update를 이용하여 값을 추가하면 된다.
--빈칸은 update로 값 넣기
update emp1 set comm=300;
select *from emp1;
지금은 학습용 테이블이기때문에 따로 where을 사용하여 직원에 맞는 데이터를 넣어주지 않았지만 실무에서는 where절을 사용하여 각 직원에 맞는 comm값을 넣어줄 것!
modify(데이터타입 크기변경)
테이블에 데이터를 입력해야하는데, 입력해야할 데이터의 값이 지정된 데이터타입의 형식보다 훨씬 큰 크기의 값을 갖는다면 modify를 사용하여 데이터타입의 크키를 변경해주어야한다.. 단, 완전한 문자형식('가나다라')에서 숫자형식(1234)으로 변경은 불가능하며, 크기를 늘리는것에는 제한이 없지만 줄이는것은 이미 삽입된 데이터의 크기에 따라 제한될 수 있다
--이미 정해진 컬럼의 형식 수정하기
--modify사용
alter table emp1 modify ename varchar2(100);
alter table emp1 modify ename varchar2(200);
--alter table emp1 modify ename number(5); 데이터타입이 아예 다른것들은 변경불가--
이처럼 기존에 100바이트였던 ename의 크기를 modify구문을 사용하여 200바이트로 변경해주었다. 오라클에서 변경된 바이트를 확인하고 싶다면 해당 테이블의 model 탭에서 모델링을 확인하면 된다.
drop colum(컬럼 삭제하기)
작업을 하다가 테이블의 특정 컬럼을 삭제하고싶을때는 drop column을 사용한다. drop colum의 경우 컬럼 하나를 아예삭제하는것이기때문에 당연히 where절로 삭제할 수 있는 값을 제한할 수 없다.
--컬럼 삭제
--drop columns 사용
alter table emp1 drop column comm;
select * from emp1;
결과를 확인해보면 add으로 추가했던 comm의 컬럼이 삭제되어 출력된걸 볼 수 있다.
rename ~ to (테이블명 이름 변경하기)
기존에 사용하고있던 테이블명을 수정해야 한다면 rename 기존 테이블명 to 바꿀 테이블명 을 사용한다.
--테이블명 바꾸기
alter table emp1 rename to emp11;
select * from emp1; --테이블이름 변경되어 존재하지 않는 테이블--
select * from emp11; --출력가능--
이름을 바꾸게 되면 기존에 테이블에 존재하던 테이블의 이름은 없어지게 되므로 존재하지 않는 테이블이라고 출력된다!
rename column (컬럼 이름 변경하기)
테이블 작업을 하다가 이미 지정해둔 테이블 컬럼의 이름을 변경해야한다면 rename column 기존컬럼명 to 바꿀 컬럼명을 사용한다.
--컬럼명 바꾸기
alter table emp11 rename column deptno to dept_no;
select * from emp11; --바뀐 컬럼명으로 출력--
결과를 확인해보면 기존에 detpno였던 컬럼명이 deptno_no으로 변경된것을 확인할 수 있다.
컬럼 Alias(별칭)
테이블 작업을 하다보면 select 절에서 서브쿼리를 사용하여 출력되는 테이블의 이름이 길어지거나 self join등을 사용할때 구별하기 위해서 컬럼에 별칭을 붙이는 경우가많다. 이때 컬럼에 별칭을 붙이는 방식에는 select 절에서 사용하며 컬럼뒤에 as 별칭의 형식으로 별칭을 지정한다.
--테이블 Alias(별칭)
select * from emp11;
--기존 컬럼명 뒤에 as(약어)를 적은 뒤
--스크립트에서 출력할때 사용할 컬럼 별칭 적기
select empno as 사원번호, ename as 사원이름 from emp11;
실제 테이블에는 empno로 지정되어있겠지만 출력시에는 사원번호로 출력되는걸 확인할 수 있다. 또한 별칭은 스크립트 출력할때만 사용되며, 영구변경이 되지않는다. 영구변경하고싶다면 rename column사용해서 교체해야한다!
테이블 별칭
별칭은 컬럼뿐만 아니라 테이블 자체에도 별칭을 붙일 수 있다. 테이블에 별칭을 사용할때는 컬럼과 다르게 as를 붙이지 않고 바로 별칭을 사용한다.
--테이블 별칭
--as 사용하지 않음
select * from emp11 t; --emp11을 t라고 정의한것--
--주로 인라인뷰나 join할때 사용된다
학습일기
당시 alter 구문을 배울때도 느꼈던 것이지만, alter구문의 경우 오라클과 다른 sql구문을 적는 방법에 약간의 차이가 있다는게 헷갈렸었던게 기억이 난다. alter사용할때마다 느끼는것이지만 오라클 뿐만 아니라 다른 sql프로그램을 사용할 수 도 있으니 이 점만 유의하여 alter 구문을 사용할때마다 같이 상기시키면 좋을것 같다!!
'SQL' 카테고리의 다른 글
SQL (시퀀스와 제약조건, 식별자, 비식별자) (0) | 2024.09.13 |
---|---|
SQL 그룹함수(group by, grouping, rollup,cube)와 having (0) | 2024.09.12 |
SQL order by(다양한 정렬방법들) 와 집계함수 (0) | 2024.09.12 |
SQL dual 테이블과 연산자와 where절 (0) | 2024.09.12 |
SQL 데이터베이스 다루기_[오라클 테이블 생성, 변경, 삭제] (0) | 2024.09.11 |