Thuta Learning
ရှာဖွေရန်
ProjectsData & Databasesbeginner

Bookstore Project - Part 2: Search & Join Queries

စိတ်လျှော့ပါ။ ဒီခန်းကို စာအုပ်လိုမဟုတ်ဘဲ စကားပြောသလိုပဲ၊ နားလည်လွယ်အောင် ရှင်းပါမယ်။

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Bookstore Project - Part 2: Search & Join Queries ကို လက်တွေ့ project ထဲမှာ အသုံးချတတ်မယ်
  • ကိုယ်တိုင် code ရေးပြီး run ကြည့်တတ်မယ်
  • Project တစ်ခုလုံးကို အဆင့်လိုက် ဆောက်တတ်မယ်

ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်

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 နမူနာ

sql
-- 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;
You should see
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 ပိုတိုပါလိမ့်မယ်။

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • Table 3 ခုကို JOIN လုပ်တဲ့အခါ column name တူနေတဲ့ CustomerID/BookID ကို table name prefix မထည့်ဘဲ ရေးမိလို့ ambiguous column error တက်တတ်တာ
  • LEFT JOIN လုပ်ရမယ့်နေရာမှာ INNER JOIN သုံးမိလို့ order မရှိတဲ့ book တွေက result ထဲကနေ လုံးဝပျောက်သွားတတ်တာ

အခု ကိုယ်တိုင် စမ်းကြည့်

City = 'Yangon' ဖြစ်တဲ့ customer တွေရဲ့ order history ကိုပဲ ရွေးထုတ်ပြတဲ့ query တစ်ခု WHERE Customers.City = 'Yangon' နဲ့ ဖန်တီးကြည့်ပါ - 5 minutes အတွင်း စမ်းကြည့်ပါ။

You'll know it worked when: Search query ကနေ book + author name ချိတ်ပြီး ပေါ်လာမယ်၊ order history report ကလည်း latest order အရင်ပြပြီး LEFT JOIN result ကနေ order မရှိသေးတဲ့ book (ဥပမာ Fantastic Beasts) ကို ဖော်ထုတ်ပြပါလိမ့်မယ်။

Bookstore Project - Part 2: Search & Join Queries | Thuta Learning