Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 자바스크립트 prototype
- 깃허브
- 자바스크립트 기본 문법
- 보안뉴스한줄요약
- 파이썬
- javascript
- 보안뉴스 한줄요약
- 랜섬웨어
- 보안뉴스 요약
- 자바스크립트 객체
- 자바스크립트 node
- 카카오프로젝트
- python
- numpy
- 자바스크립트 element api
- oracle
- 카카오프로젝트 100
- php
- 다크웹
- 오라클
- ES6
- oracle db
- 보안뉴스
- 자바스크립트 jQuery
- 카카오프로젝트100
- 자바스크립트
- GIT
- 자바스크립트 API
- Oracle SQL
- 보안뉴스요약
Archives
- Today
- Total
FU11M00N
[ Oracle ] 조인(Join) (내부조인, 외부조인 , 교차조인) 본문
- 테이블 소개
위 사진의 구조를가진 테이블들을 대상으로 실습을 진행하겠습니다.
- 조인의 종류
- 교차조인(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 조인은 아래 그림과 같습니다.
위의 내용의 예제들 입니다.
-- 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;
'Programming > Oracle SQL' 카테고리의 다른 글
[ Oracle ] oracle DB HR스키마 시나리오 예제 (0) | 2021.03.30 |
---|---|
[ Oracle ] Oracle DB Self Join 예제 (0) | 2021.03.29 |
[ Oracle ] 집계함수(count,min,max,sum,avg) (0) | 2021.03.22 |
[ Oracle ] Oracle CTAS 기법으로 테이블 복사하기 (0) | 2021.03.15 |
[ Oracle ] Oracle sql case 문 예제 (0) | 2021.03.15 |
Comments