본문 바로가기

database/oracle

oracle 복습

 

SELECT ename, dname, loc

FROM emp, dept

 

만약 이런 식을 진행하면 가능한 모든 경우가 나오기 때문에 48개가 나온다.

 

 

SELECT ename, dname, loc

FROM emp, dept

WHERE emp.deptno = dept.deptno

 

여기서 WHERE을 사용함으로써 원하는 row만 추릴 수 있다. (12줄로 줄여졌다.)

 

SELECT ename, dname, loc

FROM emp, dept

WHERE emp.deptno = dept.deptno

AND sal >= 2000

 

여기서 AND로 조건을 추가했다. 편집은 ED로 했다

 

 

 

SELECT ename, dname, loc
FROM emp
INNER JOIN dept ON emp.deptno=dept.deptno
WHERE sal >= 2000

 

 

 

SELECT ename, dname, loc
FROM emp
JOIN dept USING(deptno)
WHERE sal >= 2000

 

INNER JOIN은 기본모양이기 때문에 INNER가 생략 가능하다. 뒤에 참조하는 칼럼이 같기 때문에 USING 을 사용할 수 있다.

 

예제를 진행하기 전에 두가지 표를 미리 확인했다.

 

SELECT ename, sal FROM emp;

새 프롬포트 창) SELECT*FROM salgrade;

 

 

 

기존 코드

 

SELECT ename, sal, grade
FROM emp
JOIN salgrade ON sal BETWEEN losal AND hisal
ORDER BY ename ASC

 

 

상사를 확인하는 코드를 작성하기에 앞서 emp표를 확인했다.

SELECT empno, ename, mgr FROM emp;

 

좌측의 mgr과 우측의 empno가 같은 데이터를 매칭시키는 작업을 하려한다.

 

 

매칭된 결과이다. 이렇게 한 표에서 JOIN 하는 것을 SELF JOIN이라고 한다. 다만 이 결과의 행이 11개다.

KING의 mgr(직속상관 사원번호)가 없기 때문이다. 이때 OUTER JOIN을 사용해야한다.

 

e1 empno 오타 e2 empno가 맞습니다.

e2. empno

 

 

outer join 사용식

 

좌측의 

 

'database > oracle' 카테고리의 다른 글

11. oracle (LEAD, LAG)  (0) 2022.07.15
10. 서브쿼리(단일 행, 다중 행, 예제)  (0) 2022.07.15
oracle quiz  (0) 2022.07.14
9. oracle(JOIN)  (0) 2022.07.14
8. oracle (복수행 함수, GROUP BY, HAVING)  (0) 2022.07.14