Սկիզբ » Ուսումնական նյութեր » Տվյալների բազաներ » SQL հարցումների լեզուն 44 օրինակով

SQL հարցումների լեզուն 44 օրինակով

Հոդվածի նպատակն է ծանոթացնել SQL հարցումների լեզվի հիմունքներին ցուցադրելով կիրառության օրինակներ։

Նախաբան

Օրինակների ցուցադրության համար նախապատրաստել եմ աշխատանքային տվյալների բազա, որը կարող եք վերցնել այստեղից։ Բազան կարելի է տեղադրել mysql համակարգում, phpmyadmin համակարգի միջոցով։ Եթե չունեք տեղադրված mysql և phpmyadmin ապա տեղադրելու եղանակը տեսեք այստեղ։ Տվյալների բազան իմպորտ անելու եղանակը տեսեք այս տեսանյութում։ Կարելի է նաև օգտագործել SQL-ի այլ խմբագրիչներ։ Օրինակ MySQL workbanch-ը կամ SQLyog , կամ թե կուզեք հենց Sublime Text-ը (հա սրան էլ կարելի է  կարգավորել,սովորեցնել կատարել SQL հարցումներ)։

Իրականում ես հույս ունեմ, որ այս նյութի ընթերցողը գոնե մինիմալ պատկերցում ունի տվյալների բազաների մասին։ Գոնե մի քիչ խաղացել է հենց նույն phpmyadmin-ի հետ ․․․ Ենթադրում եմ նաև, որ կարող է քոփի֊փեսթ անել կոդը, աշխատեցնել այն, վերլուծել և հասկանալ թե ինչ է կատարվում, անել փորձարկումներ ու անհրաժեշտության դեպքում դիմել նաև դոկումենտացիային [ru] , [en]:

Տվյալների Բազայի նկարագրությունը

Տվյալների բազան կազմված է 4 աղյուսակից, ստորև դրանց նկարագրությունը։

Employees

  • ID– Աշխատակցի հերթական ունիկալ համարը
  • First Name ֊ Անունը
  • Last Name ֊ Ազգանունը
  • RegDate ֊ Համակարգում գրանցվելու ամսաթիվը
  • Gender ֊  Սեռը
  • Salary ֊ Աշխատավարձը
  • NumberOfChildren ֊  Երեխաների քանակը

EmployeeFees

Աշխատակիցների կողմից իրականացված վճարումների աղյուսակն է։ Ի՞նչ վճարումների ․ Կարևոր չի ։)

  • ID ֊ Վճարման հերթական ունիկալ համարն է
  • EmployeeID ֊ Վճարումը կատարած աշխատակցի համարը
  • PaymentDate ֊ Վճարման ամսաթիվը
  • Amount ֊ Վճարման գումարը
  • Cheque ֊ Արդյոք չեկով է վճարել

EmployeeContacts

Աշխատակիցների կոնտակտային տվյալներն են

  • ContactID ֊ Կոնտակտի ունիկալ համարն է
  • EmployeeID ֊ Աշխատակցի համարն է
  • ContactInfo ֊ Կոնտակտային ինֆորմացիան է
  • ContactType ֊ Կոնտակտի տեսակի իդենտիֆիկատորն է
  • RegDate ֊  Կոնտակտի գրանցման ամսաթիվն ու ժամն է

EmployeeContactsTypes

  • ContactTypeID ֊ Կոնտակտային տվյալի տեսակի իդենտիֆիկատորն  է
  • ContactTypeDescr ֊ կոնտակտային տվյալի տեսակի տեքստային նկարագրությունն է

Մաս 1֊ին Պարզ ընտրանքներ (SELECT,ORDER BY)

Օրինակ 1 (SELECT)

Անհրաժեշտ է ընտրել Employees աղյուսակի բոլոր դաշտերը և բոլոր գրառումները

SELECT * 
FROM `Employees`;

* -նշանը օգտագործվում է բոլոր դաշտերը ընտրելու համար։

Դաշտերը ուղղահայաց սյունակներն են, իսկ գրառումները՝ հորիզոնական տողերը։

