Sorting & Filtering

ဒီအပိုင်းမှာတော့ db ထဲက data တွေကို sorting စီတာတွေနဲ့ လိုအပ်တဲ့ data ကိုပဲသီးသန့်ဆွဲထုတ်တဲ့ filtering queries တွေကိုလေ့လာသွားကြပါမယ်။

sql_test ဆိုတဲ့ database ထဲမှာ students table တစ်လုံးဆောက်ထားလိုက်ပြီး INSERT command နဲ့ data တစ်ချို့ထည့်သွင်းထားပါမယ်။ ဒီ students table ကိုအသုံးပြုပြီး sorting နဲ့ filtering လုပ်တဲ့ queries တွေစမ်းသပ်သွားပါမယ်။

SF1

CREATE TABLE students (
    student_id INT PRIMARY KEY,
    name VARCHAR(50),
    nick_name VARCHAR(50),
    age INT,
    major VARCHAR(50)
);
INSERT INTO students (student_id, name, nick_name, age, major)
VALUES
    (1, 'John Doe', 'JD', 20, 'Computer Science'),
    (2, 'Jane Smith', 'JS', 22, 'Mathematics'),
    (3, 'Alice Johnson', 'AJ', 21, 'History'),
    (4, 'Bob Williams', 'BW', 20, 'Chemistry'),
    (5, 'Eva Brown', 'EB', 22, 'Biology'),
    (6, 'Charlie Davis', 'CD', 21, 'Physics'),
    (7, 'John Doe', 'JD', 20, 'Computer Science'),
    (8, 'Alice Johnson', 'AJ', 21, 'History');

select * နဲ့ data တွေကိုပြန်စစ်ကြည့်နိုင်ပါတယ်။

SF2

ORDER BY

Sorting စီဖို့အတွက် SQL မှာတော့ ORDER BY ဆိုတဲ့ command ကိုအသုံးပြုပါတယ်။ လိုအပ်သလို ASC ascending, DESC descending options တွေကိုအသုံးပြုနိုင်ပါတယ်။ students table ထဲက name တွေကို ORDER BY command အသုံးပြုပြီး ASCoption နဲ့အစဉ်လိုက်စီကြည့်ပါမယ်။

SELECT * FROM students
ORDER BY name ASC;
SF3

DESC descending နဲ့စီမယ်ဆိုရင်တော့အခုရနေတဲ့ result a to z ကနေ z to a အဖြစ်ပြောင်းပြန်ရမှာဖြစ်ပါတယ်။

အသက် age column ကိုထောက်ပြီး DESC option နဲ့စီကြည့်ရအောင်၊ အသက်ကြီးဆုံးလူအရင်ပြဆိုတဲ့သဘောပေါ့။

SELECT * FROM students
ORDER BY age DESC;
SF4

ASC နဲ့စီမယ်ဆိုရင်တော့ထုံးစံအတိုင်းပြောင်းပြန် ပြန်ဖြစ်သွားပြီးတော့ အငယ်ဆုံး student ကိုအရင်ပြမှာဖြစ်ပါတယ်။

DISTINCT

select ဆွဲတဲ့နေရာမှာ unique ဖြစ်တဲ့ record တွေပဲလိုချင်တဲ့အချိန်မှာ DISTINCT ဆိုတဲ့ keyword ကိုသုံးပါတယ်။ ဥပမာ students table ထဲက major နာမည်တွေလိုချင်တယ်၊ သို့ပေမယ့် ထပ်နေတဲ့ (duplicate) record တွေမပါချင်ဘူးဆိုတဲ့အခြေအနေမှာ DISTINCT ကိုသုံးနိုင်ပါတယ်

SELECT DISTINCT major FROM students;
SF5

LIMIT

Table ထဲက records တွေအကုန်လုံးပါမလာချင်ဘူး၊ record ၂ခုပဲပါချင်တယ်၊ ၃ခုပဲပါချင်တယ်ဆိုတဲ့အခြေအနေမှာ LIMIT ခံပြီး select ဆွဲနိုင်ပါတယ်။

SELECT * FROM students LIMIT 2;
SF6

OFFSET

select ဆွဲတဲ့နေရာမှာ records တစ်ချို့ကိုကျော်ပြီးဆွဲချင်တယ် သို့ စမှတ်ကိုပြောင်းပြီးသတ်မှတ်ချင်တယ်ဆိုရင် OFFSET ကိုသုံးနိုင်ပါတယ်။ query နဲ့ screenshot ကိုတွဲပြီးကြည့်မယ်ဆိုပိုသဘောပေါက်လွယ်ပါမယ်။ Records ၃ခုကိုကျော်ပြီး LIMIT ကို 2လို့ခံပြီးဆွဲမယ်ဆို result အဖြစ် 4 ကစမယ်၊ LIMIT 2 ဖြစ်တဲ့အတွက် 2 rows ပဲထုတ်သွားမှာဖြစ်ပါတယ်။

