User Tag List

Ցույց են տրվում 1 համարից մինչև 15 համարի արդյունքները՝ ընդհանուր 93 հատից

Թեմա: Հարցեր SQL-ից

Համակցված դիտում

Նախորդ գրառումը Նախորդ գրառումը   Հաջորդ գրառումը Հաջորդ գրառումը
  1. #1
    Կեցցե թագավորը Varzor-ի ավատար
    Գրանցման ամսաթիվ
    16.03.2009
    Հասցե
    Երկիր մոլորակ, ՀՀ ք. Երևան
    Տարիք
    43
    Գրառումներ
    7,503
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)
    Մեջբերում Ներսես_AM-ի խոսքերից Նայել գրառումը
    էս հարցումդ նույնն ա ինչ
    Կոդ:
    Select * From Table1
    Left Join Table2 on (Table1.ID=Table2.TABLE1ID)
    սովորական join-ի դեպքում այն տողերը որոնք երկրորդ աղյուսակում չկան չեն վերադարձվում,
    Բացի դա հարցումդ շատ անգամ կարագանա, եթե Table2.TABLE1ID-ի վրա ինդեքս դնես:
    չէ նույնը չի,
    left outer join-ի դեպքում ձախից միացնում ա, բոլոր տողերը, անկախ նրանից, կան թե չկան:
    Օրինակ
    T1.ID T1.TEXT T2.ID T2.T1ID T2.TEXT
    1 a 1 1 aa
    1 a 2 1 ab
    2 b
    3 c 3 3 ca
    3 c 4 3 cb
    4 d

    սովորական Join-ի (INNER JOIN) ստացվում է հետևյալը`

    T1.ID T1.TEXT T2.ID T2.T1ID T2.TEXT
    1 a 1 1 aa
    1 a 2 1 ab
    3 c 3 3 ca
    3 c 4 3 cb

    Ինդեքսները դրված են բոլոր բանալի հանդիսացող սյուների, ինչպես նաև "ծնող" բանալի սյուների վրա

    Oracl-ում կա սենց տարբերակ`
    Select * From Table1
    Left Join Table2 on (Table1.ID EXPECT Table2.TABLE1ID)
    Եթե չեմ սխալվում (սինտաքսիսը չեմ վերանայել, արագ գրեցի, վաղուց Oracl-ով չեմ զբաղվում),
    նույնը արդեն կա նաև SQL Server 2008-ում,
    Բայց Firebird/Interbase-ում չկա
    Կարելի է գրել նաև այսպես`
    Select * From Table1
    Where Table1.ID NOT IN (SELECT Table2TABLE1ID From Table2)

    Սակայն հարցման կատարման պլանի կառուցման և հարցման կատարման մաթեմատիկական և պրոցեսորային հաշվարկների տեսանկյունից նույնն է տալիս
    հարցը այն է, որ վերադարձվեն այն տողերը, որոնք 2-ՐԴ ԱՂՅՈՒՍԱԿՈՒՄ ՉԿԱՆ` ենթատող չունեն:
    T1.ID T1.TEXT T2.ID T2.T1ID T2.TEXT
    2 b
    4 d

  2. #2
    Պատվավոր անդամ Ներսես_AM-ի ավատար
    Գրանցման ամսաթիվ
    25.06.2006
    Գրառումներ
    4,303
    Բլոգի գրառումներ
    1
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)
    Մեջբերում Varzor-ի խոսքերից Նայել գրառումը
    չէ նույնը չի,
    Հա ճիշտ ա նույնը չի լավ չէի նկատել որ <> ես դրել պայմանի մեջ. մտածել էի = ես դրել: Բայց էս քո գրածով ընդհանրապես ոչ մի տող չի գա
    Կոդ:
    Select * From Table1
    Left Join Table2 on (Table1.ID=Table2.TABLE1ID)
    Where Table1.ID<>Table2.TABLE1ID
    որովհետև մի հատ գրել ես «on (Table1.ID=Table2.TABLE1ID)» հետո էլ գրել ես «Where Table1.ID<>Table2.TABLE1ID», որ էտ նույն տողերը իրար հավասար չլինեն
    Եթե outer join արած լինեիր էտ դեպքում քո ասածը կվերադարձներ:

    իմ կարծիքով ամենաարագը պիտի որ սա լինի
    Կոդ:
    SELECT Table1.* 
    FROM Table1 LEFT OUTER JOIN Table2 
    ON (Table1.ID=Table2.TABLE1ID)
    WHERE Table2.ID IS NULL
    Join սենց թե նենց պիտի անես դրանից չես փախնի, իսկ where-ն էլ սրանից օպտիմալ ինձ թվում ա դժվար ա գրել: Բայց եթե մի ուրիշ խելքին մոտ բան մոգոնես ասա:
    Հա էտ where-ի սյունյակը պիտի նենց սյունյակ վերցնես որ null չի լինում օրինակ primary key-ն: Վերադարձվող ինֆոյի ծավալն էլ ինչքան կարող ես փոքրացրու, կոնկրետ ես վերցրել եմ առաջին աղյուսակի սյուները: Մեծ միլիոնանոց ռեզալսեթերի դեպքում էական տարբերություն ա տալիս:

  3. #3
    Կեցցե թագավորը Varzor-ի ավատար
    Գրանցման ամսաթիվ
    16.03.2009
    Հասցե
    Երկիր մոլորակ, ՀՀ ք. Երևան
    Տարիք
    43
    Գրառումներ
    7,503
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)
    Մեջբերում Ներսես_AM-ի խոսքերից Նայել գրառումը
    որովհետև մի հատ գրել ես «on (Table1.ID=Table2.TABLE1ID)» հետո էլ գրել ես «Where Table1.ID<>Table2.TABLE1ID», որ էտ նույն տողերը իրար հավասար չլինեն
    Եթե outer join արած լինեիր էտ դեպքում քո ասածը կվերադարձներ:

    Շնորհակալություն արձագանքի համար:
    Իրականում Left [Outer] Join ...
    Outer-ը կարելի ա, բաց թողել Where-ը աշխատում է ամենավերջում` join-ը կատարելուց հետո:

    Table2.ID IS NULL տարբերակն իրոք որ համարժեք է` թե արդյունքի, թե Engine-ի կողմից կատարվող գործողությունների տեսանկյունից (նույնիսկ որոշ Engine-ների կողմից ավելի արագ է կատարվում` կախված NULL երի հետ աշխատելու սկզբունքից):
    2 աղյուսակում ID-ները առաջնային բանալի են (նկարում կա) և ինդեքսավորված:
    Վերադարձվող ինֆորմացիայի քանակը, կախված RAM-ից, իհարկե կապ ունի, ինձ ամբողջն ա պետք, դրա համար եմ տենց գրել:
    Գոյություն ունի նաև ոչ ակնհայտ համակցման տարբերակ` առանց Join-ի, սակայն խոսքը գնում է, հենց այս տարբերակի մասին:

    Մի խոսքով, ոնց հասկացա Firebird-ի մասին չեք ասում ավելին, քան կա:

    Համենայն դեպս, իրոք շնորհակալ եմ

  4. #4
    Պատվավոր անդամ Ներսես_AM-ի ավատար
    Գրանցման ամսաթիվ
    25.06.2006
    Գրառումներ
    4,303
    Բլոգի գրառումներ
    1
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)
    Varzor, Firebird-ից տեղյակ չեմ, mysql-ով եմ ասում, էնտեղ եթե OUTER չես գրում default-ով INNER ա լինում:

    Ուրիշ բան չեմ կարող ասել, բայց եթե մի խելոք բան գտնես ստեղ գրի մենք էլ իմանանք

  5. #5
    Կեցցե թագավորը Varzor-ի ավատար
    Գրանցման ամսաթիվ
    16.03.2009
    Հասցե
    Երկիր մոլորակ, ՀՀ ք. Երևան
    Տարիք
    43
    Գրառումներ
    7,503
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)
    Հա բա իհարկե
    Բա էլ ինչի համար են ֆորումները? միայն վերցնելու? կարելի է նաև ներդնել

    Մի հարց MySQL-ւմ սենց բաներ կան?

    Select ... from
    LEFT INNER JOIN
    և
    Select ... from
    LEFT OUTER JOIN

    Որն է տարբերությունը??
    Վերջին խմբագրող՝ Varzor: 03.05.2011, 18:36:

  6. Գրառմանը 1 հոգի շնորհակալություն է հայտնել.

    Աթեիստ (03.05.2011)

  7. #6
    Պատվավոր անդամ Ներսես_AM-ի ավատար
    Գրանցման ամսաթիվ
    25.06.2006
    Գրառումներ
    4,303
    Բլոգի գրառումներ
    1
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)
    Մեջբերում Varzor-ի խոսքերից Նայել գրառումը
    Հա բա իհարկե
    Բա էլ ինչի համար են ֆորումները? միայն վերցնելու? կարելի է նաև ներդնել

    Մի հարց MySQL-ւմ սենց բաներ կան?

    Select ... from
    LEFT INNER JOIN
    և
    Select ... from
    LEFT OUTER JOIN

    Որն է տարբերությունը??
    հա ոնց չկա, տարբերությունն էլ հենց էն էր որ, OUTER-ի դեպքում երկրորդ աղյուսակի տողերը գալիս են NULL-երով եթե այդ տողը գոյություն չունի,
    կարճ ասած ստեղ լավ նկարագրել ես http://www.akumb.am/showthread.php/1...=1#post2228554

    ու mysql-ում երբ գրում ես A JOIN B դեֆոլթով հասկանում ա LEFT INNER JOIN, եթե OUTER ես ուզում պիտի արդեն գրես OUTER: OUTER JOIN միայն գրելուց էլի LEFT ա հասկանում, կարող ես RIGHT գրես:

  8. #7
    Կեցցե թագավորը Varzor-ի ավատար
    Գրանցման ամսաթիվ
    16.03.2009
    Հասցե
    Երկիր մոլորակ, ՀՀ ք. Երևան
    Տարիք
    43
    Գրառումներ
    7,503
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)
    Firebird-ում 7 SQL Server-ում [Left] [Right] INNER JOIN` այսինքն կարելի է բաց թողնել` ստացվում է սովորական միավորում` ըստ պայմանի:
    Այ սենց տարբերություններ կան, դրա համար էլ, եթե մի բանով աշխատում ես, հետո անցնում մյուսին երբեմն օրերով չարչարվու ես մի հատ բարդ հարցումը "թարգմանելու" համար

Թեմայի մասին

Այս թեման նայող անդամներ

Այս պահին թեմայում են 1 հոգի. (0 անդամ և 1 հյուր)

Համանման թեմաներ

  1. Հարցեր AngularJS֊ից
    Հեղինակ՝ Freeman, բաժին` Վեբ ծրագրավորում
    Գրառումներ: 7
    Վերջինը: 31.08.2016, 23:19
  2. Հարցեր պլանշետներից
    Հեղինակ՝ aerosmith, բաժին` Հարց ու պատասխան
    Գրառումներ: 107
    Վերջինը: 24.10.2015, 20:59
  3. Հարցեր PHP-ից
    Հեղինակ՝ ARMbrain, բաժին` Վեբ
    Գրառումներ: 63
    Վերջինը: 12.07.2012, 12:53
  4. Հարցեր Oracle-ից :)
    Հեղինակ՝ sedrakpc, բաժին` Ծրագրավորում
    Գրառումներ: 4
    Վերջինը: 30.08.2011, 13:22
  5. Հարցեր Ucoz - ից
    Հեղինակ՝ xaker00, բաժին` Վեբ կայքերի քննարկում
    Գրառումներ: 3
    Վերջինը: 07.06.2010, 19:13

Թեմայի պիտակներ

Էջանիշներ

Էջանիշներ

Ձեր իրավունքները բաժնում

  • Դուք չեք կարող նոր թեմաներ ստեղծել
  • Դուք չեք կարող պատասխանել
  • Դուք չեք կարող կցորդներ տեղադրել
  • Դուք չեք կարող խմբագրել ձեր գրառումները
  •