[DB] 아빠도 따라하는 오라클 데이터베이스 3일차

2013. 2. 22. 13:10Information Technology/Database

2월 21일 목요일 Oracle SQL 강의

Oracle DB실행시 문제가 있을 경우

내컴퓨터 마우스 오른쪽 à 관리 à 컴퓨터 관리(서비스 및 응용 프로그램)

à OracleServiceXEOracleXETNSListener 가 시작됨으로 되어있는지 확인한다!!

 

컬럼 속성(무결성 제약조건) p128

NULL //널 값을 허용

NOT NULL //널 값을 허용하지 않음

UNIQUE //중복을 허용하지 않음, NULL값은 허용

 

Primary Key //unique와 not null 합친 의미

- 컬럼명 NUMBER(6, 0) PRIMARY KEY //인라인 표기방식 (그 자리에서 바로 정의하는 것)

- 컬럼명 NUMBER(6, 0), CONSTRAINT "기본키 명칭" PRIMARY KEY(컬럼명) //아웃라인 표기방식

Alter table 테이블명

add constraints "기본 키 이름" primary key(컬럼);

 

FOREIGN KEY //외래키, 참조키, 다른 테이블의 Primary key를 참조하여 중복하여 사용되는 키

- 테이블 만드는 중에 쓰이는 구문

컬럼명 Constraints "외래 키 이름"

References 참조테이블명(참조 컬럼);

 

- 테이블 만든 후 수정을 위해 쓰는 구문

Alter table 테이블명

Add constraints "외래 키 이름" Foreign key(컬럼)

References 참조테이블명 (참조 컬럼);

 

- 참조되는 테이블을 부모라고 하고 참조하는 테이블을 자식이라고 한다.

- 외래키 쓰기 에 부모테이블이 먼저 만들어져 있어야 참조할 수 있다.

- 참조하는 부모의 컬럼은 기본키 혹은 unique 키 이어야 한다.

- 자식 테이블에 존재하는 값을 부모 테이블에서 삭제할 수 없다.

- 반대로 삭제가 아닌 Insert의 경우에는 부모 테이블의 데이터를 먼저 입력 후 자식 테이블에 데이터를 입력해야 한다.

 

CHECK //입력되는 값을 체크하여 일정한 조건에 해당되는 값만 입력될 수 있게 하는 제약조건

Ex) gender VARCHAR2(10) NOT NULL CONSTRAINT check_gender CHECK(gender in('남성', '여성'))

컬럼 레벨에서 (컬럼 정의할 때만) 적용되는 제약조건은? CHECK 이다.

 

DEFAULT //컬럼에 특정 값을 디폴트 값으로 설정하고 아무것도 입력하지 않으면 그 값이 적용됨.

- 디폴트는 제약조건에 포함 안됨.

- 데이터 타입 뒤에, NOT NULL 앞에 디폴트 입력해야 함.

gender VARCHAR2(10) DEFAULT '남성' NOT NULL

CONSTRAINT check_gender CHECK(gender in('남성', '여성');

Alter table check_test

Add insert_date DATE DEFAULT SYSDATE;

 

Join

 

Cross join

- 2개 이상의 테이블이 조인 될 때 where 저에 의해 공통되는 컬럼에 의한 결합이 발생하지 않는 경우

 

Natural join

- 2개 이상의 테이블이 공통되는 컬럼에 의해 논리적으로 결합되는 경우

select d.deptid, d.deptname, l.city

from dept d, loc l

where d.locid = l.locid;

select d.deptid, d.deptname, l.city

from dept d JOIN loc l

USING (locid);

 

Self join

- 한 개의 테이블을 두개의 별도의 테이블처럼 사용할 때 이용

select e.empid, e.fname, d.fname

from emp e, emp d

where e.mgrid = d.empid;

 

Outer join

- 2개 이상의 테이블이 조인될 때 어느 한쪽의 테이블에는 해당하는 데이터가 존재하는데 다른 쪽의 테이블에는 데이터가 존재하지 않을 때 그 데이터는 출력되지 않는 문제를 해결하기 위해 사용되는 기법

- 데이터가 존재하지 않는 쪽 테이블에 (+) 기호를 정의하면 모든 데이터가 출력됨

select e.empid, e.fname, d.deptname

from emp e, dept d

where e.deptid = d.deptid(+);

//e.deptid에 NULL값이 존재하고 d.deptid에는 NULL값이 존재하지 않으므로 d.deptid가 적으므로 (+)를 붙인다.

select e.empid, e.fname, d.deptname

from emp e left outer join dept d

on e.deptid = d.deptid;

// 잘기억!!!

1 ··· 4 5 6 7 8 9 10