Նմուշառում sql աղյուսակից: SQL լեզու. Տվյալների ընտրություն (SELECT հայտարարություն): Օգտագործելով SQL Microsoft Access-ում

SQL SELECT հայտարարությունը նախատեսված է տվյալների բազայից տվյալներ ընտրելու հարցումների համար: Այն կարող է օգտագործվել ինչպես առանց պայմանների (ընտրելով բոլոր տողերը բոլոր սյունակներում կամ բոլոր տողերը հատուկ սյունակներում), այնպես էլ մի քանի պայմաններով (հատուկ տողեր ընտրելով), որոնք նշված են WHERE կետում: Եկեք ծանոթանանք SQL գործիքներին, որոնք կարող են օգտագործվել տվյալների ընտրության վրա այս պայմանները սահմանելու համար, ինչպես նաև սովորել, թե ինչպես օգտագործել SELECT հայտարարությունըենթահարցերում։

Ընտրեք՝ աղյուսակի սյունակներն ընտրելու համար

Սեղանի բոլոր սյունակները ընտրելու համար SELECT դրույթով հարցումն ունի հետևյալ շարահյուսությունը.

SELECT * TABLE_NAME-ից

Այսինքն՝ աղյուսակի բոլոր սյունակները ընտրելու համար SELECT բառից հետո պետք է աստղանիշ դնել։

Օրինակ 1Կա ամուր տվյալների բազա՝ Ընկերություն։ Այն ունի աղյուսակ Org (Ընկերության կառուցվածքը) և Staff (Աշխատակիցներ): Պահանջվում է աղյուսակներից ընտրել բոլոր սյունակները: Org աղյուսակից բոլոր սյունակները ընտրելու համար համապատասխան հարցումը հետևյալն է.

ԸՆՏՐԵԼ * ORG-ից

Այս հարցումը կվերադարձնի հետևյալը (պատկերը մեծացնելու համար սեղմեք դրա վրա մկնիկի ձախ կոճակով).

Աշխատակազմի աղյուսակից բոլոր սյունակները ընտրելու հարցումն ունի հետևյալ տեսքը.

ԸՆՏՐԵԼ * ԱՇԽԱՏԱԿԱԶՄԻՑ

Այս հարցումը կվերադարձնի հետևյալը.


Աղյուսակի որոշակի սյունակներ ընտրելու համար աստղանիշի փոխարեն մենք պետք է նշենք բոլոր ընտրվող սյունակների անունները՝ բաժանված ստորակետերով.

ԸՆՏՐԵՔ ՍՅՈՒՆՆԵՐ՝ TABLE_NAME-ից ընտրելու համար

Օրինակ 2Թող պահանջվի Org աղյուսակից ընտրել Depnumb և Deptname սյունակները, որոնք պարունակում են տվյալներ համապատասխանաբար ֆիրմայի ստորաբաժանումների թվերի և դրանց անունների վերաբերյալ։ Նման ընտրություն ստանալու հարցումը կլինի հետևյալը.

Ընտրեք DEPNUMB, DEPTNAME ORG-ից

Իսկ Աշխատակազմի աղյուսակից անհրաժեշտ է ընտրել DEPT, NAME, JOB սյունակները, որոնք համապատասխանաբար պարունակում են տվյալներ այն ստորաբաժանման թվի, որում աշխատում է աշխատողը, նրա անունը և պաշտոնը.

ԸՆՏՐԵԼ ԲԱԺԻՆ, ԱՆՎԱՆՈՒՄ, ԱՇԽԱՏԱՆՔ ԱՇԽԱՏԱԿԱԶՄԻՑ

Աղյուսակի որոշակի տողեր ընտրելու համար, SELECT հայտարարության հետ մեկտեղ, մեզ արդեն անհրաժեշտ է WHERE հիմնաբառը, որը ցույց է տալիս մեզ հետաքրքրող տողերում պարունակվող որոշ արժեքներ կամ մի քանի արժեքներ: Մեծ մասը պարզ պայմաններնշված են՝ օգտագործելով համեմատության և հավասարության օպերատորները (, =), ինչպես նաև IS հիմնաբառը: Կարող են լինել մի քանի պայմաններ, այնուհետև դրանք թվարկվում են՝ օգտագործելով AND բանալի բառը: Տողերի ընտրության հարցումներն ունեն հետևյալ շարահյուսությունը.

Օրինակ 4Նախորդ օրինակում մենք աղյուսակից տողեր ընտրել ենք միայն մեկ սյունակի արժեքով՝ DEPT: Ենթադրենք, հիմա մենք պետք է տվյալներ ընտրենք այն աշխատակիցների մասին, ովքեր աշխատում են 38-րդ վարչությունում և որոնց պաշտոնը աշխատող է (Գործավար): Դա անելու համար WHERE բաժնում համապատասխան արժեքները պետք է նշվեն՝ օգտագործելով AND բառը.


Օրինակ 5Թող անհրաժեշտ լինի Աշխատակազմի աղյուսակից ընտրել այն աշխատողների նույնացուցիչներն ու անունները, որոնց հանձնաժողովի չափը անորոշ է: Դա անելու համար WHERE բաժնում, նախքան COMM - NULL սյունակի արժեքը նշելը, պետք է ոչ թե հավասարության նշան դնել, այլ IS բառը.

Այս հարցումը կվերադարձնի հետևյալ տվյալները.


Համեմատության նշաններն օգտագործվում են նաև ընտրված տողերում արժեքները նշելու համար:

Օգտագործելով SELECT և IN, OR, BETWEEN, LIKE պրեդիկատները

Պրեդիկատներ - IN, OR, BETWEEN, LIKE բառերը WHERE կետում - նաև թույլ են տալիս ընտրել արժեքների որոշակի տիրույթներ (IN, OR, BETWEEN) կամ արժեքներ տողերում (LIKE), որոնք ցանկանում եք ընտրել սեղան. IN, OR, BETWEEN պրեդիկատներով հարցումներն ունեն հետևյալ շարահյուսությունը.

LIKE պրեդիկատով հարցումներն ունեն հետևյալ շարահյուսությունը.

Օրինակ 7Ենթադրենք, որ ցանկանում եք Աշխատակազմի աղյուսակից ընտրել 20 կամ 84 համարներով ստորաբաժանումներում աշխատող աշխատակիցների անունները, պաշտոնները և աշխատած տարիների թիվը: Դա կարելի է անել հետևյալ հարցումով.

Հարցման կատարման արդյունքը.


Օրինակ 8Ենթադրենք, հիմա դուք ցանկանում եք ընտրել նույն տվյալները Staff աղյուսակից, ինչպես նախորդ օրինակում: OR բառով հարցումը նման է IN բառով հարցմանը և փակագծերում նշում է հետաքրքրության արժեքները: Հարցումը կլինի հետևյալը.

Օրինակ 9Նույն աղյուսակից ընտրենք անունները, պաշտոնները և աշխատած տարիների թիվը այն աշխատողների համար, որոնց աշխատավարձը 15000-ից 17000 ներառյալ.

Հարցման կատարման արդյունքը.


