티스토리 뷰
문법
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | SELECT select_list FROM table WHERE expr operator ( SELECT select_list FROM table ); -- ( ) 부분 먼저 실행 후 바깥 부분 실행 -- 1. SELECT select_list -- FROM table 실행 -- 2. SELECT select_list -- FROM table -- WHERE expr operator 실행 -- Subquery == Inner Query -- 기존 바깥 쿼리 구문 == Main Query == Outer Query -- 쿼리 구문안에 쿼리 구문이 또 들어가 있는 상태 -- 나도 모르는 부분을 필요로 할 때 서브쿼리를 작성 -- 우리에게 보이는 건 메인 쿼리구문이다. -- 서브 쿼리는 연산자 오른쪽에 위치하여야 한다. -- 좌변 서브쿼리 작성 X -- 반드시 ()로 묶어야 한다. -- WHERE, FROM, SELECT, HAVING, ORDER BY 절에서 사용가능 -- (GROUP BY 절 제외한 모든 절에서 작성 가능함) | cs |
1. Subquery란?
Who has a salary greater than Abel's?
Main Query : Which employees have salaries greater than Abel's salary?
Subquery : What is Abel's salary?
1 2 3 4 5 6 7 8 | SELECT last_name, salary FROM employees WHERE salary > ( SELECT salary FROM employees WHERE last_name = 'Abel'); -- 서브 쿼리부분이 11000 대신에 들어감 | cs |
1 2 3 4 5 6 7 8 9 | SELECT last_name, job_id, salary FROM employees WHERE salary = ( SELECT MIN(salary) FROM employees ); -- 서브 쿼리부분이 2500 대신에 들어감 -- 최소 급여 선택 -- 한 명이 오거나 여러 명이 올 수 있다. | cs |
1 2 3 4 5 6 7 8 9 10 | SELECT department_id, MIN(salary) FROM employees GROUP BY department_id HAVING MIN(salary) > ( SELECT MIN(salary) FROM employees WHERE department_id = 50 ); -- 서브 쿼리 부분이 2500 대신에 들어감 -- HAVING : 행 그룹 제한 조건문 | cs |
2. Inline View - From절에 Subquery가 작성된 경우
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | -- FROM : 테이블명 쓰던 곳 -- 서브쿼리를 먼저 실행한다 SELECT a.last_name, a.salary, a.department_id, b.salavg FROM employees a JOIN ( SELECT department_id, AVG(salary) salavg FROM employees GROUP BY department_id) b ON a.department_id = b.department_id WHERE a.salary > b.salavg; -- () 서브 쿼리 부분 -- 가상의 테이블 뷰 = Inline View -- FROM 절에 서브 쿼리가 작성된 경우 -- 부서별 평균 값을 가진 테이블 -- a 테이블과 가상의 b 테이블을 JOIN 함 -- 기존에 WHERE 대신에 AND가 적용되어있었지만 -- AND 대신에 WHERE로 변경 -- AND 쓸 수 있지만 오라클에선 권장하진않는다. | cs |
연습 문제
1. employees 테이블로부터 평균 이상의 급여를 받는 모든 사원의 employees_id, last_name, salary를 출력하되 salary를 기준으로 오름차순 정렬하여 출력하시오.
1 2 3 4 5 6 | SELECT employee_id, last_name, salary FROM employees WHERE salary >= ( SELECT avg(salary) FROM employees ) ORDER BY salary; | cs |
'부산 ITWILL 학원 실습 > ORACLE' 카테고리의 다른 글
[SQL 활용] 6. 함수 사용하기 (0) | 2018.07.27 |
---|---|
[Oracle VM VirtualBox] GUI 툴 SQL Developer 실행하기 (0) | 2018.07.27 |
[SQL 활용] 4. JOIN (0) | 2018.07.27 |
[SQL 활용] 3. GROUP BY절과 HAVING절 (0) | 2018.07.27 |
[Oracle VM VirtualBox] 외부 화면(바탕화면)으로 나가기 (0) | 2018.07.27 |