Q&A

  • 델파이에서 오라클데이터를 불러오는 sql인데....
내용은 다음과 같습니다.

넘 궁금해서리...자세한건 밑에 보시면 있습니다.

SELECT A.YEAR, A.HAKGI, B.DAEHAK DAEHAKCD, C.CDFNM DAEHAK, D.HAKGWAFNM, D.HAKGWASNM, A.HAKYOUN, A.HAKBUN, B.IRUM,

DECODE(B.HAKBUGBN,'0301','450015','450016') NONGNO,

A.IPHAKAMT, A.SUUPAMT, A.GISUNGAMT, A.JHIPHAKAMT, A.JHSUUPAMT,

A.JHGISUNGAMT, A.INIPHAKAMT, A.INSUUPAMT, A.INGISUNGAMT, A.INGISUNGAMT,

(A.INIPHAKAMT+A.INSUUPAMT+A.INGISUNGAMT) INTOT,

E.BOHOPOST, E.BOHOADDR, E.BOHOJUSO, E.BOHOIRUM||' 귀하' BOHOIRUM, E.HSPOST, E.HSADDR, E.HSJUSO, B.IRUM||' 귀하' HAKIRUM

FROM SDRDUNGD A, SHJHAKJM B, SGCCODEM C, SGCHAKCM D, SHJADDRM E

, SDRBUNDD F

WHERE A.HAKBUN = B.HAKBUN (+) <====

AND B.DAEHAK = C.CODE (+) = 이녀석들입니다.

AND A.HAKGWA = D.HAKGWA (+) =

AND A.HAKBUN = E.HAKBUN (+) <====

AND F.DRYN = 'N'

AND A.YEAR = '2000' AND A.HAKGI = '2'

AND A.HAKYOUN LIKE '%' AND A.FILECREATEYN = 'Y'

AND (A.YEAR = F.YEAR AND A.HAKGI = F.HAKGI AND A.HAKBUN = F.HAKBUN AND F.BUNCHASU = '1')

ORDER BY B.DAEHAK, A.HAKGWA, A.HAKYOUN, A.HAKBUN



위의 쿼리에서 "(+)"가 붙은 이유는 무엇일까여?

위의 쿼리는 학생들에게 고지서출력할때 사용하는 쿼리입니다.

근데 where 에서"(+)"는 주로 뭐할때 사용하는 건가여?

넘 궁금해서 질문올립니다.

고견바랍니다.

2  COMMENTS
  • Profile
    김동수 2001.03.13 02:43
    11

  • Profile
    초보왕 2001.03.13 02:19
    김동수 wrote:

    > 내용은 다음과 같습니다.

    > 넘 궁금해서리...자세한건 밑에 보시면 있습니다.

    > SELECT A.YEAR, A.HAKGI, B.DAEHAK DAEHAKCD, C.CDFNM DAEHAK, D.HAKGWAFNM, D.HAKGWASNM, A.HAKYOUN, A.HAKBUN, B.IRUM,

    > DECODE(B.HAKBUGBN,'0301','450015','450016') NONGNO,

    > A.IPHAKAMT, A.SUUPAMT, A.GISUNGAMT, A.JHIPHAKAMT, A.JHSUUPAMT,

    > A.JHGISUNGAMT, A.INIPHAKAMT, A.INSUUPAMT, A.INGISUNGAMT, A.INGISUNGAMT,

    > (A.INIPHAKAMT+A.INSUUPAMT+A.INGISUNGAMT) INTOT,

    > E.BOHOPOST, E.BOHOADDR, E.BOHOJUSO, E.BOHOIRUM||' 귀하' BOHOIRUM, E.HSPOST, E.HSADDR, E.HSJUSO, B.IRUM||' 귀하' HAKIRUM

    > FROM SDRDUNGD A, SHJHAKJM B, SGCCODEM C, SGCHAKCM D, SHJADDRM E

    > , SDRBUNDD F

    > WHERE A.HAKBUN = B.HAKBUN (+) <====

    > AND B.DAEHAK = C.CODE (+) = 이녀석들입니다.

    > AND A.HAKGWA = D.HAKGWA (+) =

    > AND A.HAKBUN = E.HAKBUN (+) <====

    > AND F.DRYN = 'N'

    > AND A.YEAR = '2000' AND A.HAKGI = '2'

    > AND A.HAKYOUN LIKE '%' AND A.FILECREATEYN = 'Y'

    > AND (A.YEAR = F.YEAR AND A.HAKGI = F.HAKGI AND A.HAKBUN = F.HAKBUN AND F.BUNCHASU = '1')

    > ORDER BY B.DAEHAK, A.HAKGWA, A.HAKYOUN, A.HAKBUN

    >

    > 위의 쿼리에서 "(+)"가 붙은 이유는 무엇일까여?

    > 위의 쿼리는 학생들에게 고지서출력할때 사용하는 쿼리입니다.

    > 근데 where 에서"(+)"는 주로 뭐할때 사용하는 건가여?

    > 넘 궁금해서 질문올립니다.

    > 고견바랍니다.



    OUTER JOIN이라구 하는데여....

    위의 쿼리의 경우 TABLE A 가 MASTER TABLE이 되겠군요..

    A 와 B를 그냥 A.HAKBUN = B.HAKBUN 으로 조인하게 되면 교집합을 조회하게 되죠

    즉 A와 B TABLE 둘 다에 HAKBUN이 같은 RECORD가 있어야 하죠..

    A,B 중 하나라도 없으면 조회 안됩니다.

    하지만 B TABLE에 없더라고 A TABLE에 존재하면 반드시 나오고(의도하는 바가 그러할때) B에 A에 있는 HAKBUN이 있으면 조회하고 ..없으면 말고 ... 라는 조회가 되죠..

    여기서 D나 E도 마찬가지의 경우가 되겠죠..



    그런데

    > WHERE A.HAKBUN = B.HAKBUN (+) <====

    > AND B.DAEHAK = C.CODE (+) = 이녀석들입니다.

    << 이부분은 이해가 안되는군요..

    이런 이중 OUTER JOIN은 쓸수 없다구 알구 있는데염...

    B 에 있거나 말거나인데 B에 대해서 C가 있거나 말거나라니..

    내가 잘못알구 있는건감??

    이럴땐 IN LINE VIEW 써야 하는거 아닌감...-.-;;