LIKE պրեդիկատը օգտագործվում է այն տողերի ընտրության համար, որոնց արժեքները պարունակում են նիշերը, որոնք նշված են ապաստրոֆների միջև պրեդիկատից հետո ("):

Օրինակ 10Եկեք նույն աղյուսակից ընտրենք անունները, պաշտոնները և աշխատած տարիների թիվը այն աշխատողների համար, որոնց անունները սկսվում են S տառով և բաղկացած են 7 նիշից.

Ընդգծված նիշը (_) նշանակում է ցանկացած նիշ: Հարցման կատարման արդյունքը.


Օրինակ 11.Եկեք նույն աղյուսակից ընտրենք այն աշխատողների անունները, պաշտոնները և աշխատած տարիների թիվը, որոնց անունները սկսվում են S տառով և պարունակում են ցանկացած այլ տառ ցանկացած թվով.

Տոկոսային նշանը (%) նշանակում է ցանկացած թվով նիշ: Հարցման կատարման արդյունքը.


IN, OR, BETWEEN, LIKE պրեդիկատների միջոցով նշված արժեքները կարող են շրջվել՝ օգտագործելով NOT բառը: Այդ դեպքում պահանջվող տվյալները կունենան հակառակ նշանակություն։ Եթե ​​մենք օգտագործում ենք NOT IN (20, 84), ապա կցուցադրվեն այն աշխատակիցների տվյալները, ովքեր աշխատում են բոլոր բաժիններում, բացառությամբ 20 և 84 համարներով: 15000-ից մինչև 17000 միջակայքում: NOT LIKE-ով հարցումը կվերադարձնի այն աշխատակիցների տվյալները, որոնց անունները չեն սկսվում կամ չեն պարունակում NOT LIKE-ով նշված նիշերը:

Ինքներդ գրեք SQL հարցումներ SELECT և IN, NOT IN, BETWEEN նախադրյալներով, այնուհետև տեսեք լուծումները

Կա «Թատրոն» շտեմարան։ Play աղյուսակը պարունակում է խաղի տվյալներ: Սեղանի թիմ - դերասանների դերերի մասին: The Actor table-ը դերասանների մասին է: Սեղանի տնօրեն - տնօրենների մասին: Աղյուսակի դաշտերը, հիմնական և արտաքին ստեղները կարելի է տեսնել ստորև նկարում (մեծացնելու համար սեղմեք մկնիկի ձախ կոճակը):


Օրինակ 12.Ցուցադրել այն դերասանների ցուցակը, որոնց համար երբեք չեն հաստատվել առաջատար դեր. Թիմային աղյուսակում հիմնական դերերի մասին տվյալները պարունակվում են հիմնական թիմի սյունակում: Եթե ​​դերը գլխավորն է, ապա համապատասխան տողում նշվում է «Y»:

SELECT and ORDER BY - տողերի տեսակավորում (պատվիրում):

SQL SELECT հարցումները, որոնք մինչ այժմ վերլուծվել են, վերադարձրել են տողեր, որոնք կարող են լինել ցանկացած հերթականությամբ: Այնուամենայնիվ, հաճախ անհրաժեշտ է լինում տողերը դասավորել ըստ թվային կարգի, այբբենական կարգով և այլ չափանիշներով։ Սա արվում է՝ օգտագործելով ORDER BY հիմնաբառը: Նման հարցումներն ունեն հետևյալ շարահյուսությունը.

Օրինակ 15Թող պահանջվի Աշխատակազմի աղյուսակից ընտրել թիվ 84 բաժնում աշխատող աշխատողներին և դասավորել (դասավորել) գրառումներն ըստ աշխատած տարիների քանակի աճման կարգով.

ASC բառը ցույց է տալիս, որ տեսակավորման կարգը աճում է: Այս բառը պարտադիր չէ, քանի որ դասակարգման աճման կարգը կանխադրված է: Հարցման կատարման արդյունքը.


Օրինակ 16Թող պահանջվի ընտրել նույն տվյալները, ինչ նախորդ օրինակում, բայց դասավորել (դասավորել) գրառումներն ըստ աշխատած տարիների քանակի նվազման կարգով.

DESC բառը ցույց է տալիս, որ տեսակավորման կարգը նվազում է: Հարցման կատարման արդյունքը.


SELECT և DISTINCT - հեռացնել կրկնօրինակ տողերը

Երբ աղյուսակի տողերի արժեքների համար եզակիության պայմանը նշված չէ, հարցման արդյունքներում կարող են հայտնվել նույնական տողեր: Հաճախ դուք ցանկանում եք ցուցադրել միայն եզակի տողեր: Դա արվում է SELECT դրույթից հետո DISTINCT հայտարարությունը օգտագործելով:

Օրինակ 17.Թող պահանջվի պարզել, թե ինչ բաժիններ կան և ինչ դիրքեր կան բաժինների միջև, որոնց թիվը 30-ից պակաս է: Դա կարելի է անել հետևյալ հարցման միջոցով.

Հարցման կատարման արդյունքը.


SELECT հայտարարությունը SQL ենթահարցերում

Մինչ այժմ մենք գործ ունենք SQL կառուցվածքների հետ SELECT հայտարարությամբ, որի պայմաններում ընտրված տվյալները և ընտրվող տվյալները պարունակվում են տվյալների բազայի նույն աղյուսակում: Գործնականում հաճախ է պատահում, որ ընտրվող տվյալները պարունակվում են մի աղյուսակում, իսկ պայմանները՝ մեկ այլ աղյուսակում։ Ահա, որտեղ օգնության են հասնում ենթահարցերը. ընտրության պայմանի արժեքները վերադարձվում են մեկ այլ հարցումից (ենթհարցում), որը նույնպես սկսվում է SELECT-ով: Ենթհարցումներով հարցումները կարող են ստեղծել մեկ կամ մի քանի տող:

Օրինակ 18.Նույն ORG և STAFF սեղանները: Թող պահանջվի պարզել, թե աշխատողը որ բաժնում է աշխատում նույնականացման համարը 280, և որտեղ է գտնվում այս միավորը: Բայց գերատեսչությունների մասին տեղեկատվությունը պահվում է ORG աղյուսակում, իսկ աշխատակիցների մասին տեղեկատվությունը պահվում է STAFF աղյուսակում: Դա կարելի է անել հետևյալ ենթհարցման միջոցով, որտեղ արտաքին SELECT-ը գտնվում է ORG աղյուսակում, իսկ ներքին SELECT-ը՝ STAFF աղյուսակում.

Հարցման կատարման արդյունքը.


Օրինակ 19.Այժմ պահանջվում է պարզել, թե որ գերատեսչություններում են (առանց կրկնօրինակման) աշխատակիցները աշխատավարձ 13000-ից պակաս: Դա անելու համար արտաքին SELECT-ի WHERE բաժնում (հարցում ORG աղյուսակին) նշվում է մի պայման, որն ընդունում է արժեքների մի շարք (IN), իսկ ներքին SELECT (STAFF աղյուսակին) պարզապես. վերադարձնում է արժեքների պահանջվող միջակայքը.

Հարաբերական տվյալների բազաներ և SQL լեզու

Հարցումներ - տվյալների բազայի կառուցվածքային հարցումներ: Ինչու հենց ծրագրավորման դասընթաց? Չնայած այն հանգամանքին, որ շատ «տառագրեր» կպնդեն, որ SQL-ը չէ, բայց հարցման լեզուԵս կարծում եմ, որ դրա ուսումնասիրության դասընթացները կարող են և պետք է դասակարգվեն որպես ծրագրավորման դասընթացներ: Նախ, դրանք մի կոչեք հարցումներ կազմելու դասընթացներ, քանի որ այս կերպ դրանք կարող են շփոթվել սկսնակ պաշտոնյաների կամ դատախազների դասընթացների հետ: Երկրորդ, տվյալների շտեմարանների հետ աշխատելն այնքան սերտորեն միահյուսված է SQL-ի հմտությունների բացակայությունը բավականին նեղացնում է որոշակի ծրագրավորողի շրջանակը: Եվ երրորդ, կառուցվածքային հարցումները (պարտադիր չէ, որ տվյալների շտեմարաններում) այլևս ծրագրավորման լեզուների ծայրամասերում չեն. նրանք արդեն անցել են դրա վրայով, և տեխնոլոգիան կարող է ծառայել որպես դրա օրինակ:

Բոլոր օրինակները կառուցված են երեք աղյուսակների հարցումների շուրջ,


պարունակող հետևյալ տեղեկատվությունը.

  • D_STAFF- ընկերության աշխատակիցների ցուցակը.

    • S_NAME - լրիվ անուն
    • S_POSITION - պաշտոն (տեղեկատու);
    • S_EXPERIENCE - աշխատանքային փորձ (տարիների ամբողջ թիվ);
    • S_CHIEF_ID – ընկերության վերադաս աշխատող («շեֆ» - «ենթակա» հարաբերություն);
    • S_COMMENTS - նշում:


  • D_PROFIE- օգտվողների պրոֆիլների ցանկ, որը, ըստ լեգենդի, տեղակայված է տվյալ ձեռնարկության տարածքում և օգնում է ավտոմատացնել որոշ բիզնես գործընթացներ: Այս համակարգը կարող է լինել կամ «1C - Enterprise»-ի ներքին մշակումը, կամ դրա վրա հիմնված համակարգ ծրագրային փաթեթ SAP R / 3, որն այս դասի ամենաակնառու ներկայացուցիչն է ծրագրային ապահովումարտասահմանում;

    • XD_IID - Գրառման եզակի նույնացուցիչ;
    • P_NAME – պրոֆիլի անվանումը (դերը);
    • P_COMMENTS - նշում:


  • D_STAFF_PROFILE– աղյուսակ, որը կապում է ընկերության աշխատակիցներին (D_STAFF) համակարգի օգտատերերի պրոֆիլների հետ (D_PROFILE): Այս աղյուսակի յուրաքանչյուր գրառում հարաբերություն է, որը որոշում է, թե արդյոք աշխատողը կարող է մուտք գործել իր ընտրած պրոֆիլի բոլոր իրավունքներով և թույլտվություններով: Յուրաքանչյուր աշխատող կարող է իրեն թույլատրված մի քանի պրոֆիլներ ունենալ, և ցանկացած պրոֆիլ կարող է կապված լինել մի քանի տարբեր աշխատողների հետ: Այսպիսով, D_STAFF_PROFILE աղյուսակը սահմանում է շատ-շատ հարաբերություններ:

Դիտարկվող SQL հարցումների շարահյուսության համառոտ ակնարկ

Տվյալների թարմացում կամ UPDATE հրաման

UPDATE հրամանի նպատակը թարմացումն է առկա գրառումներընշված աղյուսակում: Մենք նշում ենք, թե որտեղ և ինչ ենք ուզում փոխել, իսկ WHERE բանալի բառից հետո սահմանում ենք նորացված գրառումների ընտրության չափանիշները։ Տվյալների թարմացման հրամանում, ինչպես մյուս SQL հարցումներում, դուք կարող եք օգտագործել ենթհարցումներ. օրինակ, որպես դաշտին հատկացված արժեք կարող եք սահմանել ենթհարցման արդյունքը, որը վերադարձնում է միայն մեկ սյունակ և մեկ տող:

ԹԱՐՄԱՑՆԵԼ ԿԱԶՄԱԿԵՐՊԸ ( = ) կամ ԹԱՐՄԱՑՆԵԼ ՍԵԹ ( = (Ընտրել ՈՐՏԵՂԻՑ))

Տվյալների ավելացում կամ INSERT հրաման

Նշված աղյուսակում նոր գրառումների ավելացում: Այստեղ նույնպես բարդ բան չկա։ Մենք նշում ենք աղյուսակը, դաշտերի ցանկը և այս դաշտերին ավելացված արժեքների ցանկը: Այն, ինչ կարող է տալ SQL ենթհարցման օգտագործումը, նույնպես հեշտ է գուշակել. SELECT-ի միջոցով ընտրված տվյալների զանգվածը պատճենելը նշված աղյուսակում (ստորակետերով առանձնացված դաշտերում): Բնականաբար, SELECT հարցման մեջ սյունակների քանակը և տեսակը պետք է համապատասխանի աղյուսակի դաշտերի քանակին և տեսակին, որտեղ կատարվում է ներդիրը:

INSERT INTO [()] VALUES () կամ INSERT INTO [()] (Ընտրեք ՈՐՏԵՂԻՑ)

Տվյալների ջնջում կամ DELETE հրամանը

Մեկ աղյուսակից կամ միանգամից մի քանի աղյուսակից տողերի ջնջում, որոնց տողերը համակցված են պայմաններով։ Այստեղ նույնպես ամեն ինչ ակնհայտ է. Նշում ենք, թե որ աղյուսակից ենք ջնջում տվյալները, իսկ WHERE մասում ընտրում ենք ջնջվող տվյալները։ SQL հարցման երկրորդ տարբերակը՝ օգտագործելով DELETE հայտարարությունը, ցույց է տալիս ընդհանրացված շարահյուսություն՝ միանգամից մի քանի աղյուսակներից գրառումները ջնջելու համար: Ընտրության պայմաններում (WHERE մասում) կարող եք օգտագործել նաև ենթհարցումներ։

Ջնջել կամ ջնջել

Եթե ​​ամեն ինչ քիչ թե շատ պարզ է, ապա մենք ծանոթանում կամ սկսում ենք հենց ուսուցման գործընթացը:

    Կատարելով ամենապարզը SQL հարցումներօգտագործելով SELECT հրամանը: Գրառումների ընտրության պարզ և բարդ չափանիշների սահմանում WHERE կետի միջոցով: Օգտագործելով BETWEEN և LIKE օպերատորները: Հիերարխիկ հարցումների կառուցում` օգտագործելով աղյուսակի և դաշտի փոխանունները:



Հոդվածի բովանդակությունը
1. Ամենապարզը MySQL հարցումներ
2. Պարզ SELECT հարցումներ
3. Պարզ INSERT (նոր մուտք) հարցումներ
4. Պարզ ԹԱՐՄԱՑՈՒՄ (վերագրել, կցել) հարցումներ
5. Պարզ DELETE (ջնջել մուտքը) հարցումներ
6. Պարզ DROP (ջնջել աղյուսակը) հարցումները
7. Բարդ MySQL հարցումներ
8. MySQL հարցումներ և PHP փոփոխականներ

1. Ամենապարզ SQL հարցումները

1. Կթվարկեմ ԲՈԼՈՐ հիմքերը:

ՑՈՒՑԱԴՐԵԼ տվյալների բազաները;
2. Ցուցակում է ԲՈԼՈՐ աղյուսակները բազայի_անունում:

ՑՈՒՑԱԴՐԵԼ աղյուսակները base_name-ում;

2. Պարզ SELECT (ընտրել) հարցումներ MySQL տվյալների բազայում

ԸՆՏՐԵԼ- հարցում, որն ընտրում է արդեն գոյություն ունեցող տվյալները տվյալների բազայից: Դուք կարող եք նշել ընտրության որոշակի տարբերակներ ընտրության համար: Օրինակ, ռուսերեն լեզվով հարցման էությունը հնչում է այսպես. Ընտրե՛ք այս և այն սյունակները այս և այն աղյուսակից, ՈՐՏԵՂ այս և այն սյունակի պարամետրը հավասար է արժեքին:

1. Ընտրում է ԲՈԼՈՐ տվյալները tbl_name աղյուսակում:

SELECT * FROM tbl_name;
2. Ցուցադրում է tbl_name աղյուսակի գրառումների քանակը:

SELECT count(*) FROM tbl_name;
3. Ընտրում է (SELECT) (FROM) աղյուսակից tbl_name սահմանաչափ (LIMIT) 3 գրառում՝ սկսած 2-ից:

SELECT * FROM tbl_name LIMIT 2,3;
4. Ընտրում է (SELECT) ALL (*) գրառումները (FROM) tbl_name աղյուսակից և դասավորում դրանք (ORDER BY) ըստ id դաշտի հերթականության:

SELECT * FROM tbl_name ORDER BY id;
5. Ընտրում է (SELECT) ԲՈԼՈՐ գրառումները (FROM) tbl_name աղյուսակից և տեսակավորում դրանք (ORDER BY) ըստ id դաշտի՝ ՀԱԿԱՌՈՎ հերթականությամբ:

SELECT * FROM tbl_name ORDER BY id DESC;
6. Ընտրում է ( ԸՆՏՐԵԼ) ԲՈԼՈՐ (*) գրառումները ( ԻՑ) սեղաններ օգտվողներև դասավորել դրանք ( ՊԱՏՎԻՐԵԼ ԿՈՂՄԻՑ) դաշտում idաճման կարգով՝ սահմանաչափ ( ՍԱՀՄԱՆ) առաջին 5 գրառումները.

SELECT * Օգտատերերից ՊԱՏՎԻՐԵԼ ԸՍՏ id LIMIT 5;
7. Աղյուսակից ընտրում է բոլոր գրառումները օգտվողներ, որտեղ դաշտ fnameհամապատասխանում է արժեքին Գենա.

SELECT * FROM users WHERE fname="Gena";
8. Աղյուսակից ընտրում է բոլոր գրառումները օգտվողներ, որտեղ դաշտի արժեքը fnameսկսել Գե.

SELECT * Օգտատերերից, ՈՐՏԵՂ fname-ը LIKE «Ge%»;
9. Աղյուսակից ընտրում է բոլոր գրառումները օգտվողներ, Որտեղ fnameավարտվում է ԱԺ, և դասավորում է գրառումները ըստ արժեքի աճման կարգի id.

ԸՆՏՐԵԼ * Օգտատերերից, ՈՐՏԵՂ fname LIKE «%na» ՊԱՏՎԻՐԵԼ ԸՍՏ id;
10. Ընտրում է բոլոր տվյալները սյունակներից fname, անունսեղանից օգտվողներ.

SELECT fname, lname FROM օգտվողներից;

11. Ենթադրենք, որ դուք ունեք երկիր ձեր օգտվողների տվյալների աղյուսակում: Այսպիսով, եթե ցանկանում եք ցուցադրել ՄԻԱՅՆ տեղի ունեցող արժեքների ցանկը (որպեսզի, օրինակ, Ռուսաստանը չցուցադրվի 20 անգամ, այլ միայն մեկ), ապա օգտագործեք DISTINCT: Կրկնվող արժեքների զանգվածից կբերի Ռուսաստանը, Ուկրաինան, Բելառուսը։ Այսպիսով, սեղանից օգտվողներսյունակներ երկիրԿցուցադրվեն ԲՈԼՈՐ ԵՍԿԱԿԱՆ արժեքները

ԸՆՏՐԵՔ ՀԱՍՏԱՏ երկիր օգտվողներից;
12. Աղյուսակից ընտրում է ԲՈԼՈՐ տողի տվյալները օգտվողներՈրտեղ Տարիքունի 18,19 և 21 արժեքներ։

SELECT * Օգտատերերից WHERE տարիքը IN (18,19,21);
13. ընտրում է MAX արժեքը Տարիքաղյուսակում օգտվողներ. Այսինքն, եթե դուք ունեք ամենաբարձր արժեքը աղյուսակում Տարիք(անգլերենի տարիքից) 55 է, ապա հարցման արդյունքը կլինի 55։

SELECT max (տարիքը) FROM օգտվողներից;
14. Ընտրեք տվյալները աղյուսակից օգտվողներըստ դաշտերի ԱնունԵվ ՏարիքՈՐՏԵՂ Տարիքվերցնում է ամենափոքր արժեքը:

SELECT անունը, min(տարիքը) FROM օգտվողներից;
15. Ընտրեք տվյալները աղյուսակից օգտվողներդաշտում ԱնունՈՐՏԵՂ idՀԱՎԱՍԱՐ ՉԻ 2-ի.

SELECT անունը օգտվողներից WHERE id!="2";

3. Պարզ INSERT (նոր մուտք) հարցումներ

ՆԵՐԴՐԵԼ– հարցում, որը թույլ է տալիս ՍԿԶԲՆԱԿԱՆ գրառում տեղադրել տվյալների բազայում: Այսինքն՝ տվյալների բազայում ստեղծում է ՆՈՐ գրառում (տող)։

1. Կատարում է նոր ռեկորդաղյուսակում օգտվողներ, դաշտում Անուններդիրներ Սերգեյը, իսկ դաշտում Տարիքներդիրներ 25. Այսպիսով, աղյուսակում ավելացվում է նոր տող՝ տրված արժեքներով։ Եթե ​​կան ավելի շատ սյունակներ, ապա մնացածները կմնան կամ դատարկ կամ լռելյայն արժեքներով:

INSERT INTO users (անունը, տարիքը) VALUES («Սերգեյ», «25»);

4. Պարզ UPDATE հարցումներ MySQL տվյալների բազայի դեմ

ԹԱՐՄԱՑՆԵԼ- հարցում, որը թույլ է տալիս ՎԵՐԳՐԻՐԵԼ դաշտի արժեքները կամ ինչ-որ բան ավելացնել տվյալների բազայի արդեն գոյություն ունեցող տողում: Օրինակ, կա պատրաստի տող, բայց դրա մեջ տարիքային պարամետրը պետք է վերագրվի, քանի որ այն ժամանակի ընթացքում փոխվել է:

1. Աղյուսակ օգտվողներ Տարիքդառնում է 18.

ԹԱՐՄԱՑՆԵԼ օգտվողները ՍԱՀՄԱՆԵԼ տարիք = "18" WHERE id = "3";
2. Ամեն ինչ նույնն է, ինչ առաջին հարցումում, այն պարզապես ցույց է տալիս հարցման շարահյուսությունը, որտեղ երկու կամ ավելի դաշտեր վերագրված են:
Աղյուսակ օգտվողներ WHERE id-ը 3 դաշտի արժեքն է Տարիքդառնում է 18 և երկիրՌուսաստան.

ԹԱՐՄԱՑՆԵԼ օգտվողները ՍԱՀՄԱՆԵԼ տարիք = "18", երկիր = "Ռուսաստան" WHERE id = "3";

5. Պարզ Ջնջել (հեռացնել գրառումը) հարցումները MySQL տվյալների բազայի դեմ

ՋՆՋԵԼհարցում է, որը հեռացնում է տողը աղյուսակից:

1. Հեռացնում է աղյուսակից տողը օգտվողներՈՐՏԵՂ idհավասար է 10-ի։

Ջնջել օգտվողներից WHERE id = «10»;

6. Պարզ DROP (ջնջել աղյուսակը) հարցումները MySQL տվյալների բազայում

ԱՆԿՈՒՄաղյուսակը ջնջող հարցում է:

1. Ջնջում է ամբողջ աղյուսակը tbl_name.

ԿԱՌՆԵԼ ՍԵՂԱՆԻ tbl_name;

7. Բարդ MySQL տվյալների բազայի հարցումներ

Հետաքրքիր հարցումներ, որոնք կարող են օգտագործել նույնիսկ փորձառու օգտվողները

SELECT ID, անունը, երկիրը FROM օգտվողներից, ադմինիստրատորներից WHERE TO_DAYS(NOW()) - TO_DAYS(գրանցման_ամսաթիվ)<= 14 AND activation != "0" ORDER BY registration_date DESC;
Այս բարդ հարցումն ընտրում է սյունակներ ID, անունը, երկիրըՍԵՂԱՆԱԿՆԵՐՈՒՄ օգտվողներ, ադմիններՈՐՏԵՂ գրանցման_ամսաթիվ(ամսաթիվ) ոչ ավելի, քան 14 օրեր և ակտիվացումՀԱՎԱՍԱՐ ՉԻ 0 , Դասավորել ըստ գրանցման_ամսաթիվհակառակ հերթականությամբ (սկզբում նոր):

ԹԱՐՄԱՑՆԵԼ օգտվողները ՍԱՀՄԱՆԵԼ տարիք = «18+» WHERE տարիքը = (Ընտրել տարիքը օգտվողներից WHERE արական = «տղամարդ»);
Վերը նշվածը օրինակ է այսպես կոչված հարցումը հարցման մեջ SQL-ում: Թարմացրեք օգտատերերի տարիքը մինչև 18+, որտեղ սեռը արական է: Ես խորհուրդ չեմ տալիս այս տեսակի խնդրանքը: Անձնական փորձից ես կասեմ, որ ավելի լավ է ստեղծել մի քանի առանձին, դրանք ավելի արագ կմշակվեն:

8. MySQL և PHP տվյալների բազայի հարցումներ

PHP էջում MySQL հարցումներում կարող եք փոփոխականներ տեղադրել որպես համեմատական ​​արժեքներ և այլն: Մի երկու օրինակ

1. Աղյուսակից ընտրում է բոլոր գրառումները օգտվողներ, որտեղ դաշտ fnameհամապատասխանում է փոփոխականի արժեքին $name.

SELECT * FROM users WHERE fname="$name";
2. Աղյուսակ օգտվողներ WHERE id-ը 3 դաշտի արժեքն է Տարիքփոխվում է $age փոփոխականի արժեքին:

ԹԱՐՄԱՑՆԵԼ օգտվողները ՍԱՀՄԱՆԵԼ տարիք = "$age" WHERE id = "3";

Ուշադրություն.Եթե ​​ձեզ հետաքրքրում է որևէ այլ օրինակ, ապա գրեք հարց մեկնաբանություններում:

Դասը դիտարկելու է հարցման լեզուն՝ SELECT sql հայտարարությունը - տվյալներ ընտրելու համար

Ընտրեք SQL հարցումնախատեսված է տվյալների բազայից նորմալ ընտրության համար: Նրանք. եթե մենք պարզապես պետք է ստանանք տվյալները՝ առանց դրանց հետ որևէ մշակման և առանց տվյալների բազայում փոփոխություններ կատարելու, ապա մենք կարող ենք ապահով օգտագործել այս zapmagaros-ը:

SELECT հայտարարության շարահյուսություն

SELECT * FROM table_name;

Սա օպերատորի հետ աշխատելու ամենահեշտ ձևն է, երբ մենք ընտրում ենք բոլոր գրառումները տվյալների բազայի աղյուսակից:

* նշանը նշանակում է բեռնել բոլոր գրառումները աղյուսակից. Այս դեպքում արդյունքների հավաքածուի սյունակները և տողերը դասավորված չեն:

Դիտարկենք sql ընտրության հարցումների օրինակներ.

Օրինակ :եթե դուք ստեղծել եք տեղական տվյալների բազա և լրացրել եք աղյուսակները, ինչպես նախկինում քննարկվել է (կամ օգտագործել եք sqlFiddle ծառայությունը), ապա մենք կկատարենք հետևյալ օրինակը։
Ընտրեք բոլոր գրառումները ուսուցիչների աղյուսակից

SELECT * FROM table_name LIMIT 2,3;

Օրինակում աղյուսակից ընտրվում է 3 գրառում՝ սկսած 2 գրառումից։
Այս հարցումը հատկապես անհրաժեշտ է նավիգացիոն էջերի բլոկ ստեղծելիս:

Դեպի պատվիրեք արդյունքների հավաքածուի դաշտերը, դրանք պետք է թվարկվեն՝ SELECT բառից հետո բաժանված ստորակետերով ճիշտ հերթականությամբ.

SELECT name, zarplata, premia ուսուցիչներից ՊԱՏՎԻՐԵԼ ԸՍՏ անունից;

Ընտրում է դաշտերի անվան, zarplata, պրեմիա արժեքները և տեսակավորում ըստ դաշտի անվանման (այբբենական կարգով)


Օրինակ: DB «Համակարգչային խանութ». Ընտրեք տեղեկատվություն համակարգիչների արագության և հիշողության մասին: Դուք ցանկանում եք դասավորել արդյունքը, որը սահմանված է ըստ պրոցեսորի արագության, աճման կարգով:

SELECT `Speed`,`Memory` FROM `Pc` ORDER BY 1 ASC

Արդյունք:

Դուք կարող եք տեսակավորել ըստ երկու դաշտերի.

SELECT name, zarplata, premia FROM ուսուցիչներից ՊԱՏՎԻՐԵԼ ԸՍՏ անունի DESC;

Ընտրում է դաշտերի անվան, zarplata, պրեմիա արժեքները և դասավորում ըստ դաշտի անվան՝ նվազման կարգով


SQL-ում կրկնօրինակ արժեքների հեռացում

Այն դեպքում, երբ դուք պետք է ստանաք եզակի տողեր, կարող եք օգտագործել DISTINCT հիմնաբառը:

ՀԱՍՏԱՏԱԿԱՆ(թարգմանված է անգլերենից DIFFERENCE) - փաստարկ, որ վերացնում է կրկնակի արժեքները:

«Ինստիտուտ» տվյալների բազայի օրինակ.ցանկանում եք իմանալ հավելավճարների չափի հնարավոր տարբերակները: Եթե ​​դուք չեք օգտագործում Distinct-ը, արդյունքը կլինի երկու նույնական արժեք: Դուք կարող եք ջնջել կրկնօրինակ արժեքները sql-ում Distinct-ի ներդրմամբ, արդյունքում կրկնվող արժեքները չեն կրկնվում:

    SELECT արագություն, հիշողություն ԱՀ-ից;

    Արդյունք:

    PC աղյուսակում կոդը դաշտը հիմնական բանալին է: Քանի որ այս դաշտը չկա հարցման մեջ, վերը նշված արդյունքներում կան կրկնօրինակ տողեր:

    Երբ ձեզ անհրաժեշտ է ստանալ եզակի տողեր (օրինակ, մեզ հետաքրքրում են միայն պրոցեսորի արագության և հիշողության չափի տարբեր համակցություններ, և ոչ բոլոր առկա համակարգիչների բնութագրերը), ապա դուք պետք է օգտագործեք Distinct:

    ԸՆՏՐԵԼ ՀԱՍՏԱՏԱԿԱՆ արագություն, հիշողություն ԱՀ-ից;

    ԸՆՏՐԵԼ ՀԱՍՏԱՏԱԿԱՆ արագություն, հիշողություն ԱՀ-ից;

    Արդյունք:

    sql ընտրեք 1_1 աշխատանք: ԴԲ «Ինստիտուտ»Կատարեք հարցում՝ ուսուցիչների աղյուսակից id-ն և անունը վերցնելու համար: Դասավորել ուսուցչի ազգանունները նվազման կարգով

    sql լեզու. որտեղ պայման

    Նախադասությամբ պայմանը կատարվում է
    ՈՐՏԵՂ
    որը գրված է FROM կետից հետո։

    Այս դեպքում արդյունքի հավաքածու կմտնեն միայն այն գրառումները, որոնց համար պրեդիկատի արժեքը հավասար է TRUE-ին (ճշմարիտ):

    «Ինստիտուտ» տվյալների բազայի օրինակ.Ցուցադրել ուսուցչի տվյալները ուսուցիչների աղյուսակից, որոնց ազգանունն է Իվանովը

    Բազմաթիվ պայմաններ SQL-ում

    Նախադրյալները (պայմանները) կարող են բաղկացած լինել կամ մեկ արտահայտությունից կամ արտահայտությունների որևէ համակցությունից, որը կառուցված է բուլյան օպերատորների միջոցով.

  1. ԵՎ,
  2. կամ ոչ
  3. «Ինստիտուտ» տվյալների բազայի օրինակ.ցուցադրել այն ուսուցչի կոդը, ում աշխատավարձն է 10000 , և պրեմիում 500

    Հարաբերական օպերատորներ, որոնք հանդիպում են հետևյալ պայմաններում.
    = Հավասար
    > ավելի քան
    >= Ավելի մեծ կամ հավասար
    Ոչ հավասար

    SQL-ի միջև (միջևում)

    BETWEEN պրեդիկատը ստուգում է, թե արդյոք փորձարկվող արտահայտության արժեքները ընկնում են AND բանալի բառով միացած սահմանային արտահայտությունների կողմից նշված տիրույթում:

    Շարահյուսություն:

    <Проверяемое выражение>ՄԻՋԵՎ<Начальное выражение>ԵՎ<Конечное выражение>

    «Ինստիտուտ» տվյալների բազայի օրինակ.Տպեք ուսուցչի ազգանունը և աշխատավարձը, որի աշխատավարձը 5000-ից 10000 է:

    «Ինստիտուտ» տվյալների բազայի օրինակ.Ցուցադրել ուսուցչի ազգանունը և աշխատավարձը, որի աշխատավարձը 5000-ից 10000-ի սահմաններում չէ:

    IN պրեդիկատ

    IN պրեդիկատը որոշում է, թե արդյոք փորձարկվող արտահայտության արժեքը կգտնվի բացահայտորեն սահմանված արժեքների հավաքածուում:

    Շարահյուսություն:

    < Проверяемое выражение>[ՉԻ]ՄԵՑ(< набор значений> )

    <Проверяемое выражение>IN (<набор значений>)

    «Ինստիտուտ» տվյալների բազայի օրինակ.ցույց տալ ուսուցիչների անունները, որոնց աշխատավարձը կազմում է 5000, 10000 կամ 11000.

    «Ինստիտուտ» տվյալների բազայի օրինակ.ցուցադրել այն ուսուցիչների անունները, որոնց աշխատավարձը չի մտնում արժեքների մեջ՝ 5000, 10000 կամ 11000

    sql ընտրեք աշխատանք 1_3. ԴԲ «Ինստիտուտ»Արտադրեք ուսուցիչների ազգանունը, աշխատավարձը և բոնուսը, որոնց բոնուսը կազմում է 2000-ից մինչև 5000 ռուբլի:

  • Թարգմանություն
  • ուսուցողական
Արդյո՞ք դա պետք է լինի « SELECT * WHERE a=b FROM c» կամ «SELECT WHERE a=b FROM c ON *» :

Եթե ​​դուք ինձ նման եք, ապա կհամաձայնեք. SQL-ն այն բաներից է, որն առաջին հայացքից հեշտ է թվում (այն կարդում է անգլերենի պես), բայց ինչ-որ կերպ պետք է google-ով փնտրեք յուրաքանչյուր պարզ հարցում՝ ճիշտ շարահյուսությունը գտնելու համար:


Իսկ հետո միանում է, սկսվում է ագրեգացիա, ենթահանձնումներ, ու ստացվում է լրիվ զիբիլ։ Սրա նման:


SELECT Members.name || «» || members.lastname AS "Full Name" FROM borrowings INNER JOIN անդամներ ON Members.memberid=borrowings.memberid INNER JOIN գրքեր ON books.bookid=borrowings.bookid WHERE borrowings.bookid IN (SELECT bookid FROM books WHERE stock>(SELECT avg(stock ) Գրքերից)) ԽՈՒՄԲ ԸՍՏ անդամների.անուն, անդամներ.ազգանուն;

Bue! Սա կվախեցնի ցանկացած սկսնակ կամ նույնիսկ միջին ծրագրավորողի, եթե նա առաջին անգամ տեսնի SQL: Բայց ամեն ինչ այդքան էլ վատ չէ։


Հեշտ է հիշել, թե ինչն է ինտուիտիվ, և այս ուղեցույցով ես հուսով եմ, որ կթուլացնեմ SQL մուտք գործելու խոչընդոտը սկսնակների համար, միաժամանակ առաջարկելով SQL-ի թարմ մոտեցում ավելի փորձառուների համար:


Չնայած SQL-ի շարահյուսությունը գրեթե նույնն է տարբեր տվյալների բազաներում, այս հոդվածը օգտագործում է PostgreSQL հարցումների համար: Որոշ օրինակներ կաշխատեն MySQL-ում և այլ տվյալների բազաներում:

1. Երեք կախարդական բառ

SQL-ն շատ բան ունի հիմնաբառեր, բայց SELECT , FROM և WHERE առկա են գրեթե բոլոր հարցումներում: Քիչ անց դուք կհասկանաք, որ այս երեք բառերը ներկայացնում են տվյալների բազայի նկատմամբ հարցումներ կառուցելու ամենահիմնական կողմերը, իսկ մյուս, ավելի բարդ հարցումները պարզապես հավելումներ են դրանց վերևում:

2. Մեր բազան

Եկեք նայենք տվյալների բազային, որը մենք կօգտագործենք որպես օրինակ այս հոդվածում.







Մենք ունենք գրադարան, մարդիկ։ Առկա է նաև հաշվապահական հաշվառման համար նախատեսված հատուկ աղյուսակ։

  • «Գրքեր» աղյուսակում պահվում են գրքի վերնագրի, հեղինակի, հրատարակման ամսաթվի և առկայության մասին տեղեկություններ: Ամեն ինչ պարզ է.
  • «Անդամների» աղյուսակում՝ գրադարանում գրանցված բոլոր մարդկանց անուններն ու ազգանունները:
  • «Փոխառություններ» աղյուսակում պահվում են գրադարանից փոխառված գրքերի մասին տեղեկությունները։ Bookid սյունակը վերաբերում է «գրքեր» աղյուսակում փոխառված գրքի նույնականացմանը, իսկ «անդամներ» աղյուսակի համապատասխան անձին: Մենք ունենք նաև թողարկման ամսաթիվ և ամսաթիվ, երբ գիրքը պետք է վերադարձվի:

3. Պարզ խնդրանք

Սկսենք մի պարզ խնդրանքից՝ մեզ պետք է անուններըԵվ նույնացուցիչներ(id) «Դեն Բրաուն» հեղինակի կողմից գրված բոլոր գրքերը


Հարցումը կլինի հետևյալը.


SELECT bookid AS "id", title FROM books WHERE author="Dan Brown";

Իսկ արդյունքն այսպիսին է.


id կոչում
2 Կորած խորհրդանիշը
4 Դժոխք

Բավականին պարզ: Եկեք քանդենք խնդրանքը՝ հասկանալու համար, թե ինչ է կատարվում։

3.1 FROM - որտեղից մենք ստանում ենք տվյալները

Սա կարող է ակնհայտ թվալ հիմա, բայց FROM-ը շատ կարևոր կլինի ավելի ուշ, երբ մենք հասնենք միացումներին և ենթհարցերին:


FROM-ը մատնանշում է դեպի աղյուսակը հարցման համար: Սա կարող է լինել արդեն գոյություն ունեցող աղյուսակ (ինչպես վերը նշված օրինակում), կամ աղյուսակ, որը ստեղծվել է անմիջապես միացումների կամ ենթհարցումների միջոցով:

3.2 ՈՐՏԵՂ - ինչ տվյալներ ցույց տալ

WHERE-ն իրեն պարզապես զտիչի պես է պահում տողերորը մենք ցանկանում ենք ցուցադրել: Մեր դեպքում մենք ցանկանում ենք տեսնել միայն տողեր, որտեղ հեղինակի սյունակում արժեքը «Դեն Բրաուն» է:

3.3 SELECT - ինչպես ցուցադրել տվյալները

Այժմ, երբ մենք ունենք բոլոր անհրաժեշտ սյունակները մեզ անհրաժեշտ աղյուսակից, մենք պետք է որոշենք, թե կոնկրետ ինչպես ցույց տալ այս տվյալները: Մեր դեպքում մեզ անհրաժեշտ են միայն վերնագրեր և գրքերի նույնականացում, ուստի մենք դա անում ենք: ընտրել SELECT-ի հետ: Միևնույն ժամանակ, դուք կարող եք վերանվանել սյունակը AS-ի միջոցով:


Ամբողջ հարցումը կարելի է պատկերացնել պարզ գծապատկերով.


4. Միացումներ (միացումներ)

Այժմ մենք ցանկանում ենք տեսնել Դեն Բրաունի բոլոր գրքերի վերնագրերը (ոչ պարտադիր կերպով եզակի), որոնք փոխառվել են գրադարանից, և երբ այդ գրքերը պետք է վերադարձվեն.


SELECT books.title AS "Title", borrowings.returndate AS "Return Date" FROM borrowings JOIN books ON borrowings.bookid=books.bookid WHERE books.author="Dan Brown";

Արդյունք:


Կոչում վերադարձի ամսաթիվը
Կորած խորհրդանիշը 2016-03-23 00:00:00
Դժոխք 2016-04-13 00:00:00
Կորած խորհրդանիշը 2016-04-19 00:00:00

Մեծ մասամբ խնդրանքը նման է նախորդին։ բացառությամբ FROM բաժնից. Դա նշանակում է որ մենք հարցումներ ենք անում այլ աղյուսակից. Մենք չենք մուտք գործում ոչ «գրքերի» աղյուսակին, ոչ էլ «փոխառությունների» աղյուսակին։ Փոխարենը, մենք դիմում ենք նոր սեղան, որը ստեղծվել է այս երկու աղյուսակները միացնելով։


borrowings JOIN books ON borrowings.bookid=books.bookid is, հաշվի առեք, նոր սեղան, որը ձևավորվել է «գրքերի» և «փոխառությունների» աղյուսակների բոլոր գրառումները համադրելով, որտեղ համընկնում են հաշվառման արժեքները: Նման միաձուլման արդյունքը կլինի.



Եվ հետո մենք հարցում ենք անում այս աղյուսակին այնպես, ինչպես վերը նշված օրինակում: Սա նշանակում է, որ սեղաններին միանալիս պետք է միայն անհանգստանալ, թե ինչպես վարել այս միացումը: Եվ հետո խնդրանքը պարզ է դառնում, ինչպես 3-րդ կետի «պարզ խնդրանքի» դեպքում։


Փորձենք մի փոքր ավելի բարդ միացում երկու աղյուսակով:


Այժմ մենք ուզում ենք ստանալ այն մարդկանց անուններն ու ազգանունները, ովքեր գրադարանից վերցրել են հեղինակ «Դեն Բրաունի» գրքերը։


Այս անգամ եկեք անցնենք ներքևից վեր.


Քայլ 1- որտեղի՞ց ենք մենք ստանում տվյալները: Մեր ուզած արդյունքը ստանալու համար անհրաժեշտ է «անդամ» և «գրքեր» աղյուսակները միացնել «փոխառություններ» աղյուսակին։ JOIN բաժինը կունենա հետևյալ տեսքը.


փոխառություններ ՄԻԱՑԵՔ գրքերը ON borrowings.bookid=books.bookid ՄԻԱՑԵՔ անդամներին ON members.memberid=borrowings.memberid

Կապի արդյունքը կարելի է տեսնել հղումով։


Քայլ 2Ի՞նչ տվյալներ ենք մենք ցույց տալիս: Մեզ հետաքրքրում են միայն այն տվյալները, որտեղ գրքի հեղինակը «Դեն Բրաունն» է.


WHERE books.author="Դեն Բրաուն"

Քայլ 3Ինչպե՞ս ենք մենք ցուցադրում տվյալները: Այժմ, երբ տվյալները ստացվել են, դուք պարզապես պետք է ցուցադրեք գրքերը վերցրածների անունն ու ազգանունը.


SELECT users.firstname AS "First Name", Members.Lastname AS "First Name"

Super! Մնում է միայն համատեղել երեք բաղադրիչները և կատարել մեզ անհրաժեշտ խնդրանքը.


SELECT members.firstname AS "First Name", members.lastname AS "Last Name" FROM borrowings ՄԻԱՑԵՔ գրքերին ON borrowings.bookid=books.bookid ՄԻԱՑԵՔ անդամներին ON members.memberid=borrowings.memberid WHERE books.author="Dan Brown";

Ի՞նչ կտա մեզ.


անուն Ազգանուն
Մայք Ուիլիսը
Էլեն Հորթոն
Էլեն Հորթոն

Հիանալի Բայց անունները կրկնվում են (եզակի չեն)։ Մենք շուտով դա կշտկենք:

5. Ագրեգացիա

Կոպիտ ասած, ագրեգացիաներ են անհրաժեշտ մի քանի տողերը մեկի փոխարկելու համար. Միաժամանակ ագրեգացիայի ժամանակ տարբեր սյունակների համար կիրառվում է տարբեր տրամաբանություն։


Եկեք շարունակենք մեր օրինակը, որտեղ կրկնօրինակ անուններ են հայտնվում: Երևում է, որ Էլեն Հորթոնը վերցրել է մեկից ավելի գիրք, բայց սա ամենաշատը չէ Լավագույն միջոցըցույց տալ այս տեղեկատվությունը: Դուք կարող եք մեկ այլ հարցում կատարել.


SELECT users.firstname AS "First Name", members.lastname AS "First Name", count(*) AS "Tumber of borowed books" FROM borrowings JOIN books ON borrowings.bookid=books.bookid ՄԻԱՑԵՔ անդամներին ON Members.memberid=borrowings .memberid WHERE books.author="Dan Brown" GROUP BY Members.firstname, members.lastname;

Որը մեզ կտա ցանկալի արդյունք.


անուն Ազգանուն Փոխառված գրքերի քանակը
Մայք Ուիլիսը 1
Էլեն Հորթոն 2

Գրեթե բոլոր ագրեգացիաները գալիս են GROUP BY կետով: Այս բանը աղյուսակը, որը կարելի էր ստանալ հարցման միջոցով, վերածում է աղյուսակների խմբերի: Յուրաքանչյուր խումբ համապատասխանում է սյունակի եզակի արժեքին (կամ արժեքների խմբին), որը մենք նշել ենք GROUP BY-ում: Մեր օրինակում մենք նախորդ վարժությունից ստացված արդյունքը վերածում ենք տողերի խմբի: Մենք նաև կատարում ենք ագրեգացիա count-ով, որը բազմաթիվ տողերը վերածում է ամբողջ թվի (մեր դեպքում՝ տողերի քանակը): Այնուհետև այս արժեքը վերագրվում է յուրաքանչյուր խմբին:


Արդյունքում յուրաքանչյուր տող յուրաքանչյուր խմբի միավորման արդյունքն է:



Դուք կարող եք գալ տրամաբանական եզրակացության, որ արդյունքի բոլոր դաշտերը կամ պետք է նշվեն GROUP BY-ում, կամ պետք է կատարվի ագրեգացիա դրանց վրա: Քանի որ մնացած բոլոր դաշտերը կարող են տարբերվել միմյանցից տարբեր տողերում, և եթե դրանք ընտրեք SELECT «th»-ով, ապա պարզ չէ, թե հնարավոր արժեքներից որն է պետք վերցնել:


Վերոնշյալ օրինակում count ֆունկցիան մշակում էր բոլոր տողերը (քանի որ մենք հաշվում էինք տողերի թիվը): Այլ գործառույթներ, ինչպիսիք են գումարը կամ max-ը, մշակում են միայն նշված տողերը: Օրինակ, եթե մենք ուզում ենք իմանալ յուրաքանչյուր հեղինակի գրած գրքերի քանակը, ապա մեզ անհրաժեշտ է այս հարցումը.


ԸՆՏՐԵԼ հեղինակ, գումար (պաշար) գրքերից ԽՈՒՄԲ ԸՍՏ հեղինակի;

Արդյունք:


հեղինակ գումար
Ռոբին Շարմա 4
Դեն Բրաուն 6
Ջոն Գրին 3
Ամիշ Տրիպատի 2

Այստեղ գումարի ֆունկցիան միայն մշակում է ֆոնդային սյունակը և հաշվարկում է յուրաքանչյուր խմբի բոլոր արժեքների գումարը:

6. Ենթհարցումներ


Ենթհարցումները սովորական SQL հարցումներ են, որոնք ներդրված են ավելի մեծ հարցումների մեջ: Դրանք բաժանվում են երեք տեսակի՝ ըստ վերադարձված արդյունքի տեսակի.

6.1 Երկչափ աղյուսակ

Կան հարցումներ, որոնք վերադարձնում են բազմաթիվ սյունակներ: Լավ օրինակսա նախորդ ագրեգացման վարժանքից ստացված հարցումն է: Լինելով ենթահարկ՝ այն պարզապես կվերադարձնի մեկ այլ աղյուսակ, որի վրա կարող են կատարվել նոր հարցումներ: Շարունակելով նախորդ վարժությունը, եթե ուզում ենք իմանալ «Ռոբին Շարմայի» հեղինակի գրած գրքերի քանակը, ապա մեկը. հնարավոր ուղիները- օգտագործել ենթհարցեր.


SELECT * FROM (SELECT author, sum(stock) FROM books GROUP BY by author) AS results WHERE author="Robin Sharma";

Արդյունք:



Կարելի է գրել այսպես՝ [«Ռոբին Շարմա», «Դեն Բրաուն»]


2. Այժմ օգտագործեք այս արդյունքը նոր հարցման մեջ.


SELECT title, bookid FROM books WHERE author IN (SELECT author FROM (SELECT author, sum(stock) FROM books GROUP BY by author) AS արդյունքները WHERE sum > 3);

Արդյունք:


կոչում գրքույկ
Կորած խորհրդանիշը 2
Ո՞վ է լացելու, երբ մեռնես: 3
Դժոխք 4

Դա նույնն է, ինչ.


SELECT վերնագիր, գրքույկ գրքերից WHERE հեղինակը IN («Ռոբին Շարմա», «Դեն Բրաուն»);

6.3 Անհատական ​​արժեքներ

Կան հարցումներ, որոնց արդյունքում ստացվում է միայն մեկ տող և մեկ սյունակ: Դրանք կարող են դիտվել որպես հաստատուն արժեքներ և կարող են օգտագործվել ցանկացած վայրում, որտեղ արժեքներ են օգտագործվում, օրինակ՝ համեմատական ​​օպերատորներում: Նրանք կարող են օգտագործվել նաև որպես երկչափ աղյուսակներ կամ մեկ տարրային զանգվածներ:


Եկեք, օրինակ, տեղեկություններ ստանանք բոլոր այն գրքերի մասին, որոնց թիվը գրադարանում այս պահին գերազանցում է միջին արժեքը։


Միջինը կարելի է ստանալ հետևյալ կերպ.


ընտրել միջին (պաշար) գրքերից;

Ինչ է տալիս մեզ.


7. Գրել գործողություններ

Տվյալների բազայի գրման գործողությունների մեծ մասը բավականին պարզ է՝ համեմատած ավելի բարդ ընթերցման գործողությունների հետ:

7.1 Թարմացում

UPDATE հարցումի շարահյուսությունը իմաստային առումով նույնն է, ինչ կարդալու հարցումը: Միակ տարբերությունն այն է, որ SELECT "th"-ով սյունակներ ընտրելու փոխարեն մենք գիտելիքները սահմանում ենք SET "th"-ով:


Եթե ​​Դեն Բրաունի բոլոր գրքերը կորել են, ապա դուք պետք է վերականգնեք քանակի արժեքը: Սրա հարցումը կլինի.


UPDATE books SET stock=0 WHERE հեղինակ=Դեն Բրաուն;

WHERE-ն անում է նույնը, ինչ նախկինում՝ ընտրում է տողեր: SELECT-ի փոխարեն, որն օգտագործվում էր կարդալիս, մենք այժմ օգտագործում ենք SET: Այնուամենայնիվ, այժմ դուք պետք է նշեք ոչ միայն սյունակի անունը, այլև ընտրված տողերում այս սյունակի նոր արժեքը:


7.2 Ջնջել

DELETE հարցումը պարզապես SELECT կամ UPDATE հարցում է՝ առանց սյունակների անունների: Լուրջ. Ինչպես SELECT-ի և UPDATE-ի դեպքում, WHERE կետը մնում է նույնը. այն ընտրում է ջնջվող տողերը: Ջնջման գործողությունը ոչնչացնում է ամբողջ տողը, ուստի իմաստ չունի առանձին սյունակներ նշել: Այսպիսով, եթե մենք որոշենք չվերակայել Դեն Բրաունի գրքերի թիվը, այլ ընդհանրապես ջնջել բոլոր գրառումները, ապա կարող ենք այսպիսի հարցում կատարել.


Ջնջել գրքերից WHERE հեղինակ=Դեն Բրաուն;

7.3 Ներդիր

Թերևս միակ բանը, որը տարբերվում է այլ տեսակի հարցումներից, INSERT-ն է: Ձևաչափն է.


INSERT INTO x(a,b,c) VALUES (x, y, z);

Որտեղ a , b , c սյունակների անուններն են, իսկ x , y և z արժեքներն են, որոնք պետք է տեղադրվեն այդ սյունակներում՝ այդ հերթականությամբ: Դա հիմնականում այն ​​է:


Եկեք նայենք կոնկրետ օրինակ. Ահա INSERT հարցումը, որը լրացնում է «գրքերի» ամբողջ աղյուսակը.


ՆԵՐԴՐԵՔ գրքերի մեջ (գրքույկ, վերնագիր, հեղինակ, հրատարակված, բաժնետոմս) ԱՐԺԵՔՆԵՐ (1 «Իկշվակուի սերունդ», «Ամիշ Տրիպատի», «06-22-2015»,2), (2 «Կորած խորհրդանիշ»,» Դեն Բրաուն», «07-22-2010», 3), (3, «Ո՞վ է լաց լինելու, երբ մեռնես», «Ռոբին Շարմա», «06-15-2006»,4), (4, «Inferno» «Դեն Բրաուն», «05-05-2014»,3), (5, «Մեղքը մեր աստղերում», «Ջոն Գրին», «01-03-2015»,3);

8. Ստուգում

Մենք հասել ենք ավարտին, ես առաջարկում եմ մի փոքրիկ թեստ։ Նայեք այդ խնդրանքին հոդվածի հենց սկզբում։ Կարո՞ղ եք դա պարզել: Փորձեք այն բաժանել SELECT , FROM , WHERE , GROUP BY բաժինների և դիտեք ենթահարկերի առանձին բաղադրիչները:


Ահա այն ավելի ընթեռնելի ձևով.


SELECT Members.name || «» || Members.lastname AS "Full Name" FROM borrowings INNER JOIN անդամներ ON Members.memberid=borrowings.memberid INNER JOIN գրքեր ON books.bookid=borrowings.bookid WHERE borrowings.bookid IN (SELECT bookid FROM books WHERE stock> (SELECT avg(stock ) Գրքերից)) ԽՈՒՄԲ ԸՍՏ անդամների.անուն, անդամներ.ազգանուն;

Այս հարցումը վերադարձնում է մարդկանց ցուցակը, ովքեր գրադարանից վերցրել են գիրք, որն ունի միջինից բարձր ընդհանուր գումար:


Արդյունք:


Ամբողջական անուն
Լինդա Թայլեր

Հուսով եմ ձեզ հաջողվեց պարզել այն առանց որևէ խնդիրների: Բայց եթե ոչ, ապա ես ուրախ կլինեմ ձեր մեկնաբանությունների և արձագանքների համար, որպեսզի կարողանամ բարելավել այս գրառումը:

Պիտակներ. Ավելացնել պիտակներ