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

দুর্দান্ত, শেষ দুটি লাইন চলে গেছে। এখানে কিভাবে এটা কাজ করে. একটু অস্বাভাবিক, কিন্তু এখনও এটি একটি নির্দিষ্ট যুক্তি আছে.