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

[데이터베이스설계] 3-11 with 절 ( with 테이블명(컬럼명) as (투플 instance 정의) )

by 젼젼39 2025. 2. 15.

- 임시 relation을 만든다.

with 절  
- DB에 남지 않음, 해당 SFW 실행할때만 존재한다. 임시테이블
 
Q) find all departments with the maximum budget (= 단독 1위일수도 있고, 공동1위일수도 있음)
=> with max_budget ( value ) as                 테이블명 = max_budget, 컬럼명 value. 컬럼1
            ( select max(budget)                        dept테이블의 budget의 최고값. 레코드도 1개임.
              from department  )                         //학과이름은 모름. 최고값만 온다
     select department.name
     from department, max_budget                //조인, 짝짓기함. 위에서 만든 테이블 넣음
     where department.budget = max_budget.value ;  //여기서 값을 찾아서 이름을 얻는다.
                                          // 테이블명 . 컬럼명 적기!
 
    with절을 통해 최고값을 찾아두고, 그걸 본 SFW from으로 보내 함께 비교한다.
 

Q) find all departments’ name where total salary is greater than average of total salary at all dept
=> with dept_total ( dept_name, value ) as
           ( select dept_name, sum(salary)
             from instructor
             group by dept_name ) ,
          dept_total_avg ( value ) as
          ( select avg(value)              // 위의 테이블의 value값들의 평균이니까
            from dept_total )               // 위의 테이블로 계산
 
      select dept_name                   // dept_name이름 가진 컬럼 1개라서
      from dept_total, dept_total_avg
      where dept_total.value > dept_total_avg.value ;
 
 
instructor에서 dept_name이랑 급료 합 구한 테이블과, 전체학과 급료 평균담은 투플1개짜리 만듦
카티션곱해서 비교하기