2024.02.23

김무영·2024년 2월 23일

여러 컬럼이 하나의 Primary key로 구성되는 경우.

  • 테이블 단위 제약사항만 가능.
  • 문법 )
    create table 테이블명(
    컬럼명 데이터형(크기),
    .
    .
    .
    constraint 제약사항명 primary key ( 적용컬럼,,, )
    );

foreign key ( 외래키, 참조키 )

  • 다른 테이블의 PK, unique 컬럼값으로만 컬럼 값이 구성되어야 할 때
  • null을 허용한다.값이 있을 때에는 부모테이블에 존재하는 값으로만 저장할 수 있다.
  • 테이블간의 관계가 생성된다. ( PK - 부모테이블, FK - 자식테이블 )
  • 컬럼단위 제약사항, 테이블단위 제약사항 두가지로 사용할 수 있다.
  • 하나의 테이블에 FK는 여러개를 가질 수 있다.
  • 자식테이블은 컬럼명은 달라도 되나, 부모테이블의 데이터형과 크기를 동일하게 설정한다.
  • 문법 )
    create table 테이블명(
    컬럼명 데이터형(크기) constraint FK_테이블명_컬럼명 references 참조항테이블명(참조컬럼)
    );

테이블 단위 제약사항

  • create table 테이블명(
    컬럼명 데이터형(크기),
    .
    .
    constraint FK_테이블명_컬럼명 foregin key(적용컬럼명)
    references 참조할 테이블명 (참조 컬럼명)
  • on delete cascade를 사용하면 부모테이블의 레코드가 삭제될 때 참조하는 모든 자식의 테이블의 레코드를 함께 삭제한다.
    • 사용법 )
      • 컬럼단위 )
        컬럼명 데이터형(크기) constraint 제약사항명 references 참조할테이블명(참조컬럼)on delete cascade;
      • 테이블단위 )
        constraint 제약사항명 foreign key(적용컬럼) references 참조할테이블명(참조컬럼) on delete cascade;

unique

  • null을 허용하면서 컬럼값이 유일해야 할 때.
  • 컬럼단위 제약사항, 테이블 단위 제약사항 두 가지로 사용할 수 있다.
  • 값이 없을 수도 있고, 있다면 유일해야할 때 사용(카드번호, 이메일,,)
  • 문법 )
    • 컬럼단위
      create table 테이블명 (
      컬럼명 데이터형(크기) constraint UK_테이블명_컬럼명 unique
    • 컬럼단위
      create table 테이블명 (
      컬럼명 데이터형 (크기),
      .
      .
      constraint UK_테이블명_컬럼명 unique(적용컬럼)

check조건

  • 컬럼에 개발자가 원하는 값으로 추가해야할 때
  • 컬럼단위 제약사항, 테이블 단위 제약사항 두 가지로 사용할 수 있다.
  • 제약사항명을 생략하여 주로 컬럼단위 제약사항으로 사용할 수 있다.
  • check조건에서 유효성 검증 할 때에는 check조건이 사용되는 컬럼에서만 사용할 수 있다.
  • 문법 )
    • 컬럼단위 )
      • create table 테이블명(
        컬럼명 데이터형(크기) constraint 제약사항명 check ( 조건 )
        컬럼명 데이터형(크기) -- 조건에 check붙어있는것만 사용가능
        • 조건에 사용되는 컬럼은 check가 붙어있는 컬럼만 사용할 수 있고, 다른 컬럼은 사 용할 수 없다.
    • 테이블단위 )
      • create table 테이블명(
        컬럼명 데이터형(크기),
        .
        .
        .
        constraint 제약사항명 check( 조건 )

not null조건

  • 컬럼에 값을 반드시 입력해야하는 경우.
  • 컬럼단위 제약사항으로만 사용가능
  • 문법 )
    • create table 테이블명(
      컬럼명 데이터형(크기) not null
      컬럼명 데이터형(크기)
      );

