기본 콘텐츠로 건너뛰기

SQL

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, ALTER
DML: SELECT, INSERT, UPDATE, DELETE
IS 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, LOCALTIMESTAMP
CURRENT_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;

참고

이 블로그의 인기 게시물