본문 바로가기

SQL/Oracle

[Oracle] 서브 쿼리(sub query)

728x90

서브 쿼리(sub query)

상위 50%만 출력

select * from(
    (select mem_userid, mem_name, mem_gender, mem_point,
        percent_rank() over(partition by mem_gender order by mem_point desc) * 100 as top from tb_member where extract(year from mem_regdate) = 2021
    )
) where top <= 50

 

tb_order에서 데이터를 가져와 tb_point에 데이터를 입력하는 쿼리를 만들어보자
    tb_point
    po_idx 일련번호
    po_userid 'apple'
    po_memo 이유('구입')
    po_point 포인트 (order 데이터의 ord_price * 0.05)
    po_ordno 주문번호
    po_regdate 현재 날짜

 

point 테이블 생성

create table tb_point (
    po_idx number not null,
    po_userid varchar2(20) not null,
    po_memo varchar2(50) not null,
    po_point number(7) default 0,
    po_ordno varchar2(8) unique not null,
    po_regdate date default sysdate,
    constraint fk_point_userid foreign key(po_userid) references tb_member(mem_userid),
    constraint fk_point_ordno foreign key(po_ordno) references tb_order(ord_no)
);

포인트 시퀀스 생성

create sequence seq_point
    increment by 1
    start with 1;

서브쿼리 이용한 데이터 삽입(구입자 아이디, 포인트 지급이유, 주문번호는 지정)

insert into tb_point (po_idx, po_userid, po_memo, po_point, po_ordno) 
    values (seq_point.nextval, 'apple', '구입', 
    (select ord_price from tb_order where ord_no='00000001') * 0.05, '00000001');

 

order 테이블
point테이블에 insert 된 데이터

 

728x90

'SQL > Oracle' 카테고리의 다른 글

[Oracle] union, union all  (0) 2022.06.16
[Oracle] Oracle 함수  (0) 2022.06.16
[Oracle] 커서(cursor)  (0) 2022.06.16
[Oracle] 트랜젝션(transaction)  (0) 2022.06.16
[Oracle] 프로시저 예제  (0) 2022.06.16