Q&A

  • 오라클의 쿼리문을 어떻게 공부하면 될까요?
DB를 오라클 사용하는데, 쿼리문이 자주 나오더라구요.
쿼리문을 어떻게 하면 자세히 공부할수 있을까요?
쿼리문 이해가 어려워서요.
예를들어 select sum(jang_su) jang_su,sum(jang_gum) jang_gum,sum(hoa_su) hoa_su,sum(hoa_gum) hoa_gum,
sum(sa_su) sa_su,sum(sa_gum) sa_gum,sum(pe_su) pe_su,sum(pe_gum) pe_gum,
sum(hoa_gum + pe_gum + sa_gum) SSUM,
sum(hoa_gum + pe_gum + sa_gum-jang_gum) RSUM from mpf266
where yy = :yy
and bucode like :bucode
쿼리문이 이런식인데 어떻게 공부 하면 될까요?
알려주세요...부탁합니다.

참 한가지 더.....
Parabyname하고 fieldbyname의 차이는 어떤것인가요?

4  COMMENTS
  • Profile
    열심히 2002.12.13 23:34
    쿼리에 대한 공부는 자기가 프로그램을 하면서 필요한게 있을때마다

    방법을 찾아서 해결하는수 밖에 없습니다..오래 이런 작업을 반복하다보면

    나중엔 디비를 어떻게 만들어야 쿼리를 짤때 용이 할지 속도가 면에서

    불필요한 테이블을 조인한다거나 하는 인덱스까지 생각한는 시야가 길러지게

    되구요.

    시중에 쿼리의 예제만 짠뜩있는 책들이 있습니다..거의 그책 한권이면 모든

    형태의 쿼리를 해결할수 있더라구요..

    님이 올리신 쿼리를 분석해 드릴꼐요..잘못된 부분도 지적..^^

    select sum(jang_su) jang_su,sum(jang_gum) jang_gum,sum(hoa_su) hoa_su,sum(hoa_gum) hoa_gum,
    sum(sa_su) sa_su,sum(sa_gum) sa_gum,sum(pe_su) pe_su,sum    (pe_gum) pe_gum,
    sum(hoa_gum + pe_gum + sa_gum) SSUM,
    sum(hoa_gum + pe_gum + sa_gum-jang_gum) RSUM
       from mpf266
    where yy = :yy
    and bucode like :bucode

    조건절에 :yy라고 하는부분은 쿼리 파라미터입니다.유동적으로 값을

    입력하여 상황에 맞는 데이터를 불러올수 잇죠. 때에따라 쿼리를 지우고

    조건절을 새로 집어넣는건 오라클이 매번 다른 쿼리로 인식하여 성능에 영향을

    미치니 추춘하지 않고요..그리고 FieldByName이란

    예제를 통해서 알아보자구요..

    Query1.Close;
    Query1.ParamByName('yy').AsString := '20021213';
    Query1.ParamByName('bucode').AsString := 'ABC';
    Query1.Open;

    Edit1.Text := Query1.FieldByName('Jang_su').AsString;

    이러면 감이 잡히시겠죠??^^;

    위의 셀렉트절에서는 sum이란 그룹함수를 썼습니다.

    각 필드를 제한된 도메인 안에서(where절에 의해) 모조리 더하는겁니다.

    잘못된점  sum(hoa_gum + pe_gum + sa_gum) SSUM <- 이런 문장이

    있을때 각필드를 모두 더하고 필드끼리 다시 더하는 문장이아닙니다..

    처음 레코드의 세필드를 더하고 다음 레코드로 넘어가서 다시 세필드를 더한값

    을 더하고..이런식이죠 어떤차이가 있냐면..쿼리에서 연산시 null값과는 어떤

    연산을 하더라도 null값이 됩니다..그리하여 위의 경우에 세필드중 하나라도

    null값이 있다면(한 레코드에서) 나머지 필드에 값이 있어도 빠지게 됩니다.

    이럴경우에는 필드에 null값에 대한 처리를 해줘야합니다.

    바꾸면 이런식이 되겠죠..

    sum(nvl(hoa_gum,0) + nvl(pe_gum,0) + nvl(sa_gum,0)) SSUM

    위에서는 널값만을 체크했지만 ' ' 이런 공백이 값으로 들어갈 수도 있습니다.

    이문제는 데이터를 디비에 저장시 공백을 제거하고 저장을 해주어야 겠지요.


    select sum(jang_su) jang_su,sum(jang_gum) jang_gum,sum(hoa_su) hoa_su,sum(hoa_gum) hoa_gum,
       from mpf266

  • Profile
    Do young 2002.12.13 23:07
    ~미씨 .
    많이보던 쿼리문땜시 들켰네여.

    쿼리문은 많이 해봐야 되는디..
    넘 급하게 생각치말구 ..

    param이 임의의 값을 넣을수 있다면
    field는 결과값으로 나온 값이라할수 있겠네여.



  • Profile
    정형준 2002.12.13 17:44
    프로그래밍을 하다보면
    OS를 인격체로 여기게 되죠.

    마찬가지로 SQL 또는 Stored Procedure나 Trigger 등을 만들때
    DBMS 도 인격체로 다가옵니다.

    내가 이렇게 하면 저넘은 이렇게 하겠지라는 추측도 하고
    내가 이렇게 하면 너는 어떻게 할래?라는 질문도 던져 봅니다.

    그넘은 절대 배반하지 않습니다.
    가끔 멍청한듯 하지만... 매우 똑똑하기도 하고요...

    모든 프로그래밍이 그렇듯이 SQL도
    가독성이 높아야 합니다.
    문장을 쉽게 알아볼 수 있도록
    잘 배열하는것이 무척 중요합니다.
  • Profile
    KDDG_ZZOM 2002.12.13 09:10
    저경우는 집에다 퍼스널 오라클 인스톨해서 그냥 이것저것 해봤는데...
    어떻게 공부해야되는건 본인이 얼만큼 쿼리문을 만들어 봤는지가 중요한것같네요...

    글구 Parabyname는 쿼리문 실행하기전에 사용하시는거고요
    fieldbyname는 쿼리를 오픈해서 사용하시면 될것같은데...

    그냥 지나가다... 즐프하세요...


    • 박진규
    • 2002.12.13 20:23
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 정형준
      2002.12.14 14:56
      지난번 답이 좀 비껴나갔군요. ^^ 아래에 먼저 답변해 주신 분들의 답변을 참고하시면 될것 같습니다. ...
    • 열심히
      2002.12.13 22:18
      답은 님이 쓰신글 안에 있네요.. 이벤트가 일어날때 어느 컴퍼넌트가 이 이벤트를 일으킨것인지 아래...
    • 하기
      2002.12.13 21:08
        Showmessage((Sender as TEdit).Text); 이렇게 하면 되지 않을까염??? 그럼 수거 하세염... ...
    • 바프
    • 2002.12.13 20:15
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 김준휘
    • 2002.12.13 19:28
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 하기
      2002.12.13 21:23
      요부분이요 라고 한 부분에다 조건을 하나 넣어 주면 될것 같은데염      amt := str...
    • 김지엽
      2002.12.14 01:29
      DB2에서는 FETCH가 어떤 뜻으로 쓰이는지 모르겠지만, ORACLE에서 FETCH 예약어는 ROW COUNT와 관련있는게 ...
    • 김상수
    • 2002.12.13 18:59
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 열심히
      2002.12.13 22:09
      DBGrid에 아이템인덱스 프로퍼티가 있는걸로 알구요.. 쿼리상으로도 알수 있습니다.. select rownum,...
    • LuckyBoy
      2002.12.16 22:42
      님의 질문만으로는 정확히 어떠한 에러가 어느 상황에서 어떻게 나는 지를 님밖에 모르게 질문을 하셨군요...
    • 우영범
      2002.12.13 18:59
      GetClass 함수를 이용하면 가능합니다. initialization부에 반드시 해당 폼을 등록(RegisterClasses)해야 ...
    • 박진규
    • 2002.12.13 06:57
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 정형준
      2002.12.13 17:50
      있습니다. Self 라는... 아무것도 안써도 됩니다. 다음은 자기의 넓이를 구하는 소스인데요 &nbs...
    • 뿡뿡이
    • 2002.12.13 04:52
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 열심히
      2002.12.13 23:34
      쿼리에 대한 공부는 자기가 프로그램을 하면서 필요한게 있을때마다 방법을 찾아서 해결하는수 밖에 없...
    • Do young
      2002.12.13 23:07
      ~미씨 . 많이보던 쿼리문땜시 들켰네여. 쿼리문은 많이 해봐야 되는디.. 넘 급하게 생각치말구 .. ...
    • 정형준
      2002.12.13 17:44
      프로그래밍을 하다보면 OS를 인격체로 여기게 되죠. 마찬가지로 SQL 또는 Stored Procedure나 Trigger ...
    • KDDG_ZZOM
      2002.12.13 09:10
      저경우는 집에다 퍼스널 오라클 인스톨해서 그냥 이것저것 해봤는데... 어떻게 공부해야되는건 본인이 얼...
    • KDDG_ZZOM
      2002.12.13 09:06
      트랜잭션을 관리하는걸 물어본건가요? 트랜잭션을 관리할려면 DataBase콤포넌트를 가지고 이용하시면 될...
    • 이상협
    • 2002.12.13 04:36
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 열심히
      2002.12.17 01:08
      님 그에러라면 에러메세지를 잘 살펴보심이.... List에 0번쨰 인덱스는 범위를 벗어난거래내요//....
    • Galaxy
      2002.12.13 19:54
      안녕하세요 수고 많습니다. 님께서 작성한 퀴리에서 파라미터가 몇개라고 생각 합니까?   &...
    • ^ㅡ^
      2002.12.13 07:34
      //답변이 될지 모르겠네요 var   I : Integer; begin    I := Length(FieldbyN...
    • 미러
    • 2002.12.13 04:09
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 열심히
      2002.12.17 01:12
      델파이에서 처리할수 있습니다... Access DB는 모르지만 델파이에서 님이 말씀하신대로 처리할수 있습니...
    • 이추형
      2002.12.20 22:21
      일단은 델파이에서 필드개수에 대한 제약은 없습니다. 단지 정해진 버퍼에 의해 데이타를 가져오기때문에 ...
    • 최용일
      2002.12.13 20:36
      안녕하세요. 최용일입니다. 클라이언트를 인디로 안바꾸셔도 됩니다. OnExecute이벤트에서 읽으시면...
    • 도니
      2002.12.13 21:35
      검색했을때..최용일님의 답변이 많아서.. 답변해주실꺼라...생각했는데..역시나..^^ 감사합니다..
    • 김보영
    • 2002.12.13 02:22
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.12.13 20:26
      안녕하세요. 최용일입니다. RTTI 함수들을 사용하세요... uses     ......, Ty...
    • 정형준
      2002.12.13 18:37
      이렇게 해보세요.     ShowMessage(IntToStr(Integer(False))); 여기서 힌트를 ...
    • 백진욱
      2002.12.17 02:46
      이상로님 말씀처럼 윈도 2000일경우 폼의 폰트속성에서 Charset 속성을 HANGEUL_CHARSET 로 설정해주...
    • 신강섭
      2002.12.17 00:50
      그건 개발할때 폰트를 한글로 마춰서 개발하면 2000이 됐건 98됬건 아무상관 없습니다. 착오없으시...
    • 심재용
      2002.12.16 10:41
      개인적으로는 win 2000  을 계속사용하시길 추천합니다. 이유인 즉 win98 이 너무 불안정해서 o...
    • 이상로
      2002.12.13 02:28
      OS가 2000이상인 경우에는 Font Dialog의 언어 선택이 굴림체등을 선택해도 자동으로 한글로 바뀌지 않아...
    • 김용덕
      2002.12.13 02:26
      안녕하세요. 저도 그런 경우가 있긴 했는데, 그건 Main Form의 폰트때문입니다. Main Form의 Font를 굴림...
    • 하기
      2002.12.13 01:44
      화면도 무지크게 늘어납니다 ====> 아마도 그건 Scaled때문이 아닐까 싶네요... 폰트가 깨진다는 말은...
    • 질문걸
    • 2002.12.13 00:36
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 하기
      2002.12.13 00:56
      아마도 Hint를 말씀하시는것 같군요... 해당 컴포넌트의 Properties에 보시면 Hint라는것이 있을꺼여염 ...