Self Join
- 동일 테이블 사이의 조인을 뜻한다.
- 동일 테이블 명이 두번 나오기 때문에 별칭을 사용해야한다.
?. MEMBER 테이블에 BOSS_ID 열 옆에 BOSS_NAME 열을 추가하고 싶다.
SELECT M.*, B.NAME AS BOSS_NAME
FROM MEMBER M
LEFT OUTER JOIN MEMBER B ON B.ID = M.BOSS_ID;
- M과 B라는 별칭을 사용하였다.
- BOSS_ID가 존재하지 않는 열도 조회되야해서 LEFT OUTER JOIN을 사용
ORACLE JOIN
- 표준 SQL과 오라클의 SQL의 JOIN 문법은 좀 다르다.
<ANSI INNTER JOIN>
SELECT N.ID, N.TITLE, M.NAME
FROM
MEMBER M
INNER JOIN NOTICE N ON M.ID = N.WRITER_ID
WHERE M.ID='newlec';
<Oracle INNER JOIN>
SELECT N.ID, N.TITLE, M.NAME
FROM MEMBER M, NOTICE N
WHERE M.ID = N.WRITER_ID AND M.ID = 'newlec';
<ANSI OUTER JOIN>
SELECT N.*, M.NAME WRITER_NAME
FROM NOTICE N
LEFT OUTER JOIN MEMBER M ON M.ID = N.WRITER_ID;
<Oracle OUTER JOIN>
SELECT N.*, M.NAME WRITER_NAME
FROM NOTICE N, MEMBER M
WHERE N.WRITER_ID = M.ID(+);
UNION
- 두 테이블을 합치는 연산을 의미한다.
- UNION/MINUS/INTERSECT/UNION ALL 4가지 옵션이 있다.
- UNION
- 두 테이블을 합치는데 공통되는 부분은 중복되지 않고 하나로 합치는 연산이다.
- MINUS
- MINUS의 경우 1테이블에서 2테이블을 빼서 1테이블에서 2테이블과 공통되는 부분은 빠지는 연산이다.
- INTERSECT
- INTERSECT의 경우 1테이블과 2테이블의 공통되는 부분만 남기는 연산이다.
- UNION ALL
- UNION ALL은 공통되는 부분과 상관없이 그냥 합치는 연산이다.
VIEW(뷰) 만들기
- 일반적으로 DB는 무결성과 중복제거를 위해 정규화를 하기에 DB가 물리적으로 나눠져 있다.
- 하지만 이러한 DB는 관리하기가 힘들다.
- 따라서 논리적으로 테이블을 합쳐서 관리해야하는데 이를 VIEW라고 한다.
CREATE VIEW NOTICE_VIEW -- VIEW 생성 문장
AS
SELECT N.ID, N.TITLE, N.WRITER_ID, M.NAME, COUNT(C.ID) CNT
FROM MEMBER M
RIGHT OUTER JOIN NOTICE N ON M.ID = N.WRITER_ID
LEFT OUTER JOIN "COMMENT" C ON N.ID = C.NOTICE_ID
GROUP BY N.ID, N.TITLE, N.WRITER_ID, M.NAME;
- 뷰가 정의된 기본 테이블이나 뷰를 삭제하면 그 테이블이나 뷰를 기초로 정의된 다른 뷰도 자동으로 삭제된다.
- VIEW는 읽기전용, 조회전용이라고 보면된다.
제약 조건
- 도메인 제약조건
- 도메인 : COLUMN에 들어갈 수 있는 유효한 값
- 속성에 도메인이 아닌 값이 올 수 없도록 하는 제약조건을 뜻한다.
- NOT NULL : NULL값이 들어올 수 없다.
- DEFAULT : 기본 값을 가져야할 경우
- CHECK : 값의 유효범위 지정
CHECK 제약조건
CREATE TABLE TEST
(
ID VARCHAR2(50) NULL,
PHONE VARCHAR2(200) CHECK(PHONE LIKE '010-%-____') NOT NULL
EMAIL VARCHAR2(500) NULL
)
ALTER TABLE TEST ADD CONSTRAINT CK_TEST_PHONE CHECK(PHONE LIKE '010-%-____');
정규식을 이용한 CHECK 제약조건
- 좀 더 정밀하게 제약조건을 걸고싶다면 정규식을 사용해야한다.
Entity 제약조건(PK/Unique)
- Primary key(PK/기본키), UNIQUE
- 중복된 레코드가 없도록 제한한다.
- Primary Key
- 기본 키는 DB 테이블에서 각 행 또는 레코드를 고유하게 식별하는 테이블의 필드이다.
- 기본 키는 반드시 고유한 값을 가지고 기본 키로 설정된 열은 NULL값을 가질 수 없다.
- UNIQUE 제약조건
- UNIQUE 제약조건은 서로 다른 두 레코드의 특정한 열이 동일한 값을 가지는 것을 방지한다.
시퀀스
- UNIQUE한 값을 생성해주는 오라클 객체이다.
- 시퀀스를 생성하면 기본키와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성할 수 있다.
- 보통 PRIMARY KEY 값을 생성하기 위해 사용한다.