1

Konu: doğru query

selamlar;

hangi yöntem daha doğru ve hızlı fikir verebilirmsiniz.

1. tablelar cross bağlayıp where ile filitrelemekmi?

Visual Fox Pro
SELECT Lg_099_10_orfline.LOGICALREF, Lg_099_10_orfline.DATE_,;

  Lg_099_10_orfline.AMOUNT, Lg_099_10_orfline.PRICE,;
  Lg_099_10_orfline.TOTAL, Lg_099_10_orfline.SHIPPEDAMOUNT,;
  Lg_099_10_orfline.LINEEXP, Lg_099_10_orfline.DUEDATE,;
  Lg_099_10_orfiche.FICHENO, Lg_099_clcard.CODE, Lg_099_items.CODE,;
  Lg_099_items.NAME, Lg_099_10_orfline.SPECODE,;
  Lg_099_10_orfiche.DOCTRACKINGNR, Lg_099_10_orfline.CLOSED;
FROM ;
     dbo.LG_099_10_ORFLINE Lg_099_10_orfline,;
    dbo.LG_099_10_ORFICHE Lg_099_10_orfiche,;
    dbo.LG_099_CLCARD Lg_099_clcard,;
    dbo.LG_099_ITEMS Lg_099_items;
WHERE ( (  Lg_099_10_orfline.ORDFICHEREF = Lg_099_10_orfiche.LOGICALREF;
   AND  Lg_099_10_orfline.STOCKREF = Lg_099_items.LOGICALREF );
   AND  Lg_099_10_orfline.CLIENTREF = Lg_099_clcard.LOGICALREF );
   AND  ( (  Lg_099_10_orfline.TRCODE = ( 2 );
   AND  Lg_099_10_orfline.STATUS = ( 4 ) );
   AND  (  Lg_099_10_orfline.AMOUNT > Lg_099_10_orfline.SHIPPEDAMOUNT;
   AND  Lg_099_10_orfline.CLOSED = ( 0 ) ) )

yosa
2. join yaparken "ON"  ile  şartlandırmakmı?

Visual Fox Pro
SELECT Lg_099_10_orfline.LOGICALREF, Lg_099_10_orfline.DATE_,;

  Lg_099_10_orfline.AMOUNT, Lg_099_10_orfline.PRICE,;
  Lg_099_10_orfline.TOTAL, Lg_099_10_orfline.SHIPPEDAMOUNT,;
  Lg_099_10_orfline.LINEEXP, Lg_099_10_orfline.DUEDATE,;
  Lg_099_10_orfiche.FICHENO, Lg_099_clcard.CODE, Lg_099_items.CODE,;
  Lg_099_items.NAME, Lg_099_10_orfline.SPECODE,;
  Lg_099_10_orfiche.DOCTRACKINGNR, Lg_099_10_orfline.CLOSED,;
  Lg_099_10_defnfldstranv.NUMFLDS1 AS iyil;
FROM ;
     DBO.LG_099_10_DEFNFLDSTRANV Lg_099_10_defnfldstranv ;
    INNER JOIN DBO.LG_099_10_ORFLINE Lg_099_10_orfline ;
   ON  Lg_099_10_defnfldstranv.OWNERREF = Lg_099_10_orfline.LOGICALREF ;
    INNER JOIN dbo.LG_099_ITEMS Lg_099_items ;
   ON  Lg_099_10_orfline.STOCKREF = Lg_099_items.LOGICALREF ;
    INNER JOIN DBO.LG_099_10_ORFICHE Lg_099_10_orfiche ;
   ON  Lg_099_10_orfline.ORDFICHEREF = Lg_099_10_orfiche.LOGICALREF ;
    INNER JOIN dbo.LG_099_CLCARD Lg_099_clcard ;
   ON  Lg_099_10_orfiche.CLIENTREF = Lg_099_clcard.LOGICALREF;
ORDER BY Lg_099_10_orfiche.FICHENO

İki kod da farklı.
Bu kodlarla ilgili bir problemim yok.
Sadece doğru kod yöntemini  aramktayım!

Bilmediğin Neyse Yanıldığındır.

2

Re: doğru query

benim bildiğim ikisinin bir farkı yok...

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

3

Re: doğru query

Konu fox table i olsaydi where sonrasi alanlarin indexli olmasi performansı etkilerdi ama SQL table olunca sanirim herhangi bir degisiklik gostermez

4

Re: doğru query

Yaşadığım bir olayı aktarayım;

"Where table1.a=table2.a" ile filitrelediğimde gelen kayıt sayısı ile "join table1 ON table1.a=table2.a" filitrede gelen kayıt sayısı farklı çıkıyor.
Bu olaydan sonra dikkat etmeye başladım 3-5 table olan query lerde ciddi bi sıkıntım olmaya başladı.
Eminim iki yöntemde doğrudur. Sadece uygun yerde kullanılması gerekiyordur.
Ama nasıl?

Bilmediğin Neyse Yanıldığındır.

5

Re: doğru query

mrduyar yazdı:

Yaşadığım bir olayı aktarayım;

