DDL(데이터정의어) : 객체생성, 객체구조변경, 객체제거(CREATE, ALTER, DROP)
DML(데이터조작어) : 데이터추가, 수정, 삭제(INSERT, UPDATE, DELETE)
대소문자 구분 X, 테이블 이름 대문자로 생성됨
릴레이션 관계말고 그냥 릴레이션이라 읽기
클래스 이름 명사로 만들듯이 테이블 이름도 명사로 만들어야함
컬럼값도 명사로 만들어야함
1. 테이블생성
CREATE TABLE t_a(
one number(5), --99999까지 표현
two number(5,2), --최대값 999.99, 소숫점 2째자리까지
three char(3), --'A'__넣어도 자릿수는 3자리 저장, 실제 메모리 3자리 확보
four varchar2(3), --가변길이__ --'A'
five date
);
SELECT * FROM t_a; --0행
--number 자릿수 지정X = number가 표현할 수 있는 최대 자릿수까지
--컬럼은 반드시 한개 이상이어야 한다.
컬럼 순서도 중요, 자주 사용할 수록 앞쪽에 선언하기
아무 제약 안주면 null 값 저장 가능
default date(null) 저장하지 않으면 null값으로 저장
2. 데이터추가
INSERT INTO t_a(one,three,five) VALUES (1, 'A', SYSDATE);
--SYSDATE : 시 분 초 값까지
--컬럼에 값 지정안하면 default null값 저장됨
SELECT * FROM t_a; --1행
--컬럼의 순서대로 저장하는 방법, 컬럼의 순서 변경될 수 있어서 권장하지 않음
INSERT INTO t_a VALUES(2, 2.2, 'B', 'B', '23/01/01');
INSERT INTO t_a VALUES(3, null, 'C', '', '23/01/01');
--null값 : null/NULL/'' 셋 중에 아무거나 사용
SELECT * FROM t_a; --3행
--CHAR자료형:고정길이, VARCHAR2 자료형:가변길이
SELECT three, LENGTH(three), --고정길이
four, LENGTH(four) -- 가변길이
FROM t_a;
3. 기존테이블 복사해서 테이블 생성
CREATE TABLE t_a_copy AS SELECT * FROM t_a;
SELECT * FROM t_a_copy;
CREATE TABLE t_a_copy2 AS SELECT one, three FROM t_a;
SELECT * FROM t_a_copy2;
--구조만 복사해서 테이블 생성(데이터는 복사X)
CREATE TABLE t_a_copy3 AS SELECT * FROM t_a WHERE 1 = 2;
SELECT * FROM t_a_copy3;
1=2 조건은 만족 못함. 행은 복사붙여넣기 안하고 테이블의 구조만 복사하고싶다면 조건에 맞지 않는 WHERE절 작성하면 됨
4. 테이블 구조 변경
1) 컬럼추가
ADD를 하면 마지막 컬럼으로 들어감. 중간에 삽입은 불가능
ALTER TABLE t_a
ADD six number;
2) 컬럼이름변경
ALTER TABLE t_a
RENAME COLUMN six TO six2;
3) 컬럼삭제
ALTER TABLE t_a
DROP COLUMN six2;
4) 컬럼의 자료형변경/자릿수변경
ALTER TABLE t_a
MODIFY four VARCHAR2(10);
10바이트까지 저장 가능. 한국 이름 최대 5자리로 잡으면 15바이트로 설정해주는게 좋다.
UTF-8 encoding으로 저장되면 한글 한글자 3바이트
이미 B가 저장되어있어서 문자나 날짜처럼 다른 유형으로 변경은 불가능함
5) 테이블 제거
DROP TABLE t_a_copy3;
6) 데이터 수정
--행 수정
--t_a테이블의 two컬럼값이 null이 아니면 two컬럼값을 1.5배 증가한다
UPDATE t_a
SET two = two*1.5
WHERE two IS NOT NULL;
SELECT * FROM t_a;
=이 대입연산자로 쓰이는 경우는 UPDATE SET절뿐이다.
나머지는 비교연산자로만 = 쓰임
WHERE절을 안주면 모든 행이 다 변경되어버림.
--t_a테이블의 two컬럼값이 null이면 one컬럼값은 1증가하고 five컬럼값은 1일 감소한다.
UPDATE t_a
SET one = one+1, five = five-1
WHERE two IS NULL;
SELECT * FROM t_a;
7. 데이터 삭제
--행 삭제
--t_a테이블의 one컬럼값이 4인 행을 삭제한다
DELETE t_a
WHERE one = 4;
--t_a테이블의 five컬럼값이 어제 날짜(23/08/17)인 행을 삭제한다
DELETE t_a
WHERE five = '23/08/17'; --(X) 시분초때문에 0개 행 이(가) 삭제되었습니다.
--'23/08/17'는 0시 0분 0초임.
DELETE t_a
WHERE TO_CHAR(five, 'yy/mm/dd') = '23/08/17';
--위의 방법이 더 좋은 방법
DELETE t_a
WHERE TO_CHAR(five, 'yy/mm/dd') = TO_CHAR(SYSDATE-1, 'yy/mm/dd');
※ 커밋 : 실제 db에 반영
롤백 : 다 취소
한 소프트웨어는 sqldevloper 한 클라이언트는 sqlplus
둘다 HR계정을 사용하고자 함
두 클라이언트가 접속했다 = 세션이 2개다
세션 = 접속수
한 세션에서 INSERT UPDATE DELETE 한 작업은 실제 DB에 다 반영된건 아니다
세션이 여러 개일 경우 한 세션은 자료를 추가수정삭제
한 세션은 자료를 계속 select만
select만 한 클라이언트 확인해보니 수정한거 반영이 안되었음
ㅇsqldevloper 종료할 때 꼭 커밋하기
※ 중복 제거
'데이터베이스 > Oracle' 카테고리의 다른 글
스키마 (0) | 2023.08.22 |
---|---|
무결성 제약조건 (0) | 2023.08.22 |
서브쿼리 예제 (0) | 2023.08.22 |
서브쿼리(SubQuery) (2) (0) | 2023.08.22 |
서브쿼리(SubQuery) (1) (0) | 2023.08.22 |