반응형
서브쿼리
- 하나의 sql문 안에 포함된(nested)또 다른 sql
- 서브쿼리는 select,from,where절에 사용가능
- from절에 사용되는 서브쿼리를 inline-view 라고 하고 독립실행이 가능해야함
- 서브쿼리는 ( )로 묶어 기술 --깊이가 3~5정도 되는경우가 다분한데 복잡한이경우 서브쿼리를 쓰는이유는 조인을 줄일수있음
- 전체 로직은 복잡하나 조인을 줄일수있음
- 쿼리의 실행순서 :from절->where절 ->select절 이지만각절에 서브쿼리가 존재하면 각 절에서 서브쿼리부터 수행
(서브쿼리 종류)
1.연관성없는 서브쿼리
- 메인쿼리에 사용된테이블과 서브쿼리에 사용된 케이블이 조인으로 연결되지않은경우
예시
직무이력테이블과 사원테이블에서 사원번호와 직무코드가 같은 사원정보를 조회하시오
(사원번호,사원명, 직위코드)
-- (메인쿼리)
select EMPLOYEE_ID as 사원번호,
EMP_NAME as 사원명,
JOB_ID as 직위코드
from JOB_HISTORY;
-- (서브쿼리)
select EMPLOYEE_ID as 사원번호,
EMP_NAME as 사원명,
JOB_ID as 직위코드
from EMPLOYEES
where (EMPLOYEE_ID,JOB_ID)=(서브쿼리)
-- (결합)
select EMPLOYEE_ID as 사원번호,
EMP_NAME as 사원명,
JOB_ID as 직위코드
from EMPLOYEES
where (EMPLOYEE_ID,JOB_ID)=(select EMPLOYEE_ID,JOB_ID
from JOB_HISTORY);
2.연관성 없는 서브쿼리를 사용하는 DML명령
1)update문
- 자료의 갱신을 위한 명령
- 사용형식
update 테이블명[별칭
set 컬럼명1=값1[,
컬럼명2=값2[,
:
컬럼명n=값n]
[where 조건];
예시
회원테이블에서 회원들의 평균마일리지로 모든회원의 마일리지를 변경하시오 서브쿼리: 회원들의 평균마일리지
--(서브쿼리)
select avg(MEM_MILEAGE)from member;
--(메인쿼리)모든 회원의 마일리지 값을서브쿼리결과로 변경
update member a
set MEM_MILEAGE=(서브쿼리);
--(결합)
update member a
set MEM_MILEAGE=(select avg(MEM_MILEAGE)from member);
select MEM_NAME, MEM_MILEAGE from member;
rollback;
update member a
set MEM_MILEAGE=1000
where MEM_ID ='a001';
2)delete 문
-테이블에서 자료삭제
(사용형식)
delete 테이블명
[where조건]
- where절이 없으면 테이블의 모든자료 삭제
- 서브쿼리를 이용하는경우는 '조건'절에 서브쿼리 존재
반응형
'it공부' 카테고리의 다른 글
상속의 개요 (0) | 2020.07.05 |
---|---|
데이터모델링 하는방법 (0) | 2020.07.05 |
SQL 단어 개념 정리 (0) | 2020.07.05 |
select 명령 Oracle SQL (0) | 2020.07.05 |
PL/SQL (0) | 2020.07.05 |