5.1 তাৎপর্যের অভাব
এসকিউএল ল্যাঙ্গুয়েজ, জাভা ল্যাঙ্গুয়েজ এর মত, একটি মানের অনুপস্থিতি বোঝাতে একটি বিশেষ কীওয়ার্ড আছে - এটি শূন্য। বা যেমন প্রায়ই লেখা হয় - NULL
.
এসকিউএল-এর ব্যবহার NULL
জাভাতে নাল-এর ব্যবহারের অনুরূপ। জাভাতে, এমন কিছু বস্তু থাকতে পারে যার ক্ষেত্রগুলিতে শূন্য মান রয়েছে। এসকিউএল-এ, এমন টেবিল থাকতে পারে যার সারিতে NULL মান রয়েছে।
আমাকে উদ্দেশ্যমূলকভাবে আমাদের পণ্য টেবিলে কিছু আনব্র্যান্ডেড পণ্য যোগ করতে দিন। যদি পণ্যের ব্র্যান্ড অজানা হয়, তাহলে মান হবে NULL
।
এই ধরনের পণ্য প্রদর্শন করতে, আসুন বিপরীত ক্রমে আইডি অনুসারে আমাদের পণ্য টেবিলটি সাজাই এবং 10টি রেকর্ড গ্রহণ করি। অনুরোধ এই মত দেখাবে:
SELECT * FROM product
ORDER BY id DESC
LIMIT 10
আমরা নিম্নলিখিত ক্যোয়ারী ফলাফল পেতে:
আইডি | নাম | ব্র্যান্ড | মূল্য | গণনা |
---|---|---|---|---|
15 | রিভেট | খালি | 0.01 | 1000 |
14 | স্ক্রু | খালি | 0.10 | 1000 |
13 | দাঁড়ান | আইকেইএ | 100.00 | 10 |
12 | ফুলদানি | স্মার্টফ্লাওয়ার | 99.00 | 9 |
এগারো | আর্মচেয়ার | বোশ | 44.00 | 8 |
10 | প্লেট | বোশ | 199.00 | 10 |
9 | ড্রেসার | আইকেইএ | 99.00 | 10 |
8 | বাতি | এলজি | 15.00 | 100 |
7 | টেলিভিশন | এলজি | 350.00 | 4 |
6 | তাক | বোশ | ২৫.০০ | 114 |
হ্যাঁ, আমি টেবিলে রিভেট এবং স্ক্রু যোগ করেছি। তাদের দাম এবং পরিমাণ আছে, কিন্তু কোন ব্র্যান্ড নেই।
5.2 NULL এর সাথে তুলনা
আপনার কি মনে আছে যে মাঝে মাঝে আপনি নাল ব্যবহার করার সময় জাভাতে পাগল হয়ে যেতেন? যে আপনি ভেরিয়েবলের তুলনা করতে পারবেন না যা সমান() এর মাধ্যমে নাল মান উল্লেখ করতে পারে। উদাহরণ:
Product product1 = new Product();
Product product2 = null;
if (product2.equals(product1) { //an exception will be raised here
…
}
আপনি এটি বিশ্বাস করবেন না, কিন্তু SQL ভাষায় আপনি NULL মানগুলির সাথে কাজ করার সময় সূক্ষ্মতার জন্য অপেক্ষা করছেন। এবং এটি এই মত কিছু শোনাচ্ছে:কিছুই NULL নয়.
আপনি যদি ব্র্যান্ডের সমস্ত পণ্য ফিল্টার করার চেষ্টা করেন null
:
SELECT * FROM product
WHERE brand = NULL
আপনি একটি খালি টেবিল পাবেন:
আইডি | নাম | ব্র্যান্ড | মূল্য | গণনা |
---|
কিন্তু আপনি যদি ক্যোয়ারীতে লেখেন যে ব্র্যান্ড সমান নয় NULL
, আপনি একই ফলাফল পাবেন:
SELECT * FROM product
WHERE brand != NULL
আপনি আবার একটি খালি টেবিল পাবেন:
আইডি | নাম | ব্র্যান্ড | মূল্য | গণনা |
---|
NULL এর সাথে যেকোনো তুলনা/ক্রিয়া NULL ফেরত দেবে:
অভিব্যক্তি | ফলাফল |
---|---|
ব্র্যান্ড = NULL | খালি |
ব্র্যান্ড != NULL | খালি |
NULL = NULL | খালি |
NULL != NULL | খালি |
হ্যাঁ,এমনকি যদি আপনি NULL কে NULL এর সাথে তুলনা করেন তবে উত্তরটি NULL হবে.
5.3 শূন্য এবং শূন্য নয়
তাহলে আমরা কিভাবে পরীক্ষা করব যে কিছু ক্ষেত্র (বা কিছু কলাম) এর একটি মান আছে NULL
? এবং এই জন্য, SQL একটি বিশেষ অভিব্যক্তি আছে - IS NULL
. এটা এই মত দেখায়.
variable IS NULL
আপনি যদি পরীক্ষা করতে চান যে আপনার টেবিলের একটি কলাম সমান নয় NULL
, তাহলে আপনাকে লিখতে হবে IS NOT NULL
:
variable IS NOT NULL
আসুন একটি প্রশ্ন লিখি যা পণ্য টেবিল থেকে সমস্ত পণ্য নির্বাচন করবে যার ব্র্যান্ড সমান NULL
। এই ধরনের অনুরোধ এই মত দেখাবে:
SELECT * FROM product
WHERE brand IS NULL
এবং আমরা নিম্নলিখিত ক্যোয়ারী ফলাফল পেতে:
আইডি | নাম | ব্র্যান্ড | মূল্য | গণনা |
---|---|---|---|---|
14 | স্ক্রু | খালি | 0.10 | 1000 |
15 | রিভেট | খালি | 0.01 | 1000 |
এখন আসুন সেই সমস্ত পণ্য প্রদর্শন করি যার দাম $20 এর কম:
SELECT * FROM product
WHERE price < 20
এবং আমরা নিম্নলিখিত ক্যোয়ারী ফলাফল পেতে:
আইডি | নাম | ব্র্যান্ড | মূল্য | গণনা |
---|---|---|---|---|
2 | চেয়ার | আইকেইএ | ৫.০০ | 45 |
8 | বাতি | এলজি | 15.00 | 100 |
14 | স্ক্রু | খালি | 0.10 | 1000 |
15 | রিভেট | খালি | 0.01 | 1000 |
এখন আমরা উল্লেখ করি যে দাম অবশ্যই $20 এর কম হতে হবে এবং ব্র্যান্ড নয় NULL
।
SELECT * FROM product
WHERE price < 20 AND brand IS NOT NULL
আমরা নিম্নলিখিত ক্যোয়ারী ফলাফল পেতে:
আইডি | নাম | ব্র্যান্ড | মূল্য | গণনা |
---|---|---|---|---|
2 | চেয়ার | আইকেইএ | ৫.০০ | 45 |
8 | বাতি | এলজি | 15.00 | 100 |
দুর্দান্ত, শেষ দুটি লাইন চলে গেছে। এখানে কিভাবে এটা কাজ করে. একটু অস্বাভাবিক, কিন্তু এখনও এটি একটি নির্দিষ্ট যুক্তি আছে.