ORACLE 05. SELECT_ 서브쿼리(SUBQUERY)_ 상관 서브쿼리
2022. 11. 21. 17:33
ORACLE
일반적인 서브쿼리 방식은 서브쿼리가 만들어낸 고정된 결과값을 메인쿼리가 가져다가 사용하는 구조이나 상관서브쿼리는 반대로 메인 쿼리의 테이블값을 가져다가 서브쿼리에서 이용해서 결과를 만듦 예시1) 본인의 직급별 평균 급여보다 더 많이 받는 직원의 이름, 직급코드, 급여 조회 SELECT E.EMP_NAME,E.JOB_CODE,E.SALARY FROM EMPLOYEE E WHERE SALARY > (SELECT AVG(SALARY) FROM EMPLOYEE WHERE JOB_CODE =E.JOB_CODE); 예시2) 보너스가 본인 부서의 평균 보너스보다 많은 사람들의 이름, 부서코드,급여, 보너스 조회 SELECT EMP_NAME,E.DEPT_CODE,BONUS FROM EMPLOYEE E WHERE BON..
ORACLE 05. SELECT_ 서브쿼리(SUBQUERY)_ 인라인뷰
2022. 11. 18. 16:11
ORACLE
1. 인라인뷰(INLINE-VIEW) FROM절에 서브쿼리를 작성하는 것 서브쿼리를 수행한 결과를 마치 하나의 테이블처럼 사용 >> ✅인라인뷰를 주로 사용하는 경우 TOP-N 분석( 전체 데이터 중 일부 데이터 조회할 때) 예시1) 사원들중 급여가 가장 높은 상위 5명만 조회 SELECT ROWNUM, E.* FROM (SELECT EMP_NAME, SALARY, DEPT_CODE FROM EMPLOYEE ORDER BY SALARY DESC) E --테이블에 별칭 부여 WHERE ROWNUM ROWNUM : 오라클에서 제공해주는 컬럼, 조회된 순서대로 1부터 순번을 부여해주는 컬럼 예시2) 각 부서별 평균 급여가 가장 높은 부서 상위 3개의 부서 SELECT DEPT_CODE , FLOOR(평균급여) ..
ORACLE 05. SELECT_ 서브쿼리(SUBQUERY)
2022. 11. 18. 15:48
ORACLE
서브쿼리(SUBQUERY) - 하나의 SQL문 안에 포함된 또 다른 SELECT문 - 메인 SQL문을 보조역할 하는 쿼리문 - 비교연산자의 오른쪽에 기술해야하며, 반드시 괄호로 묶어야함 - 서브쿼리와 비교할 항목은 반드시 서브쿼리의 SELECT한 항목의 개수와 자료형을 일치시켜야함 서브쿼리의 구분 서브쿼리 수행 결과값이 몇행, 몇열이냐에 따라서 분류됨 - 단일행[단일열] 서브쿼리 : 서브쿼리의 조회 결과값이 오로지 1개일 때 (1행1열) - 다중행[단일열] 서브쿼리 : 서브쿼리의 조회 결과값이 여러행일 때 (여러행 1열(컬럼1개)) -[단일행] 다중열 서브쿼리 : 서브쿼리의 조회 결과값이 한행이지만 컬럼이 여러개일 때 (한행, 여러열) - 다중행 다중열 서브쿼리 : 서브쿼리의 조회 결과값이 여러행 여러컬..
ORACLE 04. SELECT_ JOIN _다중조인
2022. 11. 17. 21:09
ORACLE
하나 이상의 테이블에서 데이터를 조회하기 위해 사용하고 수행결과는 하나의 Result set으로 나옴 예시 1) 사번, 사원명, 부서명, 직급명 조회 >> 오라클 전용구문 SELECT EMP_ID, EMP_NAME, DEPT_TITLE, JOB_NAME FROM EMPLOYEE E, DEPARTMENT D, JOB J WHERE DEPT_CODE = DEPT_ID(+) -- 포괄조인 AND E.JOB_CODE = J.JOB_CODE; >> ANSI구문 SELECT EMP_ID, EMP_NAME, DEPT_TITLE, JOB_NAME FROM EMPLOYEE E LEFT JOIN DEPARTMENT ON (DEPT_CODE= DEPT_ID) JOIN JOB USING (JOB_CODE); ..
ORACLE 04. SELECT_ JOIN _비등가 조인/ 자체조인/카테시안곱
2022. 11. 17. 21:03
ORACLE
1. 비등가 조인 (NON EQUAL JOIN) 매칭시킬 컬럼에 대한 조건 작성시 '=' 등호 사용하지 않음 ANSI구문으로 JOIN ON 구문으로만 가능 >>오라클 구문 SELECT EMP_NAME, SALARY,SAL_LEVEL FROM EMPLOYEE,SAL_GRADE --WHERE SALARY>= MIN_SAL AND SALARY
ORACLE 04. SELECT_ JOIN _외부조인
2022. 11. 17. 18:41
ORACLE
- 포괄조인 / 외부조인 (OUTER JOIN) 두 테이블간의 JOIN시 일치하지 않는 행도 포함시켜서 조회하고자 할 때 단, 반드시 LEFT/RIGHT 지정해야함 (기준이 되는 테이블 지정) 1) LEFT [OUTER] JOIN 두 테이블 중 왼편에 기술된 테이블을 기준으로 JOIN (왼편에 있는 테이블(FROM절에 기술된)에 있는 데이터는 일치하는게 없더라도 조회되도록) >> ANSI 구문 : EMPLOYEE테이블을 기준으로 해서 모든사원은 무조건 나오게끔 조회 SELECT EMP_NAME, DEPT_TITLE, SALARY, SALARY*12 FROM EMPLOYEE LEFT /*OUTER*/ JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID); >> 오라클 전용구문 : 기준으..
ORACLE 실습문제 SELECT_ JOIN _ 내부조인
2022. 11. 17. 18:35
ORACLE/ORACLE 실습문제
1. 부서가 인사관리부인 사원들의 사번, 이름 ,보너스 조회 >>오라클전용구문 SELECT EMP_ID,EMP_NAME,BONUS FROM EMPLOYEE , DEPARTMENT WHERE DEPT_CODE = DEPT_ID AND DEPT_TITLE = '인사관리부'; >>ANSI구문 SELECT EMP_ID, EMP_NAME,BONUS FROM EMPLOYEE JOIN DEPARTMENT ON (DEPT_CODE= DEPT_ID) WHERE DEPT_TITLE = '인사관리부'; --------------------------------- SELECT EMP_ID, EMP_NAME,BONUS FROM EMPLOYEE JOIN DEPARTMENT ON (DEPT_CODE= DEPT_ID AND DEPT..
ORACLE 04. SELECT_ JOIN _ 내부조인
2022. 11. 17. 18:30
ORACLE
하나 이상의 테이블에서 데이터를 조회하기 위해 사용되고 수행결과는 하나의 Result Set으로 나옴 관계형 데이터베이스는 최소한의 데이터로 각각의 테이블에 담고 있음( 중복을 최소화 하기 위해 최대한 쪼개서 관리함) => 관계형 데이터베이스에서 SQL문을 이용한 테이블간 "관계"를 맺는 방법 오라클 전용 구문 ANSI구문 등가조인 (EQUAL JOIN) 내부조인(INNER JOIN) => JOIN USING/ ON 자연조인(NATURAL JOIN) => JOIN USING 포괄조인 (LEFT OUTER) (RIGHT OUTER) 왼쪽 외부조인(LEFT OUTER JOIN) 오른쪽 외부조인(RIGHT OUTER JOIN) 전체 외부조인(FULL OUTER JOIN) 자체조인(SELF JOIN) 비등가조인..
ORACLE 03. SELECT _ 집계함수 , 집합연산자
2022. 11. 17. 18:13
ORACLE
그룹별 산출된 결과 값에 중간집계를 계산해주는 함수 - ROLLUP(컬럼1, 컬럼2) : 컬럼1을 가지고 중간집계 내주는 함수 -> GROUP BY 절에 기술하는 함수 SELECT DEPT_CODE, JOB_CODE , SUM(SALARY) FROM EMPLOYEE GROUP BY ROLLUP(DEPT_CODE, JOB_CODE) ORDER BY DEPT_CODE; >> DEPT_CODE 기준으로 SALARY의 중간 소계를 내줌 - CUBE (컬럼1, 컬럼2) : 컬럼1을 가지고 중간집계 내고 추가로 컬럼2를 가지고도 중간집계를 냄 -> GROUP BY 절에 기술하는 함수 SELECT DEPT_CODE, JOB_CODE , SUM(SALARY) FROM EMPLOYEE GROUP BY CUBE(DEPT_..
ORACLE 03. SELECT _ HAVING절
2022. 11. 16. 22:56
ORACLE
그룹에 대한 조건을 제시할 때 사용되는 구문 (주로 그룹함수식을 가지고 조건을 제시함) - 각 부서별 평균급여 SELECT DEPT_CODE,ROUND( AVG(SALARY)) FROM EMPLOYEE GROUP BY DEPT_CODE; -부서별 평균 급여가 300만원 이상인 부서만을 조회 SELECT DEPT_CODE,ROUND(AVG(SALARY)) FROM EMPLOYEE GROUP BY DEPT_CODE HAVING AVG(SALARY)>=3000000; -부서가 D1 또는 D9인 부서만을 조회 SELECT DEPT_CODE,ROUND(AVG(SALARY)) FROM EMPLOYEE GROUP BY DEPT_CODE HAVING DEPT_CODE IN ('D1','D9');..