Categories
Database

មូលដ្ឋានគ្រឹះនៃការប្រើប្រាស់ SQL UNION, UNION ALL និង Inline View

មាតិកា

I.   ការប្រើប្រាស់ SQL UNION

II. ការប្រើប្រាស់ SQL UNION ALL

III. ការប្រើប្រាស់ SQL Inline View

I.          ការប្រើប្រាស់ SQL UNION

គោលបំណងនៃការប្រើប្រាស់ SQL UNION query គឺដើម្បីធ្វើការ combine នូវ results របស់ queries ចំនួន២បញ្ចូលគ្នា។ ម្យ៉ាងវិញទៀត យើងអាចនិយាយបានថា នៅពេលដែលប្រើ UNION មានតែ unique values តែមួយគត់ដែលត្រូវបាន returned (ស្រដៀងទៅនឹង SELECT DISTINCT)។

Syntax

  • នៅក្នុង [SQL Statement 1] និង [SQL Statement 2] ត្រូវតែមានប្រភេទទិន្នន័យដូចគ្នា (same data type)

ឧទាហរណ៍ៈ សូមមើល Tables ខាងក្រោម៖

Table: “Store_Information”

Table: “Internet_Sales

ដើម្បីធ្វើការស្វែងរកកាលបរិច្ឆេទទាំងអស់ដែលមានប្រតិបត្តិការលក់ យើងត្រូវប្រើប្រាស់ SQL Statement ដូចខាងក្រោម៖

លទ្ធផល

កំណត់ចំណាំៈ ប្រសិនបើយើងសរសេរ “SELECT DISTINCT Txn_Date” នៅក្នុង SQL Statement ទាំងពីរ ពេលនោះវានឹងទទួលបានលទ្ធផលដូចគ្នា។

II.          ការប្រើប្រាស់ SQL UNION ALL

គោលបំណងនៃការប្រើប្រាស់​ SQL UNION ALL command គឺដើម្បីបញ្ចូលនូវ results នៃ queries ទាំង២បញ្ចូលគ្នាដោយគ្មានការលុបនូវតម្លៃ duplicate values។

  • Syntax
  • នៅក្នុង [SQL Statement 1] និង [SQL Statement 2] ត្រូវតែមានប្រភេទទិន្នន័យដូចគ្នា (same data type)

តាមរយៈឧទាហរណ៍ខាងលើ យើងចង់ធ្វើការស្វែងរកនូវកាលបរិច្ឆេទទាំងអស់ដែលមានប្រតិបត្តិការលក់នៅក្នុង Store ព្រមទាំងកាលបរិច្ឆេទទាំងអស់ដែលមានការលក់នៅលើ internet ដូចនេះយើងសរសរ SQL Statement ដូចខាងក្រោមនេះ៖

លទ្ធផល

សរុបសេចក្តីមកយើងសង្កេតឃើញថា ការប្រើប្រាស់ UNION និង UNION ALL គឺក្នុងគោលបំណងសម្រាប់ combine results នៃ SQL queries ទាំងអស់បញ្ចូលគ្នា។ ចំណែកឯភាពខុសគ្នានោះត្រង់ថា UNION គឺវាប្រើសម្រាប់ distinct values (តម្លៃមិនស្ទួន) រីឯ UNION ALL សម្រាប់ select រាល់ values ទាំងអស់។

III.          ការប្រើប្រាស់ SQL Inline View

Inline view គឺជា SELECT Statement ស្ថិតនៅក្នុង FROM clause។ ដូចដែលយើងដឹងហើយថា View គឺជា​ virtual table (table សិប្បនិមិត្ត) ដែលមានលក្ខណៈនៃ table មិនទាន់ផ្ទុកនូវទិន្នន័យពិតប្រាកដ។ នៅក្នុង inline view ប្រើសម្រាប់ធ្វើការជំនួសអោយការបញ្ជាក់ឈ្មោះរបស់ table នៅបន្ទាប់ពី keyword “FROM” ដែលមានប្រភពទិន្នន័យពិតចេញពី inline view។ ពេលខ្លះ inline view សំដៅទៅលើ derived table។

Syntax:

  • ឧទាហរណ៍៖

ឧបមាថាយើងមាន table ចំនួន២។ table ទី១មានឈ្មោះថា “User_Address” ដែលវា map user និមួយៗទៅនឹង ZIP code។ table ទី២មានឈ្មោះថា “User_Score” ដែលកត់ត្រារាល់ scores របស់ user។ សំនួរសួរថា តើសរសេរ SQL query យ៉ាងដូចម្តេចដើម្បីស្វែងរកចំនួន users ដែលទទួលបានពិន្ទុ (score) ខ្ពស់ជាង 200 សម្រាប់ ZIP code និមួយៗ?

  • ដោយពុំមានប្រើប្រាស់ inline view យើងអាចសម្រេចបានជំហាន២ដូចនេះ

Query 1

Query 2

  • នៅក្នុង code ខាងលើ យើងបានបង្កើត temporary table “User_Higher_Than_200” ដើម្បីធ្វើការ store នូវ list របស់ users ដែលទទួលបានពិន្ធុខ្ពស់ជាង 200។ User_Higher_Than_200 ត្រូវបានប្រើដើម្បី join ជាមួយនឹង table “User_Address” ដើម្បីទទួលនូវ final result។
  • ដូចនេះយើងអាចបម្លែង SQL ខាងលើដោយប្រើប្រាស់ inline view ដូចខាងក្រោម
    • Query 3

ក្នុងកូដដែលមានពណ៌ក្រហមតំណាងអោយ inline view។ មានគុណប្រយោជន៏ចំនួន២ក្នុងការប្រើប្រាស់ inline view

  1. យើងមិនចាំបាច់បង្កើតនូវ temporary table។ វាគុណសម្បត្តិការពារនូវ database មិនអោយមាន object (សំដៅលើ table, …) ច្រើនពេក ដែលជារឿងល្អព្រោះ object បន្ថែមនីមួយៗនៅក្នុង database ត្រូវចំណាយ resources ជាច្រើនដើម្បី manage។
  2. យើងអាចប្រើប្រាស់ Single SQL query ដើម្បីបំពេញនូវអ្វីដែលចង់បាន។

ចំណាំៈ ចូរកំណត់សម្គាល់ថា យើងប្រើប្រាស់ inline view ដូចគ្នាទៅនឹងការប្រើប្រាស់ table ដែរ។ ដោយប្រៀបធៀប Query 2 និង Query 3 យើងឃើញថាភាពខុសគ្នាតែមួយគត់គឺយើងជំនួសឈ្មោះ temporary table នៅក្នុង Query 2 ជាមួយនឹង Inline view statement នៅក្នុង Query 3។ អ្វីៗផ្សេងទៀតគឺនៅដដែល។

By sysomeho

Ho Sysome obtains B.S. degree in Computer Science from Phnom Penh Internation University (PPIU) in 2013 and currently studying Master of Science in IT (MSIT) at Asia Euro University (AEU). He worked as an IT Officer at Microfinance Institute and Bank in Phnom Penh. He is familar in programming language such as VB.NET, Java (Java2EE, Spring), Codeigniter, Laravel, mysql, sql server and so on. He enjoys sharing knowledges, learns from other, and develop himself.
Find him on Facebook: Spy Ro, Linkedin: Sysome HO.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.