Օրինակ 2 (SELECT , մի քանի դաշտ)

Անհրաժեշտ է ընտրել բոլոր գրառումները(տողերը), սակայն դաշտերից ցուցադրել միայն աշխատակիցների հերթական համարը, անունը և ազգանունը

SELECT  `ID` 
		,`First Name`
		,`Last Name`
FROM `Employees`;

Այստեղ աստղանիշի փոխարեն գրում ենք դաշտերի անվանումները դրանք բաժանելով ստորակետերով։

Օրինակ 3 (SELECT. մի քանի դաշտ)

Նույն կերպ ընտրենք ID-ն, անունը , ազգանունը և աշխատավարձը

SELECT  `ID`
		,`First Name`
		,`Last Name`
		,`Salary`
FROM `Employees`;

Օրինակ 4 (SELECT, ORDER BY)

Մեր ընտրանքը դասավորենք աշխատավարձերի աճման կարգով

SELECT `ID`
 ,`First Name`
 ,`Last Name`
 ,`Salary`
FROM `Employees`
ORDER BY `Salary`

Օրինակ 5 (SELECT, ORDER BY, ASC,DESC)

Մեր ընտրանքը դասավորենք ըստ աշխատավարձերի, նվազման կարգով

SELECT  `ID`
		,`First Name`
		,`Last Name`
		,`Salary`
FROM `Employees`
ORDER BY `Salary` DESC

4֊րդ օրինակում ORDER BY `Salary` արտահայտությունը կարելի է գրել նաև որպես ORDER BY `Salary` ASC,  որտեղ ASC-ն աճման կարգն է (լռությամբ արժեքն է), այդ պատճառով այս պարզ օրինակներում կարելի է այն չգրել։

ASC և DESC-ը աշխատում են նաև տեքստային դաշտերի համար, տեքստային դաշտերը դասավորում են այբենական և հակառակ այբենական կարգերով։

Օրինակ 6 (SELECT, ORDER BY , ASC)

Նախորդ ընտրանքը դասավորենք անունների այբենական կարգով

SELECT `ID`
 ,`First Name`
 ,`Last Name`
 ,`Salary`
FROM `Employees`
ORDER BY `First Name` ASC

Օրինակ 7 (SELECT , ORDER BY, ASC, DESC)

Կարելի է դասավորել ավելի բարդ եղանակով, օրինակ  դասավորել սկզբում ըստ աշխատավարձերի և ապա ըստ երեխաների քանակի։ Ուշադրություն դարձեք որ SELECT֊ում ավելացնում եմ նաև NumberOfChildren դաշտը։

SELECT `ID`
 ,`First Name`
 ,`Last Name`
 ,`Salary`
 ,`NumberOfChildren`
FROM `Employees`
ORDER BY `Salary` ASC,`NumberOfChildren` DESC

Արվածը լավ հասկանալու համար նայեք 200000 աշխատավարձ ունեցողների ցանկը։

Օրինակ 8 (SELECT , DISTINCT)

Ստանանք չկրկնվող անունների ցանկ

SELECT DISTINCT `First Name`
FROM `Employees`;

համեմատեք հետևյալի հետ

SELECT `First Name`
FROM `Employees`;

Օրինակ 9 (SELECT, ORDER BY, LIMIT)

Օրինակ 6֊ում արված ընտրանքը սահմանափակենք առաջին 8 գրառումներով։

SELECT `ID`
 ,`First Name`
 ,`Last Name`
 ,`Salary`
FROM `Employees`
ORDER BY `First Name` ASC
LIMIT 0,8;

Մաս 2֊րդ ընտրանքներ պայմաններով (SELECT,WHERE)

Տվյալների բազաներում պահվող տվյալները պետք է ընկալել որպես բազմություններ։ Պիտի կարողանանք ստնալ ենթաբազմությունները։

Օրինակ 10 (SELECT , WHERE)

Ընտրենք այն աշխատակիցներին ում անունը “Սրբուհի” է։

SELECT `ID`
,`First Name`
,`Last Name`
,`Salary`
FROM `Employees`
WHERE `First Name` = "Սրբուհի"

