Chapter 12

FUNCTION

အခု အခန်းမှာတော့ MYSQL နဲ့ ပတ်သက်သည့် function တွေကို လေ့လာရမှာပါ။ MySQL မှာ သုံးလို့ ရသည့် function တွေ အများကြီးရှိပါတယ်။ အဲဒီ အထဲက မှ လူသုံးများသည့် function အချို့ကို ဖော်ပြပေးပါမယ်။

COUNT

အခု table တစ်ခုမှာ row ဘယ်နှစ်ကြောင်းပါမလဲ ဆိုတာကို သိချင်သည့် အခါမှာ count ကို အသုံးပြုနိုင်ပါတယ်။

SELECT COUNT(*) FROM students;
+----------+
| COUNT(*) |
+----------+
|        7 |
+----------+

အကယ်၍ CS_101 မှာ ကျောင်းသား ဘယ်နှစ်ယောက်လဲ​သိချင်ရင်

SELECT COUNT(*) FROM students WHERE dep_code = 'CS_101';
+----------+
| COUNT(*) |
+----------+
|        3 |
+----------+

စုစုပေါင်း ၃ ယောက်ဆိုတာ တွေ့နိုင်ပါတယ်။

SUM

SUM ကတော့ value တွေကို ပေါင်းဖို့ အတွက်ပါ။ SUM ကို စမ်းဖို့ အတွက် Fees Table ဆောက်ပါမယ်။

CREATE TABLE Fees (
	id int auto_increment primary key,
	dep_code varchar(255) not null,
	amount int not null,
	foreign key (dep_code) references departments (dep_code)
);

အခု fee ထည့်ပါမယ်။

INSERT INTO Fees (dep_code,amount) VALUES 
('CS_101',100000),
('CS_102',120000),
('CT_101',150000);

အခု Fee table ထဲမှာ amount တွေ ရှိသွားပါပြီ။

Amount အားလုံး ရဲ့ total value ကို ထုတ်ကြည့်ရအောင်။

SELECT SUM(amount) As Total FROM Fees;
+-------------+
| Total       |
+-------------+
|      370000 |
+-------------+

AVG

Total ကို ရှာပြီး Average ကို ရှာချင်တယ် ဆိုရင် AVG function ကို သုံးနိုင်ပါတယ်။

SELECT AVG(amount) As average FROM Fees;
+-------------+
| average     |
+-------------+
| 123333.3333 |
+-------------+

CS_101 နှင့် CS_102 ၂ ခု ပေါင်း average ကိုရှာကြည့်ပါမယ်။

SELECT AVG(amount) As average FROM Fees where dep_code = 'CS_101' OR dep_code = 'CS_102';
+-------------+
| average     |
+-------------+
| 110000.0000 |
+-------------+

DATE

DATE ကတော့ MySQL မှာ အသုံးများကြပါတယ်။ DATE feature ကို သိရဖို့ အတွက် students table မှာ created_at ကို ထည့်ပါမယ်။

ALTER TABLE students
ADD COLUMN created_at TIMESTAMP default now();

students table မှာ created_at ကို TIMESTAMP value ထည့်လိုက်ပါတယ်။ default value ကို now() ဆိုပြီး ထည့်ထားတာ တွေ့နိုင်ပါတယ်။ now() ကတော့ အခု လက်ရှိ အချိန် ကို ထည့်မယ် လို့ ပြောတာပါ။

students table ထဲ data ဖြည့်ရအောင်။

INSERT INTO students (name)
VALUES ("Kyaw Myint"),
("Moe Aung");

ပြန်ထုတ်ကြည့်ရအောင်။

SELECT * FROM students;
+------------+------------+----------+---------------------+
| student_id | name       | dep_code | created_at          |
+------------+------------+----------+---------------------+
|          1 | Mg Mg      | CS_101   | 2020-10-14 00:14:06 |
|          2 | Aung Gyi   | CS_101   | 2020-10-14 00:14:06 |
|          3 | Yang Aung  | CS_101   | 2020-10-14 00:14:06 |
|          4 | Kyaw Kyaw  | CS_102   | 2020-10-14 00:14:06 |
|          5 | Moe Moe    | CS_102   | 2020-10-14 00:14:06 |
|          6 | Zu Zu      | NULL     | 2020-10-14 00:14:06 |
|          7 | Gone Tint  | NULL     | 2020-10-14 00:14:06 |
|          8 | Kyaw Myint | NULL     | 2020-10-14 00:27:43 |
|          9 | Moe Aung   | NULL     | 2020-10-14 00:27:43 |
+------------+------------+----------+---------------------+

နောက်မှ ထည့်လိုက်သည့် row ၂ ခု က လက်ရှိ အချိန် ဖြစ်နေတာ ကို တွေ့ရပါမယ်။

