এনকিউএল = NULL এসকিউএল সার্ভারে মিথ্যাতে মূল্যায়ন করে কেন


146

এসকিউএল সার্ভারে যদি আপনার nullParam=NULLকোনও ক্লজ থাকে তবে এটি সর্বদা মিথ্যা হিসাবে মূল্যায়ন করে। এটি প্রতিরোধমূলক এবং আমার অনেক ত্রুটি ঘটায়। আমি বুঝতে পারছি না IS NULLএবং IS NOT NULLকীওয়ার্ড এটা করতে সঠিক উপায়। তবে এসকিউএল সার্ভার কেন এভাবে আচরণ করে?


166
আমার কোন বোন নেই এবং আমার বন্ধুও নেই। যদি "NULL = NULL" হয় তবে আমাদের একটি সাধারণ বোন রয়েছে, এবং তাই সম্পর্কিত! :)
ম্যাট হ্যামিল্টন

11
(: যেমন দেখতে আছে এসকিউএল NULLs মানের উপর একটি দীর্ঘ চলমান বিতর্ক en.wikipedia.org/wiki/Null_%28SQL%29#Controversy এবং firstsql.com/inulls.htm )। এখানে নির্দিষ্ট পয়েন্টটি হল যে সাম্যতা একটি দীর্ঘ প্রতিষ্ঠিত গাণিতিক ধারণা এবং এসকিউএল এটি লঙ্ঘন করে - সাম্যতা প্রতিবিম্বিত: প্রতিটি এক্স, এক্স = এক্স এর জন্য। এটি অবশ্যই সর্বদা সত্য হতে হবে, অন্যথায় কেউ সমতার ব্যাখ্যা দিচ্ছে যা মানদণ্ড নয় এবং বিভ্রান্তির সুস্পষ্ট ফলাফল।
ম্যাড 70

14
এটি গণিতে মোটেই লঙ্ঘন করে না। আমি দুটি সংখ্যার কথা ভাবছি। তারা যদিও তা আপনাকে জানাতে যাচ্ছি না। এখন আপনি আমাকে বলুন, তারা কি সমান?
টম এইচ

10
@ ম্যাট, আমি আপনার উপমা দিয়ে একমত নই নুল = নুল মানে আপনার সাধারণ বোন নেই, এটির অর্থ আপনার উভয়েরই বোন নেই।
পুনঃনির্মাণ

5
@ manu08 না, বর্তমান বাস্তবায়ন (যে NUL কখনই NUL এর সমান হয় না) এর অর্থ আমাদের উভয়ের একটি বোন নেই, যা আমার বক্তব্য ছিল।
ম্যাট হ্যামিল্টন

উত্তর:


205

সেই ক্ষেত্রে নালটিকে "অজানা" হিসাবে ভাবুন (বা "অস্তিত্ব নেই")। এই উভয় ক্ষেত্রেই আপনি বলতে পারবেন না যে এগুলি সমান, কারণ আপনি তাদের কোনওটিরই মূল্য জানেন না। সুতরাং, নাল = নাল সত্যকে নির্ধারণ করে না (মিথ্যা বা নাল, আপনার সিস্টেমের উপর নির্ভর করে), কারণ আপনি মানগুলি জানেন না যে তারা সমান। এই আচরণটি এএনএসআই এসকিউএল -92 স্ট্যান্ডার্ডে সংজ্ঞায়িত করা হয়েছে।

সম্পাদনা: এটি আপনার উত্তর- নালস সেটিংয়ের উপর নির্ভর করে । আপনার যদি এএনএসআই_নুলস বন্ধ থাকে তবে এইটি সত্য বলে মূল্যায়ন করবে। উদাহরণস্বরূপ নীচের কোডটি চালান ...

set ansi_nulls off

if null = null
    print 'true'
else
    print 'false'


set ansi_nulls ON

if null = null
    print 'true'
else
    print 'false'

11
x = x কেবল তখনই সত্য ধারণ করে যখন এক্স একটি পরিচিত মান। NULL একটি অজানা মানের একটি পাঠ্য উপস্থাপনা । আপনার যদি দুটি অজানা মান থাকে তবে আপনি তাদের সমতা সম্পর্কে অবশেষে কিছু বলতে পারবেন না। আমি বিশ্বাস করি যে কয়েক শতাব্দী ধরে এটি সত্যও ছিল।
দেউয়েন ক্রিস্টেনসেন

4
যেহেতু এটি ডিসেম্বর, আসুন একটি alতু উদাহরণ ব্যবহার করুন। গাছের নিচে আমার দুটি উপহার রয়েছে। এখন, আপনি আমাকে বলুন যে আমি একই জিনিস দুটি পেয়েছি বা না পেয়েছি।
দেওয়েন ক্রিস্টেনসেন

5
এসকিউএল নুল আইআইইই ভাসমান পয়েন্ট ন্যান থেকে আলাদা নয়, যেখানে আপনারও রয়েছে (NaN == NaN) == false && (NaN != Nan) == false && (NaN < NaN) == false && ...- কারণ, ভাল, যদি এটি একটি সংখ্যা না হয় তবে আপনি এটি সম্পর্কে খুব বেশি কিছু বলতে পারবেন না; এটি অজানা কিছু। ধারণাটি দৃ is়, এমনকি যদি এমন লোকদের পক্ষে স্বতঃস্ফূর্ত হয় যা আগে কখনও দেখেনি।
পাভেল মিনায়েভ

8
এখানে প্রতিবিম্বের কোনও লঙ্ঘন নেই, কারণ এনইউএলএল মানগুলির ডোমেনের সদস্য নয় (ডোমেন, সম্পর্কিত পদে)) NULL একটি মান নয় । এটি মানটির জন্য একটি স্থানধারক যা অজানা।
পাভেল মিনায়েভ

9
এটি অন্য কথায় বলতে গেলে, NULLএসকিউএল এক্সপ্রেশনের প্রত্যেককে আলাদা আলাদা গাণিতিক পরিবর্তনশীল হিসাবে বিবেচনা করা যেতে পারে । সুতরাং একটি অভিব্যক্তি NULL = NULLহিসাবে বিবেচনা করা উচিত x = y, যেখানে xএবং yআনবাউন্ড ভেরিয়েবল হয়। এখন যদি কেউ আপনাকে জিজ্ঞাসা করে, এর মান কত x = y? একমাত্র যুক্তিযুক্ত উত্তর, "কিছু z" some সুতরাং আমাদের আছে (x = y) = z- বা, এটি এসকিউএল এ আবার প্রতিলিপি করা (NULL = NULL) = NULL,।
পাভেল মিনায়েভ

130

ফ্রাঙ্কের বয়স কত? আমি জানি না (নাল)

শার্লির বয়স কত? আমি জানি না (নাল)

ফ্র্যাঙ্ক এবং শর্লে কি একই বয়স?

সঠিক উত্তরটি "আমি জানি না" (নাল) হওয়া উচিত, "না" নয়, কারণ ফ্র্যাঙ্ক এবং শিরলি একই বয়স হতে পারে, আমরা কেবল জানি না।


4
আমি দ্বিমত করি যে নাল "অজানা" হিসাবে চিহ্নিত করে। আসলে এর অর্থ কী "ডেটা নেই"। এটি সেই ক্ষেত্রে প্রতিনিধিত্ব করতে ব্যবহৃত হতে পারে যেখানে তথ্য জানা যায় না, তবে বাস্তবে এটি বিদ্যমান যা কিছু উপস্থিত নেই তা বোঝাতে বেশি ব্যবহৃত হয়। আপনার উদাহরণটি চালিয়ে যেতে: ফ্র্যাঙ্কের মধ্য নামটি কী? তার একটা নেই (নাল)। শিরলির মাঝের নাম কী? তার একটি নেই (নাল)। ফ্র্যাঙ্ক এবং শিরলে কি একই মাঝের নাম আছে? হ্যাঁ? কোন? জানেন না? আমি "না" এর পক্ষে একটি আর্গুমেন্ট দেখতে পাচ্ছি এবং আমি "জানি না" এর পক্ষে একটি যুক্তি দেখতে পাচ্ছি, তবে আপনি অতিরিক্ত আক্ষরিক না হলে "হ্যাঁ" এর পক্ষে কোনও আসল যুক্তি নেই there's
রিচিবান

