728x90
반응형

출처 오라클(ORACLE)과 함께... DBMS를 중심으로... | orapybubu
원문 http://blog.naver.com/orapybubu/40014665534

비공개님이 지식iN에서 하신 질문입니다. (2005-06-28 12:44 작성)

 

이런 쿼리가 가능 한가요?(오라클)

오라클 쿼리입니다. 회원테이블이 있습니다 users 라는... 물론 거기에는 주민번호가 있고...

 

어떤 업체에서 자기 회사 직원 주민번호를 보내주며

 이 주민번호중 회원가입이 되어있는 사람과 되어있지 않은 사람을 알려달라구 했을때

 

되어있는 사람은 이런식으로 하면 되는데...


select * from users where jumin in
('1111111111111','2222222222222','3333333333333','4444444444444','5555555555555')

  

그럼 안되어있는 주민번호는 어떻게 가져와야 할까요

 답은 여러개 일수 있지만 가장 빠른쿼리를 알려주시는 분에게 내공 쏘겠습니다

 1111...,2222....,3333..., 은 회사에서 보내준 주민 번호 입니다...


# 질문 내용추가 (2005-06-28 14:16 추가) 


not in 명령은 회원테이블중에 그 회사 주민번호에 해당안되는 모든 사람을 가져옵니다
질문자가 원하는것은 회사 주민번호중 회원테이블에 없는 주민번호를 원하는것입니다
또한 실제 테이블에 없는 내용이라도 Dual을 쓰면 나올꺼 같은디...

 

===============================================================================

 

A> 제 답입니다.

 

어떤 값이 테이블에 있는지 없는지를 빠르게 확인하는 방법은
exists 또는 not exists 연산자를 사용하는 것입니다.

 

# 회원 테이블 생성 및 데이터 입력

 

create table users (jumin varchar2(20), name varchar2(20));

 

insert into users values ('1', 'A');
insert into users values ('2', 'B');
insert into users values ('3', 'C');
insert into users values ('4', 'D');
insert into users values ('5', 'E');

 

commit;

 

select * from users;

 

JUMIN NAME
1 A
2 B
3 C
4 D
5 E

 

 

이제 의뢰한 회사에서 jumin 번호가 2, 4, 6인 직원이 회원 가입되어 있는지

알고 싶어한다고 가정하죠.

 

1.임시로 사용할 테이블을 생성하고 데이터를 입력합니다.

 

create table t_imsi (jumin varchar2(20));

 

insert into t_imsi values('2');
insert into t_imsi values('4');
insert into t_imsi values('6');

 

commit;

 

2.회원 정보가 들어있는 users 테이블의 jumin 컬럼에 인덱스를 생성합니다.

    아마 이미 생성되어있을 것입니다만 혹시 없다면 다음과 같이 하십시요.

 

create index users_jumin_ind on users(jumin);

 

인덱스 생성은 업무가 한가한 시간에 하시기를 적극 권합니다.

 

3.exists 연산자 및 not exists 연산자 이용하기

 

-- 가입된 회원 찾기

select * from t_imsi
where exists (select '1' from users
                        where jumin = t_imsi.jumin);

 

JUMIN
2
4

 

 

-- 가입되지 않은 회원 찾기

select * from t_imsi
where not exists (select '1' from users
                               where jumin = t_imsi.jumin);

 

JUMIN
6

 

 

결론 : 오라클 SQL을 꾸준히 공부하지 않으셨다면 약간 낯선 방법일 수

있습니다. 그러나 실제로 해보시면 이 방법이 빠른 속도를 보장한다는 것을

알 수 있을 것입니다. 혹시 오라클 SQL에 관한 교재가 있다면 "상호관련 서브쿼리"

부분을 찾아 보시면 됩니다.

 

행운이 있기를... ^^

 

728x90
반응형
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,