본문 바로가기
Oracle

[Oracle] SYNTAX FOR SQL (Join / Join on / Natural Join / Inner join / non equi join / Self Join /etc..)

by moveho 2022. 10. 20.

오늘은 마지막으로 지금까지 블로그 글을 올렸던 ORACLE 에 대해 마무리 하려고 한다

 

SQL COMMANDS 한눈에 파악해보기

 

아래와 같이 SQL COMMANDS 에는 

 

DDL,  DML,  DCL,  TCL  이렇게 구성된다.

 

D - Definition 

M - Manipulate

C-  Control

TCL - Trasnaction Control

 

이렇게 보면 쉽다.

SQL COMMANDS

SQL Statements

마지막으로 정리할 Join 에 관한것들은 DML 의 일종 SELECT문을 다뤄보겠다.

 

JOIN

기본적으로 Join 이용하여 여러개의 테이블에서 데이터검색을 할수 있다.

 

SELECT  EmpNameFROM    EMPLOYEE AS E, DEPARTMENT AS D
WHERE E.DeptID = D.DeptID AND  D.DeptName LIKE 'Account%';

 

JOIN ON

조인을 FROM 구문에서 할 수 있다.

 

EX)  김태영교수, 김유석교수가 강의하는 과목을 수강하는 학생의 학번을 검색

select c.stu_no from enrol a join subject b on a.sub_no=b.sub_no
join student c on a.stu_no=c.stu_no
where b.sub_prof = '김태영' or b.sub_prof = '김유석';

실행결과

 

NATURAL JOIN

가장 쉽다고 생각한 Natural join 이다.

하지만 편한만큼 주의해야할 점이 있다!!

  • 반드시 두 테이블 간의 동일한 이름, 타입을 가진 컬럼이 필요하다.
  • 조인에 이용되는 컬럼은 명시하지 않아도 자동으로 조인해 사용된다.
  • 동일한 이름을 갖는 컬럼이 있지만 데이터 타입이 다르면 에러가 발생한다.
  • 조인하는 테이블 간의 동일 컬럼이 SELECT절에 기술되도 테이블 이름을 생략해야 한다.
  • 동일한 칼럼을 내부적으로 찾게 되므로 테이블 별칭(Alias)을 주면 오류가 발생한다. 

 

EX) 사원번호, 사원이름, 부서이름, 지역 (accounting부서 or 시카고지역) 검색

SELECT EMPNO, ENAME, DENAME, LOC FROM EMP NATURAL JOIN DEPT
WHERE DENAME = 'ACCOUNTING' OR LOC = 'CHICAGO';

실행결과

INNER JOIN (Equi - join)

따로 조인구문을 사용하여 두 테이블을 조인 할 수 있다.

 

EX) 김인중 학생이 수강하는 과목이름과 강의교수를 검색

select sub_name,sub_prof, stu_name from student T 
inner join enrol E on T.stu_no = E.stu_no inner join subject B on E.sub_no = B.sub_no
where stu_name = '김인중';

실행결과

NON - EQUI JOIN

조건에 비교연산자를 사용해서 JOIN 하는 특징을 갖는다.

> , < , >=, <=   

EX) 사원번호, 사원이름, 급여, 급여등급 (급여등급별 사원번호순) 검색

SELECT EMPNO, ENAME, SAL, GRADE FROM EMP, SALGRADE
WHERE SAL BETWEEN LOSAL AND HISAL ORDER BY GRADE, EMPNO;

실행결과

SELF JOIN

말그대로 SELF 테이블이 자신의 테이블과 조인 하는것이다.

 

하나의 테이블을 여러번 복사해서 자기 자신과 조인한다고 생각하면 될 거 같다.

(자신이 가지고 있는 컬럼을 다양하게 변형 해서 사용 할 떄 주로 쓰인다)

 

EX) 사원번호, 사원이름, 상급자사원번호, 상급자이름 검색

SELECT A.EMPNO, A.ENAME, B.EMPNO, B.ENAME FROM EMP A, EMP B
WHERE A.MGR = B.EMPNO;

실행모습                                                                                                                     참조

 

 

 

이외에도 여러가지 SQL JOIN 구문이 있지만 이쯤에서 마무리 하도록 하겠다.

나머지 SQL JOIN 구문은 아래 구문정리 표를 참조!!

 

여러가지 SQL JOIN 구문 정리 표 참조!

 

!!!

댓글