[ Oracle ] 집계함수(count,min,max,sum,avg) | 조인(Join) 종류

2021. 3. 22. 17:33·Archive/Develop
728x90
반응형

 

집계함수와 조인에 대해 알아보기 전에,

포스팅에 나오는 예제는 아래의 구조를 가진 테이블들이 사용됩니다.

 

 

 

 

 

emp 테이블은 위 그림과 같습니다.

 

위의 구조에서, dept 테이블에는 부서와 관련된 정보가 저장되어 있습니다.

 

 

집계함수(=복수행함수)

 

 

집계함수는 복수행함수입니다.

단일 행 단위로 실행시키는 것이 아닌 복수행단위로 실행시킵니다.

null 은 연산에서 열외시킵니다.

 

 

count

 

개수를 세는 함수입니다.

 

 

 

min

 

최소값을 알 수 있는 함수입니다.

숫자 뿐만 아니라 문자형도 연산 가능합니다.

 

 

 

max 

 

최대값을 알 수 있는 함수입니다.

숫자 뿐만 아니라 문자형도 연산 가능합니다.

 

 

 

 

avg 

 

값들의 평균을 알 수 있는 함수입니다.

숫자만 파라미터로 들어갈 수 있습니다.

 

 

 

 

sum

 

값들의 총 합을 알 수 있는 함수입니다.

숫자만 파라미터로 들어갈 수 있습니다.

 

 

 

count 는 전체 데이터단위로도 가능합니다.

 

이게 무슨 소리냐면,

다른 집계함수들은 파라미터로 컬럼명을 주는 반면 count 는 row 단위로 count 가 가능하다는 것입니다.

 

 

그렇기 때문에 count(*) 이런 식으로 해도 에러가 나지 않습니다.

 

 

 

 

조인의 종류

 

교차조인(cross join) = cartesian product

 

dept 안에 있는 데이터는 4개 입니다.

emp 안에 있는 데이터는 14개죠.

 

select d.deptno,dname,empno,ename,sal
from emp e, dept d;

 

 

 

위의 쿼리문과 같이 모든 데이터들을 조인해서 보여주는 것이 교차조인입니다.

 

 

내부조인(inner join) : theta, [non-]equi, natural

 

 

아래의 그림으로 설명 가능합니다.

A 와 B 의 교집합을 의미합니다.

 

 

 

 

 

--  부서별로 사원의 sal이 낮은 순으로 deptno,dname,empno,ename,sal출력

select d.deptno,d.dname,e.empno,e.ename,e.sal from dept d join emp e on d.deptno=e.deptno
order by 1 asc,5 asc;

 

 

dept 테이블과 emp 테이블을 조인하여 출력했습니다.

 

on 뒤에는 그 두 테이블의 관계를 적습니다.

 

일반적으로는 외래키나 프라이머리키를 적는데, 아닌 경우도 존재합니다.

 

외부조인(outer join) : [left | right | full] [outer] join

 

 

right 조인은 아래 그림과 같습니다.

 

left 조인은 아래 그림과 같습니다.

 

 

 

 

 

full 조인은 아래 그림과 같습니다.

 

 

 

 

 

셀프조인(self join)

 

 

 

 

 

오늘 포스팅에서 다뤘던 것들을 토대로 예제들을 많이 만들어봤습니다.

 

 

-- 3) 부서별로 사원의 sal이 낮은 순으로 deptno,dname,empno,ename,sal출력

select d.deptno,d.dname,e.empno,e.ename,e.sal from dept d join emp e on d.deptno=e.deptno
order by 1 asc,5 asc;

select d.deptno,dname,empno,ename,sal
from emp e, dept d;

-- 4) 부서별 사원은 몇명인지 empno,dname,부서별 인원수 출력

select e.deptno,dname, 
count(*) as "부서별 인원수"
from dept d join emp e on d.deptno=e.deptno
group by e.deptno,d.dname;

-- 4 upgrade
-- 부서별 사원은 몇명인지 deptno,dname, 부서별 인원수를 출력하되
-- 5명 이상인 부서만 부서별 인원수 높은 순으로 출력하라

select e.deptno,dname, 
count(*) as "부서별 인원수"
from dept d join emp e on d.deptno=e.deptno
group by e.deptno,d.dname
having count(*)>=5
order by 3 desc;

-- 4 upgrade!!
-- 부서별 사원은 몇명인지 20번 이상 부서만 deptno,dname, 부서별 인원수를 출력하되
-- 5명 이상인 부서만 부서별 인원수 높은 순으로 출력하라

select e.deptno,dname, 
count(*) as "부서별 인원수"
from dept d join emp e on d.deptno=e.deptno
where e.deptno >=20
group by e.deptno,d.dname
having count(*)>=5
order by 3 desc;
728x90
반응형

'Archive > Develop' 카테고리의 다른 글

Numpy 라이브러리 활용하기 (배열 연산)  (0) 2021.03.22
Numpy 라이브러리 활용하기 (숫자연산, 수학연산, 조건연산) | numpy 사인 코사인  (0) 2021.03.22
[ Django ] Django-environ 라이브러리를 활용한 SECRET_KEY 숨기기  (0) 2021.03.21
[ Git ] 파이참 Gitignore 설정하기 | Jetbrains gitignore  (0) 2021.03.20
[ Django ] 유용한 단축키들  (0) 2021.03.19
'Archive/Develop' 카테고리의 다른 글
  • Numpy 라이브러리 활용하기 (배열 연산)
  • Numpy 라이브러리 활용하기 (숫자연산, 수학연산, 조건연산) | numpy 사인 코사인
  • [ Django ] Django-environ 라이브러리를 활용한 SECRET_KEY 숨기기
  • [ Git ] 파이참 Gitignore 설정하기 | Jetbrains gitignore
코뮤(commu)
코뮤(commu)
코딩으로 커뮤니케이션하는 코뮤입니다 😎
  • 코뮤(commu)
    코뮤(COMMU)
    코뮤(commu)
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Archive
        • Hacking
        • Develop
        • ETC
      • Algorithm
      • DB&Infra
      • ETC
      • Node
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • IT지식보따리
    • IT가 맛있다
    • IT 천재
  • 공지사항

    • 배고픕니다
  • 인기 글

  • 태그

    파이썬 백준
    oracle db
    백준 문제풀이
    백준 풀이
    자바스크립트
    파이썬
    보안뉴스
    Oracle
    Codeup
    자바스크립트 API
    백준 파이썬
    docker
    코드업 기초
    코드업 파이썬 기초 100제
    Django
    장고
    자바스크립트 객체
    오라클
    javascript
    파이썬 문제
    코드업
    카카오 100일 프로젝트
    백준
    C++
    Git
    비박스
    파이썬 기초 문제
    파이썬 알고리즘
    Python
    파이썬 기초
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
코뮤(commu)
[ Oracle ] 집계함수(count,min,max,sum,avg) | 조인(Join) 종류
상단으로

티스토리툴바