ကျွန်တော်တို့ အခု လို ပြန်ထုတ်ကြည့်ရအောင်။

SELECT name, date(created_at) as date, 
day(created_at) as d, 
month(created_at) as m, 
year(created_at) as y,
hour(created_at) as h, 
minute(created_at) as m,
second(created_at) as s 
FROM students;
+------------+------------+------+------+------+------+------+------+
| name       | date       | d    | m    | y    | h    | m    | s    |
+------------+------------+------+------+------+------+------+------+
| Mg Mg      | 2020-10-14 |   14 |   10 | 2020 |    0 |   14 |    6 |
| Aung Gyi   | 2020-10-14 |   14 |   10 | 2020 |    0 |   14 |    6 |
| Yang Aung  | 2020-10-14 |   14 |   10 | 2020 |    0 |   14 |    6 |
| Kyaw Kyaw  | 2020-10-14 |   14 |   10 | 2020 |    0 |   14 |    6 |
| Moe Moe    | 2020-10-14 |   14 |   10 | 2020 |    0 |   14 |    6 |
| Zu Zu      | 2020-10-14 |   14 |   10 | 2020 |    0 |   14 |    6 |
| Gone Tint  | 2020-10-14 |   14 |   10 | 2020 |    0 |   14 |    6 |
| Kyaw Myint | 2020-10-14 |   14 |   10 | 2020 |    0 |   27 |   43 |
| Moe Aung   | 2020-10-14 |   14 |   10 | 2020 |    0 |   27 |   43 |
+------------+------------+------+------+------+------+------+------+

အခု လို date function တွေကို ဆွဲထုတ်ပြီး ကြည့်လိုက်တော့ နားလည်မယ် ထင်ပါတယ်။ ကျွန်တော်တို့ WHERE ကို အသုံးပြုပြီး လိုချင်သည့် date ကို ထုတ်နိုင်ပါတယ်။

SELECT name , date(created_at) as d FROM students WHERE date(created_at) = '2020-10-14';
+------------+------------+
| name       | d          |
+------------+------------+
| Mg Mg      | 2020-10-14 |
| Aung Gyi   | 2020-10-14 |
| Yang Aung  | 2020-10-14 |
| Kyaw Kyaw  | 2020-10-14 |
| Moe Moe    | 2020-10-14 |
| Zu Zu      | 2020-10-14 |
| Gone Tint  | 2020-10-14 |
| Kyaw Myint | 2020-10-14 |
| Moe Aung   | 2020-10-14 |
+------------+------------+

REPLACE

ကျွန်တော့်တို့ Data တွေကို ပြချင်သည့် အခါမှာ မလိုချင်သည့် Data တွေကို ဖြုတ်ပြတာ ဒါမှမဟုတ် Replace လုပ်တာတွေ အတွက် အသုံးပြုနိုင်ပါတယ်။

SELECT REPLACE(dep_code,'CS_','Computer Science ') FROM departments;
+---------------------------------------------+
| REPLACE(dep_code,'CS_','Computer Scinece ') |
+---------------------------------------------+
| Computer Science 101                        |
| CT_101                                      |
| Computer Science 102                        |
+---------------------------------------------+

အခု ဆိုရင် dep_code မှာ CS_ ပါသည့် စာလုံးတွေကို Computer Science ပြောင်းပြီး ပြပေးထားပါတယ်။

BETWEEN

BETWEEN ကတော့ တစ်ခု နှင့် တစ်ခု ကြားက value ကို ထုတ်ချင်သည့် အခါမှာ အသုံးပြုနိုင်ပါတယ်။ အခု studetn id ကို between နဲ့ ထုတ်ကြည့်ပါမယ်။

SELECT * FROM students WHERE student_id BETWEEN 2 AND 7;
+------------+-----------+----------+---------------------+
| student_id | name      | dep_code | created_at          |
+------------+-----------+----------+---------------------+
|          2 | Aung Gyi  | CS_101   | 2020-10-14 00:14:06 |
|          3 | Yang Aung | CS_101   | 2020-10-14 00:14:06 |
|          4 | Kyaw Kyaw | CS_102   | 2020-10-14 00:14:06 |
|          5 | Moe Moe   | CS_102   | 2020-10-14 00:14:06 |
|          6 | Zu Zu     | NULL     | 2020-10-14 00:14:06 |
|          7 | Gone Tint | NULL     | 2020-10-14 00:14:06 |
+------------+-----------+----------+---------------------+

အခုဆိုရင် student_id 2 နဲ့ 7 ကြားက data တွေကို မြင်ရပါလိမ့်မယ်။

MAX

Max ကတော့ လက်ရှိ query ထဲက အကြီးဆုံး value ကို ထုတ်သည့် နေရာမှာ သုံးပါတယ်။

