Q&A

  • 오라클 쿼리에서
테이블 Table1 에서 필드 A, B 있고, A는 Key 필드입니다.

B에 대해 1개의 조건이라도 만족하는 A의 모든행을 쿼리 하려고 합니다.

select *
from Table1
where A in ( select A from Table1 where B = '1' group by A )

요렇게 쿼리를 작성했는데, 더 간단히 할 수 없을까요?

그리고, in 과 exists는 어떤 차이가 있나요?
3  COMMENTS
  • Profile
    김병윤 2008.03.25 00:17


    같은테이블 같아 보이는데 왜 저렇게 하셨는지 모르겠네요?

    뭐 정확히 테이블의 자료와 그 자료의 속성을 몰라서 위와같은 쿼리문이 필요할지도 모르지만...

    Select * from Table1 Where B = '1'

    이 쿼리문하고 동일해 보이는뎁쇼...

    뭐 그냥 쉽게 이야기 하시려다 보니 저런 모냥이 나왔는지 모르겠다 싶기도 하네요

    어떤 자료들인지 모르지만 쿼리 속도때문에 저런 모양새가 필요할 수도 있을테구...이유야 많겠죠?

    그리고 In과 Exsits는

    In() - (서브쿼리에 따라) 제공자, 확인자 역활을 할 수 있음
    : (서브쿼리 결과)값을 메인쿼리의 컬럼에 직접 값을 전달할 수 있습니다.
    - 서브쿼리를 사용할 경우 실제 테이블의 데이터를 추출해오는 시간이 소요됨

    Exists() - 확인자 역활만 할 수 있음
    : (서브쿼리의 결과 행[Row]이) 존재하는지 유무만 확인합니다.
    - 메인쿼리의 컬럼에 직접값을 전달할 수 없습니다.
    - 서브쿼리를 사용할 경우 조건을 만족하는 결과 행(Row)가 있는지만 확인함으로
      직접 데이터를 추출해오는 In의 서브쿼리보다 속도가 빠름
    - 하지만 메인쿼리와 계속적인 확인작업을 해야함으로 Access횟수가 많아져 효율이 떨어질 수 있습니다.
  • Profile
    이의성 2008.03.25 18:56
    답변 감사합니다...

    설명이 좀 부족했었나보네요 ;;

    예를 들어,

    A    B
    '1'  '1'
    '2'  '2'
    '1'  '3'
    '2'  '4'

    인 경우 B = '1' 를 만족하는 A가 '1' 이므로,

    B가 '1' 아니더라도 A = '1' 인 레코드는 모두 쿼리 하려는 목적입니다

    즉, 첫번째와 세번째 레코드를 퀴리하려는게 목적입니다


  • Profile
    김병윤 2008.03.25 19:37
    헉 역시...대충봐서...바보같은 쿼리문을 보여드렸네요 ^^;;

    말씀하신데로라면 사용하신 쿼리문이 가장 심플해보이네요..ㅋ