일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 26 | 27 | 28 |
29 | 30 | 31 |
- jsp게시판만들기
- 스프링 CRUD게시판
- 프로그래머스 MYSQL
- 날짜지정팝업
- 프로그래머스 쿼리문
- 자바기초
- CRUD게시판만들기
- 정보처리기사실기정리
- 자바 정규표현식 예제
- PLSQL
- 2020정보처리기사실기
- jsp 팝업띄우기
- 2020정보처리기사실기정리
- spring crud
- Oracle기초
- 게시판만들기
- 자바연산자
- spring crud게시판
- 프로그래머스 SQL
- 2020정보처리기사실기요약
- 스프링 crud
- 정처기실기정리
- html기초
- 오버라이딩
- js datepicker
- crud게시판
- 오라클설치
- 스프링게시판만들기
- jsp 날짜팝업
- 자바배열예제
- Today
- Total
영보의 SystemOut.log
[Oracle] Sub Query(서브쿼리) 종류와 예제(1) 본문
개념 정리
# JOIN vs Sub Query
조인 |
서브쿼리 |
- 여러개의 테이블에서 필요한 데이터 모아서 수집 => 단점 : SELECT |
- 여러개의 SQL문장을 한 개로 통합 => DML 전체에서 사용이 가능 |
# Sub Query (서브쿼리) : 하나의 쿼리 안에 또 다른 하나의 쿼리가 담겨 있는 것
- 문법 & 종류
1 2 3 4 5 |
SELECT select_list FROM TABLE 조건 또는 View WHERE 조건 연산자 (SELECT select_list FROM talble WHERE 조건); |
cs |
종류 |
설명 |
단일행 서브쿼리 |
서브쿼리의 결과값이 1개 |
다중행 서브쿼리 |
서브쿼리의 결과가 여러개 |
인라인 뷰 |
FROM (SELECT~) |
스칼라 서브쿼리 |
컬럼 대신 사용 SELECT empno, ename, (SELECT~) as dname |
# Sub Query 작성시 주의사항
- Sub Query 부분은 WHERE절에 연산자 오른쪽에 위치해야 하면 반드시 괄호로 묶어야 함
- 특별한 경우를 제외하고는 Sub Query절에 Oracle by 절이 올 수 없다
- 단일행 Sub Query와 다중행 Sub Query에 따라 연산자를 잘 선택해야함
# PROCEDURE, FUNCTION, PACKAGE, TRIGGER를 제작할 때 사용하는 언어
- 함수 : 사용자 정의로 사용 => 목적 (재사용)
- PROCEDURE : 리턴형이 없는 => 자바스크립트 function func_name(){}
- FUNCTION : 리텅형이 있는 함수
= 함수 독립
= 메소드 클래스 종속
- PACKAGE : 관련된 PROCEDURE, FUNCTION을 모아서 둔 곳
- TRIGGER : 이미 지정된 이벤트가 발생시에 자동 처리
INSERT, UPDATE, DELETE
# 단일행 Sub Query (Single ROW Sub Query)
- 결과 값이 1개의 행만 출력되는 것
- 가장 일반적으로 사용되는 유형
- Sub Query를 수행한 결과가 1건만 나오고, 이 결과를 Main Query로 전달해서 Main Query를 수행하게 됨
- Where 절에 사용 되는 연산자 : 비교연산자 =, !=(<>) , <=, >=, <, >
예제
# 예제
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
-- emp테이블 => 사원의 평균 급여 => 평균보다 적게 받는 사원 정보를 출력
SELECT * FROM emp WHERE sal<AVG(sal);
SELECT * FROM emp WHERE sal < AVG(sal);
SELECT AVG(sal) FROM emp;
SELECT * FROM empWHERE sal<2073;
SELECT * FROM emp WHERE sal<(SELECT AVG(sal) FROM emp);
--서브쿼리는()
--SCOTT => scott가 근무하는 부서에 같이 근무하는 사원의 모든 정보 출력
SELECT deptno FROM emp WHERE ename='SCOTT';
SELECT * FROM emp WHERE deptno=20;
SELECT * FROM emp WHERE deptno=(SELECT deptno FROM emp WHERE ename='SCOTT');
SELECT * FROM emp WHERE deptno=(SELECT DISTINCT deptno FROM emp); -- 오류가 남 ===> 다중행 서브쿼리
SELECT DISTINCT deptno FROM emp;
--GROUP BY
--사원의 평균 급여 보다 높은 부서의 부서번호, 인원수를 출력
SELECT deptno, COUNT(*) FROM emp GROUP BY deptno HAVING AVG(sal)<(SELECT AVG(sal) FROM emp);
|
cs |
'Database > Oracle' 카테고리의 다른 글
[Oracle] PL/SQL - 제어문 (반복문 / 선택문 / 조건문) 종류와 예제 (0) | 2020.11.10 |
---|---|
[Oracle] Sub Query(서브쿼리) 종류와 예제(2) (0) | 2020.11.10 |
[Oracle] DML / 데이터형 / Oralce 제약조건 (0) | 2020.08.18 |
[Oracle] JOIN / EQUI_JOIN / NON_EQUI_JOIN/ JOIN예제 (0) | 2020.08.12 |
[Oracle] SQL 복수행함수 / 그룹함수 / 집합함수 / SQL 함수 예제 (0) | 2020.08.11 |