Օրինակ 11 (SELECT , WHERE)

Ընտրենք բոլոր նրանց , ում անունը “Սրբուհի” չէ։

SELECT `ID`
,`First Name`
,`Last Name`
,`Salary`
FROM `Employees`
WHERE `First Name` <> "Սրբուհի"

Օրինակ 12 (SELECT, WHERE)

Ընտրենք բոլոր նրանց, ում աշխատավարձը հավասար է 200000

SELECT `ID`
,`First Name`
,`Last Name`
,`Salary`
FROM `Employees`
WHERE `Salary` = 200000

Օրինակ 13 (SELECT, WHERE)

Ընտրել բոլոր նրանց, ում աշխատավարձը մեծ է 200000֊ից

SELECT `ID`
,`First Name`
,`Last Name`
,`Salary`
FROM `Employees`
WHERE `Salary` > 200000

Օրինակ 14 (AND, BETWEEN)

Ընտրենք բոլոր նրանց, ում աշխատավարձը մեծ կամ հավասար է 200000֊ից բայց փոքր կամ հավասար է 300000

եղանակ 1

SELECT `ID`
,`First Name`
,`Last Name`
,`Salary`
FROM `Employees`
WHERE `Salary` >= 200000 AND `Salary` <= 300000

եղանակ 2

SELECT `ID`
,`First Name`
,`Last Name`
,`Salary`
FROM `Employees`
WHERE `Salary` BETWEEN 200000 AND 300000

BETWEEN-ը կարելի է կիառել նաև ժամանակային միջակայքերով ընտրանք անելու համար

SELECT `ID`
,`First Name`
,`Last Name`
,`Salary`
FROM `Employees`
WHERE RegDate BETWEEN  '2014-01-01' AND '2014-06-01'

Օրինակ 15 (ОR,IN)

Ընտրել բոլոր նրանց, ով ունի 1 կամ 3 երեխա

եղանակ 1

SELECT  `ID`
		,`First Name`
		,`Last Name`
		,`Salary`
		,`NumberOfChildren`
FROM `Employees`
WHERE `NumberOfChildren`=1 OR `NumberOfChildren`=3 

եղանակ 2

SELECT  `ID`
		,`First Name`
		,`Last Name`
		,`Salary`
		,`NumberOfChildren`
FROM `Employees`
WHERE `NumberOfChildren` IN (1,3)

Օրինակ 16 

Կարող ենք կիրառել ընտրության պայմանները մի քանի դաշտի վրա, օրինակ ընտրենք բոլոր նրանց, ով ստանում է 300000-ից ավել աշխատավարձ և ունի 2 երեխա

SELECT *
FROM `Employees`
WHERE `NumberOfChildren`=2
AND `Salary`>200000;

Օրինակ 17

Ընտրենք բոլոր նրանց, ովքեր գրանցվել են 2015 թվականի հունվարի մեկից հետո և ունեն 2 երեխա

SELECT  *
FROM `Employees`
WHERE `RegDate`>="2015-01-01"
AND `NumberOfChildren`=2

Օրինակ 18 (LIKE)

Կարելի է որոնում իրականացնել տեքստային դաշտերով, տեքստի որևէ հատվածով
Օրինակ գտնել բոլոր նրանց, ում անունը սկսվում է “Զա” տառերով

SELECT *
FROM `Employees`
WHERE `First Name` LIKE "Զա%"

Օրինակ 19 (LIKE)

Ընտրենք բոլոր նրանց, ում անունը վերջանում է “ինե” տառերով

SELECT *
FROM `Employees`
WHERE `First Name` LIKE "%ինե"

Օրինակ 20 (LIKE)

Ընտրենք բոլոր նրանց, ում ազգանվան մեջ հանդիպում է “տիր” տառային արտահայտությունը

SELECT *
FROM `Employees`
WHERE `Last Name` LIKE "%տիր%"

Մաս 3 ագրեգացում (SUM,COUNT,AVG,GROUP BY,HAVING)

 