2
@ রিচিবান আমি একমত নই একটি সারির অস্তিত্বের অভাব মানে 'কোনও তথ্য নেই'
নীল ম্যাকগুইগান

1
@ নীলম্যাকগুইগান এটি সত্য যে ডেটাটির নিজস্ব টেবিল রয়েছে তবে এটি কোনও কলামে উপস্থাপিত ডেটা সম্পর্কে কী? আপনি কি এই তথ্য উপস্থাপন করতে 'নাল' ব্যবহার করবেন না যে ডেটার অস্তিত্ব নেই? ডেটা অনুপস্থিত থাকার জন্য 'জানা নেই' একটি খুব নির্দিষ্ট কারণ।
রিচিবান

3
কিন্তু null = nullফলন FALSE, না NULL
শ্লারতদন

1
@ স্লার্তিদান আমি আপনার সাথে একমত, যদিও এটি ভুল
নিল ম্যাকগুইগান

28

এখানে আমি আশাবাদী আমার অবস্থান পরিষ্কার করব।

যা NULL = NULLমূল্যায়ন FALSEভুল। হ্যাকার এবং মিস্টার সঠিক উত্তর দিয়েছেন NULL। এখানে কেন। স্কট আইভিকে দেওয়া মন্তব্যে দেওয়েন ক্রিস্টেনসেন আমাকে লিখেছিলেন :

যেহেতু এটি ডিসেম্বর, আসুন একটি alতু উদাহরণ ব্যবহার করুন। গাছের নিচে আমার দুটি উপহার রয়েছে। এখন, আপনি আমাকে বলুন যে আমি একই জিনিস দুটি পেয়েছি বা না পেয়েছি।

এগুলি আলাদা হতে পারে বা তারা সমান হতে পারে, আপনি উভয় উপহার খোলার আগে পর্যন্ত জানেন না। কে জানে? আপনি দু'জনকে আমন্ত্রণ জানিয়েছেন যা একে অপরকে চেনে না এবং দু'জনই আপনার সাথে একই উপহার দিয়েছে - বিরল, তবে অসম্ভব নয় §

সুতরাং প্রশ্ন: এই দুটি অজানা একই উপস্থাপনা হয় (সমান, =)? সঠিক উত্তরটি হ'ল: অজানা (যেমনNULL )।

এই উদাহরণটি ".. ( falseবা null, আপনার সিস্টেমের উপর নির্ভর করে) .." এটি সঠিক উত্তর হিসাবে দেখানো হয়েছিল - এটি কেবলমাত্র NULL 3VL-এ সঠিক নয় (বা আপনার পক্ষে এমন কোনও সিস্টেমের পক্ষে গ্রহণযোগ্য হওয়া উচিত যা ভুল উত্তর দেয়? )

এই প্রশ্নের সঠিক উত্তর অবশ্যই এই দুটি বিষয়কে জোর দেবে:

  • থ্রি-ভ্যালু লজিক (3 ভিএল) বিপরীতমুখী (স্ট্যাকওভারফ্লো এবং এই বিষয়টি নিশ্চিত করার জন্য অন্যান্য ফোরামে এই বিষয়ে অগণিত অন্যান্য প্রশ্ন দেখুন);
  • এসকিউএল-ভিত্তিক ডিবিএমএসগুলি প্রায়শই 3 ভিএল-কেও সম্মান করে না, তারা কখনও কখনও ভুল উত্তর দেয় (যেমন, মূল পোস্টারটি দৃsert়ভাবে বলে যে এসকিউএল সার্ভার এ ক্ষেত্রে করে)।

সুতরাং আমি পুনরুক্তি দিয়ে বলছি: এসকিউএল কাউকে সমতার নমনীয় সম্পত্তির ব্যাখ্যার জন্য জোর করে না, যা উল্লেখ করে:

for any x, x = x (সরল ইংরেজী ভাষায়: যে মহাবিশ্বের বক্তৃতা যাই হোক না কেন, একটি "জিনিস" সর্বদা নিজের সমান হয় )।

.. একটি 3VL মধ্যে ( TRUE, FALSE, NULL)। জনগণের প্রত্যাশা 2VL (সাথে সামঞ্জস্য হবে TRUE, FALSE, এসকিউএল এমনকি অন্যান্য সব মান জন্য বৈধ যা), অর্থাৎ x = x সবসময় নির্ণয় TRUE কোন ব্যতিক্রম - x এর কোন সম্ভাব্য মান।

এও নোট করুন যে NULLগুলি বৈধ " অ-মান " (যেমন তাদের মতবাদবিদ তাদের ভান করে) কোনটি সম্পর্ক ভেরিয়েবলের অংশ হিসাবে বৈশিষ্ট্য মান (??) হিসাবে নির্ধারণ করতে পারে। সুতরাং এগুলি হ'ল লজিক্যাল এক্সপ্রেশনগুলির ধরণের নয়, প্রতিটি ধরণের (ডোমেন) গ্রহণযোগ্য মান।

এবং এটি আমার বক্তব্য ছিল : NULLমূল্য হিসাবে, এটি একটি "অদ্ভুত জন্তু"। শ্রুতিমধুরতা ব্যতীত আমি বলতে পছন্দ করি: বাজে কথা

আমি মনে করি যে এই সূত্রটি আরও বেশি স্পষ্ট এবং কম বিতর্কযোগ্য - আমার দুর্বল ইংরেজি দক্ষতার জন্য দুঃখিত।

এই মাত্র এক NULLs মানের সমস্যা হয়। সম্ভব হলে এগুলি পুরোপুরি এড়ানো ভাল।

Here আমরা এখানে মূল্যবোধ সম্পর্কে উদ্বিগ্ন , সুতরাং যে দুটি উপস্থাপনা সর্বদা দুটি পৃথক শারীরিক বস্তু হয় তা বৈধ আপত্তি নয়; যদি আপনি বিশ্বাসী না হন তবে আমি দুঃখিত, এটি স্থান এবং মান এবং "অবজেক্ট" শব্দার্থবিজ্ঞানের মধ্যে পার্থক্য ব্যাখ্যা করার জায়গা নয় (রিলেশনাল বীজগণিতের শুরু থেকেই মান শব্দার্থ রয়েছে - কোডের তথ্য নীতি দেখুন; আমি মনে করি যে কিছু এসকিউএল ডিবিএমএস বাস্তবায়নকারী ডন এমনকি একটি সাধারণ শব্দার্থবিজ্ঞানের বিষয়েও যত্ন নেই)।

§§ আমার জ্ঞান, এই একটি সবর্জনবিদিত গৃহীত হয় (ক ফর্ম বা অন্য, কিন্তু সবসময় একটি 2VL ব্যাখ্যা) প্রাচীনত্ব থেকে এবং যে ঠিক তাই স্বজ্ঞাত কারণ। 3 ভিএল (বাস্তবে যুক্তিবিদ্যার একটি পরিবার) অনেক বেশি সাম্প্রতিক বিকাশ (তবে আমি নিশ্চিত না যে কখন প্রথম বিকাশ হয়েছিল)।

পার্শ্ব দ্রষ্টব্য: যদি কেউ এসকিউএল নালাগুলিকে ন্যায়সঙ্গত করার প্রয়াস হিসাবে নীচে , ইউনিট এবং বিকল্প প্রকারগুলি প্রবর্তন করে তবে আমি যথেষ্ট বিশদ পরীক্ষার পরেই নিশ্চিত হতে পারব যে এনকিউএলগুলির সাথে এসকিউএল বাস্তবায়নগুলি কীভাবে একটি সাউন্ড টাইপ সিস্টেম আছে এবং পরিস্কার করে দেবে, অবশেষে, NULLs (এই "মানগুলি নয়-যথেষ্ট-মান") আসলে কী।


কি অনুসরণ আমি কিছু লেখক উদ্ধৃত করব। কোনও ত্রুটি বা বাদ দেওয়া সম্ভবত আমার এবং মূল লেখকদের নয়।

