오라클 3일차

0

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;
  1. M과 B라는 별칭을 사용하였다.
  2. 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
  • 중복된 레코드가 없도록 제한한다.
  1. Primary Key
  • 기본 키는 DB 테이블에서 각 행 또는 레코드를 고유하게 식별하는 테이블의 필드이다.
  • 기본 키는 반드시 고유한 값을 가지고 기본 키로 설정된 열은 NULL값을 가질 수 없다.
  1. UNIQUE 제약조건
  • UNIQUE 제약조건은 서로 다른 두 레코드의 특정한 열이 동일한 값을 가지는 것을 방지한다.

시퀀스

  • UNIQUE한 값을 생성해주는 오라클 객체이다.
  • 시퀀스를 생성하면 기본키와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성할 수 있다.
  • 보통 PRIMARY KEY 값을 생성하기 위해 사용한다.

0개의 댓글