Oracle DB join

강정우·2022년 6월 30일
0

DB

목록 보기
14/30
post-thumbnail

1. order by

  • order 절은 제일 마지막에 실행되는 절로써 뒤에는 어떤 절도 올 수 없다.
  • ASC : 오름차순, Default 값 즉, 안 써도 됨.
  • DESC : 내림차순
  • 정렬을 성능을 정말 많이 떨어뜨리는 녀석중 하나이다.
  • 만약 column 이 alias 상태라면 "그대로" 따라써 줘야한다.
  • 위 사진은 order by 절에 alias 상태를 그대로 쓰지 않아서 난 오류이다.
  • 또한 여러가지 조건을 부여해 multiful order을 진행할 수 있다.
SQL> select last_name, department_id, salary
 2   from employees
 3   order by department_id, salary desc	// 부서번호로 정렬 후 월급으로 내림차순 정렬.

2. join의 개념(Cartesian Product)

  • Join : 여러개의 table의 data를 검색
  • Join의 원리 : join이 발생하면 join의 대상 table을 하나의 논리적인 table로 합쳐주는 일련의 과정을 거친다. 이때 table이 합쳐지면 각각의 talbe의 행들을 하나의 행으로 조합하는데 이때 무결정이 보장이 된 행으로 조합이 필요하다.
  • Join은 반드시 n-1개의 조인 조건을 where절에 명시해야한다.(n:조인대상 table의 개수) 만약 3개의 table을 join 실행하려면 2개의 join 조건이 필요하다.
  • Cartesian Product(카티시안 곱) : error에 가까우며 join 시 조건이 없는경우 가능한 모든 행을 조합하여 없는 경우의 수가 없는 table이 나와버림.
  • Cartesian Product는 조인 조건을 생략한 경우, 조인 조건이 부적합한 경우 발생한다.
  • Join시에는 반드시 소유주의 table을 접두에로 명시해야한다. 그렇지 않게된다면 pc는 여기 table 저기 table을 검색하느라 불필요한 자원을 소모하기 때문이다.
  • Join시에는 무조껀 and 연산자로 해야한다. 그렇지 않으면 Cartesian Product가 발생한다.

3. join (equi-join)

  • 등가 join 이라고도 하며 실제 90% 이상이 equi-join이다.
  • 같은 column의 data가 존재할 때 사용된다.
  • 위 사진은 department_id로 equi-join을 수행하였다.
  • PK와 FK로 연결되어있는 table끼리 주로 사용
  • pc는 data 비교를 앞서 말 했든시 ASC코드로 진행하기 때문에 column이름이 달라도 무방하다. 즉, data type과 data value 만 같아도 수행할 수 있다.
  • 2개의 table에 같은 1개의 column을 참조하여 떨어져있는 column을 하나로 붙혀서 시각화 할 수 있음.
  • table alias(별칭)은 AS나 ""가 아닌 무조건 공백문자이다.
  • 마찬가지로 추가조건은 AND 연산자로 where절 밑에 이어붙힐 수 있음.

4. join (non-equi-join)

  • 다른 column의 data로 join을 진행한다.

5. join (outer-join)

  • 어느 한쪽의 table에 data가 더 많을 때 수행하는 join

  • 대신 어느 한 table에 (+) 조건 즉, null값들을 채워줌으로써 null==null 조건이 완성되어 값을 출력할 수 있다. 다음 2가지 예시를 통해 보겠다.

  • 아래 사진은 employ talble에 null 값을 부여하여 department에 빈칸을 전부 출력하였다. 직원 107명 + 사람없는 부서 16개 = 122개의 행출력.

  • 아래 사진은 department에 null값을 추가하여 employees에 있는 모든 행을 출력하였다. 직원 106명 + 아직 부서가 없는 인원 1명 = 총 직원 107명

6. join (self-join)

  • 위의 3개의 join은 반드시 2개 이상의 talbe로 join을 진행하지만 self-join은 이름대로 1개의 table만으로 join을 수행할 수 있다. 자체적으로 equi, non-equi, outer join을 수행한다.
  • 1개의 table을 2개의 alias로 라벨링하여 2개의 table처럼 쓰명 서로를 join한다.
  • 위 사진은 employees의 talbe을 하나는 e로 하나는 m으로 설정하여 2개의 table처럼 사용하여 equi-join을 수행하는 사진이다.

7. etc

  • 성능을 떨어뜨리는 3대장 1.정렬 2.join 3.그룹화
profile
智(지)! 德(덕)! 體(체)!

0개의 댓글