এসকিউএল নালগুলিতে জো সেলকো

আমি দেখি জো সেলকো প্রায়শই এই ফোরামে উদ্ধৃত হয়। স্পষ্টতই তিনি এখানে অনেক শ্রদ্ধেয় লেখক। সুতরাং, আমি নিজেকে বলেছিলাম: "এসকিউএল নূলস সম্পর্কে তিনি কী লিখেছেন? তিনি কীভাবে নুলকে অসংখ্য সমস্যার ব্যাখ্যা দেন?" আমার এক বন্ধুর স্মার্টের জন্য জো সেল্কোর এসকিউএল এর একটি ইবুক সংস্করণ রয়েছে : উন্নত এসকিউএল প্রোগ্রামিং, তৃতীয় সংস্করণ । দেখা যাক.

প্রথমত, সামগ্রীর সারণী। আমাকে যে জিনিসটি সবচেয়ে বেশি আঘাত করে তা হ'ল NUL এর উল্লেখ করা সংখ্যা এবং সর্বাধিক বিচিত্র প্রসঙ্গে:

৩.৪ পাটিগণিত এবং ন্যূনলগুলি 109
3.5
ন্যূনল 110 3.5.1.1 নুলিফ () ফাংশন 110
6 নূলেফ থেকে এবং এর থেকে রূপান্তরিত মানগুলি : এসকিউএল 185
6.4 এ নূন্যতা 190
6.5
ন্যূনস এবং লজিক 190 6.5.1 নুলসের সাথে সাবকিউয়ের পূর্বাভাস 191
6.5.2 স্ট্যান্ডার্ড এসকিউএল সলিউশনস 193
6.6 গণিত এবং NULL 193
6.7 ফাংশন এবং NULL 193
6.8 NULs এবং হোস্ট ভাষা 194
6.9
হোস্ট প্রোগ্রামগুলি থেকে নূতন নকশাগুলি 197 6.9.1
একাধিক নূন্য মূল্যবোধ 1986
10.1 এর নোট একটি নোট, নূরের পূর্বাভাস 241
10.1। NULL 242 টির 1 উত্স
...

ইত্যাদি। এটি আমার কাছে "বাজে বিশেষ কেস" বাজে।

আমি এই বইয়ের কিছু অংশ নিয়ে এই বইয়ের কিছু অংশ নিয়ে যাব, কপিরাইটের কারণে নিজেকে অপরিহার্যতায় সীমাবদ্ধ রাখার চেষ্টা করছি। আমি মনে করি এই উদ্ধৃতিগুলি "ন্যায্য ব্যবহার" মতবাদের মধ্যে পড়ে এবং তারা এমনকি বইটি কিনতে উত্সাহিত করতে পারে - তাই আমি আশা করি যে কেউ অভিযোগ করবে না (অন্যথায় আমার এটির বেশিরভাগ মুছতে হবে, যদি না সমস্ত না হয়)। তদুপরি, আমি একই কারণে কোড স্নিপেটগুলি রিপোর্ট করা থেকে বিরত থাকব। এর জন্যে দুঃখিত. তথ্যযুক্ত যুক্তি সম্পর্কে পড়তে বইটি কিনুন।

কী অনুসরণ করে প্রথম বন্ধনীগুলির মধ্যে পৃষ্ঠা সংখ্যা।

নমনীয় বাধা নয় (11)

সর্বাধিক গুরুত্বপূর্ণ কলামের সীমাবদ্ধতা হ'ল নট নল, যা একটি কলামে ন্যূনাল ব্যবহার করতে নিষেধ করে। এই সীমাবদ্ধতাটিকে নিয়মিতভাবে ব্যবহার করুন এবং কেবলমাত্র যখন আপনার কাছে ভাল কারণ থাকে তা এটিকে সরিয়ে দিন। আপনি যখন ডেটার বিরুদ্ধে প্রশ্ন করবেন তখন এটি আপনাকে NULL মানগুলির জটিলতা এড়াতে সহায়তা করবে ।

এটি কোনও মূল্য নয় ; এটি এমন একটি চিহ্নিতকারী যেখানে এমন কোনও জায়গা রয়েছে যেখানে কোনও মান যেতে পারে।

আবার এই "মান তবে যথেষ্ট মান নয়" বাজে কথা। বাকিটা আমার কাছে বেশ বুদ্ধিমান মনে হয়।

(12)

সংক্ষেপে, NULL গুলি এসকিউএলে অনেকগুলি অনিয়মিত বৈশিষ্ট্য সৃষ্টি করে, যা আমরা পরে আলোচনা করব। আপনার সেরা বাজি হ'ল পরিস্থিতি এবং NULL- র নিয়মগুলি স্মরণ করা যখন আপনি এড়াতে পারবেন না।

এসকিউএল, এনএইউএল এবং অসীম এর এপ্রোপস:

(104) অধ্যায় 3: এসকিউএলে মজাদার ডেটা

এসকিউএল বিভিন্ন কারণে গণিতের জন্য আইইইই মডেল গ্রহণ করে নি।

...

যদি গণিতের জন্য আইইইই বিধিগুলি এসকিউএল-এ অনুমোদিত হয় তবে রূপান্তরের পরে আমাদের অসীমের জন্য ধরণের রূপান্তর নিয়ম এবং রূপান্তরের পরে অসীম সঠিক সংখ্যার মান উপস্থাপনের উপায় প্রয়োজন would লোকেরা NUL গুলি নিয়ে যথেষ্ট ঝামেলা করে, তাই আসুন সেখানে যাওয়া উচিত নয়।

এসকিউএল বাস্তবায়নগুলি নির্দিষ্ট প্রসঙ্গে এনএলএল এর অর্থ কী তা নিয়ে সিদ্ধান্তহীন:

৩.6.২ ক্ষতিকারক কার্য (১১6)

সমস্যাটি হ'ল লগারিদমগুলি যখন অপরিজ্ঞাত হয় (x <= 0)। কিছু এসকিউএল বাস্তবায়ন একটি ত্রুটি বার্তা ফেরত দেয়, কেউ আবার NUL এবং DB2 / 400 প্রদান করে; সংস্করণ 3 রিলিজ 1 এর ফলাফল হিসাবে ফিরে এসেছে * NEGINF ("নেতিবাচক অনন্ত" এর জন্য সংক্ষিপ্ত)।

জো সেলকো ডেভিড ম্যাকগোভেরান এবং সিজে তারিখের উদ্ধৃতি দিয়েছিলেন:

6 টি নাল: এসকিউএল-এ ডেটা মিসিং (185)

সিবাজ এবং এসকিউএল সার্ভার তাদের গাইড বইয়ে ডেভিড ম্যাকগোভেরান এবং সিজে ডেট বলেছিলেন: “এনকিউএলএসের তুলনায় এই লেখকের মতামত, কমপক্ষে বর্তমানে এসকিউএল হিসাবে সংজ্ঞায়িত এবং প্রয়োগ করা হয়েছে, এটি মূল্যবান হওয়ার চেয়ে অনেক বেশি কষ্টযুক্ত এবং এড়ানো উচিত; তারা খুব অদ্ভুত এবং বেমানান আচরণ প্রদর্শন করে এবং ত্রুটি এবং বিভ্রান্তির একটি সমৃদ্ধ উত্স হতে পারে। (দয়া করে মনে রাখবেন যে এই মন্তব্যগুলি এবং সমালোচনাগুলি কেবলমাত্র এসকিউএল সার্ভারের জন্য বিশেষভাবে নয়, এসকিউএল-স্টাইলের ন্যূনলগুলি সমর্থন করে এমন কোনও সিস্টেমে প্রযোজ্য) ")

নেশা মাদকাসক্তি হিসাবে :

(186/187)

এই বইয়ের বাকী অংশগুলিতে, আমি আপনাকে অনুরোধ করব যে এগুলি ব্যবহার না করুন , যা বিরোধী মনে হতে পারে, তবে তা নয়। কোনও নুলকে ড্রাগ হিসাবে ভাবেন; এটি সঠিকভাবে ব্যবহার করুন এবং এটি আপনার পক্ষে কাজ করে তবে এটিকে গালি দিন এবং এটি সবকিছু নষ্ট করতে পারে। আপনার সেরা নীতি হ'ল NUL গুলি এড়ানো এবং যখন আপনাকে যখন প্রয়োজন তা যথাযথভাবে ব্যবহার করা।

