DDL
create
alter
drop
DML
insert
select
update
delete
(crud)
DCL
grant
remove
DDL
Create table
= 테이블 정의하기
=. 데이터 구조 정의하기
= 개념상의 데이터 정의하기
= entity 정의하기
= Member data
ctrl + enter
Oracle built-in Data types
CHAR
CHAR(n [byte | char])
- n * byte 문자 저장 ex) phone-number, birth day
- national language == 3 byte
- CHAR(2) => 나셔널 두글자 불가능
- CHAR(2 char) => 나셔널 두글자 가능 // 보다는 NCHAR(2)가 효율적,
VARCHAR2(n)
- 최대 n * byte 문자 저장, (비어있는 공간 반환) ex) Id, alios -> 처리 속도가 CHAR에 비해 느림
NCHAR(n)
- N ==nation 각 전세계 언어들을 처리할떄 (3배 정도의 크기를 사용함)
NVARCHAR2(n)
Long (구식)
- 굉장히 큰 문자열을 다룰 시, 최대 2Gbyte ,
CLOB
- CHAR LARGE OBJECT, 최대 4Gbyte
NCLOB
- NCHAR LARGE OBJECT, 최대 4Gbyte
NUMBER
NUMBER(4) 최대 4자로 이루어진 숫자
NUMBER(6,2) 소수점 2자리를 포함한 최대 6자리
NUMBER(6,-2) 소수점 -2자리를 반올림하는 최대 6자리
NUMBER == NUMBER(38,*)
NUMBER(*,5) == NUMBER(38,5)
DATE
DATE
TIMESTAMP
CREATE TABLE MEMBER(
ID VARCHAR2(50)
PWD NVARCHAR2(50)
NAME NVARCHAR2(50)
GENDER NCHAR(2)
AGE NUMBER
BIRTHDAT CHAR(10 BYTE)
PHONE CHAR(13 BYTE)
REGDATE DATE
);
UPDATE table
-
컬럼에서 수정하기
ALTER TABLE MEMBER MODIFY ID NVARCHAR2(20);
- varchar id -> nvarchar id
-
컬럼 삭제하기
ALTER TABLE MEMBER DROP COLUMN AGE;
-
컬럼 추가하기
ALTER TABLE MEMBER ADD EMAIL VARCHAR(200);
sql 예약어로 테이블, 컬럼명으로 사용 = "" 감싸기
DML
INSERT
SELECT * FROM MEMBER;
SELECT id,name,pwd FROM MEMBER;
- 예약어, 컬럼명은 소대문자 구별안함
- MEMBER TABLE 에서 id,name,pwd 만 찾아서 보여줌
SELECT id AS user_id,name,pwd FROM MEMBER;
- 기존 필드명은 id 인데 사용자의 요청으로 user_id으로 바꿀때 As키워드를 붙여줌
SELECT id user_id,name,pwd FROM MEMBER;
SELECT id "user id",name,pwd FROM MEMBER;
DELETE
DELETE MEMBER WHERE ID='test';
트랜직션
- 업무 실행단위, 논리 명령단위, 개념상의 ...
- 업무적인 단위 (계좌이체)
->
- 물리적인 단위, (update, update)
논리적으로는 계좌이체 업무가 한번에 일어나기를 원하지만 구현할때는 빠지는 쪽을 업데이트하고 들어오는 쪽을 업데이트하는 두가지 명령이 동시에 일어나야한다.
두가지 이상의 일이 정상 작동된 것을 확인하고 데이터베이스에 변경을 적용한다.
이벤트 게시글 등록 == sql (insert , update) -> 업무적인 단위에 한번에 끝내기를 원하는 단위를 두개 이상의 명령어가 하나인 것 처럼 묶어서 실행하기 위해서 어떠한 장치가 필요함,
LOCK -- 다른 사용자가 끼어들지 못하게 하기 위해
update
update
UNLOCK
LOCK, UNLOCK 의 과정을 위해 제공받는 명령어 COMMIT,RollBack
(session A 에서 DML을 사용하고 Commit | Rollback을 하지 않으면
session B 에서 DML을 사용하려고 할때 wating 이 발생한다. LOCk이 걸렸기 때문이다)
연산
산술연산자
SELECT HIT+1 FROM NOTICE;
- 컬럼 hit 의 값을 1 더하고 싶어서 + 연산자를 썼더니
- 컬럼 hit+1 에서 값들을 찾아줌
- 그럼 SELECT HIT+1 AS HIT FROM NOTICE; 별칭을 써줘야하낟.
SELECT 1 + '3' FROM DUAL;
-DUAL = 더미티에블
- 4출력
- 연산자는 자료형이 맞지 않아도 무조건 숫자로써 더한다.
- 문자를 더하기 위해서는 ||
SELECT 1 || '3' FROM DUAL;
SELECT ID || '(' || NAME || ')' as NAME FROM MEMBER ;
비교연산자
같지 않다.
SELECT * FROM NOTICE WHERE WRITER_ID = 'newlec';
SELECT * FROM NOTICE WHERE HIT > 3;
-- 게시글 중 내용을 입력하지 않은 게시글 조회
SELECT FROM NOTICE WHERE content is NULL ;
-- 게시글 중 내용을 입력하지한 게시글 조회
SELECT FROM NOTICE WHERE content is NOT NULL ;
관계 연산자
NOT , AND, OR , BETWEEN, IN
SELECT * FROM NOTICE WHERE HIT >= 0 AND HIT <=2;
SELECT * FROM NOTICE WHERE HIT BETWEEN 0 AND 2;
SELECT * FROM NOTICE WHERE HIT = 0 OR HIT =7 OR HIT =2;
SELECT * FROM NOTICE WHERE HIT IN (0,2,7);
SELECT * FROM NOTICE WHERE HIT NOT IN (0,2,7);
패턴 비교 연산자
LIKE , % , _