본문 바로가기
프로그래밍 공부 정리/database

having, self join, outer join

by 메기사랑 2021. 11. 19.

having
==> group by절에 의해 나타난 결과에 대하여 조건식을 부여할 때 사용한다

select 칼럼, 집계함수,..
from 테이블이름(들)
where 조건식
group by 칼럼
having 조건식


count(*) ==> 모든 레코드의 수를 알려준다
count(컬럼이름) ==> 컬럼의 값이 null이 아닌 레코드의 수를 알려준다

select avg(salary) from emp;
전체레코드 개수를 나누기 하지 않고
null이 아닌 개수로 나누기 한다

**null인 경우에 특정한 값으로 변환 후에 출력
nvl(컬럼이름, 값)

**모든 사원의 이름과 급여를 출력(단, 급여가 null이면 0으로 출력)
select ename, nvl(salary,0) from emp;

select avg(salary) from emp;
select avg(nvl(salary,0)) from emp;

**self join
--> 동일한 테이블에서 어떤 칼럼이 자신의 다른 칼럼을 참조하는 경우에
self join을 이용한다

emp테이블의 경우 관리자번호인 mgr은 emp테이블의 eno를 참조하고 있다
만약 사원이름과 관리자이름을 출력해야하는 경우라면 self join을 이용해야 한다
self 조인을 하는 방법은 실제 물리적으로 테이블이 하나밖에 없으므로 그것을 각각
애칭을 주어 join식에 표현할 수 있다

select ~~
from 테이블이름 애칭1, 테이블이름 애칭2
where 조건식



**outer join
left outer join 왼쪽에 있는 테이블은 조건을 만족하지 않더라도 출력
right outer join 오른쪽에 있는 테이블은 조건을 만족하지 않더라도 출력

select ~~ from 테이블1 left(right) outer join 테이블2 on 조건식 (where 안씀)