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

MySQL WHERE clause উদাহরণ

আমরা উদাহরণের জন্য আমাদের Sample Database Schema থেকে employees table ব্যবহার করব।

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

MySQL DISTINCT clause এর উদাহরণ:

আমরা উদাহরণের জন্য আমাদের Sample Database Schema থেকে employees table ব্যবহার করব।

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 মান রয়েছে।

customers_table

আপনি যখন 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      |
...

আমি মাসুদ আলম, বাংলাদেশের ৩৬ তম Zend Certified Engineer । ২০০৯ সালে কম্পিউটার সাইন্স থেকে বেচেলর ডিগ্রী অর্জন করি। দীর্ঘ ১৫ বছর আমি Winux Soft, SSL Wireless, IBCS-PRIMAX, Max Group, Canadian International Development Agency (CIDA), Care Bangladesh, World Vision, Hellen Keller, Amarbebsha Ltd সহ বিভিন্ন দেশি বিদেশী কোম্পানিতে ডেটা সাইন্স, মেশিন লার্নিং, বিগ ডেটা, ওয়েব ডেভেলপমেন্ট এবং সফটওয়্যার ডেভেলপমেন্ট এর উপর বিভিন্ন লিডিং পজিশন এ চাকরি এবং প্রজেক্ট লিড করি। এছাড়াও বাংলাদেশের ১৮৫ জন জেন্ড সার্টিফাইড ইঞ্জিনিয়ার এর মধ্যে ১২০ এরও অধিক ছাত্র আমার হাতে জেন্ড সার্টিফাইড ইঞ্জিনিয়ার হয়েছেন। বর্তমানে w3programmers ট্রেনিং ইনস্টিটিউট এ PHP এর উপর Professional এবং Advance Zend Certified PHP -8.2 Engineering, Laravel Mastering Course with ReactJS, Python Beginning To Advance with Blockchain, Machine Learning and Data Science, Professional WordPress Plugin Development Beginning to Advance কোর্স করাই। আর অবসর সময়ে w3programmers.com এ ওয়েব টেকনোলজি নিয়ে লেখালেখি করি।

Leave a Reply