এখানে আমার অনন্য আপত্তিটি হ'ল "এগুলিকে সঠিকভাবে ব্যবহার করা", যা নির্দিষ্ট প্রয়োগের আচরণের সাথে খারাপভাবে যোগাযোগ করে।

.5.৫.১ উপকোয়ারের পূর্বাভাসে নালাগুলি (১৯১/১৯২)

লোকেরা ভুলে যায় যে একটি subquery প্রায়শই একটি NUL সঙ্গে একটি তুলনা লুকায়। এই দুটি সারণী বিবেচনা করুন:

...

ফলাফল খালি হবে। এটি বিপরীত , তবে সঠিক।

(বিভাজক)

.5.৫.২ স্ট্যান্ডার্ড এসকিউএল সলিউশন (১৯৩)

এসকিউএল -২২ কিছু ফর্মের নতুন প্রিকিকেট যুক্ত করে 3VL (ত্রি-মূল্যযুক্ত যুক্তি) কিছু সমস্যার সমাধান করেছে:

<অনুসন্ধানের শর্ত> সত্য নয় | মিথ্যা | অজানা

কিন্তু অজানা নিজের মধ্যে সমস্যার উত্স, যাতে সিজে ডেট, তাঁর বইয়ে নীচে উদ্ধৃত করেছেন, ৪.৪ অধ্যায়ে পুনরুদ্ধার করে। এসকিউএল-এ নালগুলি এড়ানো :

  • যেকোনো প্রসঙ্গে অজানা কীওয়ার্ডটি ব্যবহার করবেন না।

নীচে লিঙ্কযুক্ত, অজানাতে "ASIDE" পড়ুন ।

8.৮ ন্যূনতম এবং হোস্ট ভাষা (১৯৪)

যাইহোক, আপনার জানা উচিত যখন কোনও হোস্ট প্রোগ্রামে পাস করতে হয় তখন NUL কীভাবে পরিচালনা করা হয়। কোনও স্ট্যান্ডার্ড হোস্ট ল্যাঙ্গুয়েজ যার জন্য এম্বেডিং সংজ্ঞায়িত করা হয়েছে সেগুলি NULL সমর্থন করে না, এটি আপনার ডাটাবেস স্কিমাতে এগুলি এড়াতে যাওয়ার আরও ভাল কারণ।

(বিভাজক)

9.৯ ন্যূনগরীদের জন্য নকশার পরামর্শ (১৯৫)

যখনই সম্ভব সম্ভব সমস্ত কলামগুলিতে নূন্য প্রতিবন্ধকতা সহ আপনার সমস্ত বেস টেবিলগুলি ঘোষণা করা ভাল ধারণা idea NULL এসকিউএল জানে না এমন লোকগুলিকে বিভ্রান্ত করে এবং NUL ব্যয়বহুল।

আপত্তি: NULL এমনকি এমন লোককেও বিভ্রান্ত করে যেগুলি এসকিউএল ভালভাবে জানে, নীচে দেখুন।

(195)

বিদেশী কীগুলিতে NULLs এড়ানো উচিত। এসকিউএল এই "সন্দেহের উপকার" সম্পর্কের অনুমতি দেয়, তবে এটি যুক্ত হওয়া প্রশ্নের মধ্যে তথ্যের ক্ষতির কারণ হতে পারে। উদাহরণস্বরূপ, ইনভেন্টরিতে একটি অংশ নম্বর কোড দেওয়া হয়েছে যা একটি অর্ডার টেবিল দ্বারা একটি বিদেশী কী হিসাবে উল্লেখ করা হয়েছে, আপনাকে নাল রয়েছে এমন অংশগুলির একটি তালিকা পেতে সমস্যা হবে। এটি একটি বাধ্যতামূলক সম্পর্ক; আপনি অস্তিত্ব নেই এমন অংশটি অর্ডার করতে পারবেন না।

(বিভাজক)

9.৯.১ হোস্ট প্রোগ্রামগুলি থেকে NULs এড়ানো (197)

আপনি কিছু প্রোগ্রামিং শৃঙ্খলা নিয়ে হোস্ট প্রোগ্রামগুলি থেকে ডাটাবেসে NULL স্থাপন করা এড়াতে পারেন।

...

  1. প্রোগ্রামিং এবং রিপোর্টিংয়ে নিখোঁজ ডেটার প্রভাব নির্ধারণ করুন: NULL সহ সংখ্যাযুক্ত কলামগুলি একটি সমস্যা, কারণ সামগ্রিক ফাংশন ব্যবহার করে অনুসন্ধানগুলি বিভ্রান্তিমূলক ফলাফল সরবরাহ করতে পারে।

(বিভাজক)

(227)

একটি খালি সেট এর SUM () সর্বদা ন্যূন। এই কৌশলটি ব্যবহার করার সময় সর্বাধিক সাধারণ প্রোগ্রামিং ত্রুটিগুলির মধ্যে একটি হ'ল এমন একটি ক্যোয়ারী লিখুন যা একাধিক সারিতে ফিরতে পারে। আপনি যদি এটি সম্পর্কে চিন্তা না করে থাকেন তবে আপনি সম্ভবত শেষ উদাহরণটি লিখেছিলেন: ...

(বিভাজক)

10.1.1 ন্যূনাল গুলির উত্স (242)

NUL গুলি কোথায় ঘটতে পারে তা মনে রাখা গুরুত্বপূর্ণ। এগুলি একটি কলামে সম্ভাব্য মানের চেয়ে বেশি । খালি সেটগুলিতে একত্রিত ফাংশন, আউট জয়েনস, NULL সহ পাটিগণিতের এক্সপ্রেশন এবং ওএলএপি অপারেটররা সমস্ত ন্যূনাল ফিরে আসে। এই নির্মাণগুলি প্রায়শই VIEWs এ কলাম হিসাবে প্রদর্শিত হয়।

(বিভাজক)

(301)

আপনি যখন পূর্বাভাসকে উপস্থিতি পূর্বাভাসে রূপান্তর করার চেষ্টা করেন তখন ন্যুআলএলগুলির সাথে অন্য একটি সমস্যা পাওয়া যায়।

(বিভাজক)

১.3.৩ সমস্ত পূর্বানুমান এবং চূড়ান্ত কার্যাদি (৩১৩)

এটি প্রথমে বিপরীতমুখী যে এসকিউএলে এই দুটি পূর্বাভাস এক নয় not

...

তবে আপনাকে অতিরিক্ত ফাংশনগুলির নিয়মগুলি মনে রাখতে হবে greater তারা বৃহত্তর বা সর্বনিম্ন মানগুলি ফেরত দেওয়ার আগে সমস্ত NUL গুলি বাদ দেয়। সমস্ত প্রাকটিক্যালটি NULL বাদ দেয় না, তাই আপনি ফলাফলগুলিতে সেগুলি পেতে পারেন।

(বিভাজক)

(315)

যাইহোক, স্ট্যান্ডার্ডে সংজ্ঞাটি নেতিবাচক ভাষায় বলা হয়েছে, যাতে এন.ইউ.এল.এস সন্দেহের সুবিধা পায়। ...

আপনি দেখতে পাচ্ছেন যে, অনন্য প্রতিবন্ধকতাগুলিতে নালগুলি এড়ানো ভাল ধারণা।

গ্রুপ দ্বারা আলোচনা করা:

NUL গুলি এমনভাবে আচরণ করা হয় যেন তারা সবাই একে অপরের সমান এবং তাদের নিজস্ব গ্রুপ গঠন করে। প্রতিটি গ্রুপ তারপরে একটি নতুন ফলাফল সারণীতে একক সারিতে কমিয়ে দেওয়া হবে যা পুরানোটিকে প্রতিস্থাপন করে।

এর অর্থ এই যে গ্রুপের দ্বারা NUL = NULL 3VL এর মতো NULL এর মূল্যায়ন করে না, তবে এটি সত্যে মূল্যায়ন করে।