SQL լեզվում տվյալները խմբավորելու և ապա այդ խմբերի համար արժեքներ հաշվելու հնարավորություն է նախատեսված։ Այդ գրոծընթացը կոչվում է  ագրեգացում։ Ագրեգացման պրոցեսին մասնակցում են ագեգացիոն ֆունկցիաները և GROUP BY արտահայտությունը։
Ագրեգացիոն ֆունկցիաների ամբողջ ցանկը նայեք այստեղ։ Մենք կնայենք միայն SUM,COUNT, AVG ֆունկցիաների օրինակների վրա։

Օրինակ 21 (SUM)

Հաշվել բլոր աշխատակիցներին տրվող միասնական աշխատավարձը։

SELECT SUM(`Salary`)
 FROM `Employees`;

Օրինակ 22 (COUNT)

Հաշվել աշխատակիցների քանակը

SELECT COUNT(`ID`)
 FROM `Employees`;

Օրինակ 23 (SUM, GROUP BY)

Հաշվել աշխատակիցների աշխատավարձերը խմբավորելով ըստ սեռի

SELECT SUM(`Salary`)
 ,`Gender`
 FROM `Employees`
 GROUP BY `Gender`;

Օրինակ 24 (SUM,AVG,GROUP BY)

Կարող ենք նաև միաժամանակ անել մի քանի ագրեգացում։

Հաշվենք խմբերի ընդհանուր գումարը, խմբի անդամների քանակը, և միջին աշխատավարձը, այս անգամ խմբավորելով ըստ երեխաների քանակի։

SELECT COUNT(`ID`)
 ,SUM(`Salary`)
 ,AVG(`Salary`)
 ,`NumberOfChildren`
 FROM `Employees`
 GROUP BY `NumberOfChildren`;

Օրինակ 25 (COUNT,SUM,AVG, GROUP BY, WHERE)

Կարելի է պայմաններով ֆիլտրել աղյուսակը, ապա իրականացնել ագրեգացում։

Նախորդ օրինակում արվածը անենք միայն 3֊ից ավել երեխա ունեցողների համար։

SELECT COUNT(`ID`)
 ,SUM(`Salary`)
 ,AVG(`Salary`)
 ,`NumberOfChildren`
 FROM `Employees`
 WHERE `NumberOfChildren`>3
 GROUP BY `NumberOfChildren`;

Օրինակ 26 (GROUP BY, երկու դաշտերով)

Կարելի է խմբավորել երկու կամ ավել դաշտերի տվյալներով
Անենք օրինակ 24֊ում  արված ագրեգացիան , միայն թե խմբավորելով միաժամանակ և ըստ երեխաների քանակի և ըստ սեռի։

SELECT COUNT(`ID`)
 ,SUM(`Salary`)
 ,AVG(`Salary`)
 ,`NumberOfChildren`
 ,`Gender`
 FROM `Employees`
 GROUP BY `NumberOfChildren`,`Gender`;

Օրինակ 27 (GROUP BY, HAVING)

Նախորդ օրինակի արդյունքերից ցուցադրենք միայն այն խմբերը, որոնցում անդամների քանակը 2֊ից ավել է։ Այստեղ պետք է ուշադիր լինել և չփորձել այս խնդիրը լուծել WHERE-ի միջոցով։ Որովհետև WHERE-ը աշխատում է տողերի վրա, իսկ այստեղ  ունենք Խմբերի համար ագրեգացված/հաշվարկված տվյալներ։

SELECT COUNT(`ID`)
 ,SUM(`Salary`)
 ,AVG(`Salary`)
 ,`NumberOfChildren`
 ,`Gender`
 FROM `Employees`
 GROUP BY `NumberOfChildren`,`Gender`
 HAVING COUNT(`ID`) > 2;

 

Մաս 4֊րդ ընտրանքներ մի քանի աղյուսակից (SELECT, ենթահարցումներ, JOIN)

Օրինակ 28 (ենթահարցումներ)

Ընտրենք բոլոր նրանց, ովքեր երբևէ իրականացրել են վճարումներ։ Վճարումները մեզ մոտ EmployeeFees աղյուսակի մեջ են։

SELECT *
FROM `Employees`
WHERE `ID` IN (SELECT `EmployeeID`
               FROM `EmployeeFees`);

SELECT `EmployeeID` FROM `EmployeeFees` հարցումը այս դեպքում անվանում ենք ենթահարցում։ Հարցումը վերադարձնում է այն աշխատակիցներնի ID-ների այն բազմությունը , ովքեր երբևէ իրականացրել են վճարումներ։ Այդ բազմությունը փոխանցում ենք WHERE-ում որպես ID-ի հնարավոր տարբերակներ։ Ենթահարցումը ինքը կարող է որքան անհրաժեշտ է բարդ լինել։ Կարող է ունենալ WHERE պայմաններ։

Միակ սահմանափակումը այն է, որ ընտրվող դաշտերի ցանկում լինի միայն մեկ դաշտ, այս օրինակում ընտրված է միայն EmployeeID դաշտը։

Օրինակ 29 (LEFT OUTER JOIN)

Ցուցադրել բոլոր աշխատակիցների անունները և նրանց  էլ․փոստի տվյալները

Այստեղ խնդիրը կայանում է նրանում, որ աշխատակիցների անունները և կոնտակտային տվյալները գտնվում են տարբեր աղյուսակներում, համապատասխանաբար Employees և EmployeeContacts։ EmployeeContacts֊ում աշխատակցի համար կարող է լինել մեկից ավելի կոնտակտային տվյալ։ Նաև որոշ աշխատակցների համար կարող է չլինել ոչ մի կոնտակտային տվյալ։

SELECT 
 Employees.ID
,Employees.`First Name`
,Employees.`Last Name`
,EmployeeContacts.ContactID
,EmployeeContacts.ContactInfo
FROM Employees
LEFT OUTER JOIN EmployeeContacts ON Employees.ID=EmployeeContacts.EmployeeID

Այս օրինակում անհրաժեշտ է նախ ուշադրություն դարձնել
LEFT OUTER JOIN EmployeeContacts ON Employees.ID=EmployeeContacts.EmployeeID տողի վրա, այն աղյուսակների միավորման պայմանն է, որտեղ ON արտահայտությունից հետո գրված պայմանը սահմանում է թե որ դաշտով պիտի կատարվի միացումը։

Ուշադրություն դաձրեք ContactID և ContactInfo դաշտերին, այստեղ տեսնում ենք, որ որոշ գրառումներում կոնտակտային տվյալների փոխարեն ունենք NULL արժեքներ։ Սրանք դատարկ միավորումներ են, այսինքն EmployeeContacts աղյուսակում չկան գրառումներ 11,12,13,14,15,16,24, և 26-ից 41 հերթական համարներով աշխատակիցների համար։

Վերադառնանք այս հարցման SELECT բաժնին
այստեղ տեսնում ենք դաշտերի անունների այսպիսի գրառումներ

Employees.ID



EmployeeContacts.ContactInfo

գրառումների նշանակությունն է Employees աղյուսակից ցուցադրել ID դաշտը, EmployeeContacts֊ից ՝ ContactInfo֊ն։

Օրինակ 30 (մականուններ, alias)

Նույն հարցումը կարելի է գրառել նաև այլ՝ ավելի կարճ եղանակով։ Այդ նպատակով օգտագործվում են մականունները (alias): Հարցման ժամանակ աղյուսակներին տրվում է ժամանակավոր կարճ անվանում՝ մականուն։

SELECT
E.ID
,E.`First Name`
,E.`Last Name`
,EC.ContactID
,EC.ContactInfo
FROM Employees AS E
LEFT OUTER JOIN EmployeeContacts AS EC ON E.ID=EC.EmployeeID

Այստեղ E-ն և EC֊ն համապատասխան աղյուսակների մականուններն են։ Սահմանվում են AS բառով։

Օրինակ 31 (RIGHT OUTER JOIN)

Եկեք տեսնենք արդյո՞ք EmployeeContacts֊ում կան գրառումներ, որոնց համապտատասխանող գրառումներ չկան Employees աղյուսակում։

