ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်
Part 1 မှာ table structure ပြီးသွားပါပြီ၊ ဒီ Part 2 မှာ အဲဒီ table တွေကို INNER JOIN, LEFT JOIN သုံးပြီး တကယ့် app လိုမျိုး query ရေးပါမယ်။ Bookstore website တစ်ခုမှာ user တစ်ယောက် book title နဲ့ search လုပ်တဲ့အခါ author name ပါ ထုတ်ပြပေးရမှာဖြစ်လို့ Books table နဲ့ Authors table ကို JOIN လုပ်ဖို့ လိုအပ်ပါတယ်။ ဒီအပြင် customer တစ်ယောက်စီ ဘယ် book ဝယ်ခဲ့လဲဆိုတဲ့ order history ကိုလည်း Orders, Customers, Books သုံးခုကို JOIN လုပ်ပြီး ပြရပါမယ်။ WHERE, LIKE, ORDER BY တွေပေါင်းသုံးလိုက်ရင် real search bar feature တစ်ခုနီးပါးရလာပါလိမ့်မယ်။
လက်တွေ့ ဆောက်ကြည့်မယ်
ပထမဆုံး Books INNER JOIN Authors ပြီး Book title ထဲမှာ 'Harry' ပါတဲ့ book ကို author name အတူတူ ပြပါ (LIKE '%Harry%') - Price ငယ်စဉ်ကြီးလိုက် ORDER BY ထားပါ။ ဒုတိယအနေနဲ့ Stock = 0 ဖြစ်နေတဲ့ book တွေကို WHERE Stock = 0 နဲ့ ရှာပြီး 'Out of stock' list ထုတ်ပါ။ တတိယအနေနဲ့ Orders, Customers, Books သုံးခုကို JOIN လုပ်ပြီး CustomerName, Title, Quantity, OrderDate ပါတဲ့ order history report ကို ORDER BY OrderDate DESC နဲ့ ထုတ်ပါ။ နောက်ဆုံးအနေနဲ့ LEFT JOIN သုံးပြီး Order တစ်ခါမှ မရှိသေးတဲ့ book (ဘယ်သူမှ မဝယ်ရသေးတဲ့ book) ကို ရှာကြည့်ပါ။
Code နမူနာ
-- Search books by title, show author name too
SELECT Books.Title, Authors.AuthorName, Books.Price
FROM Books
INNER JOIN Authors ON Books.AuthorID = Authors.AuthorID
WHERE Books.Title LIKE '%Harry%'
ORDER BY Books.Price ASC;
-- Out of stock books
SELECT Title, Stock FROM Books WHERE Stock = 0;
-- Order history report
SELECT Customers.CustomerName, Books.Title, Orders.Quantity, Orders.OrderDate
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID
INNER JOIN Books ON Orders.BookID = Books.BookID
ORDER BY Orders.OrderDate DESC;
-- Books that were never ordered
SELECT Books.Title
FROM Books
LEFT JOIN Orders ON Books.BookID = Orders.BookID
WHERE Orders.OrderID IS NULL;Search query ကနေ book + author name ချိတ်ပြီး ပေါ်လာမယ်၊ order history report ကလည်း latest order အရင်ပြပြီး LEFT JOIN result ကနေ order မရှိသေးတဲ့ book (ဥပမာ Fantastic Beasts) ကို ဖော်ထုတ်ပြပါလိမ့်မယ်။၅ မိနစ် စမ်းကြည့်
City = 'Yangon' ဖြစ်တဲ့ customer တွေရဲ့ order history ကိုပဲ ရွေးထုတ်ပြတဲ့ query တစ်ခု WHERE Customers.City = 'Yangon' နဲ့ ဖန်တီးကြည့်ပါ - 5 minutes အတွင်း စမ်းကြည့်ပါ။
သတိလေးတစ်ချက်
Table အများကြီးကို JOIN လုပ်တဲ့အခါ column name overlap ဖြစ်နိုင်ချေရှိလို့ TableName.ColumnName ပုံစံနဲ့ တိတိကျကျရေးပါ - alias (AS) သုံးရင် query ပိုတိုပါလိမ့်မယ်။