다양한 관심 :)

SQL (JOIN) 본문

DataBase/Oracle

SQL (JOIN)

뚜뚜:) 2020. 9. 19. 18:36

JOIN

데이터결합 (JOIN)

WHERE + JOIN은 SELECT SQL의 모든 것 이라 할 수 있다 (그만큼 중요)

 

JOIN 은 다른 테이블과 연결하여 데이터를 확장하는 문법 (=컬럼을 확장)

** 행을 확장 - 집합연산자(UNION, INTERSECT, MINUS)

 

JOIN 문법 구분

  1. ANSI(미국 국립표준협회) - SQL

: RDBMS에서 사용하는 SQL표준

(표준을 잘 지킨 모든 RDBMS-MYSQL, MSSQL, POSTGRESQL...에서 실행가능)

2. ORACLE - SQL

: ORACLE사만의 고유문법 (직관적)

JOIN의 종류

NATURAL JOIN : 조인하고자 하는 테이블의 컬럼명이 같은 컬럼끼리 연결, 컬럼의 값이 같은 행들끼리 연결

예)

SELECT *

FROM emp e, dept d

WHERE e.deptno = d.deptno;

ANSI-SQL : SELECT 컬럼 FROM 테이블명 NATURAL JOIN 테이블명;

조인 컬럼에 테이블 한정자를 붙이면 NATURAL JOIN에서는 에러로 취급

                   emp.deptno (x) ==> deptno(o)

컬럼명이 한쪽 테이블에만 존재할 경우 테이블 한정자를 붙이지 않아도 상관없다.

                 emp.empno (O), empno (O)

표기방법

1. FROM절에 조인할 테이블을 나열한다(,)

2. WHERE절에 테이블 조인조건을 기술한다.

( 인라인뷰 별칭처럼, 테이블 별칭을 부여하는게 가능함, 컬럼과 다르게 AS키워드는 붙이지 않는다.)

 

 ANSI-SQL : JOIN WITH USING (참고만)

조인 하려는 테이블간 같은 이름의 컬럼이 2개 이상일 때, 하나의 컬럼으로만 조인을 하고싶을때 사용

     SELECT *

     FROM emp JOIN dept USING (deptno);

 SELECT *     FROM emp JOIN dept USING (deptno);

JOIN WITH ON - 조인조건을 개발자가 직접기술

(NATURAL JOIN, JOIN WITH USING )절을 JOIN WITH ON 절을 통해 표현가능

 

             

       SELECT * FROM emp JOIN dept ON (emp.deptno = dept.deptno) WHERE emp.deptno IN (20,30);
      SELECT * FROM emp , dept WHERE emp.deptno = dept.deptno AND deptno IN (20,30);

 

논리적 형태에 따른 조인 구분

 

1. SELF JOIN : 조인하는 테이블이 서로 같은 경우

 

예제) 직원의 상급자 정보 구하기     

	SELECT e.empno, e.ename, e.mgr, m.ename 
	FROM emp e JOIN emp m ON( e.mgr = m.empno)    

	SELECT e.empno, e.ename, e.mgr, m.ename          
	FROM emp e, emp m         
	WHERE e.mgr = m.empno;

2.NONEQUI JOIN : 조인 조건이 =이 아닌 조인 (between사용)

 

예제) emp테이블에서 empno가  7369인 사원 조회

		   SELECT * FROM emp WHERE emp.empno = 7369;

                              조인 조건이 =이 아닌 조인

  		SELECT * FROM emp, dept WHERE emp.empno = 7369 AND emp.deptno != dept.deptno;

 

oracle 문법

         SELECT empno,ename, sal, grade FROM emp, salgrade WHERE sal>=losal and sal<=hisal

         WHERE sal Between losal and hisal

	     SELECT empno,ename, sal, grade 
   	  	 FROM emp, salgrade 
    	 WHERE sal>=losal and sal<=hisal        
    	 WHERE sal Between losal and hisal

ANSI-SQL

           SELECT empno,ename, sal, grade

          FROM emp join salgrade on(sal>=losal and sal<=hisal)

		SELECT empno,ename, sal, grade         
		FROM emp join salgrade on(sal>=losal and sal<=hisal)

JOIN구분

1. 문법에 따른 구분 : ANSI-SQL, ORACLE

2. JOIN의 형태에 따른 구분 : S ELF-JOIN, NONEQUI-JOIN, CROSS-JOIN

3. JOIN의 성공여부에 따라 표시여부

: INNER JOIN - 조인이 성공했을 때 데이터를 표시

: OUTER JOIN - 조인이 실패해도 기준으로 정한 테이블의 컬럼정보는 표시

 

ORACLE - SQL : 데이터가 없는 쪽의 컬럼에 (+) 기호를 붙인자

ANSI-SQL : 테이블 반대편 테이블의 컬럼에 (+)을 붙인다.

(WHERE절 연결 조건에 적용)

 

*주의 ) 행에대한 제한조건 기술시 WHERE절에 기술 했을 때와 ON절에 기술 했을때 결과가 다르다.

데이터 결합 (full outer join) -사용x, 개념적으로만 알아두기

left와 right 중복데이터 제거 -> 집합의 개념

 

 

INNER join : 조인에 성공하는 데이터만 조회가 되는 조인방식 join 조건에 매칭되는 데이터만 조회

OUTER join : 조인에 실패해도 기준으로 정한 테이블의 컬럼은 조회가 되는 조인방식

CROSS join : 데이터 복제, 가공시 사용 JOIN조건을 기술하지 않는다.

'DataBase > Oracle' 카테고리의 다른 글

DBMS, 트랜잭션  (0) 2020.10.10
SQL 설치  (0) 2020.10.10
DATABASE - ORACLE (오라클) 설치  (0) 2020.10.10
ORACLE SQL (11g) - 설치시 테이블 생성, 사용자 추가, 권한  (0) 2020.10.10
SQL (계정,권한설정)  (0) 2020.09.19