"Where table1.a=table2.a" ile filitrelediğimde gelen kayıt sayısı ile "join table1 ON table1.a=table2.a" filitrede gelen kayıt sayısı farklı çıkıyor.
Bu olaydan sonra dikkat etmeye başladım 3-5 table olan query lerde ciddi bi sıkıntım olmaya başladı.
Eminim iki yöntemde doğrudur. Sadece uygun yerde kullanılması gerekiyordur.
Ama nasıl?


"Where table1.a==table2.a" yada join table1 ON table1.a==table2.a seklinde denedinmi
yada join tipin etkiliyordur sonucu , inner yerine left kullandiginda durum nasil oluyor ?

6

Re: doğru query

from table1, table2 where ...

from table1 inner join table2 on ...

ile ayni anlamda. Baglantilar icin join kullan, where ile filtrele.

Senin iki kodun ayni degil.

7

Re: doğru query

Visual Fox Pro
SELECT Sqlambarlar.CODE,IIF(ISNULL(malzemeler1.ihtiyac),0,malzemeler1.ihtiyac) AS ihtiyac,malzemeler1.wka_partno,;

    malzemeler1.siparisno, malzemeler1.wka_partno,;
    malzemeler1.hafta,Sqlambarlar.NAME, Sqlambarlar.cyphcode,;
    Sqlambarlar.specode, Sqlambarlar.gercek, Sqlambarlar.rezerve,;
    Sqlambarlar.invenno, Sqlambarlar.avgvalue;
    FROM ;
    malzemeler1 malzemeler1 ;
    RIGHT OUTER JOIN Sqlambarlar ;
    ON  ALLTRIM(malzemeler1.CODE) == ALLTRIM(Sqlambarlar.CODE);
    AND  Sqlambarlar.invenno = ( 0 );
    INTO CURSOR malzemelersonuc READWRITE NOFILTER

ile

Visual Fox Pro
SELECT Sqlambarlar.CODE,IIF(ISNULL(malzemeler1.ihtiyac),0,malzemeler1.ihtiyac) AS ihtiyac,malzemeler1.wka_partno,;

    malzemeler1.siparisno, malzemeler1.wka_partno,;
    malzemeler1.hafta,Sqlambarlar.NAME, Sqlambarlar.cyphcode,;
    Sqlambarlar.specode, Sqlambarlar.gercek, Sqlambarlar.rezerve,;
    Sqlambarlar.invenno, Sqlambarlar.avgvalue;
    FROM ;
    malzemeler1 malzemeler1 ;
    RIGHT OUTER JOIN Sqlambarlar ;
    ON  ALLTRIM(malzemeler1.CODE) == ALLTRIM(Sqlambarlar.CODE);
INTO CURSOR malzemelersonuc READWRITE NOFILTER where Sqlambarlar.invenno = ( 0 );

arasında 15 kayıt farkı var. (çünkü 15 hammadde 2 ambarda birden var ) anlatmak istdiğim aslında buydu.
sorum ise bunun mantığı nedir?

Bilmediğin Neyse Yanıldığındır.

8

Re: doğru query

soykanozcelik yazdı:

Konu fox table i olsaydi where sonrasi alanlarin indexli olmasi performansı etkilerdi ama SQL table olunca sanirim herhangi bir degisiklik gostermez


indeksli olması sql-server da da foxpro da da oracla da da etkiler performansı. ben arada bir fark yok derken where ve join i kastetmiştim...

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

9

Re: doğru query

metin yazdı:
soykanozcelik yazdı:

Konu fox table i olsaydi where sonrasi alanlarin indexli olmasi performansı etkilerdi ama SQL table olunca sanirim herhangi bir degisiklik gostermez


indeksli olması sql-server da da foxpro da da oracla da da etkiler performansı. ben arada bir fark yok derken where ve join i kastetmiştim...


SQL server konusunda net fikrim olmadigi icin oyle yazdim smile

10

Re: doğru query

Şimdi çok iyi hatırlamıyorum ama bir yerde okumuştum, join where'den daha iyi. Mantık olarakta bağlantılar için join filtreleme için where kullanmak en güzeli bence

/o---------------------o\
     www.haser.com
\o---------------------o/

11

Re: doğru query

taRKan yazdı:

Şimdi çok iyi hatırlamıyorum ama bir yerde okumuştum, join where'den daha iyi. ...


sebep?
aralarında gördüğüm tek fark join ile karşılığı olmayan satırları da getirebiliyorsun. içiçe select yerine where kullanmanın daha iyi olduğunu okumuştum ama bunu duymadım...

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

12

Re: doğru query

metin yazdı:
taRKan yazdı:

Şimdi çok iyi hatırlamıyorum ama bir yerde okumuştum, join where'den daha iyi. ...


sebep?
aralarında gördüğüm tek fark join ile karşılığı olmayan satırları da getirebiliyorsun. içiçe select yerine where kullanmanın daha iyi olduğunu okumuştum ama bunu duymadım...


Sebep demekte haklısın yazdığım cümle yeterince açıklayıcı olmamış
Join'in where'den daha hızlı olduğunu okumuştum.

/o---------------------o\
     www.haser.com
\o---------------------o/