목록Oracle Database (103)
hyeonga_code
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/oWJVS/btsoCjWK4UM/lRWKeVXQUd0mjBZoQM1kyk/img.jpg)
-- 서브쿼리에서의 널 값 -- IN 연산자를 사용할 경우 서브쿼리 결과 집합에 널 값이 존재해도 무관합니다. -- 부하직원이 없는 모든 사원을 표시하기 위한 다음 SQL문은 논리적으로 12개의 행을 반환해야합니다. SELECT last_name, manager_id FROM employees WHERE employee_id NOT IN (SELECT manager_id FROM employees); -- King 직원의 manger_id 가 null 값이므로 아무 데이터도 출력되지 않았습니다. -- 서브쿼리에 다음과 같은 WHERE 절을 포함시켜 부하 직원이 없는 모든 사원을 표시할 수 있습니다. -- 이 경우 NOT EXISTS 연산자로 대체될 수 있습니다. SELECT last_name, manag..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dydwg6/btsoyXNDVbi/lN4s8TtyOPk4p5axKGPf6k/img.jpg)
-- 다중 행 연산자 -- IN SELECT last_name, hire_date, department_id FROM employees WHERE hire_date IN ( SELECT MAX(hire_date) FROM employees GROUP BY department_id); /* LAST_NAME HIRE_DATE DP_ID ------------------------------------------------- De Haan 08/01/13 90 Lorentz 14/02/07 60 Mourgos 14/11/16 50 Zlotkey 15/01/29 80 Grant 14/05/24 ( null ) Whalen 02/09/17 10 Fay 12/08/17 20 Higgins 09/06/07 110 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cuKiU4/btsoCkhv3iB/rC9VoF5rYs0QnP1IXLnbB0/img.jpg)
-- HAVING 절에서 서브쿼리 사용 -- Oracle server는 서브쿼리를 먼저 실행합니다. -- 메인쿼리의 HAVING 절에 결과를 반환합니다. -- 메인쿼리를 실행합니다. -- 최소 급여가 부서 50번의 급여보다 큰 부서를 조회 SELECT department_id, MIN(salary) FROM employees GROUP BY department_id HAVING MIN(salary) >( SELECT MIN(salary) FROM employees WHERE department_id = 50); /* DP_ID MIN(SALARY) -------------------------- 7000 90 17000 20 6000 110 8300 80 8600 60 4200 10 440 */ -- 서..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/AAwwI/btsoMHQbocY/ZFJlWW9VaqGhk4qOFZ5hOK/img.jpg)
/* -- last_name이 Grant인 사원보다 급여가 많은 직원 1) Grant 사원의 급여 2) 급여가 보다 높은 직원 */ -- 1) SELECT salary FROM employees WHERE last_name='Grant'; /* SALARY ------------- 7000 */ -- 2) SELECT last_name, salary FROM employees WHERE salary > 7000; /* LAST_NAME SALARY -------------------------------- King 24000 Kochhar 17000 De Haan 17000 Hunold 9000 Zlotkey 10500 Abel 11000 Taylor 8600 Hartstein 13000 Higgins ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/RQ3sm/btsoRf6FJR5/MZ3i9YbD23VWGPzT5vGNU0/img.jpg)
-- 서브쿼리_SUBQUERY -- SELECT 문의 절에 삽입된 SELECT 문입니다. -- 간단한 명령문으로 강력한 기능을 제공하는 명령문을 작성할 수 있습니다. -- 주로 연산자의 비교 구문에 값 대신 사용합니다. -- 포함시킬 수 있는 위치 -- WHERE 절 -- HAVING 절 -- FROM 절 -- SELECT 문에도 컬럼 명 대신 사용할 수 있습니다. -- GROUP BY에는 작성할 수 없습니다. -- 메인쿼리 실행 전에 한 번 실행합니다. -- 메인쿼리 = 아우터쿼리 : 서브쿼리의 결과를 사용하는 쿼리 -- 사용 방법 -- 서브쿼리를 괄호로 묶어 구분합니다. -- 비교 조건의 오른쪽에 서브쿼리를 작성합니다. -- TOP-N 분석을 제외하고 서브쿼리 내의 ORDER BY 절은 필요하지 않습..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ItE52/btsoCFyXsNQ/jXoFjJdc13kk2nqkE0Zv9K/img.jpg)
-- 오라클 조인 -- FROM 절에 JOIN 키워드를 사용하지 않습니다. -- 조인 조건을 WHERE 절에 작성합니다. -- n 개의 테이블 조인을 위해 최소 n-1개의 조인 조건이 필요합니다. -- 행을 제한하기 위해 WHERE 절에 조건을 추가해야 하는 경우 AND 연산자를 사용합니다. /* SELECT table1.column1, table2.column2 FROM table1, table2 WHERE table1.column1 = table2.column2; */ -- Outer JOIN -- (+) 아우터 조인 연산자를 정보가 부족한 조인 옆에 작성합니다. -- 아우터 조인 연산자는 하나 이상의 널 행을 생성합니다. -- LEFT OUTER JOIN SELECT e.employee_id, e...
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/991ur/btsoEqIbKT3/ecixgxKui3OEKfVPa3ylVK/img.jpg)
-- 오라클 조인 -- FROM 절에 JOIN 키워드를 사용하지 않습니다. -- 조인 조건을 WHERE 절에 작성합니다. -- n 개의 테이블 조인을 위해 최소 n-1개의 조인 조건이 필요합니다. -- 행을 제한하기 위해 WHERE 절에 조건을 추가해야 하는 경우 AND 연산자를 사용합니다. /* SELECT table1.column1, table2.column2 FROM table1, table2 WHERE table1.column1 = table2.column2; */ -- 비등가 조인 SELECT e.employee_id, e.last_name, e.salary, j.grade_level FROM employees e JOIN job_grades j ON (e.salary BETWEEN j.lowe..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bVHWsy/btsoNW0SIkM/ILNuiwdzCd3qBSrUoMQRg1/img.jpg)
-- 오라클 조인 -- FROM 절에 JOIN 키워드를 사용하지 않습니다. -- 조인 조건을 WHERE 절에 작성합니다. -- n 개의 테이블 조인을 위해 최소 n-1개의 조인 조건이 필요합니다. -- 행을 제한하기 위해 WHERE 절에 조건을 추가해야 하는 경우 AND 연산자를 사용합니다. /* SELECT table1.column1, table2.column2 FROM table1, table2 WHERE table1.column1 = table2.column2; */ -- 등가 조인 SELECT e.employee_id, e.last_name, e.salary, d.department_id FROM employees e JOIN departments d ON (e.department_id = d.d..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dEeXDu/btsoRkto2W3/kEUyw1wqJsdHx7YUanMEpK/img.jpg)
-- Cartesian Product_ 카티시안 곱 -- 생성되는 경우 -- 조인 조건을 생략하는 경우 -- 조인 조건이 부적합한 경우 -- 첫 번째 테이블의 모든 행이 두 번째 테이블의 모든 행에 조인되는 경우 -- 카티시안 곱이 생성되지 않도록 하기 위해서는 ON 절에 항상 유효한 조인 조건을 포함시켜야 합니다. -- 모든 확률을 구하기 위한 경우 사용합니다. SELECT last_name, city FROM employees NATURAL JOIN locations; -- 해당 컬럼이 없어 의도하지 않은 카티시안 곱이 자동으로 생성됩니다. -- 총 100개의 데이터가 출력됩니다. -- Cross JOIN -- 두 테이블의 상호 간의 조합을 생성하는 것입니다. -- 두 테이블 사이의 카티시안 곱_Ca..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/vahMR/btsoMGRg8E5/Yu55JUC0eJOFDuZiEJBDkk/img.jpg)
/* -- JOIN의 기준 -- 매칭하려는 컬럼 명이 동일한 경우 -- 매칭하려는 컬럼의 개수가 여러 개인 경우 -- 매칭하려는 컬럼 명이 동일하지 않은 경우 -- JOIN KEY COLUMN의 관계가 동일한 것을 찾아 조회합니다. > 등가조인, 이퀴조인? -- 등가가 아닌 데이터를 조회하는 JOIN 절 > 비트윈 연산자를 가장 많이 사용합니다. EX_등급 목록 ( 월 매출에 따라 등급이 저장됩니다 ) -- 매달 등급이 변경되는 정보입니다. > 고객 테이블에는 저장되지 않습니다. -- 고객 아이디가 저장된 고객 테이블 -- 구매 금액이 저장되는 주문 테이블 -- 금액에 따라 지정되는 등급이 저장되어 있는 등급 테이블 -- 따로 저장해야 하는 이유 -- 한 테이블로 저장하게 되면 하나만 수정하는 경우 무결..