এসকিউএল স্ট্যান্ডার্ড বিভ্রান্তিকর:

অর্ডার এবং নলগুলি (329)

NULL হ'ল একটি সাজানোর কী মানটি একটি নন-নুল মান থেকে বৃহত্তর বা কম হিসাবে বিবেচিত হয় তা বাস্তবায়ন-সংজ্ঞায়িত, তবে ...

... এমন এসকিউএল পণ্য রয়েছে যা এটি যেভাবেই করে।

মার্চ 1999 সালে, ক্রিস ফারার তার একজন বিকাশকারীদের কাছ থেকে একটি প্রশ্ন এনেছিল যা তাকে এসকিউএল স্ট্যান্ডার্ডের এমন একটি অংশ যাচাই করেছিলাম যা আমি ভেবেছিলাম যে আমি বুঝতে পেরেছি । ক্রিস সাধারণ বোঝা এবং নির্দিষ্টকরণের আসল শব্দটির মধ্যে কিছু পার্থক্য খুঁজে পেয়েছিল ।

ইত্যাদি। আমি মনে করি সেলকো যথেষ্ট।

এসকিউএল নুলগুলিতে সিজে তারিখ

সিজে ডেট ন্যূনালগুলি সম্পর্কে আরও র‌্যাডিক্যাল: এসকিউএল, পিরিয়ডে NULL গুলি এড়িয়ে চলুন। আসলে, তার এসকিউএল এবং রিলেশনাল থিওরির ৪ র্থ অধ্যায় : সঠিক এসকিউএল কোড কীভাবে লিখবেন তা উপ-বিভাগগুলির সাথে "নো ডুপ্লিকেটস, ন নলস" শিরোনামযুক্ত "4.4 নলসের সাথে কী ভুল?" এবং "এসকিউএল-এ নুলগুলি এড়ানো" (লিঙ্কটি অনুসরণ করুন: গুগল বইয়ের জন্য ধন্যবাদ, আপনি কিছু পৃষ্ঠা অন-লাইনে পড়তে পারেন)।

এসকিউএল ন্যুআলএল-এ ফ্যাবিয়ান পাসকাল

ডাটাবেস ম্যানেজমেন্টে এর ব্যবহারিক সমস্যাগুলি থেকে - থিংকিং প্র্যাকটিশনারের জন্য একটি রেফারেন্স (অন-লাইনে কোনও অংশ নেই, দুঃখিত):

10.3 প্রকৃত নিদর্শন

10.3.1 এসকিউএল নালস

... এসকিউএল 3VL সহ অন্তর্ভুক্ত সমস্যাগুলি এবং সেই সাথে অনেকগুলি তর্ক, জটিলতা, পাল্টা প্রতিরোধ ক্ষমতা এবং সম্পূর্ণ ত্রুটিগুলি ভুগছে [10, 11]; তাদের মধ্যে নিম্নলিখিত:

  • সমষ্টিগত ফাংশন (যেমন, সুম (), এভিজি ()) ন্যূনালগুলি উপেক্ষা করে (COUNT () ব্যতীত)।
  • সারি ছাড়াই কোনও টেবিলে একটি স্কেলার এক্সপ্রেশন 0 এর পরিবর্তে NUL এ ভুলভাবে মূল্যায়ন করে।
  • "NULL = NULL" এক্সপ্রেশনটি NULL এর মূল্যায়ন করে তবে এসকিউএলে আসলে অবৈধ; তবুও অর্ডার বাই নুলকে সমান হিসাবে গণ্য করে (তারা আগে থেকে "নিয়মিত" মানগুলি ডিবিএমএস বিক্রেতার কাছে রেখে দেয়)।
  • "X IS NULL" এক্সপ্রেশনটি "NOT (x IS NULL)" এর সমান নয়, যেমনটি 2VL-র ক্ষেত্রে রয়েছে।

...

সমস্ত বাণিজ্যিকভাবে প্রয়োগ করা এসকিউএল উপভাষাগুলি এই 3 ভিএল পদ্ধতির অনুসরণ করে এবং এইভাবে, তারা কেবল এই সমস্যাগুলিই প্রদর্শন করে না, তবে তাদের স্পিফিক বাস্তবায়ন সমস্যাও রয়েছে, যা বিভিন্ন পণ্য জুড়ে পরিবর্তিত হয়


4
"এবং এটি আমার বক্তব্য ছিল: মূল্য হিসাবে NULL, একটি" অদ্ভুত প্রাণী "" - কারণ NULLএটি কোনও মূল্য নয়।
পাভেল মিনায়েভ

1
এছাড়াও, এসকিউএল সার্ভার দেয় না (NULL = NULL) -> FALSE। ডকুমেন্টেশন উদ্ধৃত করা ANSI_NULLS: "যখন উল্লিখিত, একটি নাল মান সব তুলনা মূল্যায়ন অজানা যখন অফ উল্লিখিত থাকলে, একটি নাল মান অ-ইউনিকোড মূল্যবোধের তুলনা সত্য নির্ণয় করা যদি দুটি মানই শূন্য হয়।।"
পাভেল Minaev

@ পাভেল মিনায়েভ: ক) এবং সত্যের চেয়ে মিথ্যা কতটা ভাল? খ) যদি এটি কোনও মান না হয় তবে কেন ভেরিয়েবল ভ্যালুগুলির অংশ হিসাবে নির্ধারিত হয়?
মেডি 70

1
>> যেহেতু এটি ডিসেম্বর, আসুন একটি alতু উদাহরণ ব্যবহার করুন। গাছের নিচে আমার দুটি উপহার রয়েছে। এখন, আপনি আমাকে বলুন যে আমি একই জিনিস দুটি পেয়েছি বা না পেয়েছি। ..... হ্যাঁ, আপনি দুটি জিনিস পেয়েছেন এবং আপনি এখনই আপনার জ্ঞানের পরিধি সম্পর্কে যতটা উদ্বিগ্ন তা আপনার কাছে হুবহু
ব্র্যাড থমাস

3
নাল = নাল সত্য হওয়া উচিত। নাল ভালভাবে সংজ্ঞায়িত করা হয় যে মানের পারে প্রতিনিধিত্ব একটি অজানা মান, কিন্তু এটি হতে পারে প্রতিনিধিত্ব অনুপস্থিতি একটি মানের। এটি নালকে কী উপস্থাপন করে তা নির্ধারণ করার জন্য বিকাশকারীকে আপ করতে হবে তবে নাল নিজেই একেবারে একটি মান এবং নালটি নাল = নাল। অন্য যে কোনও বাস্তবায়ন দুর্যোগের জন্য আবদ্ধ, কারণ আপনি বুলিয়ান যে মৌলিকভাবে পূর্বাভাসে বার্ষিক যুক্তিটি ব্যবহার করছেন। আমি আবেদন করছি যে এটি এসকিউএল সার্ভারে সেটিংস স্থায়ী হয়ে উঠছে। এটি বন্ধ বন্ধ।
ট্রায়ঙ্কো


9

দুটি জিনিস কী তা আপনি জানেন না কেবল তার অর্থ এই নয় যে তারা সমান। আপনি যখন NULLমনে করেন "নুল" (স্ট্রিং) সম্পর্কে ভাবেন তখন আপনি সম্ভবত পোস্টগ্র্যাস্কল এর IS DISTINCT FROMএবং এর মতো সাম্যের ভিন্ন পরীক্ষা চানIS NOT DISTINCT FROM

"তুলনা ফাংশন এবং অপারেটরগুলি" পোস্টগ্র্রেএসকিউএল ডক্স থেকে

অভিব্যক্তি IS DISTINCT FROMপ্রকাশ

অভিব্যক্তি IS NOT DISTINCT FROMপ্রকাশ

