1cm

자바 프로그래밍_Day_32_JOIN문(2), 서브쿼리(SUBQUERY) 본문

국비지원_Java/Java Programming_1

자바 프로그래밍_Day_32_JOIN문(2), 서브쿼리(SUBQUERY)

dev_1cm 2021. 10. 9. 17:25
반응형

 


2021. 10. 04

 

 

     > 교차 조인 (CROSS JOIN)

       -> 카테시안 곱(Cartesian Product) 라고도 하며, 조인되는 테이블의 각 행들이 모두 매핑된 데이터가 검색되는 조인 방법이다.

       -> 검색되는 데이터 수는 '행의 컬럼 수 * 또 다른 행의 컬럼 수'로 나온다

       -> 집합의 곱셈이라고 생각하면 된다.

좌) ANSI 구문 / 우) 오라클 구문

 

 

 

     > 비등가 조인(NON_EQUAL JOIN)

       -> 지정한 컬럼 값이 일치하는 경우가 아닌 값의 범위에 포함되는 행들을 연결하는 방식

       -> 등호를 사용하지 않는 모든 조인문 = 비등가 조인 : >, <, >=, <=, BETWEEN AND, IN, NOT IN 등을 사용한다.

좌) ANSI 구문 / 우) 오라클 구문

 

 

 

 

     > 자체조인 (SELF JOIN)

       -> 두 개 이상의 서로 다른 테이블을 연결하는 것이 아닌 같은 테이블을 조인하는 것

좌) ANSI 구문 / 우) 오라클 구문

       -> 같은 테이블에 두 개의 별칭을 사용하여 자체 조인(SELF JOIN)을 만들어 줄 수 있다.

 

 

     > 다중 JOIN

       -> 하나 이상의 테이블에서 데이터를 조회하기 위해 사용하고, 수행 결과는 하나의 Result Set으로 나옴

 

 

     > 다중 조인 실습문제

좌) 오라클 구문 / 우) ANSI 구문

 

       -> E.SALARY만 비등가 조인으로 가져와도 된다.

 

       -> NON_EQUAL_JOIN 활용

 

 

     > 종합 실습 문제

 

좌) 오라클 구문 / 우) ANSI 구문

 

좌) 오라클 구문 / 우) ANSI 구문

       -> SUBSTR (E.EMP_NO, 1, 1) = '7' 대신에 E.EMP_NO LIKE '7%'로도 사용이 가능하다.

       -> 주민등록번호에서 SUBSTR을 사용하여 값을 잘라온다.

 

 

좌) 오라클 구문 / 우) ANSI 구문

       -> 오라클 구문에서는 양쪽 다 (+)연산자를 붙여줄 수 없기 때문에 D.DEPT_ID, L.LOCAL_CODE에 (+)연산자를 붙여줌으로써 원하는 값을 출력할 수 있었다.

       -> ANSI 구문 : JOIN된 결과에 또 JOIN을 해주게 되는데, 그냥 JOIN만 쓰게 되면 INNER JOIN이 되므로 부서코드 없는 애들이 제외되어 출력된다. -> 그러므로 JOIN된 결과에 다시 OUTER JOIN을 만들어 줌으로써 부서 코드가 없는 사원도 출력이 될 수 있도록 만들어줘야 한다.

 

좌) 오라클 구문 / 우) ANSI 구문

 

좌) 오라클 구문 / 우) ANSI 구문

 

좌) 오라클 구문 / 우) ANSI 구문

 

좌) 오라클 구문 / 우) ANSI 구문

       -> 급여 등급(SAL_LEVEL)은 CASE문을 활용해 분류 해줄 수 있었다.

 

좌) 오라클 구문 / 우) ANSI 구문

 

 

좌) 오라클 구문 / 우) ANSI 구문

 

좌) 오라클 구문 / 우) ANSI 구문

 

좌) 오라클 구문 / 우) ANSI 구문

 

 

 

     > 서브쿼리 (SUBQUERY)

       -> SELECT 문장 안에 포함된 또 다른 SELECT 문장으로 메인 쿼리가 실행되기 전 한 번만 실행된다.

       -> 비교 연산자의 오른쪽에 기술해야 하며, 반드시 괄호로 묶어야 한다.

       -> 서브쿼리와 비교할 항목은 반드시 서브쿼리의 SELECT한 항목의 개수와 자료형이 일치해야 한다.

       -> WHERE절에서는 ORDER BY절을 쓸 수 없기 때문에 결과 값에서 ORDER BY 처리를 해줘야 한다.

 

 

     > 서브쿼리 (SUBQUERY) 유형

       -> 1. 단일행 서브쿼리 : 서브쿼리의 조회 결과 값의 1개인 서브쿼리

       -> 2. 다중행 서브쿼리 : 서브쿼리의 조회 결과 값의 행이 여러 개인 서브쿼리

       -> 3. 다중열 서브쿼리 : 서브쿼리의 조회 결과 컬럼의 개수가 여러 개인 서브쿼리

       -> 4. 다중행 다중열 서브쿼리 : 서브쿼리의 조회 결과 컬럼의 개수와 행의 개수가 여러 개인 서브쿼리

       -> 5. 상(호연)관 서브쿼리 : 서브쿼리가 만든 결과 값을 메인 쿼리가 비교 연산할 때, 메인 쿼리 테이블의 값이 변경되면 서브쿼리의 결과 값도 바뀌는 서브쿼리

       -> 6. 스칼라 서브쿼리 : 상(호연)관 서브쿼리이면서 결과 값이 1개인 서브쿼리(단일행)

 

 

     > 단일행 서브쿼리(Single-Row SubQuery)

       -> 서브쿼리의 조회 결과값의 개수가 1개일 때, 단일행 서브쿼리 앞에는 일반 연산자를 사용 (<, >, <=, >=, =, !=/<>/^= (서브쿼리))

 

 

       -> 1) 서브쿼리로 사용할 데이터1 조회 -> 2) 데이터 1이 가지고 있는 값을 동일하게 갖고 있는 데이터를 조회

 

 

       -> 3) DEPT_CODE(조회하고자 하는 조건)가 서브쿼리와 동일한(=) 데이터 조회

 

 

 

 

 

       -> WHERE SALARY < ROUND로 해도 정상적으로 조회가 가능하다.

반응형
Comments