Q&A

  • ㅠ.ㅠ 조인에 관한 질문임당.... 넘 어렵당....
고수님들 inner join 에 관해서 질문임당....



넘어려워서리...ㅠ.ㅠ



흠 일단은 지가 해볼려구엽 아래와 같이 했는디... 감이 안오네엽..



sql.add ('select 불량내역.유발공정,불량내역.조치자,불량내역.조치일자,');

sql.add('불량명세.불량부위,불량명세.불량내역,');

sql.add('from 불량내역 *= 불량명세 on 불량내역.불량코드=불량명세.불량코드');

sql.add('where 불량내역.제조번호= listbox1.items[listbox1.itemindex]');

open;



이런식 으로 했는디 값이 안나오네엽 ㅠ.ㅠ 넘 어려워



고수님들 일단 이너조인(*=)에 대해서 한말씀과 위의 소스에 대해서두 말해주심 감솨 하겠습니당..... ^^ 그럼 20000

2  COMMENTS
  • Profile
    까마귀 2000.06.14 02:48
    사발우성 wrote:

    > 고수님들 inner join 에 관해서 질문임당....

    >

    > 넘어려워서리...ㅠ.ㅠ

    >

    > 흠 일단은 지가 해볼려구엽 아래와 같이 했는디... 감이 안오네엽..

    >

    > sql.add ('select 불량내역.유발공정,불량내역.조치자,불량내역.조치일자,');

    > sql.add('불량명세.불량부위,불량명세.불량내역,');

    > sql.add('from 불량내역 *= 불량명세 on 불량내역.불량코드=불량명세.불량코드');

    > sql.add('where 불량내역.제조번호= listbox1.items[listbox1.itemindex]');

    > open;

    >

    > 이런식 으로 했는디 값이 안나오네엽 ㅠ.ㅠ 넘 어려워

    >

    > 고수님들 일단 이너조인(*=)에 대해서 한말씀과 위의 소스에 대해서두 말해주심 감솨 하겠습니당..... ^^ 그럼 20000





    안녕하세요. 까마귀입니다.



    SQL문에서 특힌 JOIN같은 경우는 위처럼 쓰시지 마시고, 원래의 문장 그대로를 쓰세요.

    위처럼 쓰는것( *= )을 TSQL(확장 SQL)이라고 하던가(?) 가물가물...죄송.

    아무튼 쓰시려면 이런식으로 하세요.

    MS에서도 이걸 권장한다고 하던군요.

    Sql.Add ('Select 불량내역.유발공정,불량내역.조치자,불량내역.조치일자,');

    Sql.Add('불량명세.불량부위,불량명세.불량내역,');

    Sql.Add('From 불량내역 LEFT JOIN 불량명세 On 불량내역.불량코드 = 불량명세.불량코드');

    Sql.Add('Where 불량내역.제조번호 = ''' + listbox1.items[listbox1.itemindex] + '''');







    위대한 단군혼이 살아있는 나라.... 대한민국.

  • Profile
    하얀까마귀 2000.06.13 23:45
    안녕하세요 하얀까마귀 입니다...



    조인은 두개이상의 테이블에서 연관된 데이타를 찾는 겁니다.. 음.. .master/detail같은



    거죠... ( 많이 사용되는게.. )



    이걸로 예를 들면...



    음.. ..이게 좋겠네요...



    인명자료에서 만약 주소를 우편번호와 번지부분만을 저장했습니다..



    다시말해서 '시'부터 '동'까지는 그냥 우편번호 7자리만 저장했어요.. 자료가 상당히



    줄겠죠.. 그런데 이놈은 문제가 있죠..



    그리드에 주소가 나와야 하는데... 이럴때 조인을 씁니다.. 우편번호와 인명을 조인



    하는거죠..



    select a.이름, a.우편번호, b.주소, a.번지 from 인명 a, 우번 b

    where a.우편번호 = b.우편번호



    이게 보통 말하는 조인이구요..



    이걸 inner join이라고 합니다...



    그리고 outter join .... ( 이건 이상하게 모르시는분이 좀 계시더라구요... )



    그런데.. 우편번호라는게 가끔 바뀌죠.. 물론 이전의 번호는 유지시키기는 하지만..



    그렇지 않은 경우도 있죠..이럴경우에 이런 방식은 끔찍하죠..



    우편번호 111-111 이라는게 이전에는 있었는데 지금은 없으면 이자료는



    위의 select에서 사라집니다.. 그래서 자료가 지워진줄 알게 되죠.. 흑흑..



    이럴경우에는 outter join을 써야 합니다..



    select a.이름, a.우편번호, b.주소, a.번지 from 인명 a, 우번 b

    where a.우편번호 *= b.우편번호 <-- 요것만 다르죠??



    '*= ' 요걸 left outter join '=*' 요걸 right outter join



    이라고 하죠...



    left는 왼쪽에 있는 테이블을 기준으로 자료를 불러 옵니다...



    그러니까 쉽게 말하면 인명을 공책에다가 적어 놓고 우편번호를 하나씩 찾아서 주소부분



    에 써 넣는거죠..그래서 우편번호가 없더라도 아까처럼 없어지진 않고 단지 해당 필드만



    빈걸로 나오죠..



    더 좋다구요..??? 하지만 이거 당연히 느리죠.. 후후...



    right는 반대고요..



    이건 디비마다 조금씩 형식이 다르니 조심해서 쓰세요..



    outer조인에 관해서는 디비마다 조금씩 형식이 다르고요..



    느려서 쓰실때 주의해서 쓰셔야 합니다..



    이걸 빈번히 쓰시면 속도저하의 한 몫 할겁니다...



    그럼 즐거운시간 되세요..



    - 하얀까마귀 -







    사발우성 wrote:

    > 고수님들 inner join 에 관해서 질문임당....

    >

    > 넘어려워서리...ㅠ.ㅠ

    >

    > 흠 일단은 지가 해볼려구엽 아래와 같이 했는디... 감이 안오네엽..

    >

    > sql.add ('select 불량내역.유발공정,불량내역.조치자,불량내역.조치일자,');

    > sql.add('불량명세.불량부위,불량명세.불량내역,');

    > sql.add('from 불량내역 *= 불량명세 on 불량내역.불량코드=불량명세.불량코드');

    > sql.add('where 불량내역.제조번호= listbox1.items[listbox1.itemindex]');

    > open;

    >

    > 이런식 으로 했는디 값이 안나오네엽 ㅠ.ㅠ 넘 어려워

    >

    > 고수님들 일단 이너조인(*=)에 대해서 한말씀과 위의 소스에 대해서두 말해주심 감솨 하겠습니당..... ^^ 그럼 20000