নন-নাল ইনপুটগুলির জন্য, অপারেটরের IS DISTINCT FROMমতোই <>। তবে, উভয় ইনপুট যদি নাল হয় তবে এটি মিথ্যা প্রত্যাবর্তন করে এবং যদি কেবল একটি ইনপুট শূন্য হয় তবে তা সত্য হয় returns একইভাবে, নন-নাল ইনপুটগুলির জন্য IS NOT DISTINCT FROMঅভিন্ন =, তবে উভয় ইনপুট শূন্য হলে এটি সত্য হয় এবং কেবলমাত্র একটি ইনপুট শূন্য থাকে। সুতরাং, এই নির্মাণগুলি কার্যকরভাবে এমনভাবে কাজ করে যেমন নাল একটি "অজানা" পরিবর্তে একটি সাধারণ ডেটা মান।


5

নূন্যতম ধারণাটি প্রশ্নবিদ্ধ, কমপক্ষে বলতে গেলে। কোডড প্রসঙ্গে প্রাসঙ্গিক মডেল এবং NUL এর ধারণাটি প্রবর্তন করেছিলেন (এবং একাধিক ধরণের NULL এর প্রস্তাব দেয়!) তবে কোডের মূল লেখার পর থেকেই সম্পর্কের তত্ত্বটি বিকশিত হয়েছে: তার কিছু প্রস্তাব বাদ দেওয়া হয়েছে (যেমন প্রাথমিক কী) এবং অন্যরা কখনও ধরা পড়েনি (যেমন থেটা অপারেটর)। আধুনিক রিলেশনাল থিওরিতে (সত্যিকারের রিলেশনাল থিওরিতে আমার জোর দেওয়া উচিত) NULL এর সহজ অস্তিত্ব নেই। তৃতীয় ইশতেহার দেখুন।http://www.thethirdmanifesto.com/

এসকিউএল ভাষা পিছনের সামঞ্জস্যের সমস্যায় ভুগছে। NULL এসকিউএল প্রবেশের পথ খুঁজে পেয়েছে এবং আমরা এটির সাথে আটকে আছি। তর্কযুক্তভাবে, NULLএসকিউএল এর বাস্তবায়ন ত্রুটিযুক্ত (এসকিউএল সার্ভারের প্রয়োগের কারণে এটি আরও জটিল করে তোলেANSI_NULLS বিকল্পের তুলেছে)।

আমি বেস টেবিলগুলিতে NULLable কলামগুলির ব্যবহার এড়ানো পরামর্শ দিই।


যদিও সম্ভবত আমাকে প্রলোভিত করা উচিত নয়, আমি NULLএসকিউএল-এ কীভাবে কাজ করে সে সম্পর্কে কেবল আমার নিজের একটি সংশোধন দাবি করতে চেয়েছিলাম :

NULL= NULLমূল্যায়ন UNKNOWN

UNKNOWN একটি যৌক্তিক মান।

NULL একটি ডাটা মান।

এটি উদাহরণস্বরূপ প্রমাণ করা সহজ

SELECT NULL = NULL

এসকিউএল সার্ভারে সঠিকভাবে একটি ত্রুটি উত্পন্ন করে। যদি ফলাফলটি কোনও ডেটা মান হত তবে আমরা দেখার আশা করব NULL, কারণ এখানে কিছু উত্তর (ভুলভাবে) আমাদের পরামর্শ দিবে।

যৌক্তিক মানটি UNKNOWNযথাক্রমে এসকিউএল ডিএমএল এবং এসকিউএল ডিডিএল-তে আলাদাভাবে বিবেচিত হয়।

এসকিউএল UNKNOWNডিএমএলে, ফলসেট থেকে সারি সরিয়ে ফেলা হয় causes

উদাহরণ স্বরূপ:

CREATE TABLE MyTable
(
 key_col INTEGER NOT NULL UNIQUE, 
 data_col INTEGER
 CHECK (data_col = 55)
);

INSERT INTO MyTable (key_col, data_col)
   VALUES (1, NULL);

INSERTএই সারিতে সফল, যদিও CHECKঅবস্থা সমাধান করা NULL = NULL। এটি এসকিউএল -২২ ("এএনএসআই") স্ট্যান্ডার্ডে সংজ্ঞায়িত হয়েছে:

11.6 সারণির সীমাবদ্ধতার সংজ্ঞা

3)

যদি সারণির সীমাবদ্ধতা একটি চেক সীমাবদ্ধ সংজ্ঞা হয়, তবে এসসি তত্ক্ষণাত্ চেক সীমাবদ্ধ সংজ্ঞাতে অন্তর্ভুক্ত অনুসন্ধানের শর্ত হয়ে উঠুক এবং টিটিকে সংশ্লিষ্ট টেবিলের সীমাবদ্ধ বর্ণনাকারী বর্ণনায় অন্তর্ভুক্ত টেবিলের নাম হতে দিন; সারণির সীমাবদ্ধতা সন্তুষ্ট হয় না এবং যদি কেবল তবেই

উপস্থিত রয়েছে (টি থেকে নির্বাচন করুন (এসসি))

সত্য.

যুক্তি অনুসরণ করে আবার মনোযোগ দিয়ে পড়ুন।

সরল ইংরেজিতে, উপরে আমাদের নতুন সারিটি থাকার বিষয়ে 'সন্দেহের সুবিধা' UNKNOWNদেওয়া এবং পাশ করার অনুমতি দেওয়া হয়েছে।

এসকিউএল ডিএমএলে, WHEREধারাটির নিয়মটি অনুসরণ করা অনেক সহজ:

টি-এর প্রতিটি সারিটিতে অনুসন্ধানের শর্ত প্রয়োগ করা হয় cla যেখানে ধারাটি টি-এর সারিগুলির একটি সারণী যার জন্য অনুসন্ধানের অবস্থার ফলাফলটি সত্য।

সরল ইংরাজীতে, সারিগুলি যা মূল্যায়ন করে UNKNOWNফলাফল ফলাফল থেকে সরানো হয়।


5

TechNet সেখানে কিভাবে নাল মান কাজের জন্য একটি ভাল ব্যাখ্যা।

নাল মানে অজানা।

সুতরাং বুলিয়ান এক্সপ্রেশন

মান = নাল

মিথ্যাতে মূল্যায়ন করে না, এটি নালার জন্য মূল্যায়ন করে, তবে এটি যদি কোনও অংশের চূড়ান্ত ফলাফল হয় তবে কিছুই ফিরে আসে না। এটি এটি করার একটি ব্যবহারিক উপায়, যেহেতু নাল ফেরানো গর্ভধারণ করা কঠিন।

নিম্নলিখিতটি বোঝা আকর্ষণীয় এবং খুব গুরুত্বপূর্ণ :

যদি আমাদের জিজ্ঞাসা থাকে

where (value=@param Or @param is null) And id=@anotherParam

এবং

  • মান = 1
  • @ পরিমাপ নাল
  • আইডি = 123
  • @ AnotherParam = 123

তারপর

"মান = @ পরম" মূল্যায়ন
"নাল"
@ পরিমাপ নাল "সত্যকে মূল্যায়ন করে " আইডি = @ আরেকটি প্যারাম "মূল্যায়ণ করে সত্য

সুতরাং মূল্যায়ন করা এক্সপ্রেশন হয়ে যায়

(নাল বা সত্য) এবং সত্য

আমরা ভেবে প্রলোভিত হতে পারি যে এখানে "নাল বা ট্রু" মূল্যায়ন হবে নালায় এবং এভাবে পুরো এক্সপ্রেশনটি নাল হয়ে যায় এবং সারিটি ফিরে আসবে না।

এটা তাই না। কেন?

কারণ "নাল অর ট্রু" সত্যকে মূল্যায়ন করে যা খুব যুক্তিযুক্ত, যেহেতু যদি কোনও অপারেন্ড অর-অপারেটরের সাথে সত্য হয়, তবে অন্য অপারেন্ডের মান বিবেচনা না করে অপারেশনটি সত্যই ফিরে আসবে। সুতরাং এটি অন্যান্য অপারেন্ড অজানা (নাল) ব্যাপার নয়।

সুতরাং আমাদের অবশেষে সত্য = সত্য এবং এভাবে সারিটি ফিরে আসবে।

দ্রষ্টব্য: একই স্ফটিক পরিষ্কার যুক্তি দিয়ে যে "নাল বা ট্রু" সত্যকে মূল্যায়ন করে, "নাল এবং ট্রু" নালায় মূল্যায়ন করে।

