K_Digital_Step1_Oracle SQL_06_1

윤일권·2022년 8월 19일
0

Oracle SQL

목록 보기
6/7

DML

  • Data Manipulation Language - 데이터 조작어
  1. insert : 테이블에 새로운 레코드 추가시 사용되는 명렴어
  2. update : 테이블에 기존 레코드 변경시 사용되는 명령어
  3. delete : 테이블에 기존 레코드 제거시 사용되는 명령어
  4. merge : 두개의 테이블의 내용 병합시 사용되는 명령어

Insert

  • 레코드를 테이블에 추가 명령어
  • insert into 테이블명 (컬럼명1, 컬럼명2,...) values(값1,값2,...)
  • 컬럼명 부분은 생략 가능 (생략하는 걸 추천하지않음) => 모든 컬럼에 데이터를 추가하는 경우에만 가능

컬럼명을 기술해야 하는 경우
1. 모든 컬럼에 값을 설정하지 않는 경우
2. 스키마 순서와 상관없이 순서를 개발자가 지정할 때
3. DB구조가 자주 변경되는 경우 컬럼명을 기술하는 것이 안전함

null 값 입력방법
1. 컬럼을 기술하지 않기
2. 빈문자열값을 설정
3. null, NULL로 직접 입력

insert into dept2 (dcode,dname,pdept,area)
values (9000,'특수판매팀',1000,'임시지역');

위 코드는 dept2라는 테이블에 9000번 부서를 추가해주는 코드이다.
그림과 같이 맨 마지막 행에 추가된 것을 확인할 수 있다.
코드에서 처럼 테이블에 각 컬럼을 입력하고, 컬럼 형식에 맞는 values들을 차례대로 입력하면 된다.

Update

  • 기존의 레코드를 컬럼의 값을 수정
  • update 테이블명 set 컬럼1=값1, 컬럼2=값2, ...
    [where 조건문] => 변경되는 레크드를 선택 조건.
    where 조건문이 구현되지않으면 모든 레코드의 기술된 컬럼이 변경
update professor set bonus=99 where position = '조교수';

위 코드는 교수테이블에서 직급이 조교수인 교수의 보너스를 99로 변경하기.
이때 where조건문을 조교수라고 한정했기 때문에 모든 bonus가 99로 바뀌는 것이 아닌
position이 조교수인 사람들만 변경된다.

update professor set pay = pay*1.15 where pay <= 230 and position = 
(select position from professor where name = '장혜진');

위 코드는 장혜진 교수와 같은 직급의 교수 중 급여가 300이하인 교수의 급여만 15% 인상하는 코드이다. 이처럼 where문을 활용하여 다양한 조건을 줄 수 있다.

delete

  • 레코드 삭제 명령어
  • delete [from] 테이블명
    [where 조건문] => 삭제될 레코드 조건. 없는 경우는 모든 레코드 삭제. 주의요망
delete from dept2 where decode=9000;

위 코드는 dept2 테이블의 decode 값이 9000번인 레코드를 삭제하는 코드이다.
이 때 where 조건문을 통해 decode를 9000번만 삭제할 수 있도록 합니다.
delete는 값을 삭제하는 명령어인만큼 사용시 주의해야한다.

DDL

  • Data Definition Language 데이터 정의어
  • 객체를 생성, 변경, 제거 기능을 담당하는 명령어
  • 객체 : table, index, user, sequence,...
  • table 생성 : create table 테이블명 ...
  • index 생성 : create index 인덱스명 ...
  • primary key : 기본키. 레코드내용을 유일한 의미를 가지는 컬럼
    컬럼의 값은 테이블내에서 유일함. 중복안됨.
  • DDL 명령어
    1. create : 객체(table) 생성
    1. alter : 객체 수정
    2. drop : 객체 제거
    3. truncate : 객체와 데이터를 분리
  • DDL 명령어 특징
    1. commit, rollback 의미가 없다.
    1. DDL 명령어가 실행되면, 자동으로 commitehla => rollback을 하려면 rollback을 먼저실행하고, DDL 명령어 실행
create table ddl_test
(
no number(3), -- 최대 숫자 3자리
name varchar(10), --최대 10byte 문자형태 (한글 한문자당 3byte)
birth date default sysdate -- 날짜,시간데이터 저장, default = sysdate
);

위 코드는 ddl_test라는 테이블을 생성해주고, no, name, birth라는 컬럼을 생성해주었다. 하지만 컬럼안에 데이터가 없다. 이를 insert를 활용하여 데이터를 넣어주자.

insert into ddl_test (no,name) values (1,'홍길동');

위 코드 와 같이 입력하면 no컬럼엔 1, name컬럼엔 홍길동 값이 들어간다. 이때 , birth는 입력하지 않아 null이 나와야하지만 default를 sysdate 즉 현재 날짜로 설정해 두었기때문에 현재 날짜가 입력될 것이다

create table ddl_test2
(
no number(3) primary key,
name varchar(10) default '홍길동',
birth date default sysdate
);
insert into ddl_test2 (no) values (2);
insert into ddl_test2 (no) values (2);

위 코드를 모두 실행한다면 맨 마지막 행에서 오류가 발생할 것이다.
이는 테이블을 생성할때 no라는 컬럼을 primary key로 지정했기때문에 중복되는 데이터가 들어갈 수 없기 때문이다.

자료형

  • number, integer : 숫자형태의 데이터 저장 자료형
  • cahr, varchar, varchar2 : 문자 형태의 데이터 저장 자료형
  • date : 날짜 시간 정보를 저장 자료형

alter

  • 기존 객체의 구조를 변경하는 명령어
  • 컬럼을 추가 또는 삭제, 변경 등이 가능함
create table dept3 as select * from dept2;
alter table dept3 add tel varchar(20);
alter table dept3 rename column tel to phone;
alter table dept3 modify area varchar(30);

위 코드는 dept2 테이블을 dept3이라는 테이블로 복사하는 코드이다 .
이 때 as뒤에 모든 컬럼을 지정했기 때문에 완전히 복사된다. 그 다음 alter이라는 명령어를 통해 tel이라는 컬럼을 varchar(20)자료형으로 추가해주었다.
그 이후 tel이라는 컬럼의 이름을 phone으로 변경하였다.

마지막으로 이름만 바꾸는 것이 아닌 area라는 컬럼의 크기를 30으로 변경하였다.
하지만 이때 크기를 10으로 바꾼다면 에러가 발생할 수 있다. 이는 컬럼의 데이터들 크기가 10보다 크기 때문이다.

select max(lengthb(area)) from dept3;

위 코드는 area에 저장된 데이터의 최대 크기를 조회하는 코드이다 이전 코드에서 크기가 데이터 크기보다 작게 변경할 때 에러가 발생한다면 위와 같은 코드를 활용하여 저장된 데이터의 최대 크기에 맞게 설정해준다.

alter table dept3 drop column phone;

위 코드는 drop이라는 명령어를 사용하여 phone이라는 컬럼을 제거하는 코드이다.

Drop

  • 객체제거
  • 객체 제거되면, 내용도 삭제됨
  • rollback이 안되므로 복구가 불가하다 사용시 주의.
drop table dept3;

위 코드는 테이블 dept3를 제거하는 코드이다.

Truncate

  • 내용 제거하기
  • delete 명령어는 rollback 가능
  • truncate 명령어는 rollback 불가능, 삭제 속도가 빠르다 .
truncate table ddl_Test2

위 코드는 table ddl_Test2는 삭제하지 않지만 테이블의 내용을 삭제하는 코드이다.

profile
생각하는 개발자가 되겠습니다!!

0개의 댓글