전공/데이터베이스

[데이터베이스] #6 SQL III (집계 함수, 조인 테이블)

Campus Coder 2024. 4. 8. 15:47
728x90
반응형

목차

  1. 집계 함수
    1. count 절
    2. group by 절
    3. having 절
    4. 널 값과 집계 함수
  2. 조인 테이블
    1. 외부 조인
    2. 조인 조건
    3. 조인 예제

1. 집계 함수

avg, min, max, sum, count

평균값, 최솟값, 최댓값, 값의 합, 개수

count 절

Select count(*) from student
  • count(*) 테이블의 터플 개수
Select count(**distinct** gender) from student
  • 유일한 값의 개수를 반환
  • Male, Female만 있으므로 결과는 2

group by 절

Select deptName, avg(salary)
from professor
group by daptName;

daptName 속성 값으로 그룹을 나눈 후

각 그룹에 대하여 salary 속성의 평균값을 구하는 질의어

group by 절을 사용할 때,

group by 절에 나온 속성과 집계함수만이 select 절에 나올 수 있음

having 절

Select deptName, avg(salary)
from professor
group by deptName
having avg(salary) > 6900;

group by 절 결과로 생성된 그룹에 대하여 임의 조건을 명시하는 데 사용

where 절은 조건을 만족하는 터플이 다음 단계로 이관, having 절은 조건을 만족하는 그룹이 다음 단계로 이관

where 절과 having 절이 동시에 select 문장에 존재하면 where 절 조건이 먼저 적용되고 생성된 그룹에 대하여 having 절 조건이 적용

Select dname, count(*)
from department, employee
where dnumber=dno and salary>4000 and
dno in (select dno from employee
				group by dno
				having count(*)>5)
group by dname;

5명 이상의 종업원을 가진 부서에서 4만 불 초과 소득을 가진 종업원 수를 구하는 SQL

하지만, 만약 10명의 종업원을 가진 부서에서 4만 불 초과 소득인 사람이 없다면 <관리처, 0>이 나와야 하나 where절에서 그룹이 생성되지 않기 때문에 원하는 결과가 나오지 않음

널 값과 집계함수

집계함수는 기본적으로 널 값 무시

모든 값이 널 값이면 count 함수는 0 반환, 나머지 집계함수는 null 반환

avg 함수는 null 값을 무시하므로 평균을 구할 때 null을 빼고 나눔

null 값이 포함된 속성으로 그룹을 만들면 널 값은 하나의 값으로 취급함

Select hourWage, count(*)
from mytable
group by hourWage;

ex) <5000, 1>, <6000, 1>, <null, 2>

 


2. 조인 테이블

크게 내부 조인과 외부 조인이 존재

외부 조인

값 매치가 되지 않아 손실되는 정보를 유지

조인 연산에서 제외된 터플을 널 값을 이용하여 결과 테이블에 첨가

조인 조건

자연적인 방법

조인 조건을 명시하는 방법

자연 조인에 사용되는 속성을 명시하는 방법

조인 예제

 

myCourse inner join myPrereq on myCourse.cID = myPrereq.cID

inner 생략 가능

자연조인이 아닌 일반 조인은 모든 속성이 결과 테이블에 나옴

 

myCourse left outer join myPrereq on myCourse.cID, myPrereq.cID

외부 조인의 경우에 매치되지 않은 터플의 추가로 인하여 조인 속성은 중복되어 나오나 속성 값은 서로 다름

 

myCourse natural right outer join myPrereq

myCourse natural full outer join myPrereq

자연 조인의 경우 공통으로 존재하는 속성이 조인 속성이며,

조인 속성은 한번 결과 테이블에 나옴

 

myCourse left outer join myPrereq using(cID)

using 표현은 natural 키워드가 없어도 자연 조인을 생성

728x90
반응형