공부일지
231102 (Oracle)
CD가참둥그렇다
2023. 11. 2. 12:54
테이블의 생성
- 새로운 테이블을 만들 때 컬럼의 구조를 만들어 주어야 한다.
- 컬럼의 변수
- char(size) : 고정 길이 문자 데이터. 입력은 크기만큼이 가능하지만 실제 저장은 1크기만 된다.
- varchar2(size) : String의 역할. 가변길이 문자 데이터. 최대크기를 지정해야함.
- number : 부호, 소수점 제외 40자리 크기의 숫자를 저장한다.
- number(w) : w자리까지 숫자를 저장한다. 최대 38
- numver(w,d) : w는 전체 길이, d는 소수점 이하의 자리를 지정한다.
- date : 날짜 데이터를 저장
- long : 가변 길이로 문자형 데이터를 저장한다. 최대 크기는 2gb
- lob : 2gb 크기까지 가변길이 바이너리 데이터를 저장할 수 있다.이미지, 실행파일 등
- rowid : db에 저장되지 않고, db data도 아니다.
- bfile : 최대 4gb 크기의 바이너리 데이터
- timestamp(n) : date의 확장된 형태이다.
- interval year to month : 년, 월을 이용하여 기간을 정한다.
- interval day to second : 일, 시, 분, 초를 이용하여 기간을 저장한다.
테이블 생성 쿼리문
- create table 이름 (컬럼 조건, 컬럼 조건, 컬럼 조건); 형태로 만들 수 있다.
- create는 index, type, user도 만들 수 있다.
- 같은 이름의 테이블은 만들 수 없다.
- create table 이름 as 선택 쿼리문;
- 다른 테이블에서 특정 컬럼만 추출하여 새로운 테이블로 만든다. 쿼리문으로 보여주는 임시 테이블을 실제 테이블로 만들어준다.
- 조건으로 1=0처럼 불가능한 조건을 주면 레코드는 없고 컬럼의 규칙만 복사해온다.
테이블 구조 수정 쿼리문
- alter table 이름 add (컬럼 조건) : 테이블의 구조를 변경하기 위한 쿼리문이다.
- alter table 이름 modify (컬럼 조건) : 테이블의 컬럼 조건을 바꿔주는 쿼리문
- alter table 이름 drop column 컬럼 : 컬럼 구조를 삭제한다.
- rename 이름 to 이름 : 테이블의 이름을 바꾼다.
자료의 삭제
- drop table 이름 : 테이블을 삭제한다.
- truncate table 이름 : 테이블의 모든 레코드를 삭제한다.
- delete table 이름 : 테이블의 모든 레코드의 값만 삭제한다.
레코드의 추가
- insert into 테이블 (컬럼, 컬럼, 컬럼) values (값, 값, 값) : 테이블에 컬럼요소를 묶고, values 값을 묶어서 레코드를 추가할 수 있다.
- 컬럼 구조가 확실하고, 해당 인덱스에 들어갈 자료 형태를 알고 있다면 컬럼 이름은 생략해도 된다.
- insert into 테이블 선택 쿼리문 : 선택 쿼리문에 해당하는 결과를 테이블에 대입할 수 있다.
- insert all into 테이블 values(컬럼, 컬럼) into 테이블 values(컬럼, 컬럼) select 컬럼, 컬럼, 컬럼 from 테이블;
- 한 테이블에서 가져온 정보를 여러 테이블에 분할하여 레코드로 추가할 수 있다.
레코드의 수정
- update 테이블 set 컬럼=값; 의 형태로 레코드를 수정한다. 모든 레코드에 일괄 수정이 된다.
- update 테이블 set 컬럼 = 값 where 조건; 을 통해 조건에 맞는 레코드만 수정할 수 있다.
시퀀스
- 테이블 내의 유일한 숫자를 자동으로 생성하는 자동 번호 발생기인다.
- 시퀀스의 기본 형식
- create sequence 이름 시작, 증감, 최대, 최소, 순환여부, 캐시 의 구조로 만든다.
- 시퀀스의 추출
- .nextval : 다음 시퀀스의 번호를 가져온다.
- .currval : 현재 시퀀스의 번호를 가져온다. 시퀀스를 만든 직후에 사용 시 오류가 발생한다.(인덱스 0이라 오류 발생
테스트
- 아래 구조의 테이블을 생성하세요.제약조건은 다음과 같습니다.
- 주문번호 – 널을 허용하지 않고, 기본키, 고객번호 – 널을 허용하지 않음, 주문일 – 널을 허용하지 않음, 주문가격 – 널을 허용하지 않음, 할인금액 – 널을 허용하지 않음, 적립포인트 – 널을 허용하지 않음.
CREATE TABLE scott.tbl_order (
order_no VARCHAR2(16) PRIMARY KEY NOT NULL,
custom_no VARCHAR2(16) NOT NULL,
order_date DATE NOT NULL,
price NUMBER(15, 2) NOT NULL,
city VARCHAR2(256),
deli_date DATE,
pay NUMBER(15, 2),
discount NUMBER(15, 2) NOT NULL,
point NUMBER(15, 2) NOT NULL
);
- 위 생성된 테이블에서 배송도시 컬럼의 이름을 배송도시코드 로 변경하세요.
ALTER TABLE tbl_order RENAME COLUMN city TO city_code;
- 위 테이블에서 배송도시코드 컬럼의 데이터 타입을 소수점 없는 8 자리 숫자 타입으로 변경 하세요.
ALTER TABLE tbl_order MODIFY (
city_code NUMBER(8)
);
- 위 테이블에서 적립포인트 컬럼의 not null 제약 조건을 삭제 하세요.
ALTER TABLE tbl_order MODIFY (
point null
);
- 위 생성된 데이블에 아래 레코드를 추가하세요. (쿼리문 작성) 추가 설명, 주문번호는 영문 대문자 O 로 시작됨, 고객번호는 영문 대문자 C 로 시작됨.
insert into tbl_order (order_no,
custom_no,
order_date,
price, city_code,
deli_date,
pay,
discount,
point
) values (
'O123456',
'C007',
to_date(190713,'yymmdd'),
15000,
45111,
null,
14000,
1000,
140
);
insert into tbl_order (order_no,
custom_no,
order_date,
price, city_code,
deli_date,
pay,
discount,
point
) values (
'O54321',
'C008',
to_date(190713,'yymmdd'),
5000,
54321,
null,
5000,
0,
0
);
- 위 테이블에서 주문번호가 O54321 인 고객의 배송도시코드와 결제금액을 표시하시요
select city_code, pay from tbl_order where order_no = 'O54321';
- 위 테이블에서 주문번호가 O54321 인 고객의 적립포인트를 50 으로 수정하세요.
update tbl_order set point = 50 where order_no = 'O54321';
- 위 생성된 테이블에서 주문번호, 주문가격, 배송도시코드만 표시하는 뷰를 생성하는 쿼리를 작성하세요
select order_no, price, city_code from tbl_order