default

  • insert시 컬럼이 생략되면 설정한 값으로 레코드를 추가할 때.
  • 제약사항이 아님 => user_tab_cols DD에서 확인 가능 (data_default column)
  • 컬럼단위 설정 가능.
  • 문법 )
    • create table 테이블명(
      컬럼명 데이터형(크기) default 기본값

alter

  • DDL
  • 테이블 변경, 제약사항 변경, 계정 비번변경 계정 잠그기 등 다양한 일을 할 수 있다.
    • 계정의 비번을 변경
      • 모든 계정은 자신의 비번을 변경할 수 있다.
      • 관리자는 모든 계정의 비번을 변경할 수 있다.
      • 문법 )
        • alter user 계정명 indentified by 비번
    • 계정 잠그기, 열기 - 관리자 계정만 가능
      • alter user 계정명 account lock(unlock);
    • 테이블의 변경
      • 컬럼 추가
        • 추가된 컬럼은 테이블의 가장 마지막 컬럼으로만 추가된다.
        • 문법 )
          • alter table 테이블명 add 컬럼명 데이터형(크기) 컬럼단위 제약사항
            • 컬럼단위 제약사항 : 레코드의 존재유무에 따라 사용가능한 제약사항이 다르다.
      • 컬럼 삭제
        • 문법 )
          • alter table 테이블명 drop 컬럼명;
    • 데이터형 변경
      • 레코드가 존재 : 동일 데이터형 에서 크기만 변경된다.
      • 레코드가 존재하지 x : 데이터형 자체를 변경할 수 있다.
      • 문법 )
        • alter table 테이블명 modify 컬럼명 데이터형(크기) 컬럼단위 제약사항
    • 컬럼명 변경
      • 문법 )
      • alter table 테이블명 rename column 이전컬럼명 to 변경할컬럼명
    • 테이블명 변경
      • 문법 )
      • alter table 테이블명 rename to 변경할테이블명
  • 제약사항의 변경
    • 레코드의 상태에 따라 가능할 지 불가능할 지 다름. (제약사항추가 , 제약사항 활성화, 비활성화)
    • 제약사항 추가 : 테이블단위 제약사항의 문법가능
      • 문법 )
        • alter table 테이블명 add constraint 제약사항명 제약사항종류(적용컬럼)
    • 제약사항 삭제
      • 문법 )
        • alter table 테이블명 drop constraint 제약사항명
    • 제약사항 활성화, 비활성화
      • 문법 )
        • alter table 테이블명 enable constraint 제약사항
        • alter table 테이블명 disable constraint 제약사항

테이블 결합하기

  • 여러 테이블의 레코드를 한번에 모아서 보는 것.
  • union , join
    • union
      • 서로 다른 테이블의 컬럼을 수직으로 결합하여 검색할 때 사용.
      • 컬럼의 수, 데이터 형이 일치해야한다.
      • union : 중복된 데이터를 보여주지 않는다.
      • union all : 중복된 데이터를 보여준다.
      • 문법 )
        • 컬럼의 수와 데이터형이 일치하면 에러가 발생하지 않는다.
        • select 컬럼명,,,
          from 테이블명
          union (all)
          select 컬럼명,,,
          from 테이블명
    • join
      • 서로 다른 테이블의 컬럼을 수평으로 결합하여 검색할 때 사용.
      • inner join , outer join , cross join, self join이 존재
      • 조인 조건을 잘못 설정하면 모든 레코드들이 곱해져서 조회되는 Cartesian Product이 발생한다.
      • ANSI문법과 Oracle Join 문법 두가지를 제공
      • Driving 테이블을 잘못 선정하면 조인 시간이 증가한다.
      • inner join
        • 서로 다른 테이블에서 동일한 데이터만 가져오는 조인.
        • 한쪽 테이블에만 데이터가 존재하면 조회되지 않는다.(모든 데이터를 볼 수 없다.)
        • 문법 )
          • select 컬럼명,,,,
            from 테이블명
            inner join 조인할 테이블명
            on 조인조건
            inner join 조인할 테이블명
            on 조인할 테이블명
            .
            .
            where 검색조건
        • ANSI Query 문법 )
          • select 컬럼명, 테이블명.컬럼명,
            from 테이블명 alias
            inner join 조인할테이블명 alias
            on 조인조건
            • 테이블명.컬럼명 : alias가 사용되지 않으면 테이블.컬럼명으로 사용
              alias가 사용되면 alias명.컬럼명으로 사용
        • inner join oracle 문법 )
          • select 컬럼명
            from 테이블명 alias, 조인할 테이블명 alias ,,,,
            where (조인조건) and (검색조건)

Driving table

  • 조인할 때 키가 되는 테이블
  • driving 선정 기준
    • 관계가 있는 테이블에서는 PK컬럼이 driving 테이블이 되는 것이 좋다.
    • 관계가 없는 테이블에서는 레코드의 수가 적거나, 다양성이 적은 컬럼이 되는 것이 좋다.
     

0개의 댓글