티스토리 뷰

DB/ORACLE

서브쿼리

0bliviat3 2023. 9. 2. 17:22

본 쿼리 안에 소괄호를 사용해 select 문을 사용하는것을 서브쿼리라고 한다.

 

실행순서는 소괄호의 서브쿼리가 본쿼리보다 먼저 시행이 된다.

 

물론 서브쿼리 역시 하나의 쿼리문이므로 전체 쿼리순서자체에는 위배될수 없고,

실행된 서브쿼리의 결과값을 본쿼리에서 사용하는 방식으로 진행된다.

 

서브쿼리는 크게 3가지로 분류한다.

 

1. 스칼라 서브쿼리

 

select 절에서 사용할 서브쿼리로 단일행만을 결과값으로 가져올수 있도록 해야한다.

 

2. 인라인뷰 서브쿼리

 

from 절에서 사용할 서브쿼리로 select 문의 결과값이 하나의 임시테이블인것을 이용하는것이다.

 

3. 중첩 서브쿼리

 

where 절이나  having 절에서 사용할 서브쿼리로 결과값을 튜플의 조건, 그룹의 조건으로 사용한다.

단일행의 경우 = 연산사, 다중행의 경우 in 연산자를 통해 사용이 가능하다.

 


 

 

실습과제)

 

// 과제 데이터

create table muser(
id int,
reg_num varchar2(8) not null,
name varchar2(10 char),
grade int,
salary int,
time int);

create sequence muser_no
increment by 1
start with 10
;

insert into muser values(muser_no.nextval,'870205-1','이승진',1,10000,34);
insert into muser values(muser_no.nextval,'880405-1','박이진',2,20000,31);
insert into muser values(muser_no.nextval,'770715-2','최이수',4,40000,32);
insert into muser values(muser_no.nextval,'010205-3','류진아',1,10000,30);
insert into muser values(muser_no.nextval,'810205-2','오현식',2,20000,34);
insert into muser values(muser_no.nextval,'820219-2','정승우',3,30000,35);
insert into muser values(muser_no.nextval,'020205-3','이재수',1,10000,30);
insert into muser values(muser_no.nextval,'970214-2','박지영',2,20000,31);
insert into muser values(muser_no.nextval,'040205-4','정은아',4,40000,31);
insert into muser values(muser_no.nextval,'770225-1','정재영',5,50000,30);
insert into muser values(muser_no.nextval,'770905-2','이신수',4,40000,34);
insert into muser values(muser_no.nextval,'050208-3','이발끈',2,20000,30);
insert into muser values(muser_no.nextval,'051205-4','이욱이',1,10000,34);
insert into muser values(muser_no.nextval,'891215-1','지승아',3,30000,30);
insert into muser values(muser_no.nextval,'670805-1','현진수',2,20000,34);
insert into muser values(muser_no.nextval,'840207-1','최이런',1,10000,35);
insert into muser values(muser_no.nextval,'770405-1','이천안',1,10000,31);

 

문제)

1.4학년의 월급을 모두 출력하라, 그리고 최고월급도 같이 출력하라
2.평균월급보다 높은 월급를 가진 사람의 정보를 출력하라
3.평균월급보다 높은 월급을 받는 사람이 학년별로 몇명이 있는가
 
 

 
 

답안)

 

// 1
select salary , (select max(salary) from muser) as max
from muser
where grade = 4;

// 2
select *
from muser
where salary > (select avg(salary) from muser);

// 3
select grade, count(*)
from muser
where salary > (select avg(salary) from muser)
group by grade;

'DB > ORACLE' 카테고리의 다른 글

ORACLE의 특이한 문법  (0) 2023.09.03
view  (0) 2023.09.03
시퀀스(sequence)  (0) 2023.09.02
ROWNUM  (0) 2023.09.01
조인(join)  (0) 2023.09.01
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
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
글 보관함