*Non Equi Join
직원의 사번, 이름, 급여, 급여 등급을 조회
selelct * from salgrade; (급여등급)
모든 조인의 결국엔 inner join이라고 생각하면 되고
약간 변형된 것이 non equi join 이라고 생각하면 됨.
slelect empno, ename, sal, grade from emp inner join salgrade on sal >= losal and sal <= hisal;
때에 따라서는 그 범위 안에 따라서 포함되는 값인지 이런식으로 변형시킬 수 있다.
서로 같은 테이블을 조인 할때 사용.
직원의 사번, 이름, 업무, 직속상사의 사번,직속상사의 이름을 조회
select ename, nmpno, job, mgr from emp self join mgr on empno on ename;
평소 조회를 이렇게 할 것이고
두 개를 하나로 조인하는 방법이 따로 있는데 바로 self join이다.
select e1.empno, e1.ename, e1.job, e1.mgr, e2.ename from emp e1 inner join emp e2 on e1.mgr = e2.
empno;
3. SET 연산자(집합 연산자)
- union
- union all
- intersect
- minus (차집합)
selct deptno from dept;
select deptno from emp;
두개를 결합
select deptno from dept union select deptno from emp;
select deptno from dept union all select deptno from emp;
select deptno from dept intersect select deptno from emp;
select deptno from dept minus select deptno from emp;
자주 사용하지는 않음.
6. transaction ★★★★★
데이터 베이스 관리 시스템 또는 유사한 시스템에서 상호작용하는 단위.
트랜잭션은 성공과 실패가 분명하고 상호 독립적이며 일관된다.
원자성(atomicity), 일관성(consistency) , 독립성(lsolation), 영구성(durability) 시스템들에서는 트랜잭션들은 논리적 작업단위(luw, logical units of work)로 불린다.
ACID라고 통용.
트렌젝션을 하면 가장 먼저 떠올려야할 용어.
all or nothing
[일을 시작했으면 끝까지 해라. 그렇지 않으면 원상태로 돌아가]
그러나 중간에 일이 끊어지는 경우 로그파일을 통해 작업을 이어갈 수 있도록 함.
로그파일: 뭘 수정하고 입력하고 기억하는지 기록해두는 것.
데이터 파일, 로그파일이 = 물리적인 데이터베이스
관련 명령어
- commit : 데이터 베이스에 영구적으로 적용하는 명령어. 커밋이 실행되면 트랙젝션에서 수행된 모든 데이터 수정이 확정되고 이후에는 롤백이 가능해짐.
- rollback : 이전 상태로 돌리는 명령. 오류가 발생시에 대부분 사용 (원자성 속성이 보존됨)
- savepoint : 롤백을 할 때 지정 위치를 설정함.
동기화(synchronous) : 하나에 하나씩만 처리 될 수 있게 하는 것. / 동시에 접근하는 방법은 비동기화
트렌젝션의 경우 동기화를 내포하고 있음.
동기화
두 개의 cmd를 통해서 입력값을 설정해도 상호작용을 하지 않음.
그래서 commit을 써줘야 함. 그럼 값이 저장이 되고(동기화 되고) 다른 곳에서 해도 값이 입력됨.
※ datawarehouse : 데이터 하나를 저장하는 것을 뛰어넘어서 의사 결정을 내리는 용도로 쓰임.
※ data mining : 데이터를 체굴 / 자료 채굴
7. 데이터 무결성 (data integrity)
결점이 없는 데이터만 저장할 수 있겠금 만듦.
잘못된 데이터는 막아줌.
무엇을 지켜야할 지 알아야 함.
- what
※ 제약 (on straint)
* 실체 무결성(entity) : table을 가리킴. (기본 키의 고유성과 존재성을 보장)
중복된 데이터 방지 / primary key, unique
* 영역 무결성(domain) : 특정 열에 값의 범위를 지켜줌.
범위 / check
* 참조 무결성(reference) : 참조 외래 키의 제약을 중심으로 한 무결성 규칙.
참조 / foreign key
- 컬럼의 속성 (num의 속성을 가짐).
* NN(not null)속성 : 비워놓을 수 없게끔 만드는 속성.
primary key
* ND(not duplicate) 속성 : 중복된 데이터값을 들어가지 못하게 해주는 속성.
primary key, unique
* NC(no change) 속성 : 컬럼 앞에 있는 것들은 바꿀 수 있는 속성이지만 바꿀 수 없게해주는 무기.
foreign key
솔직히 오늘 수업은 뭐라고 하는지 하나도 모르겠다.
primary key
* 한 테이블에 단 한 개만 사용할 수 있음.
* 여러 개의 필드를 묶어서 설정할 수 있음.
create table tblexam(
id number not null
name varchar(10) null
);
insert into tblexam(name) values('hong');
insert into tblexam(id, name) values(1, 'hong');
insert into tblexam(id, name) values(1, 'hong');
ALTER TABLE tblexam ADD CONSTRAINT scott_tblexam_id PRIMARY KEY (id);
insert into tblexam(id, name) values(1, 'hong');
insert into tblexam(id, name) values(1, 'hong');
desc user_constraints;
select contraints_name, table_name from user_constraints;
drop table tblexam;
create table tblExam(id number primary key, name varchar(10) null);
drop table tblexaml;
create table tblexam(id number, name varchar(10) null, constraint pk_tblexam_id primary key(id, name)
4) unique
-중복방지
-하나의 테이블에 여러 개를 설정 가능
drop table tblexam;
create table tblexam(id number , name varchar(10) null,
constraint uk_unique(id)
5) default
drop table tblexam;
create table tblexam(id number not default 0, name varchar(10) default 'noname');
6) Sequence
create sequence seq_id;
insert into tblexam(id) values(seq_id.nextval);
7) check
drop table tblexam;
CREATE TABLE tblExam(
id NUMBER(3),
name VARCHAR2(10),
city VARCHAR2(10),
CONSTRAINT ck_tblexam_city CHECK (city='서울' OR city='경기' OR city='인천' OR city='수원')
);
참조는 관계형 DB
참조하는 테이블은 = 자식 테이블 / 참조를 해주는 테이블은 = 부모 테이블
8) foreign
create table tbldept(deptno char(3), dname varchar2(10));
insert into tbldept values(10, 'sales');
insert into tbldept values(10, 'marketting');
create table tblemp(
empno number,
ename varchar2(10),
hiredate date,
deptno char(3)
constraint fk_tblemp_deptno foreign key(deptno) references tbldept(deptno)
);
alter table tbldept add constraint pk_tbldept_deptno primary key(deptno);
insert into tblemp values(1, 'hong' sysdate, '10');
insert into tblemp values(1, 'hong' sysdate, '30');
update tbldept set deptno = 100 where deptno=10;