본문 바로가기
데이터베이스

23.01.31(sequence, 제약조건, join)

by 2023코딩시작 2023. 1. 31.

😀오류 생겼을 때!!!!!

구글검색 - 오라클 에러코드

 

/*
    시퀀스(Sequence)
    ==> 순서를 부여할 때 사용하는 문법
        연속적인 번호를 만들어 주는 기능을 함
        
    형식)
        create sequence 시퀀스이름
        start with n (시작번호 설정 - 기본적으로 기본값은 1)
        increment by n (증가번호 설정 - 기본적으로 기본값은 1)
        maxvalue n (시퀀스 최대 번호 설정)
        minvalue n (시퀀스 최소 번호 설정)
        cache / nocache (캐시 메모리 사용 여부)
        
        1) cache : 시퀀스를 빠르게 제공하기 위해 미리 캐시 메모리에 
                   시퀀스를 넣어 두고 준비하고 있다가 시퀀스 작업이 필요할 때 사용을 함.
                   default로는 20개의 시퀀스를 캐쉬 메모리에 보관을 하게 됨
        2) nocache : cache 기능을 사용하지 않겠다는 의미
*/

create table memo (

bunho number(5),

job varchar2(20) not null,

primary key(number)

);

 

create squence hoho

start with 1

increment by 1

nocahce;

 

insert into memo values (hoho.nextval, '강아지');

 

 

/*
   제약 조건
   - 테이블에 부적합한 자료가 입력되는 것을 방지하기 위해서 테이블을 생성할 때 
     각 컬럼에 대해서 정의하는 여러 가지 규칙을 정한 것을 말함
     
   1. not null
   2. unique
   3. primary key : unique + not null 
   4. foreign key
   5. check
*/

/*
    1) not null 제약조건
       - null 값이 입력되지 못하게 하는 제약 조건
       - 특정 열에 데이터의 중복 여부와는 상관없이 null 값을 허용하지 않는 제약 조건
*/
/*
  2) unique 제약 조건
     - 열에 저장할 데이터의 중복을 허용하지 않고자 할 때 사용하는 제약 조건.
     - null 값은 허용함
*/

 

/*
   3) primary key : not null + unique 제약 조건
      - 테이블 하나만 존재해야 함
      - 보통은 주민번호나 emp 테이블의 empno(사원번호) 등이 primary key의 대표적인 예
*/

 

/*
   4) foreign key 제약 조건
      - 다른 테이블의 필드(컬럼)를 참조해서 무결성을 검사하는 제약 조건
      - 참조 키 : 부모 테이블의 컬럼을 이야기 함.
      - 외래 키 : 자식 테이블의 컬럼을 이야기 함.
      - 자식 테이블의 컬럼의 값(데이터)이 부모 테이블에 없는 경우 무결성의 규칙이 깨져버림
      - 외래 키가 존재하기 위해서는 우선적으로 부모 테이블이 먼저 만들어져야 함.
      - 옵션 
        * on delete cascade
          ==> 부모 테이블의 데이터 삭제 시 해당 데이터를 참고하고 있는 
              자식 테이블의 데이터까지 모두 삭제하는 옵션
        * on delete set null
          ==> 부모 테이블의 데이터 삭제 시 해당 데이터를 참조하고 있는 
              자식 테이블의 컬럼 값을 null로 변경하는 옵션
*/

craete table student(

deptno number(3), -- reference dept(deptno) ; 컬럼상 제약조건

ename varchar2(10) primary key,

addr varchar2(100) not null,

constraint dept_fk foreign key(dept) reference dept(deptno)  on delete casade -- : 테이블 상의 제약조건

);

 

/*
  5) check 제약조건
    - 열에 저장할 수 있는 값의 범위 또는 패턴을 정의할 때 사용되는 제약 조건
*/

create table check_test(

gender varchar2(6),

constraint gener_chk check(gender in('남자', '여자'))

);

 

/*
  join ~ on 키워드
  - 테이블과 테이블을 연결하여 특정한 데이터를 얻고자 할 때 사용함
  - 두 개 이상의 테이블에 정보가 나뉘어져 있을 때 사용함
  - 중복해서 데이터가 저장되는 것을 막기 위함
  - 두 개의 테이블로 나뉘어진 경우에는 데이터의 중복은 발생하지 않지만 
    원하는 정보를 얻으려면 여러 번 질의를 해야 하는 불편함이 발생됨.
  - 특정 사원이 속된 부서의 부서명을 알고 싶은 경우에는 emp 테이블과 dept 테이블을
    넘나드는 작업이 생기므로 상당히 불편함.
    그래서 두 개의 테이블을 결합해서 원하는 결과를 얻어낼 수 있도록 하는 조인이라는 기능이 생겨나게 되었음

    조인의 종류
    1) Cross Join
    2) Equi Join -- 가장 많이 사용되는 join 
    3) Self Join
    4) Outer Join
*/

 

 

/*
   1) Cross Join
      - 두 개 이상의 테이블이 조인될 때 조건이 없이 테이블의 결합이 이루어지는 조인
      - 테이블 상호간에 연결될 수 있는 모든 경우의 수를 산출하여 나타내는 조인임
        그렇기 때문에 테이블 전체 행의 컬럼이 조인이 됨
      - 현재는 사용을 안 하는 조인임
*/

select ename, e.deptno

from emp e join dept d

on e.deptno = d.deptno

where comm is null;

 

/*
   2) Equi Join
      - 가장 많이 사용되는 조인 방법
      - 조인의 대상이 되는 두 테이블에서 공통적으로 존재하는 컬럼의 값이 
        일치되는 행을 연결하여 결과를 생성하는 방법
      - 두 테이블이 조언을 하려면 일치되는 공통 컬럼을 사용해야 함.
*/

select ename, e.deptno

from emp e join dept d

on e.deptno = d.deptno

 

/*
   3) Self Join
      - 하나의 테이블 내에서 조인을 해야 자료를 얻을 수 있는데 
        말 그대로 자기 자신 테이블과 조인을 맺는 것을 말함
      - from 절 다음에 테이블 이름을 나란히 두 번 기술을 할 수 없음.
        따라서 같은 테이블이 하나 더 존재하는 것처럼 사용할 수 있도록 
        테이블에 별칭을 붙여서 사용해야 함
*/

select e1.ename

from emp e1 join emp e2

on e1.mgr = e2.empno;

 

 

/*
   4) Outer Join
     - 2개 이상의 테이블이 조인이 될 때 어느 한 쪽 테이블에는 해당되는 데이터가
       다른 테이블에는 데이터가 존재하지 않는 경우 그 데이터가 출력이 되지 않는 문제점을
       해결하기 위해 사용되는 조인 기법
     - 정보가 부족한 테이블의 컬럼 뒤에 '(+)' 기호를 붙여 사용을 함.
*/

select e1.ename

from emp e1 join emp e2

on e1.mgr = e2.empno(+);

댓글