SELECT MAX(student_id) FROM students;
+-----------------+
| MAX(student_id) |
+-----------------+
|               9 |
+-----------------+

MIN

MIN ကတော့ အနည်းဆုံး value ကို ထုတ်တာပါ။

SELECT MIN(student_id) FROM students;
+-----------------+
| MIN(student_id) |
+-----------------+
|               1 |
+-----------------+

RAND

RAND ကတော့ random value ကို ထုတ်ခြင်း ဖြစ်ပါတယ်။ အရင်ဆုံး RAND() ကို စမ်းကြည့်ရအောင်။ RAND() က 0 ကနေ 1 ကြားက value တွေကို random ထုတ်ပေးပါတယ်။

SELECT RAND();
+--------------------+
| RAND()             |
+--------------------+
| 0.3079793921746122 |
+--------------------+

နောက်တစ်ခါတ ထပ်ပြီး ထုတ်ကြည့်ရအောင်။

SELECT RAND();
+--------------------+
| RAND()             |
+--------------------+
| 0.8045441515786054 |
+--------------------+

အခု ကျွန်တော်တို့ student table ထဲက random ကျောင်းသားကို ထုတ်မယ် ဆိုပါတော့။

SELECT * FROM students ORDER BY RAND() LIMIT 1;
+------------+-----------+----------+---------------------+
| student_id | name      | dep_code | created_at          |
+------------+-----------+----------+---------------------+
|          7 | Gone Tint | NULL     | 2020-10-14 00:14:06 |
+------------+-----------+----------+---------------------+

ORDER ကို RAND() နဲ့ စီ ပြီး LIMIT 1 ပဲ ထုတ်ထားသည့် အတွက် ပထမဆုံး ROW ပဲ ထွက်လာခြင်းဖြစ်ပါတယ်။

CONCAT

Column မှာ Data တွေကို ပေါင်းချင်သည့် အခါမှာ CONCAT ကို အသုံးပြုနိုင်ပါတယ်။

SELECT CONCAT("MySQL"," ", "Basic") AS data;
+-------------+
| data        |
+-------------+
| MySQL Basic |
+-------------+

Column က data တွေလည်း ပေါင်းလို့ရပါတယ်။

SELECT CONCAT(student_id, " ---> ",name) FROM students;
+-----------------------------------+
| CONCAT(student_id, " ---> ",name) |
+-----------------------------------+
| 1 ---> Mg Mg                      |
| 2 ---> Aung Gyi                   |
| 3 ---> Yang Aung                  |
| 4 ---> Kyaw Kyaw                  |
| 5 ---> Moe Moe                    |
| 6 ---> Zu Zu                      |
| 7 ---> Gone Tint                  |
| 8 ---> Kyaw Myint                 |
| 9 ---> Moe Aung                   |
+-----------------------------------+

GROUP BY

ကျွန်တော်တို့တွေ GROUP BY ကို Data တွေကို group အလိုက်ကြည့်ချင်သည့် အခါမှာ အသုံးပြုနိုင်ပါတယ်။

SELECT COUNT(*),dep_code FROM students GROUP BY dep_code;
+----------+----------+
| COUNT(*) | dep_code |
+----------+----------+
|        4 | NULL     |
|        3 | CS_101   |
|        2 | CS_102   |
+----------+----------+

အခု query က dep_code အလိုက် ကျောင်းသား အရေအတွက်ကို ထုတ်ကြည့်တာပါ။ COUNT(*) ဆိုတာကတော့ COUNT အရေအတွက်ပါ။ GROU PBY dep_code လို့ ဆိုထားသည့် အတွက်ကြောင့် dep_code နဲ့ GROUP ဖွဲ့ပြီး COUNT အရေအတွက် ကို ထုတ်ခြင်း ဖြစ်ပါတယ်။

HAVING

GROUP BY နဲ့ ထုတ်ထားသည့် data တွေကို WHERE မှာ စစ်လို့ မရပါဘူး။ စစ်ချင်သည့် အခါမှတော့ HAVING ကို သုံးရပါတယ်။ ကျောင်းစုစုပေါင်း ၂ အထက် ရှိရမည့် data ကို ထုတ်ချင်သည့် အခါမှာ WHERE နဲ့ သုံးလို့မရတော့ပါဘူး။

SELECT COUNT(*) AS count, dep_code FROM students GROUP BY dep_code HAVING count > 2;
+-------+----------+
| count | dep_code |
+-------+----------+
|     4 | NULL     |
|     3 | CS_101   |
+-------+----------+

အခု ဆိုရင် MYSQL က function အချို့ကို သိပါပြီ။ MYSQL မှာ FUNCTION တွေ အများကြီး ရှိပြီးတော့ ထပ်ပြီး လေ့လာနိုင်ပါသေးတယ်။