6. DML - Select구문
Group Function
Group by
특정 컬럼을 기준으로, 각 값끼리 그룹을 짓는다.
group by를 이용해 그룹을 만들어 주면, select 절에선 그룹별 계산값을 보여주는 group function의 값이나,
그룹의 기준이 된 컬럼만 보여줄 수 있다. (row의 각 값을 보여줄순 없다.)
sum 각 그룹의 합계를 리턴
avg 각 그룹 값의 평균을 리턴
count 각 그룹의 row 갯수 세어서 리턴
max 각 그룹내 최대 값 리턴
min 각 그룹내 최소 값 리턴
*위의 function들은 null값을 아예 포함시키 않고 넘어간다.
having
그룹의 조건을 적어준다.
조건으로는 그룹을 나누는 컬럼에 값이나, 그룹 function으로 계산한 값 두가지 모두 사용할수 있다.
* 각 그룹은 그룹별 row로 리턴된다.
* row가 아니라 칼럼으로 그룹을 나눠주고 싶을경우에는 decode나 case 문을 이용해야한다.
Join
복수의 테이블을 연결해서 뷰를 만들어준다.
공통분모가 되는 컬럼은 where절에 정의해준다.
만약 여러 테이블의 같은 이름의 컬럼이 있다면, select 절에서 출력할 컬럼명 앞에 테이블명을 같이 적어줘야한다.
Equi join 복수의 테이블에서 공통되는 컬럼을 기준으로 뷰를 만든다.
Non equi join 한 테이블의 컬럼이 다른 테이블의 컬럼의 범위 안에 들어가도록 공통된 부분을 지정한다.
Self join 하나의 테이블의 두가지 컬럼을 이어서 뷰를 생성한다. (이때 보통 두 컬럼을 foreign키로 이어준다.)
Outer join 복수의 테이블에서 컬럼이 서로 대칭적이지 않을때, 한쪽에 null값이 있는 경우이다.
이때 널값이 없는 쪽(값이 더 많은측)에 (+)를 해주면 널을 포함한 전체 값을 보여준다.
Ansi join
표준 sql로 만든 join 공통분모가 되는 컬럼은 from절 뒤 on에 정의해준다.
inner join = equi join
outer join = outer join 이지만 (+)로 null이 없는 쪽을 표시하는것이 아니라,
right outer join, left outer join 형식으로 방향을 표시해준다.
양쪽을 모두 포함할 경우 full outer join도 있음.
Sub query
하나의 쿼리문 안에서 다른 쿼리문을 사용하는 경우. 이때 메인쿼리(아우터쿼리), 서브쿼리(이너쿼리)로 구분한다.
select절, from절, where절 어디서든 사용이 가능한데, 이때 서브쿼리의 반환값이 단일값(단일 row)이냐 복수값
(복수row)에 따라서 처리를 달리 해야 한다.
단일행(single row) 서브쿼리
서브쿼리의 반환값이 하나의 row인 경우이다.
대부분의 단순 연산자들로 처리가 가능하다.
복수행(Multiple row) 서브쿼리
서브쿼리의 반환값이 복수의 row인 경우.
이경우 서브쿼리의 반환값을 처리할 다중행 연산자들로 처리해줘야 한다.
in
all
any, some
exist
상관 서브쿼리
서브쿼리에서 메인쿼리의 값을 참조하는 경우를 말한다.
원래 서브쿼리는 먼저 처리되고 메인쿼리가 수행되는 반면,
상관 서브쿼리는 메인쿼리를 실행하면서 서브쿼리문는 메인쿼리의 값을 가지고 가서(참조해서)
반복적으로 실행된다.
메인쿼리에서 가져가는 값의 갯수만큼 서브쿼리가 반복 수행해서 결과를 반환한다.
where절에 메인쿼리와 서브쿼리의 상관 관계를 정의해줘야 한다.