កុំព្យូទ័រ, ផ្នែកទន់
របៀបសរសេរ SQL មួយសំណួរ - ឧទាហរណ៍លម្អិត
យើងរាល់គ្នាបានទៀងទាត់ប្រឈមនឹងការប្រើភាពខុសគ្នានៃនិងជាមូលដ្ឋានទិន្នន័យមួយ។ នៅពេលដែលយើងជ្រើសអាសយដ្ឋានអ៊ីម៉ែល, យើងកំពុងធ្វើការជាមួយមូលដ្ឋានទិន្នន័យ។ មូលដ្ឋានទិន្នន័យប្រើប្រាស់សេវាកម្មស្វែងរកធនាគារសម្រាប់ការផ្ទុកទិន្នន័យអតិថិជនជាដើម
ប៉ុន្តែបើទោះបីជាការប្រើប្រាស់ថេរនៃមូលដ្ឋានទិន្នន័យ, សូម្បីតែសម្រាប់អ្នកអភិវឌ្ឍន៍ប្រព័ន្ធកម្មវិធីជាច្រើនគឺមានច្រើននៃការ "ចំណុចស" ដោយសារតែការបកស្រាយផ្សេងគ្នានៃលក្ខខណ្ឌដូចគ្នា។ យើងផ្តល់និយមន័យនៃពាក្យសំខាន់ខ្លីទៅមូលដ្ឋានទិន្នន័យនៃការ SQL មួយពិចារណា។ មាំ
មូលដ្ឋានទិន្នន័យ - ឯកសារមួយឬសំណុំឯកសារសម្រាប់រក្សាទុកទិន្នន័យបានបញ្ជាឱ្យរចនាសម្ព័ន្ធនិងទំនាក់ទំនងរបស់ពួកគេ។ ជាញឹកញាប់ណាស់, មូលដ្ឋានទិន្នន័យមួយដែលត្រូវបានគេហៅថាប្រព័ន្ធគ្រប់គ្រងទិន្នន័យ (DBMS) ។ មូលដ្ឋានទិន្នន័យ - វាគ្រាន់តែជាឃ្លាំងនៃពត័មាននៅក្នុងទ្រង់ទ្រាយជាក់លាក់មួយនិងអាចធ្វើការជាមួយមូលដ្ឋានទិន្នន័យផ្សេងគ្នា។
តារាង - ស្រមៃថតនៅក្នុងការដែលឯកសារត្រូវបានរក្សាទុក, បានដាក់ជាក្រុមបើយោងតាមប៉ារ៉ាម៉ែត្រដូចជាបញ្ជីនៃការបញ្ជាទិញសម្រាប់ខែចុងក្រោយនេះ។ នេះគឺជាតារាងនៅក្នុងកុំព្យូទ័ររបស់មួយ មូលដ្ឋានទិន្នន័យ។ តារាងដាច់ដោយឡែកមានឈ្មោះខ្លួនតែមួយគត់របស់ខ្លួន។
ប្រភេទទិន្នន័យ - ប្រភេទនៃការពអនុញ្ញាតឱ្យរក្សាទុកនៅក្នុងជួរឈរតែមួយឬជួរដេក។ វាអាចជាលេខឬជាអត្ថបទទ្រង់ទ្រាយជាក់លាក់មួយ។
ជួរឈរនិងជួរដេក - យើងទាំងអស់គ្នាធ្វើការជាមួយនឹងសៀវភៅបញ្ជីដែលមានវត្តមាននៅក្នុងជួរដេកនិងជួរឈរផងដែរ។ រាល់ការ មូលដ្ឋានទិន្នន័យទំនាក់ទំនង ធ្វើការជាមួយនឹងតារាងវិធីដូចគ្នា។ ខ្សែអក្សរនេះត្រូវបានគេហៅថាពេលខ្លះការកត់ត្រា។
កូនសោសំខាន់ - ជួរដេកគ្នាអាចមានជួរឈរមួយឬច្រើនសម្រាប់ការកំណត់អត្តសញ្ញាណតែមួយគត់របស់ខ្លួន។ គ្មានកូនសោសំខាន់គឺមានការលំបាកខ្លាំងណាស់ដើម្បីធ្វើឱ្យទាន់សម័យ, កែប្រែនិងលុបជួរដេកដែលពាក់ព័ន្ធ។
SQL គឺជាអ្វី?
ភាសាសំណួរ SQL មួយ (ជាភាសាអង់គ្លេស Structured Query Language ។ - រចនាសម្ព័ន្ធ Query Language) ត្រូវបានរចនាឡើងតែមួយគត់ដើម្បីធ្វើការជាមួយនឹងមូលដ្ឋានទិន្នន័យនិងបច្ចុប្បន្នជាស្ដង់ដារសម្រាប់មូលដ្ឋានទិន្នន័យដែលពេញនិយមទាំងអស់។ វាក្យសម្ព័ន្ធភាសានេះត្រូវបានបង្កើតឡើងដោយមួយចំនួនតូចនិងងាយស្រួលក្នុងការប្រតិបត្តិកររៀន។ ប៉ុន្តែទោះបីជាភាពសាមញ្ញជាក់ស្តែងនេះវាអនុញ្ញាតឱ្យបង្កើតសំណួរ SQL សម្រាប់ប្រតិបត្ដិការស្មុគ្រស្មាញជាមួយនឹងមូលដ្ឋានទិន្នន័យនៃទំហំណាមួយ។
ចាប់តាំងពីឆ្នាំ 1992 មកគឺមានស្ដង់ដារជារឿងធម្មតា, គេហៅថា ANSI SQL មួយ។ វាកំណត់វាក្យសម្ព័ន្ធនិងមុខងាររបស់ប្រតិបត្តិករមូលដ្ឋាននិងត្រូវបានគាំទ្រដោយទាំងអស់ជាមេដឹកនាំទីផ្សារ DBMS ដូចជា Oracle ដែលជា ក្រុមហ៊ុន Microsoft SQL មួយម៉ាស៊ីនបម្រើនេះបាន។ សូមពិចារណាលក្ខណៈពិសេសទាំងអស់នៃភាសាដែលនៅក្នុងអត្ថបទខ្លីមួយនេះគឺមិនអាចទៅរួចនោះទេដូច្នេះយើងនឹងពិចារណាយ៉ាងខ្លីតែសំណួរ SQL មូលដ្ឋាន។ ឧទាហរណ៍បង្ហាញពីភាពសាមញ្ញនិងមានលក្ខណៈពិសេសនៃភាសានេះ:
- ការបង្កើតមូលដ្ឋានទិន្នន័យនិងតារាង;
- ជ្រើសទិន្នន័យ;
- ការបន្ថែមធាតុ;
- ការកែប្រែនិងការលុបព។
ទិន្នន័យ SQL មួយប្រភេទ
ជួរឈរទាំងអស់នៅក្នុងតារាងមូលដ្ឋានទិន្នន័យមួយទុកប្រភេទទិន្នន័យដូចគ្នា។ ក្នុង SQL ប្រភេទទិន្នន័យគឺមានដូចគ្នានៅក្នុងភាសាសរសេរកម្មវិធីផ្សេងទៀត។
| ប្រភេទទិន្នន័យ | បរិយាយ |
| INT | ចំនួនគត់ |
| ពិត | អណ្តែតទឹកចំនួនដែលចំណុច |
| អត្ថបទ | ខ្សែអក្សរតួអក្សរនៃប្រវែងអថេរ |
| កាលបរិច្ឆេទ | សំណួរ SQL "កាលបរិច្ឆេទ" នៅក្នុងភាពខុសគ្នានៃទ្រង់ទ្រាយមួយ |
| លេ | ពេល |
| CHAR | ខ្សែអក្សរអត្ថបទនៃប្រវែងថេរ |
បង្កើតតារាងនិងមូលដ្ឋានទិន្នន័យ
បង្កើតមូលដ្ឋានទិន្នន័យថ្មី, តារាងនិងសំណួរផ្សេងទៀតនៅក្នុង SQL មួយមានវិធីពីរយ៉ាងគឺ:
- សេចក្តីថ្លែងការណ៍ SQL មូលដ្ឋានទិន្នន័យដែលបានតាមរយៈកុងសូល
- ដោយប្រើឧបករណ៍ដែលអន្តរកម្មរដ្ឋបាលផ្នែកនៃម៉ាស៊ីនបម្រើមូលដ្ឋានទិន្នន័យមួយ។
ប្រតិបត្តិករមូលដ្ឋានទិន្នន័យថ្មីបង្កើតមូលដ្ឋានទិន្នន័យ <ឈ្មោះមូលដ្ឋានទិន្នន័យ>; ។ ដូចដែលអ្នកអាចមើលឃើញ, វាក្យសម្ព័ន្ធគឺសាមញ្ញនិងសង្ខេប។
តុនេះនៅក្នុងមូលដ្ឋានទិន្នន័យដែលបានបង្កើតបង្កើតតារាងសេចក្តីថ្លែងការណ៍ជាមួយនឹងប៉ារ៉ាម៉ែត្រដូចខាងក្រោម:
- ឈ្មោះតារាង
- ឈ្មោះនិងទិន្នន័យប្រភេទនៃជួរឈរ
ជាឧទាហរណ៍មួយ, បង្កើតតារាងមួយដែលមានជួរឈរទំនិញដូចខាងក្រោម:
| ជួរឈរ | បរិយាយ |
| commodity_id | លេខសម្គាល់ផលិតផល |
| អ្នកលក់ | លេខសម្គាល់អ្នកលក់ (អាជីវករគន្លឹះតារាងខាងក្រៅ) |
| commodity_name | ឈ្មោះផលិតផល |
| commodity_price | ការចំណាយនៃការ |
| commodity_desc | បរិយាយ |
បង្កើតតារាងមួយ:
បង្កើតទំនិញតារាង
(CHAR commodity_id (15) មិន NULL,
អ្នកលក់ CHAR (15) មិន NULL,
commodity_name CHAR (254) NULL,
ទសភាគ commodity_price (8,2) NULL,
commodity_desc VARCHAR (1000) NULL);
តារាងមានជួរឈរប្រាំ។ បន្ទាប់ពីឈ្មោះនេះគឺជាប្រភេទនៃជួរឈរទិន្នន័យត្រូវបានបំបែកដោយសញ្ញាក្បៀស។ តម្លៃជួរឈរនេះអាចសន្មត់តម្លៃទទេ (NULL) ឬត្រូវបំពេញនៅក្នុង (មិន NULL), ហើយវាជាការប្តេជ្ញាចិត្តដើម្បីបង្កើតតារាងមួយ។
ទិន្នន័យពីតារាងគំរូ
ទិន្នន័យប្រតិបត្តិករគំរូ - សំណួរ SQL ភាគច្រើនបំផុតបានប្រើជាទូទៅ។ ចំពោះការបន្ថែមដែលអ្នកត្រូវការដើម្បីបញ្ជាក់ថាយើងចង់ជ្រើសពីតារាងមួយ។ នៅពេលដំបូងឧទាហរណ៍ធម្មតា:
commodity_name ជ្រើសពីផលិតផល
បន្ទាប់ពីសេចក្តីថ្លែងការណ៍ SELECT បង្ហាញឈ្មោះរបស់ជួរឈរដើម្បីទទួលបានពនេះប៉ុន្តែពីកំណត់តារាង។
លទ្ធផលសំណួរនឹងត្រូវបានជួរដេកតារាងទាំងអស់ដោយតម្លៃ Commodity_name ក្នុងលំដាប់ដែលពួកគេត្រូវបានចូលទៅក្នុងមូលដ្ឋានទិន្នន័យឧទាហរណ៍ ដោយគ្មានការតម្រៀបណាមួយទេ។ ដើម្បីរៀបចំលទ្ធផលដោយប្រើលំដាប់ប្រតិបត្តិករជម្រើសដោយ។
ដើម្បីសួរនៅលើវាលច្រើនរាយពួកវាបំបែកដោយសញ្ញាក្បៀសដូចក្នុងឧទាហរណ៍ដូចខាងក្រោម:
commodity_id SELECT, commodity_name, commodity_price ពីទំនិញ
វាគឺជាការដែលអាចធ្វើបានដើម្បីទទួលបានជាលទ្ធផលនៃតម្លៃនៃជួរឈរខ្សែអក្សរសំណួរទាំងអស់។ ចំពោះគោលបំណងនេះសញ្ញា "*":
* ជ្រើសពីផលិតផល
- ជ្រើសគាំទ្រលើសពីនេះទៀត:
- តម្រៀបទិន្នន័យ (ORDER BY សេចក្តីថ្លែងការណ៍)
- ការជ្រើសរើសនេះបើយោងតាមលក្ខខណ្ឌនេះ (ទីកន្លែង)
- រយៈពេលក្រុម (ក្រុមដោយ)
បន្ថែមបន្ទាត់
ដើម្បីបន្ថែមជួរដេកទៅក្នុងតារាងមួយដោយប្រើសេចក្តីថ្លែងការណ៍ SQL សេចក្តីថ្លែងការណ៍ INSERT មួយ។ លើសពីនេះទៀតអាចត្រូវបានធ្វើឡើងនៅក្នុងវិធីបីយ៉ាង:
- បន្ថែមបន្ទាត់ទាំងមូលថ្មី;
- នៃបន្ទាត់;
- លទ្ធផលសំណួរ។
ដើម្បីបន្ថែមបន្ទាត់ពេញលេញបានអ្នកត្រូវតែបញ្ជាក់ឈ្មោះតារាងនិងតម្លៃនៃជួរឈរ (វាល) នៃបន្ទាត់ថ្មី។ ខាងក្រោមនេះគឺជាឧទាហរណ៍មួយ:
បញ្ចូលទៅជាតម្លៃទំនិញ ( '106', '50', 'ក្រុមហ៊ុន Coca-Cola ", " 1.68 "" គ្មាន Alcogol)
ឧទាហរណ៍បន្ថែមផលិតផលថ្មីមួយទៅក្នុងតារាង។ តម្លៃត្រូវបានបញ្ជាក់បន្ទាប់ពីតម្លៃសម្រាប់ជួរឈរនីមួយ។ ប្រសិនបើមានគឺគ្មានតម្លៃដែលត្រូវគ្នាសម្រាប់ជួរឈរនេះវាគឺជាការចាំបាច់ដើម្បីបញ្ជាក់ NULL ។ ជួរឈរត្រូវបានពោរពេញទៅដោយគុណតម្លៃក្នុងលំដាប់ដែលបានបញ្ជាក់នៅពេលបង្កើតតារាងមួយ។
នៅក្នុងករណីនៃការបន្ថែមតែចំណែកនៃខ្សែអក្សរនេះត្រូវតែបញ្ជាក់យ៉ាងជាក់លាក់ឈ្មោះនៃជួរឈរនោះដូចនៅក្នុងឧទាហរណ៍នេះ:
បញ្ចូលទៅក្នុងទំនិញ (commodity_id, អ្នកលក់, commodity_name)
តម្លៃ ( '106', '50', 'ក្រុមហ៊ុន Coca-Cola " )
យើងបានណែនាំតែអត្តសញ្ញាណផលិតផល, អ្នកផ្គត់ផ្គង់និងឈ្មោះរបស់ខ្លួននិងនៅសល់នៃវាលដែលបានដាក់ឡែកទទេ។
លោកបានបន្ថែមថាលទ្ធផលសំណួរ
ជាទូទៅមាន INSERT ត្រូវបានប្រើដើម្បីបន្ថែមជួរដេកមួយប៉ុន្តែអាចត្រូវបានប្រើសម្រាប់បន្ថែមលទ្ធផលសេចក្តីថ្លែងការណ៍មួយ SELECT ។
ទិន្នន័យការផ្លាស់ប្តូរ
ដើម្បីផ្លាស់ប្តូរពនៅក្នុងវាលតារាងមូលដ្ឋានទិន្នន័យត្រូវប្រើសេចក្តីថ្លែងការណ៍ធ្វើឱ្យទាន់សម័យ។ ប្រតិបត្តិករនេះអាចត្រូវបានប្រើក្នុងវិធីពីរយ៉ាង:
- បានធ្វើបច្ចុប្បន្នភាពជួរដេកទាំងអស់នៅក្នុងតារាង។
- មានតែសម្រាប់បន្ទាត់ជាក់លាក់មួយ។
បច្ចុប្បន្នភាពមានធាតុសំខាន់ចំនួនបី:
- តុមួយដែលអ្នកចង់ធ្វើឱ្យការផ្លាស់ប្តូរ;
- ឈ្មោះវាលនិងតម្លៃថ្មីរបស់ពួកគេ;
- លក្ខខណ្ឌសម្រាប់ការផ្លាស់ប្តូរការជ្រើសជួរដេក។
សូមពិចារណាឧទាហរណ៍មួយ។ ចូរនិយាយថាផលិតផលដែលមានលេខសម្គាល់ = 106 បានផ្លាស់ប្តូរតម្លៃនេះ, ដូច្នេះបន្ទាត់នេះដើម្បីធ្វើបច្ចុប្បន្នភាព។ សរសេរសេចក្តីថ្លែងការណ៍ដូចខាងក្រោម:
commodity_price បច្ចុប្បន្នភាពទំនិញ SET = '3,2' WHERE commodity_id = ' 106'
យើងចង្អុលបង្ហាញថាឈ្មោះតារាងក្នុងករណីនេះ, ទំនិញដែលនឹងត្រូវបានធ្វើបច្ចុប្បន្នភាពនិងបន្ទាប់មកបន្ទាប់ពីកំណត់ - តម្លៃថ្មីនៃជួរឈរនិងបានរកឃើញធាតុដែលចង់បានបញ្ជាក់លេខសម្គាល់តម្លៃដែលជាកន្លែងដែលអ្នកចង់បាន។
ដើម្បីផ្លាស់ប្តូរចំនួនជួរឈរបន្ទាប់ពីសេចក្តីថ្លែងការណ៍នេះបានបញ្ជាក់គូ SET ជាច្រើននៃជួរឈរតម្លៃដែលបំបែកដោយសញ្ញាក្បៀស។ សូមមើលឧទាហរណ៍ដែលក្នុងនោះឈ្មោះនិងតម្លៃទំនិញធ្វើឱ្យទាន់សម័យមួយ:
commodity_name បច្ចុប្បន្នភាពទំនិញ SET = 'Fanta " , commodity_price =' 3,2 'WHERE commodity_id =' 106 '
ដើម្បីលុបនៅក្នុងជួរឈរដែលបានព, អ្នកអាចកំណត់វាទទេប្រសិនបើវាអនុញ្ញាតឱ្យរចនាសម្ព័ន្ធរបស់តារាង។ វាត្រូវតែត្រូវបានចងចាំថាជា NULL - នេះគឺជា "ទេ" តម្លៃមិនមែនសូន្យជាអត្ថបទឬលេខ។ យកការរៀបរាប់ធាតុ:
ទំនិញ SET commodity_desc បច្ចុប្បន្នភាព NULL ទីកន្លែង commodity_id = = ' 106'
លុបជួរដេក
សំណើ SQL មួយលុបជួរដេកក្នុងតារាងត្រូវបានធ្វើប្រតិបត្តិការលុប។ មានវិធីពីរយ៉ាងក្នុងការប្រើគឺ:
- តារាងដែលបានលុបជួរដេកជាក់លាក់;
- យកចេញជួរដេកទាំងអស់នៅក្នុងតារាង។
ឧទាហរណ៍យកចេញមួយជួរដេកនៃតារាង:
លុបពីទំនិញដែលជាកន្លែងដែល commodity_id = '106'
បន្ទាប់ពីបានលុបពីបញ្ជាក់ឈ្មោះតារាងដែលនៅក្នុងដើម្បីលុបជួរដេក។ ដែលជាកន្លែងដែលមានរួមបញ្ចូលទាំងស្ថានភាពនៅក្រោមប្រតិបត្តិករដែលបន្ទាត់ត្រូវបានជ្រើសសម្រាប់ការលុបមួយ។ នៅក្នុងឧទាហរណ៍នេះយើងយកបន្ទាត់ផលិតផលដែលមានលេខសម្គាល់ = 106 ។ ចង្អុលបង្ហាញកន្លែងដែលមានសារៈសំខាន់ណាស់ពីព្រោះ ឆ្លង privedt ប្រតិបត្តិករនេះយកជួរដេកទាំងអស់ក្នុងតារាង។ នេះអនុវត្តទៅផ្លាស់ប្តូរតម្លៃវាល។
សេចក្តីថ្លែងការណ៍ដែលបានលុបមិនបានបញ្ជាក់ឈ្មោះជួរឈរនិងមេតាតួអក្សរ។ លោកនឹងយកបន្ទាត់និងលុបជួរឈរមួយដែលគាត់មិនអាចធ្វើបាន។
ការចូលដំណើរការដោយប្រើប្រាស់ក្រុមហ៊ុន Microsoft SQL មួយនៅ
ក្រុមហ៊ុន Microsoft បានការចូលដំណើរ ត្រូវបានប្រើជាធម្មតាអន្តរកម្មដើម្បីបង្កើតសៀវភៅបញ្ជីមូលដ្ឋានទិន្នន័យ, ការផ្លាស់ប្តូរការគ្រប់គ្រង, ការវិភាគទិន្នន័យនៅក្នុងមូលដ្ឋានទិន្នន័យនិងនៅក្នុងគោលបំណងដើម្បីអនុវត្តការចូលដំណើរការសំណួរ SQL តាមរយៈការសាងសង់សំណួរអន្តរកម្មងាយស្រួល (ការរចនាសំណួរ) ដោយប្រើដែលអ្នកអាចសាងសង់និងប្រតិបត្តិសេចក្តីថ្លែងការណ៍ SQL បន្ទាន់ complexity ណាមួយ។
ដូចគ្នានេះផងដែរការចូលដំណើរការជារបៀបដែលគាំទ្រទៅម៉ាស៊ីនបម្រើ, ម្ល៉ោះចូលដំណើរការមូលដ្ឋានទិន្នន័យអាចត្រូវបានប្រើជា generator SQL-សំណួរទៅប្រភពទិន្នន័យ ODBC ណាមួយ។ លក្ខណៈពិសេសនេះអនុញ្ញាតឱ្យកម្មវិធីទាក់ទងជាមួយការចូលដំណើរការ មូលដ្ឋានទិន្នន័យ ក្នុងទ្រង់ទ្រាយណាមួយ។
ផ្នែកបន្ថែម SQL មួយ
ដោយសារតែសំណួរ SQL មិនមានលក្ខណៈពិសេសភាសាសរសេរកម្មវិធីទាំងអស់ដូចជាការរង្វិលជុំនីតិវិធី, សាខា, ល, ដែលជាក្រុមហ៊ុនផលិត DBMS អភិវឌ្ឍកំណែរបស់ពួកគេនៃ SQL មួយជាមួយនឹងលក្ខណៈពិសេសកម្រិតខ្ពស់។ ជាដំបូងនេះគឺការគាំទ្រសម្រាប់នីតិវិធីរក្សាទុកនិងប្រតិបត្តិករស្ដង់ដារភាសានីតិវិធី។
នេះជាគ្រាមភាសាទូទៅបំផុតនៃភាសានេះ:
- មូលដ្ឋានទិន្នន័យ Oracle -: PL / SQL មួយ
- Interbase, Firebird - PSQL
- SQL មួយម៉ាស៊ីនបម្រើក្រុមហ៊ុន Microsoft - ប្រតិបត្តិការ-SQL មួយ
- PostgreSQL - PL / PGSQL នោះ។
អ៊ីនធើណេ SQL មួយ
មូលដ្ឋានទិន្នន័យ MySQL ត្រូវបានចេញផ្សាយក្រោមអាជ្ញាប័ណ្ណសាធារណៈដោយមិនគិតថ្លៃអាជ្ញាប័ណ្ណទូទៅ GNU ។ មានអាជ្ញាប័ណ្ណពាណិជ្ជកម្មដែលមានសមត្ថភាពដើម្បីអភិវឌ្ឍម៉ូឌុលផ្ទាល់ខ្លួនគឺ។ ជាផ្នែកមួយនៃការពេញនិយមបំផុតនៃផ្នែកម៉ាស៊ីនបម្រើអ៊ីនធើណែសាងសង់នេះដូចជាការ xampp, wamp និងចង្កៀងនិងជាការអភិវឌ្ឍកម្មវិធីមូលដ្ឋានទិន្នន័យដែលមានប្រជាប្រិយភាពបំផុតក្នុងអ៊ីនធឺណិត។
វាត្រូវបានបង្កើតឡើងដោយក្រុមហ៊ុន Sun Microsystems ហើយបច្ចុប្បន្នត្រូវបានគាំទ្រដោយក្រុមហ៊ុន Oracle ។ ផ្ដល់ការគាំទ្រដល់មូលដ្ឋានទិន្នន័យដែលមានទំហំរហូតដល់ទៅ 64 តេរ៉ាបៃវាក្យសម្ព័ន្ធ SQL ដែល: 2003, ចម្លងមូលដ្ឋានទិន្នន័យនិងសេវាកម្មពពក។
Similar articles
Trending Now