MySQL միացումները(JOINS) հնարավորություն են տալիս մի քանի աղյուսակներից ստանալ ինֆորմացիա միաժամանակ, այսինքն մի SELECT հրամանով ստանալ անհրաժեշտ տվյալները երկու և ավելի աղյուսակներից: Կախված պահանջվող արդյունքից MySQL-ը թույլ է տալիս միացման 3 եղանակ՝
- INNER JOIN,
- LEFT JOIN,
- RIGHT JOIN
Ունենք երկու պարզ աղյուսակ՝ ապրանքներ(products) և նկարագրություններ(descriptions), որոնք պարունակում են որոշակի ինֆորմացիա տարբեր ապրանքների մասին: Այս աղյուսակների օգնությամբ դիտարկենք միացումների մի քանի օրինակ:
Եթե ուշադիր դիտեք, ապա կտեսնեք, որ աղյուսակների մեջ մի քանի տող բացակայում են: Ապրանքներ աղյուսակում չկան 3-րդ և 5-րդ, իսկ նկարագրություններ աղնուսակում՝ 1-ին և 6-րդ տողերը:
INNER JOIN
Այս միացումը հնարավորություն է տալիս աղյուսակներից ստանալ միայն այն տողերը, որոնք պարտադիր կան նշված աղյուսակներից յուրաքանչյուրի մեջ:
SELECT `products`.*, `descriptions`.* FROM `products` INNER JOIN `descriptions` ON `products`.`id` = `descriptions` .`id`
Select հրամանով ստանում ենք այն տողերը, որոնք կան և՛ ապրանքներ, և՛ նկարագրություններ աղյուսակներում: * սիմվոլը նախատեսված է աղյուսակից ամբողջ ինֆորմացիան ստանալու համար: Դրա փոխարեն կարող եք ստանալ աղյուսակի ցանկացած սյուն՝ գրելով աղյուսակի անունը, հետո կետ և սյան անունը, օրինակ՝ `products`.`id`,`products`.`quantity`, `descriptions`.`amount` և այլն: FROM-ից հետո նշում ենք հիմնական աղյուսակի անունը, INNER JOIN-ից հետո միացվող աղյուսակի անունը, իսկ ON հրամանը թույլ է տալիս աղյուսակները <<կապել>> իրար, այսինքն՝ հրամանը կատարվելիս աղյուսակները կհամեմատվի ըստ այդ պայմանի: Հրամանը կատարվելուց հետո կստանանք հետևյալ տողերը՝
Ինչպես տեսնում եք այն վերադարձրել է երեք տող, քանի որ միայն այդ տողերի `id`-ներն են համապատասխանում:
ON-ի փոխարեն կարող ենք օգտագործել նաև USING() ֆունկցիան, միայն, եթե երկու աղյուսակների համեմատվող սյուների անունները նույնն են, հակառակ դեպքում օգտագործվում է ON-ը:
INNER JOIN-ին համարժեք են նաև CROSS JOIN-ը, JOIN-ը և ստորակետով միացումը: Հետևյալ 3 հարցումները կվերադարձնեն նույն տողերը, ինչ վերևում դիտարկված Select-ը:
SELECT * FROM `products` CROSS JOIN `descriptions` USING(`id`) SELECT * FROM `products` JOIN `descriptions` USING(`id`) SELECT * FROM `products`,`descriptions` WHERE `descriptions`.`id` = `products`.`id`
Եթե միացումն անում ենք ստորակետով, ապա չենք կարող օգտագործել ոչ՛ ON, ոչ՛ USING կառուցվածքները, դրա փոխարեն կիրառվում է WHERE պայմանը:
LEFT JOIN
LEFT JOIN-ը հնարավորություն է տալիս ստանալ տվյալներ աղյուսակից և այն լրացնել այլ աղյուսակի տվյալներով: Օրինակ՝ ստանանք բոլոր ապրանքների անունները և դրանց համապատասխան նկարագրությունները:
SELECT * FROM `products` LEFT JOIN `descriptions` USING(`id`)
Հարցումը կատարվելուց հետո կստանանք հետևյալ տողերը՝
Ինչպես տեսնում եք, `descriptions` աղյուսակից ստացած տվյալներից մի քանիսի փոխարեն NULL արժեքներ են: Դա պայմանավորված է նրանով, որ `products` աղյուսակի `id` սյան հետ համապատասխանեցում չի եղել: Եվ իրոք, եթե դիտենք `descriptions` աղյուսակի տվյալները, ապա կտեսնենք, որ `id` սյունում չունենք 1-ին և 6-րդ տողերը:
RIGHT JOIN
RIGHT JOIN-ը գործնականում չի տարբերվում LEFT JOIN-ից, բացառությամբ այն բանի, որ տվյալները վերցվում են երկրորդ աղյուսակից (JOIN-ից հետո գրված) և համեմատվում առաջին աղյուսակի հետ:
SELECT * FROM `products` RIGHT JOIN `descriptions` USING(`id`)
Հարցումը կվերադարձնի հետևյալ տողերը՝
Ինչպես տեսնում եք այս դեպքում արդեն `products` աղյուսակի տվյալներից մի քանիսն են NULL արժեքներով, քանի որ այն չունի համապատասխան տողեր `descriptions`-ի հետ:
Ինչպես ասացի հոդվածի սկզբում MySQL միացումների օգնությամբ կարող ենք ստանալ տվյալներ մի քանի աղյուսակներից: Մենք դիտարկեցինք միայն երկու աղյուսակների միացումները, իսկ հիմա օրինակով դիտարկենք 2-ից ավել աղյուսակների միացման օրինակ:
SELECT `products`.`product_name`, `descriptions`.`product_description`, `sale`.`sum` FROM `products` INNER JOIN `descriptions` USING (`id`) LEFT JOIN `sale` ON `sale`.`p_id` = `products`.`id`
Այսքանով ավարտեցինք MySQL միացումների թեման: Եթե առաջանան հարցեր ապա կարող եք թողնել մեկնաբանություն կամ գրել Ձեր հարցը քննարկումների բաժնում։
Շնորհակալություն մեր բլոգից օգտվելու համար։ Հարգանքներով՝ IT-Blog.am թիմ: