2021년 11월 14일 일요일

오라클 셀프조인(Oracle Self Join)

 오라클 셀프조인(Oracle Self Join)

이름그대로 자기자신 테이블과 조인을 하는 것을 말합니다. 원래 조인이 둘이상의 테이블에 대해 연관된 행들을 조인 컬럼을 기준으로 비교하여 새로운 행 집합을 만드는 것인데 연관된 테이블이 같은 테이블인 경우를 셀프조인(Self Join) 이라고 합니다. 셀프조인 역시 내부조인(Inner Join)의 한 종류 입니다.

한 개의 테이블을 두 개의 별도의 테이블처럼 이용하여 서로 조인 하는 형태인데 원하는 데이터들이 한 테이블에 있는 경우, 테이블의 각행이 다른 행의 값과 결합되어 있는 경우에 사용하며 같은 테이블을 두번 사용하므로 테이블 별칭을 반드시 사용해야 하는 조인 입니다.

한 테이블의 외래키 컬럼이 자기 자신테이블의 주키(Primary Key)를 참조하는 경우 이용하게 되는데, 사원(EMP) 테이블에서 MGR 컬럼은 관리자 컬럼이고 외래키(Foreign Key)로써 관리자도 사원이므로 자기자신 테이블 EMP의 사번(EMPNO, Primary Key) 컬럼을 참조 합니다.

EMP 테이블에서 사원 이름과, 관리자 이름을 같이 출력하는 경우 MGR 컬럼 값을 자기 자신 테이블의 사번(empno)과 조인을 해야 이름을 알수 있습니다. 이와같이 보통 한 행(ROW)에 두개의 레코드 정보를 보여 주고자 할 때 유용합니다.

EMP 테이블에서 사번, 이름, 관리자 이름을 출력합니다. 관리자도 사원으로 EMP 테이블에 존재하여 사번(empno)를 가집니다. (KING 사원은 최고관리자로 mgr 컬럼이 NULL 이므로 조인 조건에 맞지 않아 출력되지 않습니다. 이러한 값도 출력을 원한다면 뒤에서 배우는 Outer Join을 사용해야 합니다.)

SELECT 사원.empno

, 사원.ename

, 관리자.ename

FROM emp "사원", emp "관리자"

WHERE 사원.mgr = 관리자.empno

SELECT 사원.empno

, 사원.ename

, 관리자.ename

FROM emp "사원" INNER JOIN emp "관리자"

ON 사원.mgr = 관리자.empno

<실행결과>

empno

ename

ename_1

7902

FORD

JONES

7788

SCOTT

JONES

7844

TURNER

BLAKE

7499

ALLEN

BLAKE

7521

WARD

BLAKE

7900

JAMES

BLAKE

7654

MARTIN

BLAKE

7934

MILLER

CLARK

7876

ADAMS

SCOTT

7698

BLAKE

KING

7566

JONES

KING

7782

CLARK

KING

7369

SMITH

FORD

[동영상]오라클 외부조인(Outer Join) 이란?

 [동영상]오라클 외부조인(Outer Join) 이란?


일반적인 조인(내부조인)은 두 테이블 모두 조인 조건을 만족시키는 레코드만 출력된다. 즉 두 테이블중 한쪽 테이블의 값이 일치하지 않는 다면 해당 레코드는 출력되지 않는데 이 경우에도 결과로 출력해야 되는 경우가 있다면 외부조인(Outer Join)을 사용하면 된다. 외부조인은 LEFT OUTER JOIN, RIGTH OUTER JOIN, FULL OUTER JOIN이 있다.

EMP, DEPT를 조인하여 사원명(ename)과 부서명(dname)을 출력한다고 했을 때 EMP 테이블의 KING은 최고관리자로 부서코드가 NULL 값이다. 이 경우 emp.deptno = dept.deptno 로 조인을 한다면 KING은 출력되지 않는다.

https://youtu.be/nlykFygv2V4

[동영상]오라클 12C 행제한구문(Row Limiting Clause) 실습

[동영상]오라클 12C 행제한구문(Row Limiting Clause) 실습

댓글 0

[PL]SQL

2021. 11. 14.

[동영상]오라클 12C 행제한구문(Row Limiting Clause) 실습

 
 
 
 

ORACLE 12C Row Limiting Clause 간단 실습 급여상위 N개 쿼리 급여상위 N Percent(%) 쿼리 간단한 페이징 쿼리

오라클 12.1 이상에서는 행을 제한하는 구문을 제공하는데 이를 통해 기존 MySQL의 top-N 쿼리, 페이징 쿼리 등을 쉽게 할 수 있다. 예제를 통해 살펴보자.

- -----------------------------------------------------------------------------------------------------------

--ORACLE 12C Row Limiting Clause 실습

-- 오라클 12.1 이상에서는 행을 제한하는 구문을 제공하는데 이를 통해 기존 MySQL의 top-N 쿼리,

-- 페이징 쿼리 등을 쉽게 할 수 있다. 예제를 통해 살펴보자.

-----------------------------------------------------------------------------------------------------------

-- EMP 테이블은 14건의 데이터가 있다.

-- 사원명 및 급여를 확인하자.

SELECT ename, sal FROM emp ORDER BY SAL DESC;

-- 급여 상위 6명(중복되는 급여가 있더라도 무조건 6개 자름)

SELECT ename, sal

FROM emp

ORDER BY sal DESC

FETCH FIRST 6 ROWS ONLY;

-- 급여 상위 6명, 중복되는 급여가 있으면 모두 SELECT 한다.

SELECT ename, sal

FROM emp

ORDER BY sal DESC

FETCH FIRST 6 ROWS WITH TIES;

-- 급여 상위40%, 중복되는 급여가 있더라도 무조건 40% 기준으로 자른다.

SELECT ename, sal

FROM emp

ORDER BY sal DESC

FETCH FIRST 40 PERCENT ROWS ONLY;

-- 급여 상위40%, 중복되는 급여가 있으면 모두 SELECT 한다.

SELECT ename, sal

FROM emp

ORDER BY sal DESC

FETCH FIRST 40 PERCENT ROWS WITH TIES;

-- OFFSET을 이용하여 페이징 처리

-- 급여 내림차순으로 한페이지에 3개씩 3번째 페이지

-- 6개를 스킵하고 다음 3개 레코드 추출

SELECT ename, sal

FROM emp

ORDER BY sal DESC

OFFSET 6 ROWS FETCH NEXT 3 ROWS ONLY;

-- OFFSET을 이용하여 페이징 처리

-- 6개를 스킵하고 남은 레코드의 100% 추출

SELECT ename, sal

FROM emp

ORDER BY sal DESC

OFFSET 6 ROWS FETCH NEXT 50 PERCENT ROWS ONLY; --percent는 전체14건에서의 퍼센트

https://www.youtube.com/watch?v=HT3EltCwgmw&list=PLxU-iZCqT52Dlz0zGgFiq1mBz21arFUHS&index=12

 

오라클ROWID(ORACLE ROWID)

오라클ROWID(ORACLE ROWID)

오라클 ROWID란?

- 간단한 이론 및 예문

 

https://www.youtube.com/watch?v=Jf_HnpbSd4g&list=PLxU-iZCqT52Dlz0zGgFiq1mBz21arFUHS&index=2&t=1s 

 

#ROWID#ORACLEROWID#오라클ROWID#ORACLE#오라클

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...