[RDB] Advanced DDL/DML

Seongho·2022년 10월 9일
0

RDB

목록 보기
4/6

Advanced DDL

  • Referential actions

Referential actions

어떤 FK로 인해 reference 되는 두 테이블의 관계에서, parent relation의 어떤 tuple이 DELETE/UPDATE 되면, 해당 tuple을 referencing하는 child relation의 FK 값은 어떻게 되는지에 대한 규칙

  • ON DELETE CASCADE : parent relation에서 tuple이 삭제되면, child relation에서 해당 tuple을 레퍼런스하는 turple도 삭제
  • ON UPDATE CASCADE : parent relation에서 tuple이 수정되면, child relation에서 해당 tuple을 레퍼런스하는 turple도 수정
  • ON DELETE SET NULL : parent relation에서 tuple이 삭제되면, child relation에서 해당 tuple을 레퍼런스하는 FK attibute의 value를 NULL로 세팅
  • ON UPDATE SET NULL : ON DELETE SET NULL과 동일
  • ON DELETE RESTRICT / ON DELETE NO ACTION : 둘은 동일. parent relation에서 tuple이 삭제되면, 에러를 발생
  • ON UPDATE RESTRICT / ON UPDATE NO ACTION : 둘은 동일. parent relation에서 tuple이 수정되면, 에러를 발생
  • SET DEFAULT : 현재 MYSQL에서 지원하지 않음

Advanced DML

  • Join queries
  • Nested queries

Join queries

여러개의 테이블을 관계 있는 attribute끼리 결합할 때 사용된다.
예시)
++ self join : 한 테이블 안에서 연관된 attribute를 결합한다. 꼭 테이블을 별칭을 붙여 구분지어야 한다.

/////////////////////////잘못된 예시/////////////////////////
select * 
from employee 
where employee.manager = employee.empno;  

예시)

++ 여러가지 join (inner / left / right / cross)

Nested queries

Subquery라고도 한다. where절에 있는 select문을 Nested Query라 한다. 컴파일 순서는 Nested query -> Outer query이다. 가능한 Nested보다는 join을 쓰는 것이 성능면에서 좋다.

Nested query는 총 세가지 종류를 리턴하는데,

  • scalar value(single value) : 한 칸
  • relation with one attribute : 한 열
  • relation with mutiple attibutes : 여러 개의 열
profile
Record What I Learned

0개의 댓글