আপডেট:
ঠিক আছে, এটি সম্পূর্ণরূপে তৈরি করতে আমি এখানেও বাকী অংশটি যুক্ত করতে চাই যা উপরের সম্পর্কের ক্ষেত্রে বেশ মজা করে।

"নাল বা মিথ্যা" নালাকে মূল্যায়ন করে, "নাল এবং মিথ্যা" মিথ্যাতে মূল্যায়ন করে। :)

যুক্তি অবশ্যই পূর্বের মতো স্বতঃস্ফূর্ত।


4

কারণ NULL'অজানা মান' এবং দুটি অজানা মান সমান হতে পারে না।

সুতরাং, যদি আমাদের যুক্তি অনুসারে NULLN ° 1 NULLN ° 2 এর সমান হয় , তবে আমাদের তা বলতে হবে:

SELECT 1
WHERE ISNULL(nullParam1, -1) = ISNULL(nullParam2, -1)

যেখানে জ্ঞাত মান -1N ° 1 -1N ° 2 এর সমান


nullParam1 = -1এবং nullParam2 =NULLএবং বিমানের ক্রাশ .... হওয়া উচিতISNULL(NULLIF(@nullParam1, @nullParam2), NULLIF(@nullParam2, nullParam1)) IS NULL
সেলভিন

4

সমস্ত উত্তর এখানে সিএস দৃষ্টিকোণ থেকে এসে গেছে বলে মনে হচ্ছে তাই আমি বিকাশকারী দৃষ্টিকোণ থেকে একটি যুক্ত করতে চাই।

একজন বিকাশকারীর জন্য NULL খুব দরকারী। এখানে দেওয়া উত্তরগুলি বলে যে নুলের অর্থ অজানা, এবং সম্ভবত সিএস তত্ত্বে এটি সত্য, মনে রাখবেন না, কিছুক্ষণ হয়ে গেল। যদিও প্রকৃত বিকাশে, কমপক্ষে আমার অভিজ্ঞতায় এটি প্রায় 1% সময় ঘটে। অন্যান্য 99% এটি ক্ষেত্রে ব্যবহার করা হয় যেখানে মানটি অজানা নয় তবে এটি অবহিত থাকতে হবে K

উদাহরণ স্বরূপ:

  • Client.LastPurchase, একটি নতুন ক্লায়েন্টের জন্য। এটি অজানা, এটি জানা যায় যে তিনি এখনও কেনাকাটা করেন নি।

  • ক্লাস প্রতি শ্রেণিবদ্ধ ম্যাপিংয়ের সাথে একটি টেবিল সহ কোনও ওআরএম ব্যবহার করার সময় কিছু মান নির্দিষ্ট শ্রেণীর জন্য ম্যাপ করা হয় না।

  • গাছের কাঠামোটি ম্যাপ করার সময় একটি শিকড় সাধারণত থাকেParent = NULL

  • এবং আরো অনেক...

আমি নিশ্চিত যে বেশিরভাগ বিকাশকারীরা এক পর্যায়ে লিখেছিলেন WHERE value = NULL, কোনও ফল পাননি এবং তারা IS NULLসিনট্যাক্স সম্পর্কে শিখেছিলেন । এই প্রশ্নটি এবং লিঙ্কযুক্ত কতটি ভোট আছে তা দেখুন।

এসকিউএল ডেটাবেসগুলি একটি সরঞ্জাম এবং এগুলি এমনভাবে ডিজাইন করা উচিত যা তাদের ব্যবহারকারীদের পক্ষে বোঝার পক্ষে সহজ।


1
প্রত্যেকে "NUL অজানা" বলে চিৎকার করছে এবং তারপরে আচরণটি ন্যায়সঙ্গত বলে মনে হচ্ছে। হ্যাঁ, যদি এটির একটি ভিত্তি হয় তবে 3VL এর উত্তর সম্ভবত। তবে আমি যে সমস্ত ডিবিতে কাজ করি সেগুলিতে NULL এর অর্থ অনুপস্থিত। দুঃখিত আপনার আওয়াজ প্রান্তরে হারিয়ে গেছে @ অ্যালেক্সডেভ
জন রেস

3

NULL কোনও কিছুর সমান নয়, এমনকি নিজেরও নয়। NULL এর আচরণ বোঝার জন্য আমার ব্যক্তিগত সমাধানটি যতটা সম্ভব ব্যবহার করা এড়ানো :)।


1
বাম / ডান / বহিরাগত যোগদানের ক্ষেত্রে যেমন হয় তেমনি সমস্ত কিছুর সমানও হতে পারে ...
মিগুয়েল ভেন্টুরা

5
কি নির্বিকার উত্তর। বীজগণিত সম্পর্কে প্রাথমিক বাচ্চাদের একই কথা বলা যেতে পারে, তবে এটি সমাধানের চেষ্টা করছে তা স্বীকার না করে কেবল এটি নির্বোধ হিসাবে প্রকাশিত হবে যা এটি করেছিল।
ইভান ক্যারল

2
@ ইভান: আসলে, NULL এড়ানো একটি শক্ত সমাধান। 3-মূল্যবান যুক্তিটি বিতর্কিত নয় এবং অনেক লোক মনে করেন যে এনকিউএল এবং এটিতে যে সমস্ত প্রয়োজনীয় (প্রয়োজনীয়) জটিলতা রয়েছে তা ছাড়াই এসকিউএল আরও ভাল হবে।
sleske

3
"অনেক লোক" একটি নয়েজ শব্দ, এবং "বিতর্কিত নয়" আরও সহজ সরল "বিতর্কিত" যার মধ্যে 3 ভিএল নয় তা আঁকানোর উপায়।
ইভান ক্যারল

"NULL কোনও কিছুর সমান নয়, এমনকি নিজেও নয়" " এই যুক্তি অনুসারে, <সোমুভ্যালু>! = NULL সত্য হওয়া উচিত। এসকিউএল এর অদ্ভুত মহাবিশ্বের ক্ষেত্রে, এটি মিথ্যা।
টম লিন্ট

3

প্রশ্ন:
একটি অজানা অন্য অজানা সমান?
(নাল = নুল)
এই প্রশ্নটি এমন কেউ কেউ উত্তর দিতে পারে না যাতে এটি আপনার অ্যাসি_নুলস সেটিং এর উপর নির্ভর করে সত্য বা মিথ্যাতে ডিফল্ট হয়।

তবে প্রশ্ন:
এই অজানা পরিবর্তনশীল কি অজানা?
এই প্রশ্নটি বেশ আলাদা এবং সত্য দিয়ে উত্তর দেওয়া যেতে পারে।

nullVariable = নাল মানগুলির সাথে তুলনা
করছে নাল ভেরিয়েবল নাল ভেরিয়েবলের অবস্থার তুলনা করছে


3

বিভ্রান্তি ইন্ডিয়ারেশন (অ্যাবস্ট্রাকশন) স্তর থেকে উদ্ভূত হয় যা NULL ব্যবহার করে আসে

"ক্রিসমাস ট্রি এর নীচে কি" উপমা ফিরে যান, "অজানা" বক্স এ-তে কী রয়েছে সে সম্পর্কে জ্ঞানের অবস্থা বর্ণনা করে

সুতরাং যদি আপনি বক্স এ-তে কী না জানেন তবে আপনি এটি "অজানা" বলছেন, তবে এর অর্থ এই নয় যে বাক্সের মধ্যে "অজানা" রয়েছে । অজানা ব্যতীত অন্য কিছু বাক্সে রয়েছে, সম্ভবত কোনও ধরণের অবজেক্ট বা সম্ভবত কিছুই বাক্সে নেই।

একইভাবে, যদি আপনি বক্স বিতে কী জানেন না তবে আপনি বিষয়বস্তু সম্পর্কে "জ্ঞাত" হিসাবে আপনার জ্ঞানের অবস্থাটিকে লেবেল করতে পারেন।

