MySQL Basics
Filtering data
MySQL-এ Filtering data বলতে কিছু নির্দিষ্ট মানদণ্ড বা শর্তের ভিত্তিতে একটি ডাটাবেস টেবিল থেকে নির্দিষ্ট রেকর্ড রিট্রিভ করার প্রক্রিয়াকে বোঝায়। এটি সাধারণত SELECT Statement এ where clause সহ আরো অনেক অপারেটর যেমন AND, OR, IN, NOT IN, BETWEEN, LIKE, LIMIT এবং IS NULL এর মতো অপারেটর গুলো ব্যবহার করে করা হয়, যা আপনাকে এক বা একাধিক শর্তের ভিত্তিতে টেবিল থেকে কোন রো গুলি রিট্রিভ করতে চান তা নির্দিষ্ট করতে দেয়।
Filtering with MySQL WHERE clause
WHERE clause আপনাকে একটি query এর দ্বারা প্রত্যাবর্তিত রো গুলির জন্য একটি সার্চের condition নির্দিষ্ট করার অনুমতি দেয়। নিম্নে WHERE ক্লজের সিনট্যাক্স দেয়া হল:
SELECT select_list FROM table_name WHERE search_condition;
- উপরের সিনট্যাক্সে search_condition হল লজিক্যাল অপারেটর গুলো যেমন AND, OR এবং NOT ব্যবহার করে এক বা একাধিক এক্সপ্রেশনের সমন্বয়।
- MySQL-এ, একটি predicate হল একটি Boolean expression যা TRUE, FALSE বা UNKNOWN কে মূল্যায়ন করে।
- SELECT statement ফলাফল সেটে search_condition কে সেটিসফাই করে এমন যেকোনো row কে অন্তর্ভুক্ত করা হবে।
- SELECT statement ছাড়াও, আপনি UPDATE বা DELETE statement এ WHERE ক্লজটি ব্যবহার করতে পারেন কোন row গুলি update বা delete করতে হবে তা নির্দিষ্ট করতে।
একটি WHERE clause সহ একটি SELECT স্টেটমেন্ট কার্যকর করার সময়, MySQL FROM ক্লজের পরে এবং SELECT এবং ORDER BY ক্লজের আগে WHERE ক্লজটিকে মূল্যায়ন করে:
MySQL WHERE clause উদাহরণ
আমরা উদাহরণের জন্য আমাদের Sample Database Schema থেকে employees table ব্যবহার করব।
১. equality operator ব্যবহার করে MySQL WHERE clause দিয়ে উদাহরণঃ
নিম্নোক্ত query টি WHERE clause ব্যবহার করে সেই সমস্ত employees দের খুঁজে বের করবে যাদের job titles হচ্ছে Sales Rep:
SELECT lastname, firstname, jobtitle FROM employees WHERE jobtitle = 'Sales Rep';
Output:
+-----------+-----------+-----------+ | lastname | firstname | jobtitle | +-----------+-----------+-----------+ | Jennings | Leslie | Sales Rep | | Thompson | Leslie | Sales Rep | | Firrelli | Julie | Sales Rep | | Patterson | Steve | Sales Rep | | Tseng | Foon Yue | Sales Rep | | Vanauf | George | Sales Rep | | Bondur | Loui | Sales Rep | | Hernandez | Gerard | Sales Rep | | Castillo | Pamela | Sales Rep | | Bott | Larry | Sales Rep | | Jones | Barry | Sales Rep | | Fixter | Andy | Sales Rep | | Marsh | Peter | Sales Rep | | King | Tom | Sales Rep | | Nishi | Mami | Sales Rep | | Kato | Yoshimi | Sales Rep | | Gerard | Martin | Sales Rep | +-----------+-----------+-----------+ 17 rows in set (0.00 sec)
এই উদাহরণে, SELECT স্টেটমেন্টটি employees টেবিলের সমস্ত row গুলি পরীক্ষা করে এবং শুধুমাত্র সেই row গুলিকে নির্বাচন করে যাদের jobTitle কলামের মান Sales Rep.
২. MySQL WHERE clause এ AND operator এর ব্যবহার
নিম্নোক্ত উদাহরণ WHERE clause ব্যবহার করে এমন employees দের খুঁজে বের করবে যাদের job titles হল Sales Rep এবং office codes হল 1:
SELECT lastname, firstname, jobtitle, officeCode FROM employees WHERE jobtitle = 'Sales Rep' AND officeCode = 1;
Output:
+----------+-----------+-----------+------------+ | lastname | firstname | jobtitle | officeCode | +----------+-----------+-----------+------------+ | Jennings | Leslie | Sales Rep | 1 | | Thompson | Leslie | Sales Rep | 1 | +----------+-----------+-----------+------------+ 2 rows in set (0.00 sec)
এই উদাহরণে, WHERE clause expression টি দুটি conditions কে একত্রিত করতে AND অপারেটর ব্যবহার করা হয়েছে :
jobtitle = 'Sales Rep' AND officeCode = 1;
AND অপারেটর শুধুমাত্র TRUE তে মূল্যায়ন করে যদি উভয় expressions TRUE প্রদান করে। সুতরাং, ক্যোয়ারীটি তখনি raw প্রদান করে যার jobTitle column এর মান হল Sales Rep এবং officeCode হল 1।
৩. MySQL WHERE clause এ OR অপারেটরের এর ব্যবহার
এই ক্যোয়ারীটি এমন employees দের খুঁজে যাদের job title হল Sales Rep বা এমন employees রা যাদের office code 1 দিয়ে অফিসটি সনাক্ত করে:
SELECT lastName, firstName, jobTitle, officeCode FROM employees WHERE jobtitle = 'Sales Rep' OR officeCode = 1 ORDER BY officeCode , jobTitle;
Output:
+-----------+-----------+--------------------+------------+ | lastName | firstName | jobTitle | officeCode | +-----------+-----------+--------------------+------------+ | Murphy | Diane | President | 1 | | Bow | Anthony | Sales Manager (NA) | 1 | | Jennings | Leslie | Sales Rep | 1 | | Thompson | Leslie | Sales Rep | 1 | | Firrelli | Jeff | VP Marketing | 1 | | Patterson | Mary | VP Sales | 1 | | Firrelli | Julie | Sales Rep | 2 | | Patterson | Steve | Sales Rep | 2 | | Tseng | Foon Yue | Sales Rep | 3 | | Vanauf | George | Sales Rep | 3 | | Bondur | Loui | Sales Rep | 4 | | Hernandez | Gerard | Sales Rep | 4 | | Castillo | Pamela | Sales Rep | 4 | | Gerard | Martin | Sales Rep | 4 | | Nishi | Mami | Sales Rep | 5 | | Kato | Yoshimi | Sales Rep | 5 | | Fixter | Andy | Sales Rep | 6 | | Marsh | Peter | Sales Rep | 6 | | King | Tom | Sales Rep | 6 | | Bott | Larry | Sales Rep | 7 | | Jones | Barry | Sales Rep | 7 | +-----------+-----------+--------------------+------------+ 21 rows in set (0.00 sec)
OR অপারেটর তখনি TRUE তে মূল্যায়ন করে শুধুমাত্র যদিexpressions গুলির যেকোন একটি TRUE তে মূল্যায়ন করে:
jobtitle = 'Sales Rep' OR officeCode = 1
এখানে, কোয়েরিটি যেকোন employee কে রিটার্ন দেয় যার job title হচ্ছে Sales Rep বা যার office code 1 আছে।
৪. MySQL WHERE clause এ BETWEEN operator এর ব্যবহার
BETWEEN operator তখনি TRUE প্রদান করে যখন একটি value অন্য value গুলোর range এর মধ্যে থাকে:
expression BETWEEN low AND high
নিম্নলিখিত ক্যোয়ারী এমন employees দের খুঁজে বের করবে যাদের অফিসের লোকেশন অফিস কোড 1 থেকে 3 এর মধ্যে :
SELECT firstName, lastName, officeCode FROM employees WHERE officeCode BETWEEN 1 AND 3 ORDER BY officeCode;
Output:
+-----------+-----------+------------+ | firstName | lastName | officeCode | +-----------+-----------+------------+ | Diane | Murphy | 1 | | Mary | Patterson | 1 | | Jeff | Firrelli | 1 | | Anthony | Bow | 1 | | Leslie | Jennings | 1 | | Leslie | Thompson | 1 | | Julie | Firrelli | 2 | | Steve | Patterson | 2 | | Foon Yue | Tseng | 3 | | George | Vanauf | 3 | +-----------+-----------+------------+ 10 rows in set (0.00 sec)
৫. MySQL WHERE clause এ LIKE অপারেটর এর ব্যবহার
LIKE অপারেটর তখনি TRUE মূল্যায়ন করে যখন একটি মান একটি নির্দিষ্ট প্যাটার্নের সাথে মেলে৷
একটি প্যাটার্ন তৈরি করতে, আপনি % এবং _ wildcards ব্যবহার করতে পারেন। % wildcards zero বা তার বেশি অক্ষরের যেকোনো string এর সাথে মেলে যখন _ wildcards কোনো single character এর সাথে মেলে।
নিম্নলিখিত ক্যোয়ারী সেই employees দের খুঁজে পায় যাদের last names string ‘son’ দিয়ে শেষ হয়:
SELECT firstName, lastName FROM employees WHERE lastName LIKE '%son' ORDER BY firstName;
Output:
+-----------+-----------+ | firstName | lastName | +-----------+-----------+ | Leslie | Thompson | | Mary | Patterson | | Steve | Patterson | | William | Patterson | +-----------+-----------+ 4 rows in set (0.00 sec)
৬. MySQL WHERE clause এ IN operator এর ব্যবহার
IN operator তখনি TRUE প্রদান করে যখন একটি মান লিস্টের যেকোনো মানের সাথে মেলে।
value IN (value1, value2,...)
নিচের উদাহরণটি WHERE clause এ IN অপারেটর ব্যবহার করে সে সব employees দের খুঁজে বের করবে যাদের office code 1 থেকে 3 এর মধ্যে।
SELECT firstName, lastName, officeCode FROM employees WHERE officeCode IN (1 , 2, 3) ORDER BY officeCode;
Output:
+-----------+-----------+------------+ | firstName | lastName | officeCode | +-----------+-----------+------------+ | Diane | Murphy | 1 | | Mary | Patterson | 1 | | Jeff | Firrelli | 1 | | Anthony | Bow | 1 | | Leslie | Jennings | 1 | | Leslie | Thompson | 1 | | Julie | Firrelli | 2 | | Steve | Patterson | 2 | | Foon Yue | Tseng | 3 | | George | Vanauf | 3 | +-----------+-----------+------------+ 10 rows in set (0.00 sec)
৭. MySQL WHERE clause এ IS NULL operator এর ব্যবহার
একটি মান NULL কিনা তা পরীক্ষা করতে, আপনি IS NULL অপারেটর ব্যবহার করতে পারেন, এর জন্য আপনাকে equal operator (=) দরকার নেই। একটি মান NULL হলে IS NULL অপারেটর TRUE প্রদান করে।
value IS NULL
ডাটাবেসের জগতে, NULL হল একটি মার্কার যা নির্দেশ করে যে একটি মান অনুপস্থিত বা অজানা। এবং NULL সংখ্যা 0 বা একটি empty string এর সমতুল্য নয়।
নিচের স্টেটমেন্টটি WHERE ক্লজ এ IS NULL অপারেটর ব্যবহার করে reportsTo column এর মান NULL সেসব row গুলো বের করবে:
SELECT lastName, firstName, reportsTo FROM employees WHERE reportsTo IS NULL;
Output:
+———-+———–+———–+
| lastName | firstName | reportsTo |
+———-+———–+———–+
| Murphy | Diane | NULL |
+———-+———–+———–+
1 row in set (0.01 sec)
৮. MySQL WHERE clause এ comparison operators এর ব্যবহার
নিম্নোক্ত table এ কিছু comparison operators গুলি দেখানো হলো যা আপনি WHERE clause expression তৈরি করতে ব্যবহার করতে পারেন।
Operator | Description |
---|---|
= | Equal to. আপনি এটি প্রায় যেকোনো ডেটা টাইপের সাথে ব্যবহার করতে পারেন। |
<> or != | Not equal to |
< | Less than. আপনি সাধারণত numeric এবং date/time data types এর সাথে এটি ব্যবহার করতে পারেন । |
> | Greater than. |
<= | Less than or equal to |
>= | Greater than or equal to |
নিম্নলিখিত ক্যোয়ারীটি Sales Rep নন এমন সমস্ত employees দের খুঁজে বের করতে not equal to (<>) operator ব্যবহার করে:
SELECT lastname, firstname, jobtitle FROM employees WHERE jobtitle <> 'Sales Rep';
Output:
+-----------+-----------+----------------------+ | lastname | firstname | jobtitle | +-----------+-----------+----------------------+ | Murphy | Diane | President | | Patterson | Mary | VP Sales | | Firrelli | Jeff | VP Marketing | | Patterson | William | Sales Manager (APAC) | | Bondur | Gerard | Sale Manager (EMEA) | | Bow | Anthony | Sales Manager (NA) | +-----------+-----------+----------------------+ 6 rows in set (0.00 sec)
নিম্নলিখিত ক্যোয়ারী এমন employees দের খুঁজে পায় যাদের অফিস কোড 5-এর বেশি:
SELECT lastname, firstname, officeCode FROM employees WHERE officecode > 5;
Output:
+-----------+-----------+------------+ | lastname | firstname | officeCode | +-----------+-----------+------------+ | Patterson | William | 6 | | Bott | Larry | 7 | | Jones | Barry | 7 | | Fixter | Andy | 6 | | Marsh | Peter | 6 | | King | Tom | 6 | +-----------+-----------+------------+ 6 rows in set (0.00 sec)
নিম্নলিখিত ক্যোয়ারীটি 4 (<=4) এর থেকে কম বা সমান যাদের office code এমন employees দের রিটার্ন দেয়:
SELECT lastname, firstname, officeCode FROM employees WHERE officecode <= 4;
Output:
+-----------+-----------+------------+ | lastname | firstname | officeCode | +-----------+-----------+------------+ | Murphy | Diane | 1 | | Patterson | Mary | 1 | | Firrelli | Jeff | 1 | | Bondur | Gerard | 4 | | Bow | Anthony | 1 | | Jennings | Leslie | 1 | | Thompson | Leslie | 1 | | Firrelli | Julie | 2 | | Patterson | Steve | 2 | | Tseng | Foon Yue | 3 | | Vanauf | George | 3 | | Bondur | Loui | 4 | | Hernandez | Gerard | 4 | | Castillo | Pamela | 4 | | Gerard | Martin | 4 | +-----------+-----------+------------+ 15 rows in set (0.00 sec)
৯. SELECT statement এ DISTINCT clause এবং WHERE clause এর ব্যবহার
একটি টেবিল থেকে ডেটা querying করার সময়, আপনি duplicate rows পেতে পারেন। এই duplicate rows গুলি সরাতে, আপনি SELECT statement DISTINCT clause ব্যবহার করতে পারেন।
এখানে DISTINCT clause এর সিনট্যাক্স দেওয়া হল:
SELECT DISTINCT select_list FROM table_name WHERE search_condition ORDER BY sort_expression;
- এই সিনট্যাক্সে, আপনি এক বা একাধিক কলাম নির্দিষ্ট করতে পারেন যেগুলিকে আপনি distinct values হিসেবে select করতে চান, সেগুলোকে DISTINCT keywords হিসেবে SELECT করুন।
- আপনি যদি একটি কলাম নির্দিষ্ট করেন, তাহলে DISTINCT clause সেই কলামের মানের উপর ভিত্তি করে row গুলোর uniqueness (স্বতন্ত্রতা) মূল্যায়ন করবে।
- আর , যদি আপনি দুই বা ততোধিক কলাম নির্দিষ্ট করেন, DISTINCT clause এই কলাম গুলোর মান ব্যবহার করে row গুলির uniqueness (স্বতন্ত্রতা) মূল্যায়ন করবে।
- DISTINCT clause এর সাথে SELECT statement এক্সিকিউট করার সময়, MySQL FROM, WHERE, এবং SELECT clause এর পরে এবং ORDER BY clause এর আগে DISTINCT clause কে মূল্যায়ন করে:
MySQL DISTINCT clause এর উদাহরণ:
আমরা উদাহরণের জন্য আমাদের Sample Database Schema থেকে employees table ব্যবহার করব।
প্রথমে, নিম্নলিখিত SELECT statement ব্যবহার করে employees টেবিল থেকে last names select করুন:
SELECT lastname FROM employees ORDER BY lastname;
Output:
+-----------+ | lastname | +-----------+ | Bondur | | Bondur | | Bott | | Bow | | Castillo | | Firrelli | | Firrelli | | Fixter | .... | Jones | | Patterson | | Patterson | | Patterson | | Thompson | ... +-----------+ 23 rows in set (0.00 sec)
যেমন আউটপুটে স্পষ্টভাবে দেখানো হয়েছে, কিছু employees এর একই last names আছে যেমন, Bondur, Firrelli।
দ্বিতীয়ত, এখন নিচের মত করে DISTINCT clause যোগ করে unique last name গুলো select করুন:
SELECT DISTINCT lastname FROM employees ORDER BY lastname;
আপনি আউটপুট থেকে স্পষ্ট দেখতে পাচ্ছেন, DISTINCT clause ফলাফল সেট থেকে ডুপ্লিকেট last name গুলিকে সরিয়ে দেয়।
+-----------+ | lastname | +-----------+ | Bondur | | Bott | | Bow | | Castillo | | Firrelli | ... | Nishi | | Patterson | | Thompson | | Tseng | | Vanauf | +-----------+ 19 rows in set (0.01 sec)
১০. NULL values এর বেলায় MySQL DISTINCT এর ব্যবহার
আপনি যখন DISTINCT ক্লজে NULL মান আছে এমন একটি কলাম নির্দিষ্ট করেন, তখন DISTINCT clause শুধুমাত্র একটি NULL মান রাখবে কারণ এটি বিবেচনা করে যে সমস্ত NULL মান একই।
উদাহরণস্বরূপ, customers table এর state column এ NULL মান রয়েছে।
আপনি যখন states গুলিকে query করার জন্য DISTINCT ক্লজ ব্যবহার করেন, তখন আপনি distinct states এবং NULL দেখতে পাবেন নিম্নরূপ:
SELECT DISTINCT state FROM customers;
Output:
+---------------+ | state | +---------------+ | NULL | | NV | | Victoria | | CA | | NY | | PA | ... | Co. Cork | | Pretoria | | NH | | Tokyo | +---------------+ 19 rows in set (0.00 sec)
১১. MySQL DISTINCT Clause এ multiple columns এর ব্যবহার
আপনি যখন DISTINCT clause এ একাধিক কলাম নির্দিষ্ট করেন, তখন DISTINCT clause ফলাফল সেটে row গুলোর স্বতন্ত্রতা নির্ধারণ করতে এই কলামের মানগুলির সমন্বয় ব্যবহার করবে।
উদাহরণস্বরূপ, customers table থেকে city এবং state একটি unique combination পেতে, আপনি নিম্নলিখিত ক্যোয়ারী ব্যবহার করতে পারেন:
SELECT DISTINCT state, city FROM customers WHERE state IS NOT NULL ORDER BY state, city;
Output:
+---------------+----------------+ | state | city | +---------------+----------------+ | BC | Tsawassen | | BC | Vancouver | | CA | Brisbane | | CA | Burbank | | CA | Burlingame | | CA | Glendale | | CA | Los Angeles | | CA | Pasadena | | CA | San Diego | ...