Table 생성
CREATE TABLE test (
key NUMBER NOT NULL PRIMARY KEY,
value varchar(50) NOT NULL
value2 varchar(50) NOT NULL
);
Table 삭제
DROP TABLE test;
Table 선택
SELECT * FROM test;
Table 요소 삽입
INSERT INTO test(key, value) VALUES (1,'Hello!');
Table 요소 여러개 삽입
INSERT INTO test (key, value)
SELECT t.* FROM
(
SELECT 1, 'Hello,' FROM DUAL
UNION ALL
SELECT 2, 'World' FROM DUAL
UNION ALL
SELECT 3, '!' FROM DUAL
)t;
Table 요소 삭제
DELETE FROM test WHERE key=1;
Table 요소 전체 삭제
DELETE FROM test;
Table 요소 수정
UPDATE test SET value='Hello,', value2='Word!' WHERE key=1;
Sequence 생성
CREATE SEQUENCE test_seq;
Sequence 삭제
DROP SEQUENCE test_seq;
Sequence 사용
SELECT test_seq.NEXTVAL FROM DUAL;
Sequence 현재 값
SELECT test_seq.CURRVAL FROM DUAL;
Sequence 조회
SELECT * FROM all_sequences WHERE sequence_name = 'test_seq';
Table에 날짜 저장
INSERT INTO test(date) VALUES (SYSDATE);
Table에 세부 날짜 저장
INSERT INTO test(date) VALUES (localtimestamp); // TIMESTAMP 변수 date에 현재 날짜 저장
ROWNUM 만들기
SELECT ROWNUM, a.* FROM test a;
문자열 연결 연산자
||
FOREIGN KEY 생성
FOREIGN KEY (key) REFERENCES test2(key); // test2가 있다고 가정하고 test2의 key라는 값을 참조해서 거기에 있는 값이 있을 경우에만 INSERT INTO할 수 있다
INNER JOIN // 있는거 끼리
SELECT a.key, a.value, b.value FROM test a INNER JOIN test2 b ON a.key = b.key;
FULL JOIN // 있을 경우 연결해서 전부다
소문자로 바꾸기
as 'id'
VIEW 생성
CREATE(OR REPLACE) VIEW test_view as (
SELECT a.key, a.value, a.value2, b.value, b.value2
FROM test a
FULL JOIN test2 b
ON a.key = b.key
);
VIEW 삭제
DROP VIEW test_view;
GROUP BY
LISTAGG
SELECT LISTAGG([합칠 컬럼명], [구분자]) WITHIN GROUP(ORDER BY [정렬 컬럼명]) as 합칠 컬럼명 FROM test;
사용자 계정 잠금 해제
alter user SCOTT account unlock;
INSERT INTO table (today) VALUES (SELECT TO_DATE(SYSDATE,'YYYY-MM-DD HH24:mi:SS') FROM DUAL); // DATE 타입에 저장SELECT * FROM table ORDER BY number DESC; // 내림차순 정렬SELECT * FROM table START WIDTH mgr IS NULL CONNECT BY PRIOR value=20;SELECT LPAD(value, LENGTH(value)+(LEVEL-1) * 3, ' ') FROM table; // 차수 순으로 계층구조 표시SELECT * FROM ( SELECT key, value, ROWNUM AS rn FROM table ) WHERE rn BETWEEN 0 AND 10;SELECT t1.*, ROWNUM rn FROM ( SELECT key. value FROM table ORDER BY value)t1;GRANT CREATE VIEW TO name; // name에게 뷰 최고권한 줌GRANT CONNECT, RESOURCE, CREATE VIEW TO name; // 여러개의 권한을 name에게 준다.CREATE VIEW func AS AS SELECT * FROM table; // 뷰 생성
SELECT key, value, name FROM table t INNER JOIN table2 t2 ON t.value=t2.value; // 다른 테이블의 value값이 같은 것들을 연결해서 확장한다.FOREIGN KEY(key) REFERENCE table2(key) // 폴레인 키 연결ALTER TABLE table ADD CONSTRAINT FK_TABLE_key FOREIGN KEY(key) REFERENCES table2(key); // 폴레인키 조건 추가ALTER TABLE table DROP CONSTRAINT FK_TABLE_key; // 폴레인키 조건 삭제CREATE SEQUENCE myseq; // 시퀀스 생성DROP SEQUENCE myseq; // 시퀀스 삭제테이블은 최대한 잘게 쪼게서 사용DDL: CREATE, DROP, ALTERDML: SELECT, INSERT, UPDATE, DELETEIS NULL;IS NOT NULL;ALTER TABLE student ADD score NUMBER(3,1); // 기본 테이블에 새 컬럼 추가SELECT COUNT(*) FROM table; // 행 개수 구하기SELECT empno,ename, CASE deptno WHENE 10 THEN '개발팀' WHEN 20 THEN '생산팀' ELSE '기타' END AS 부서명 FROM emp; // 찾기CREATE OR REPLACE VIEW myview AS SELECT ~ // 변경CREATE INDEX ename_index ON emp(ename); // 인덱스 생성TIMESTAMP, LOCALTIMESTAMPCURRENT_TIMESTAMP
FROEIGN KEY(deptno) REFERENCE department(deptno)
타입
NUMBER(p,s) : 총 38자리, 소수점 37자리CHAR(n) : 고정크기 문자, 정확히 n바이트 사용, 나머지는 공백으로 채워짐VARCHAR2(n) : 가변크기 문자, 최대 n바이트 사용, 나머지는 null로 채워짐NVARCHAR2(n) : n개의 문자DATE : 날짜
제약조건
- not null : 컬럼 값으로 null은 거부
- default : 컬럼 값을 지정하지 않으면 대신 사용되는 값
- unique : 해당 컬럼의 값 내에서는 중복되지 않아야 한다
- primary key : not null, unique
- foreign key : 외부 키(참조 키), 다른 테이블의 특정 컬럼 안에 있는 값만 사용해야 한다. 참조하는 외부 키의 속성은 반드시 unique, primary key 중에 하나여야 한다.
JOIN
좌우로 붙인다
- INNER JOIN : 연결조건에 맞는 행만 연결해서 가져온다
- OUTER JOIN : 연결조건에 벗어나 있어도 가져온다
-- LEFT OUTER JOIN :
-- RIGHT OUTER JOIN
-- FULL OUTER JOIN
- CROSS JOIN : 연결조건 없이 테이블들을 곱해서 가져온다
SELECT e.empno, e.ename, m.ename
FROM emp e INNER JOIN emp m
ON e.mgr=m.empno;
GROUP BY
그룹 당 한 행이 나온다
SELECT deptno, COUNT(*) "사원총수" FROM emp GROUP BY deptno ORDER BY deptno;
UNION
UNION ALL // 상하로 붙인다
- 병합
테이블 행 전체 삭제
DELETE FROM lms_status;
참고