তাই এখানে পদাঘাত: বক্স এ সম্পর্কে আপনার জ্ঞানের অবস্থা বাক্স বি সম্পর্কে আপনার জ্ঞানের অবস্থার সমান । (উভয় ক্ষেত্রেই আপনার জ্ঞানের অবস্থা "অজানা" বা "বক্সে কী আছে তা আমি জানি না" But) তবে বাক্সগুলির বিষয়বস্তু সমান বা নাও হতে পারে।

এসকিউএল ফিরে যেতে, আদর্শভাবে আপনি যখন মানগুলি জানেন তখনই কেবল তার সাথে তুলনা করতে সক্ষম হওয়া উচিত। দুর্ভাগ্যক্রমে, যে লেবেল জ্ঞানের অভাব বর্ণনা করে সেগুলি সেলে নিজেই সঞ্চিত রয়েছে , সুতরাং আমরা এটিকে মান হিসাবে ব্যবহার করতে প্রলুব্ধ হই। তবে আমাদের এটিকে একটি মান হিসাবে ব্যবহার করা উচিত নয়, কারণ এটি "বক্স এ এর ​​বিষয়বস্তু বক্স বি এর সামগ্রীর সমান হতে পারে যখন আমরা বক্স এ এবং / বা বক্স বিতে কী আছে তা আমরা জানি না know (যৌক্তিকভাবে বোঝা যায়, "আমি যদি বক্স এ-তে কী তা জানি না এবং বাক্স বিতে কী আছে তা যদি আমি জানি না, তবে বক্স এ-তে কী আছে, বক্স বিতে কী আছে") মিথ্যা।)

হ্যাঁ, ডেড হর্স


3

নকলগুলি এবং তারা উত্সাহিত করে এমন তিনটি রাষ্ট্র যুক্তির উপর এমএসডিএন-এর একটি বর্ণনামূলক নিবন্ধ রয়েছে

সংক্ষেপে, এসকিউএল 92 অনুচ্ছেদে NUL কে অজানা হিসাবে সংজ্ঞায়িত করা হয়েছে, এবং নিম্নলিখিত অপারেটরগুলিতে ব্যবহৃত NUL অদ্বিতীয় জন্য অপ্রত্যাশিত ফলাফলের কারণ দেয়:

= operator NULL   true   false 
NULL       NULL   NULL   NULL
true       NULL   true   false
false      NULL   false  true

and op     NULL   true   false 
NULL       NULL   NULL   false
true       NULL   true   false
false      false  false  false

or op      NULL   true   false 
NULL       NULL   true   NULL
true       true   true   true
false      NULL   true   false

তবে প্রশ্নটি 3 ভিএল (ত্রি-মূল্যবান যুক্তি) সম্পর্কে নয় সমতার রিফ্লেক্সিভ সম্পত্তি সম্পর্কে।
ম্যাড 70

আরও সুনির্দিষ্টভাবে বলতে গেলে, শেষ পর্যন্ত আমার উত্তরে আমি যেমন বর্ণনা করেছি, তখন সমস্যাগুলি দেখা দেয় যখন 3VL তে সাম্যতার ব্যাখ্যা করা হয় যাতে সাম্যের প্রতিচ্ছিন্ন সম্পত্তিটি সর্বদা সত্যের কাছে মূল্যায়ন না করে।
ম্যাড 70

1

নাল বর্গক্ষেত্রে অজানা তাই আমরা দুটি অজানা একই হওয়ার আশা করতে পারি না।

তবে আপনি এএনএসআই_এনএলএলএস অফে সেট করে এটি ব্যবহার করতে পারেন (এটি ডিফল্ট দ্বারা চালু) আপনি নালার জন্য = অপারেটরটি ব্যবহার করতে সক্ষম হবেন

SET ANSI_NULLS off
if null=null
print 1
else 
print 2
set ansi_nulls on
if null=null
print 1
else 
print 2

2
এই সব ধরণের হয় কোন । বিশ্বের একটি সংজ্ঞা রয়েছে null, এটি বুঝতে শিখুন বা কেবলমাত্র টাইপগুলি রাখতে এবং কলামগুলি আপডেট করার জন্য সারণীতে পরিবর্তন করুন।
ইভান ক্যারল 22

3
আমি সত্যিই SET ANSI_NULLS ছাড়ার প্রস্তাব দিইনি। আমি এএনএসআই_এনএলএলএস-এর পক্ষে কঠিন উপায়টি খুঁজে পেয়েছি। তবে সর্বদা বিশেষভাবে উপলভ্য সমস্ত বিকল্পগুলি জেনে রাখা ভাল যখন আপনি কোনও লাইন জুড়ে আসেন যেখানে কোথাও কোথাও কোথাও কোথাও বলা হয় আপনি এএনএসআই_নুলস সম্পর্কে না জেনে কীভাবে সেই লাইনটি বোধ করবেন। আমি যেভাবে দেখছি, আমার পোস্টটি দরকারী ছিল .. :)
পিএস

1

আপনি নাগরিকদের সম্পর্কে তথ্য নিবন্ধিত সরকারের পক্ষে কাজ করুন। এর মধ্যে দেশের প্রতিটি ব্যক্তির জাতীয় আইডি অন্তর্ভুক্ত রয়েছে। প্রায় 40 বছর আগে একটি শিশু একটি গির্জার দ্বারস্থ হয়েছিল, তাদের বাবা-মা কে তা কেউ জানে না। এই ব্যক্তির পিতা আইডি NULL। এ জাতীয় দু'জনের উপস্থিতি রয়েছে। কমপক্ষে অন্য একজনের সাথে একই পিতার আইডি ভাগ করে নেওয়ার লোকদের (ভাইবোনদের লোকদের) গণনা করুন। আপনি কি এই দুটি গণনা?

উত্তর না, আপনি না, কারণ আমরা জানি না তারা ভাই-বোন কিনা।

মনে করুন আপনার কাছে NULLবিকল্প নেই এবং পরিবর্তে "অজানা", সম্ভবত একটি খালি স্ট্রিং বা সংখ্যা 0 বা একটি অক্ষর ইত্যাদি উপস্থাপন করতে কিছু প্রাক-নির্ধারিত মান ব্যবহার করুন তবে আপনার প্রশ্নের মধ্যে আপনার কাছে প্রশ্নটি থাকবে যে * = * , 0 = 0, এবং "" = "", ইত্যাদি। এটি আপনি চান না (উপরের উদাহরণ অনুসারে), এবং আপনি প্রায়শই এই কেসগুলি সম্পর্কে ভুলে যেতে পারেন (উপরের উদাহরণটি সাধারণ দৈনন্দিন চিন্তাভাবনার বাইরে একটি স্পষ্ট প্রান্তিকর ক্ষেত্র) ), তাহলে আপনার পক্ষে মনে রাখতে ভাষাটি দরকার that NULL = NULLএটি সত্য নয়।

চাহিদাই উদ্ভাবনের কারণ.


0

অন্যান্য দুর্দান্ত উত্তরগুলির জন্য কেবল একটি সংযোজন:

AND: The result of true and unknown is unknown, false and unknown is false,
while unknown and unknown is unknown.

OR: The result of true or unknown is true, false or unknown is unknown, while unknown or unknown is unknown.

NOT: The result of not unknown is unknown

0

আপনি যদি দুটি NUL- র জন্য সত্যিকারের প্রত্যাবর্তনের সন্ধান করছেন তবে আপনি এটি ব্যবহার করতে পারেন:

SELECT 1 
WHERE EXISTS (
    SELECT NULL
    INTERSECT
    SELECT NULL
)

আপনি যদি এক টেবিল থেকে অন্য টেবিলে ডেটা প্রতিলিপি করতে চান তবে এটি সহায়ক।


0

সাম্যতা পরীক্ষা, উদাহরণস্বরূপ, ক্ষেত্রে বিবৃতিতে যখন ক্লজটি থেকে পরিবর্তন করা যায়

XYZ = NULL 

প্রতি

XYZ IS NULL

যদি আমি ফাঁকা এবং খালি স্ট্রিংটিকে ন্যুআল এর সমান হিসাবে বিবেচনা করতে চাই তবে আমি প্রায়শই সমতা পরীক্ষাও ব্যবহার করি:

(NULLIF(ltrim( XYZ ),'') IS NULL)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.