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의 차이는 어떤것인가요?
방법을 찾아서 해결하는수 밖에 없습니다..오래 이런 작업을 반복하다보면
나중엔 디비를 어떻게 만들어야 쿼리를 짤때 용이 할지 속도가 면에서
불필요한 테이블을 조인한다거나 하는 인덱스까지 생각한는 시야가 길러지게
되구요.
시중에 쿼리의 예제만 짠뜩있는 책들이 있습니다..거의 그책 한권이면 모든
형태의 쿼리를 해결할수 있더라구요..
님이 올리신 쿼리를 분석해 드릴꼐요..잘못된 부분도 지적..^^
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