질문1)
353 페이지에서요
그룹선택의 예제 1번 보시면
select 부서,avg(기본급)as평균
from 사원
group by 부서
order by 부서 asc
이렇게 코딩을 해야하잖아요
그런데 group by가 여기서 없어져도 상관없지않나요?
group by 의 용도를 잘모르겠습니다
그래서 having 절도 어떻게쓰는지 모르겠습니다.(where절과 다른게 뭐죠?)
설명해주세요ㅠㅠ
질문 2)
join에서
outer join의 용도를 아무리 읽어봐도 모르겠습니다.
이걸 왜 쓰는거죠?ㅠㅠ
질문 1)
select 부서,avg(기본급)as평균
from 사원
group by 부서
order by 부서 asc
위에서 "group by 부서" 를 빼버리면 부서로 오름차순해서 부서, 기본급이 나오겠죠
즉 사원이 10명이면
부서 기본급
부서A 100
부서B 90
... ...
이렇게 10건이 나오겠죠..(에러가 생길 겁니다. DBMS왈 groupy by를 써야 된다느니 아님 avg를 빼라느니 이러꿍저러궁..)
"group by 부서"를 넣어야 부서별로 평균을 내겠죠...
ex> 부서가 3개면
부서 기본급
부서A, avg(100, 110, 120)
부서B, avg(90, 100, 110)
부서C, avg(110, 120,130, 140) - 여긴 4명
위와 같이 출력이 되겠죠..
having은 group by의 where절이라고 생각하면 됩니다.
즉 위에서 "having avg(기본급) > 100"을 추가해주면 결과가 아래처럼 나오겠네요..(B부서는 평균이 100이라서 조건(having절)에 맞지 않음)
부서 기본급
부서A, avg(100, 110, 120)
부서C, avg(110, 120,130, 140)
만약 "where 기본급 > 100"을 추가하면 기본급이 100만원 넘는 사람들을 먼저 뽑아내고 그 다음 group by가 적용되어서(기본급 대신 avg(기본급)을 쓰면 에러가.....)
select 부서,avg(기본급)as평균
from 사원
where 기본급 > 100
group by 부서
having avg(기본급) > 100
부서A, avg(100, 110, 120)
부서B, avg(100, 110) - 90이 빠졌네요(where), 그리고 평균이 100이 넘어서 부서B 포함(having)
부서C, avg(110, 120,130, 140)
질문 2) outer join은 실무에서도 자주는 쓰지 않는데 기준이 되는 테이블의 내용을 모두 출력하고 싶을 때 씁니다.
학생테이블(학번, 이름, 전화번호)과 수강테이블(학번, 과목)을 생각해볼때 내부조인(일반조인)하면 휴학생, 졸업생은 결과에서 제외됩니다.(수강테이블은 과거수강내역은 없는 것으로 가정)
외부조인하게되면(학생 Left Outer Join 수강) 수강하지 않은 학생도(휴학생, 졸업생)도 결과에 포함이 되겠죠.
-
*2011-10-13 19:47:40
질문 1)
select 부서,avg(기본급)as평균
from 사원
group by 부서
order by 부서 asc
위에서 "group by 부서" 를 빼버리면 부서로 오름차순해서 부서, 기본급이 나오겠죠
즉 사원이 10명이면
부서 기본급
부서A 100
부서B 90
... ...
이렇게 10건이 나오겠죠..(에러가 생길 겁니다. DBMS왈 groupy by를 써야 된다느니 아님 avg를 빼라느니 이러꿍저러궁..)
"group by 부서"를 넣어야 부서별로 평균을 내겠죠...
ex> 부서가 3개면
부서 기본급
부서A, avg(100, 110, 120)
부서B, avg(90, 100, 110)
부서C, avg(110, 120,130, 140) - 여긴 4명
위와 같이 출력이 되겠죠..
having은 group by의 where절이라고 생각하면 됩니다.
즉 위에서 "having avg(기본급) > 100"을 추가해주면 결과가 아래처럼 나오겠네요..(B부서는 평균이 100이라서 조건(having절)에 맞지 않음)
부서 기본급
부서A, avg(100, 110, 120)
부서C, avg(110, 120,130, 140)
만약 "where 기본급 > 100"을 추가하면 기본급이 100만원 넘는 사람들을 먼저 뽑아내고 그 다음 group by가 적용되어서(기본급 대신 avg(기본급)을 쓰면 에러가.....)
select 부서,avg(기본급)as평균
from 사원
where 기본급 > 100
group by 부서
having avg(기본급) > 100
부서A, avg(100, 110, 120)
부서B, avg(100, 110) - 90이 빠졌네요(where), 그리고 평균이 100이 넘어서 부서B 포함(having)
부서C, avg(110, 120,130, 140)
질문 2) outer join은 실무에서도 자주는 쓰지 않는데 기준이 되는 테이블의 내용을 모두 출력하고 싶을 때 씁니다.
학생테이블(학번, 이름, 전화번호)과 수강테이블(학번, 과목)을 생각해볼때 내부조인(일반조인)하면 휴학생, 졸업생은 결과에서 제외됩니다.(수강테이블은 과거수강내역은 없는 것으로 가정)
외부조인하게되면(학생 Left Outer Join 수강) 수강하지 않은 학생도(휴학생, 졸업생)도 결과에 포함이 되겠죠.