SELECT
E.ID
,E.`First Name`
,E.`Last Name`
,EC.ContactID
,EC.ContactInfo
FROM Employees AS E
RIGHT OUTER JOIN EmployeeContacts AS EC ON E.ID=EC.EmployeeID

Տեսնում ենք, որ 33 և 34 կոնտակներին համապատասխանող աշխատակից չկա։ Այս և նախորդ օրինակի տարբերությունը միայն LEFT-ի փոխարինումն է RIGHT֊ով։

Այս միավորումները կոչվում են արտաքին միավորումներ (OUTER JOIN)։

Եթե փորձենք ձևակերպել LEFT OUTER JOIN-ը , ապա կարելի է ասել, որ ձախ աղյուսակից վերցվում են բոլոր գրառումները։ Աջ աղյուսակից վերցվում են աջին համապատասխանող տվյալները , իսկ բացակա տվյալների փոխարեն գրվում են NULL արժեքները։

 

Օրինակ 32 (INNER JOIN)

SQL լեզվում կան նաև ներքին միավորումներ (INNER JOIN), երբ աղյուսակներից միացվորվում են միայն այն գրառումները որոնք կան բոլոր միացվող աղյուսակներում։

SELECT 
 E.ID
,E.`First Name`
,E.`Last Name`
,EC.ContactID
,EC.ContactInfo
FROM Employees AS E
INNER JOIN EmployeeContacts AS EC ON E.ID=EC.EmployeeID