SELECT * FROM students LIMIT 2 OFFSET 3;
SF7

Filtering

Filtering ကစိမ်းတဲ့အရာတစ်ခုတော့မဟုတ်ပါဘူး၊ အရှေ့က DQL အပိုင်းမှာ WHERE keyword ကိုသုံးပြီး query တွေဆွဲခဲ့ပါသေးတယ်။ Data တွေကို filter လုပ်တဲ့နေရာမှာ WHERE ကိုအသုံးပြုနိုင်ပါတယ်။ ဒီအပိုင်းမှာတော့ WHERE ကိုတစ်ချို့ commands လေးတွေပါ conjunction လုပ်ပြီးသုံးကြည့်ကြပါမယ်။

Computer Science major နဲ့ကျောင်းသားတွေကိုဆွဲထုတ်ကြည့်ရအောင်။

SELECT * FROM students
WHERE major = 'Computer Science';
SF8

LIKE

LIKE ကိုလည်းအရှေ့မှာတစ်ခေါက်ပြောထားပြီးသားဖြစ်ပါတယ်။ search လုပ်မယ့်နေရာမှာသုံးပါတယ်။ နာမည်မှာ J နဲ့ စတဲ့ကျောင်းသားတွေကိုဆွဲထုတ်ကြည့်ချင်တယ်ဆိုပါစို့။

SELECT * FROM students
WHERE name LIKE 'J%';
SF9

BETWEEN

Range condition တစ်ခုကြားထဲက data တွေကိုဆွဲထုတ်ချင်တဲ့အချိန်မှာသုံးပါတယ်။ ဥပမာ အသက် 20 နဲ့ 21 ကြားထဲကကျောင်းသားတွေကိုလိုချင်တယ်ဆိုပါစို့။

SELECT * FROM students
WHERE age BETWEEN 20 AND 21;
SF10

Combining

အထက်မှာဖော်ပြခဲ့တဲ့ sorting နဲ့ filter commands တွေကိုပေါင်းပြီးအသုံးပြုကြည့်ပါမယ်။ အသက်ကို ငယ်စဉ်ကြီးလိုက်နဲ့ Biology major ဖြစ်တဲ့ကျောင်းသားတွေကိုဆွဲထုတ်ကြည့်ပါမယ်။

SELECT * FROM students
WHERE major = 'Biology'
ORDER BY age ASC;
SF11

အရှေ့အပိုင်းတွေမှာ WHERE ကို AND, OR ခံပြီးသုံးတာတွေရှိခဲ့ပါတယ်။ အခု query မှာ WHERE ကို နည်းနည်းပို advance ဖြစ်တဲ့နည်းနဲ့သုံးကြည့်ပါမယ်။

Table ထဲမှာ age 22 ဖြစ်တဲ့ကျောင်းသားကိုဆွဲမယ်၊ ပြီးတော့ကျောင်းသားက Computer Science သို့ Mathematics major ဖြစ်ရမယ်။ ဒီလိုမျိုး case မှာအောက်က query လိုမျိုး ( ) ရေးပေးခြင်းက conflict ဖြစ်နိုင်မယ့်အခြေအနေကိုကာကွယ်ပေးနိုင်ပါတယ်။

SELECT * FROM students
WHERE (major = 'Computer Science' OR major = 'Mathematics')
AND age = 22;
SF12

Sorting & filtering အပိုင်းမှာအသုံးများတဲ့ဥပမာတွေနဲ့တကွရေးသားပေးခဲ့ပါတယ်။ တစ်ချို့အရှေ့မှာပါပြီးသား commands တွေပြန်ပါတာတွေ့ရပါမယ်။ မျက်မှန်းတန်းမိသွားစေချင်တာအပြင် conjunction လုပ်ပြီးစမ်းသုံးကြည့်စေချင်ပါတယ်။ query တစ်ခုမှာ keyword ၃ ၄ ခုထည့်ပြီး select တွေဆွဲကြည့်ခြင်းဖြင့် နားလည်ထားတဲ့အရာတွေကိုပိုမို strong ဖြစ်လာစေတဲ့အပြင် real world queries တွေနဲ့လည်းပိုနီးစပ်လာနိုင်မှာဖြစ်ပါတယ်။

Last updated

Was this helpful?