📚Study Note (118) 썸네일형 리스트형 [ 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, J.. [ ORACLE ] JOIN - UNION UNION ALL INTERSECT MINUS SELECT USER FROM DUAL; --==>> SCOTT -- ■■■ UNION / UNION ALL ■■■■ -- ● 실습 테이블 생성(TBL_JUMUN) CREATE TABLE TBL_JUMUN -- 주문번호, 주문된제품코드, 주문수량, 주문일자 ( JUNO NUMBER , JECODE VARCHAR2(30) , JUSU NUMBER , JUDAY DATE DEFAULT SYSDATE ); --Table TBL_JUMUN이(가) 생성되었습니다. --> 고객의 주문이 발생했을 경우 주문내용에 대한 데이터가 입력될 수 있는 테이블 -- ● 데이터 입력 → 고객의 주문 발생/ 접수 INSERT INTO TBL_JUMUN VALUES (1, '쫀득초코칩', 20, TO_DATE('2001-11-01 .. [ ORACLE ] 92, 99 코드를 활용한 세 개 이상의 테이블 JOIN SELECT USER FROM DUAL; -- ● 세 개 이상의 테이블 조인(join) -- 형식 1(SQL 1992 CODE) -- 형식 2(SQL 1999 CODE) -- 형식 1(SQL 1992 CODE) SELECT A.컬럼명, B.컬럼명, C.컬럼명 FROM A,B,C WHERE A.컬럼명1 = B.컬럼명1 AND B.컬럼명2 = C.컬럼명2; -- 형식 2(SQL 1999 CODE) SELECT A.컬럼명, B.컬럼명, C.컬럼명 FROM A JOIN B ON A.컬럼명1 = B.컬럼명1 JOIN C ON B.컬럼명2 = C.컬럼명2; -- ● HR계정 소유의 테이블 또는 뷰 목록 조회 SELECT * FROM TAB; /* COUNTRIES TABLE DEPARTMENTS TABLE EMPL.. [ ORACLE ] JOIN(조인) Equi join Non Equi join CROSS/INNER/OUTER JOIN 부모자식테이블 SELF JOIN --------------------------------------------------------------------------- --■■■ JOIN(조인) ■■■ --관계형 데이터베이스에서 큰테이블은 바람직하지않다. --나누고분리한테이블 원래형태로보이게하려면 결합필요 그게조인이다 -- ●1. SQL 1992 CODE -- ●2. SQL 1999 CODE (92년 99년 으로 표준된 코드 두 개로 나뉜다. 실무에서는 둘다쓰인다) -- ●1. SQL 1992 CODE SELECT * FROM EMP,DEPT; --> 수학에서 말하는 데카르트 곱(CATERSIAN PRODUCT) -- 두 테이블을 합친(결합한) 모든 경우의 수 -- ●Equi join : 서로 정확히 일치하는 데이터들끼리 연결시키는 결.. [ ORACLE ] ROW_NUMBER() SEQUENCE -----■■■ ROW_NUMBER() ■■■■ SELECT ENAME "사원명", SAL "급여", HIREDATE "입사일" FROM EMP; /* SMITH800 1980-12-17 ALLEN16001981-02-20 WARD12501981-02-22 JONES29751981-04-02 MARTIN12501981-09-28 BLAKE28501981-05-01 CLARK24501981-06-09 SCOTT30001987-07-13 KING50001981-11-17 TURNER15001981-09-08 ADAMS11001987-07-13 JAMES950 1981-12-03 FORD30001981-12-03 MILLER13001982-01-23*/ SELECT ROW_NUMBER() OVER (ORDER.. [ ORACLE ] 중첩 그룹함수 / 분석 함수 서브상관쿼리 --■■■ 중첩 그룹함수 / 분석 함수 ■■■ -- 그룹 함수 2 LEVEL 까지 중첩해서 사용할 수 있다. -- 이마저도 MS-SQL 은 불가능하다. SELECT MAX(SUM(SAL)) FROM EMP GROUP BY DEPTNO; --===>> 10875 -- RANK() -- DENS_RANK() -- > 이 함수는요 함수 안에서 정렬기능 포함 리소스소모심함 -- 그런데 함수가 생긴지 얼마 안됨. ORCLA 9i 부터 적용되었고 -- MSSQL 2005 부터 적용... -- ※ 하위 버전에서는 RANK() 나 DENSE_RANK() 를 사용할 수 없기 때문에 -- 이를 대체하여 연산을 수행할 수 있는 방법을 강구해야 한다. -- 예를 들어, 급여의 순위를 구하고자 한다면... SELECT ENAM.. [ ORACLE ] HAVING 절 -- ■■■ HAVING ■■■-- -- ● EMP 테이블에서 부서번호가 20, 30 인 부서를 대상으로 -- 부서의 총 급여가 10000보다 적을 경우만 부서별 총 급여를 조회한다. SELECT DEPTNO, SUM(SAL) FROM EMP WHERE DEPTNO IN (20,30) GROUP BY DEPTNO; /* 309400 2010875 */ SELECT DEPTNO, SUM(SAL) FROM EMP WHERE DEPTNO IN (20,30) AND SUM(SAL) < 10000 GROUP BY DEPTNO; /* ORA-00934: group function is not allowed here 00934. 00000 - "group function is not allowed here" *Cau.. [ORACLE ] ROLLUP() CUBE() GROUPING SETS() SELECT USER FROM DUAL; --==>>SCOTT SELECT CASE GROUPING(DEPTNO) WHEN 0 THEN TO_CHAR(DEPTNO) ELSE '모든부서' END "부서번호" , SUM(SAL) "급여합" FROM TBL_EMP GROUP BY ROLLUP(DEPTNO); /* 10 8750 20 10875 30 9400 (널) 8000 모든부서37025*/ SELECT CASE GROUPING(DEPTNO) WHEN 0 THEN NVL(TO_CHAR(DEPTNO),'인턴') ELSE '모든부서' END "부서번호" , SUM(SAL) "급여합" FROM TBL_EMP GROUP BY ROLLUP(DEPTNO); /* 10 8750 20 10875 30 9400 인턴 800.. 이전 1 ··· 4 5 6 7 8 9 10 ··· 15 다음