Այսպիսի միացումները կոչվում են ներքին (INNER) միացումներ (JOIN

Օրինակ 33 (INNER JOIN, մի քանի աղյուսակով)

Ներքին միացման ևս մի օրինակ, երբ միացնում ենք երեք աղյուսակներ:

SELECT 
 E.ID
,E.`First Name`
,E.`Last Name`
,EC.ContactID
,EC.ContactInfo
,ECT.ContactTypeDescr
FROM Employees AS E
INNER JOIN EmployeeContacts AS EC ON E.ID=EC.EmployeeID
INNER JOIN EmployeeContactsTypes AS ECT ON ECT.ContactTypeID=EC.ContactType

Մեր ընտրանքի մեջ ներառված են բոլոր կոտնակտ ունեցող աշխատակիցների բոլոր կոնտակտները։ ECT.ContactTypeDescr դաշտով ցուցադրված  են կոնտակտների տեսակների տեքստային անվանումները։

Իհարկե եռակի և բազմակի միավորումներ կարելի է անել նաև արտաքին միավորումների միջոցով (OUTER JOIN

 

Օրինակ 34 (LEFT OUTER JOIN, GROUP BY)

Հաշվենք թե քանի կոնտակտ տվյալ է կա գրանցված յուրաքանչյուր աշխատակցի համար։

Միավորումները կարելի է ընկալել որպես երկու կամ ավել աղյուսակներից կազմված միացյալ աղյուսակ, ըստ այդմ ընտրանքների վրա աշխատում են WHERE,GROUP BY,ORDER BY  նաև ագրեգացիոն ֆունկցիաները։

SELECT
 E.`First Name`
 ,E.`Last Name`
 ,COUNT(EC.ContactID) AS ContactsCount
 FROM Employees AS E
 LEFT OUTER JOIN EmployeeContacts AS EC ON E.ID=EC.EmployeeID
 GROUP BY E.ID;

Օրինակ 35 (LEFT OUTER JOIN, GROUP BY, ORDER BY)

Դասավորենք նախորդ օրինակի արդյունքը կոնտակտների քանակի նվզման կարգով

SELECT
 E.`First Name`
 ,E.`Last Name`
 ,COUNT(EC.ContactID) AS ContactsCount
 FROM Employees AS E
 LEFT OUTER JOIN EmployeeContacts AS EC ON E.ID=EC.EmployeeID
 GROUP BY E.ID
 ORDER BY ContactsCount DESC;

Օրինակ 36 (LEFT OUTER JOIN, WHERE, ORDER BY)

Ընտրենք իգական սեռի աշխատակիցների կոնտակտային տվյալները, ցուցադրելով անունը,ազգանունը,կոնտակտը և կոնտակտի տեսակը։ Դասավորելով ըստ աշխատակիցների։

SELECT
 E.ID
 ,E.`First Name`
 ,E.`Last Name`
 ,EC.ContactInfo
 ,ECT.ContactTypeDescr
 FROM Employees AS E
 LEFT OUTER JOIN EmployeeContacts AS EC ON E.ID=EC.EmployeeID
 LEFT OUTER JOIN EmployeeContactsTypes AS ECT ON ECT.ContactTypeID=EC.ContactType
 WHERE EC.Gender=1
 ORDER BY E.ID

Օրինակ 37 (LEFT OUTER JOIN, GROUP BY, SUM,COUNT)

Ընտրենք բլոր աշխատակիցներին, ցուցադրենք նրանց կողմից արված վճարումների ընհանուր քանակը և ծավալը։

SELECT
 E.ID
 ,E.`First Name`
 ,E.`Last Name`
 ,SUM(EF.Amount)
 ,COUNT(EF.ID)
 FROM Employees AS E
 LEFT JOIN EmployeeFees AS EF ON E.ID=EF.EmployeeID
 GROUP BY E.ID

Այս հարցման մեջ հատուկ կիրառված է LEFT JOIN֊ը որպիսի ընտրվեն նաև այն աշխատակիցները, ովքեր երբևէ վճարում չէն իրականացրել։ INNER JOIN տարբերակով կընտրվեին միայն այն աշխատակիցները, ովքեր արել են գոնե մեկ վճարում. EmployeeFees աղյուսակում նրանց համար կա առնվազն մեկ գրառում։

 

Մաս 5 Ներմուծում (INSERT), Թարմացում (UPDATE), Ջնջում (DELETE)

Օրինակ 38 (INSERT)

Employees աղյուսակ ներմուծենք Գարեգին Պետրոսյանի տվյալները, ով ունի 5 երեխա և պիտի ստանա 200000 աշխատավարձ։

INSERT INTO Employees (`First Name`,`Last Name`,Salary,NumberOfChildren,RegDate)
VALUES ("Գարեգին","Պետրոսյան",200000,5,current_date());

Ուշադրություն դարձրեք, որ աղյուսակի ոչ բոլոր դաշտերն են գրված աղյուակի անվանումից հետո, փակագծերում գրվում են միայն այն դաշտերը, որոնք անհրաժեշտ է լրացնել։ VALUES բառից հետո փակագծերում գրվում են դաշտերին համապատասխան ներմուծվող արժեքները։ Աղյուսակում առկա չլրացված դաշտերը, այս հրամանաշարը կատրաերլուց հետո, կլրացվեն իրենց լռությամբ արժեքներով (եթե այդպիսիք սահմանված են), կամ էլ դատարկ կմնան։

current_date()֊ը MySQL-ի ֆունկցիա է, որը վերադարձնում է տվյալ պահը։
Կարող ենք դրա աշխատանքին ծանոթանալ աշխատեցնելով հետևյալ կոդը՝

SELECT current_date();

 

Օրինակ 39

Ինչպե՞ս ներմուծել միաժամանակ մի գրառում

INSERT INTO Employees (`First Name`,`Last Name`,Salary,NumberOfChildren,RegDate)
 VALUES ("Հովհաննես","Թումանյան",1000000,2,current_date()),
 ("Աթաբեկ","Խնկոյան",10000,3,current_date()),
 ("Ղազարոս","Աղայան",50000,4,current_date());

Անմիջապես ստուգենք նոր գրառումների արժեքների առկայությունը՝

SELECT *
 FROM Employees
 ORDER BY ID DESC;

Օրինակ 40 (DELETE)

Ջնջենք այն գրառումը, որը ներակյացված է 2 ID-ով

DELETE FROM Employees
 WHERE ID=2;

Իհարկե DELETE կառուցվածքի միջոցով կարելի է ջնջել ոչ միայն մեկ գրառում, այլև գրառումների ամբողջական խմբեր։ WHERE բաժնում կարող է ցանկացած բարդության պայման լինել, կարող են օգտագործվել տրամաբանական օպերատորներ(AND,OR…) նաև BEETWEEN, LIKE, IN և այլն ․․․

Սակայն պետք է զգույշ լինել, WHERE պայմանի բացակայության դեպքում DELETE FROM Employees հրամանը կջնջի ամբոջ աղյուսակի պարունակությունը։

Օրինակ 41 (UPDATE)

Ենթադրենք 21 ID-ն ունեցող Մագա Արատյանը ունեցել է ևս երկու երեխա և անհրաժեշտ է թարմացնել այդ ինֆորմացիան։

#նայում ենք թե քանի երեխա ունի այս պահին
SELECT * FROM Employees WHERE ID=21;

տեսնում ենք , որ երկուսն են, թարմացնենք NumberOfChildren֊ը դարձնելով 4;

UPDATE Employees
SET NumberOfChildren=4
WHERE ID=21;

Այստեղ նույնպես պետք է ուշադիր լիել, որովհետև եթե WHERE֊ը չլինի, ամբողջ աղյուսակում NumberOfChildren֊ը կդառնա 4։

Ինչպես SELECT և DELETE կառուցվածքների օգտագործաման ժամանակ, այստեղ էլ, կարելի է ցանկացած բարդության պայմաններ կիրառել։

Օրինակ 42 (UPDATE)

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

UPDATE Employees
SET NumberOfChildren=NumberOfChildren+2
WHERE ID=21;

Օրինակ 43 (UPDATE)

Ենթադրենք անհրաժեշտ է թարմացնել աշխտավարձի մասին տվյալները, այն աշխատակիցների մոտ, ովքեր գրանցվել են համակարգում 2013 թվականին։ Նրանց աշխատավարձը անհրաժեշտ է ավելացնել 20%-ով։

UPDATE Employees
SET Salary=Salary*(1.2)
WHERE RegDate BETWEEN "2013-01-01" AND "2014-01-01";

Օրինակ 44 (UPDATE)

Ենթադրենք 3,4 և 8 ID-ները ունեցող աշխատակիցները այս ամսվա ընթացքում ունեցել են մեկական երեխա և անհրաժեշտ է թարմացնել տվյալները, միաժամանակ նրանց աշխատավարձը ավելացնելով 15%֊ով։

Կարելի է նաև միաժամանակ թարմացնել ընտրված գրառումների մի քանի դաշտը։

UPDATE Employees
SET NumberOfChildren=NumberOfChildren+1
 ,Salary = Salary*(1.15)
WHERE ID IN (3,4,8);

Վերջ

Այսպիսով ավարտեցի այն ինչ նախատեսել էի անել, ուրախ կլինեմ եթե այս տեքստը օգտակար լինի։ Պատրաստ եմ լսել առաջարկություններ և դիտողություններ։ Եթե հայտնաբերեք սխալներ կամ ոչ հստակ մտքեր, խնդրում եմ տեղեկացնել մեկնաբանություններում։

Շնորհակալություն ուշադրության համար։

Դբա Լավը ։)

ՀԳ։Մոռացա ասել, կան նաև վարժություններ, որոնք անելով կարող եք զարգացնել SQL գրելու ձեր հմտությունները։

Վարժությունների ցանկ

  1. Աշատախանք mysql-ի հետ (SELECT-ներ)
  2. Աշխատանք mysql-ի հետ (INSERT-ներ)
  3. Աշխատանք mysql-ի հետ (UPDATE-ներ)
  4. Աշխատանք mysql-ի հետ (DELETE-ներ)
SQL հարցումների լեզուն 44 օրինակով, 9.9 out of 10 based on 7 ratings

Նշագրեր: , , , , , , ,

Բաժին: Տվյալների բազաներ

Կիսվել , տարածել , պահպանել

VN:F [1.9.20_1166]
Rating: 9.9/10 (7 votes cast)

Մեկնաբանեք

Կհաստատվեն միայն մեսրոպատառ հայերենով գրած մեկնաբանությունները

194