본문 바로가기

📚Study Note/ORACLE

[ ORACLE ] INTERSECT 교집합쿼리에 해당하는 부분을 원본쿼리에서 찾기 서브상관쿼리 JOIN 활용... ??

 

 

-- 주문백업 테이블과 주문 테이블에서 
-- 제품코드와 주문량의 값이 똑같은 행의 정보를
-- 주문번호,제품코드, 주문수량, 주문일자 항목으로 조회한다.

 

 

주문번호 1번부터 10 번까지와 938765 번에서 938776 번까지의 교집합 INTERSECT 결과는

이러하다. 이 5개 행의 제품코드와 주문수량이 위에 있는 원본쿼리와 일치하는 것을 찾는 코드

 

🟪 첫 번째 방법

 

SELECT T2.JUNO "주문번호", T1.JECODE "제품코드", T1.JUSU "주문수량", T2.JUDAY "주문일자"
FROM
(
    SELECT JECODE, JUSU
    FROM TBL_JUMUNBACKUP
    INTERSECT
    SELECT JECODE, JUSU
    FROM TBL_JUMUN
        
)T1
JOIN
(
    SELECT JUNO, JECODE, JUSU, JUDAY
    FROM TBL_JUMUNBACKUP
    UNION ALL
    SELECT JUNO, JECODE, JUSU, JUDAY
    FROM TBL_JUMUN
)T2
ON T1.JECODE = T2.JECODE
AND T1.JUSU = T2.JUSU;



--결과

/*
2		와클	10	01/11/01
3		꼬북칩	30	01/11/01
5		홈런볼	50	01/11/03
8		포카칩	40	01/11/13
10		칸쵸	20	01/11/20
938767	와클	10	21/04/01
938768	홈런볼	50	21/04/01
938769	꼬북칩	30	21/04/01
938772	포카칩	40	21/04/01
938774	칸쵸	20	21/04/01
*/

둘을 제품코드와 주문수량이 같음을 기준으로 INNER JOIN 해서 결과를 구한다. 

코드블럭이 요롷게 줄이 참 안맞는다 왜이리 말을안듣니

 

 

🟪 두 번째 방법

두 번째 방법은 제품코드와 주문수량을 CONCAT으로 연결지어 구하는 방법이다. 

SELECT *

FROM
(
    SELECT JUNO, JECODE, JUSU, JUDAY
    FROM TBL_JUMUNBACKUP
    UNION ALL
    SELECT JUNO, JECODE, JUSU, JUDAY
    FROM TBL_JUMUN
)T
--WHERE JECODE IN ('와클','꼬북칩','홈런볼','포카칩','칸쵸') AND JUSU IN (10,30,50,40,20);
--WHERE JECODE||JUSU IN ('와클10','꼬북칩30', '홈런볼50', '포카칩40', '칸쵸20');
--WHERE CONCAT(JECODE,JUSU) IN ('와클10','꼬북칩30', '홈런볼50', '포카칩40', '칸쵸20');
WHERE CONCAT(JECODE,JUSU) = ANY ('와클10','꼬북칩30', '홈런볼50', '포카칩40', '칸쵸20');
/*
2	와클	10	2001-11-01
3	꼬북칩	30	2001-11-01
5	홈런볼	50	2001-11-03
8	포카칩	40	2001-11-13
10	칸쵸	20	2001-11-20
938767	와클	10	2021-04-01
938768	홈런볼	50	2021-04-01
938769	꼬북칩	30	2021-04-01
938772	포카칩	40	2021-04-01
938774	칸쵸	20	2021-04-01*/


SELECT CONCAT(JECODE,JUSU)
FROM TBL_JUMUNBACKUP
INTERSECT
SELECT CONCAT(JECODE, JUSU)
FROM TBL_JUMUN;
/* ★★★
꼬북칩30
와클10
칸쵸20
포카칩40
홈런볼50
*/


SELECT *

FROM
(
    SELECT JUNO, JECODE, JUSU, JUDAY
    FROM TBL_JUMUNBACKUP
    UNION ALL
    SELECT JUNO, JECODE, JUSU, JUDAY
    FROM TBL_JUMUN
)T
WHERE CONCAT(JECODE,JUSU) = ANY (   --★★★ 
                                    SELECT CONCAT(JECODE,JUSU)
                                    FROM TBL_JUMUNBACKUP
                                    INTERSECT
                                    SELECT CONCAT(JECODE, JUSU)
                                    FROM TBL_JUMUN       );
/*

2	와클	10	2001-11-01
3	꼬북칩	30	2001-11-01
5	홈런볼	50	2001-11-03
8	포카칩	40	2001-11-13
10	칸쵸	20	2001-11-20
938767	와클	10	2021-04-01
938768	홈런볼	50	2021-04-01
938769	꼬북칩	30	2021-04-01
938772	포카칩	40	2021-04-01
938774	칸쵸	20	2021-04-01

*/