এই অপারেটরটি <=> মাইএসকিউএল-এ কী?


163

আমি একজন পূর্ববর্তী বিকাশকারী দ্বারা লিখিত কোড এবং একটি প্রশ্নের উত্তর নিয়ে কাজ করছে যা এতে বলে,

WHERE p.name <=> NULL

<=>এই ক্যোয়ারির অর্থ কী ? এটি কি কিছু সমান =? নাকি এটি একটি সিনট্যাক্স ত্রুটি?

তবে এটি কোনও ত্রুটি বা ব্যতিক্রম দেখাচ্ছে না। আমি ইতিমধ্যে জানি <>= !=মধ্যে মাইএসকিউএল ।


19
spaceshipঅপারেটর
— Moha সর্বশক্তিমান উট

4
@ এমএইচডি.টাহাবি, আমাদের এমন একটি গুগল দরকার যা আমাদের সরাসরি অপারেটরদের জন্য গুগল করতে দেয়।
— পেসারিয়ার

@ পেসারিয়র - আমি এটি পেয়েছি, প্রায় ৫০ বছর পূর্বে সিম্বহাউন্ড ডটকম (এর চেয়ে ভাল বিকল্প যদি পাওয়া যায় না)
— অ্যান্ড্রু

উত্তর:


239

টি এল; ডিআর

এটি NULLনিরাপদ সমান অপারেটর।

নিয়মিত =অপারেটরের মতো , দুটি মান তুলনা করা হয় এবং ফলাফলটি হয় 0(সমান নয়) বা 1(সমান); অন্য কথায়: 'a' <=> 'b'ফলন 0এবং 'a' <=> 'a'ফলন 1।

নিয়মিত =অপারেটরের বিপরীতে , মানগুলির NULLএকটি বিশেষ অর্থ হয় না এবং তাই এটি কোনও NULLসম্ভাব্য ফলাফল হিসাবে কখনই ফল দেয় না ; সুতরাং: 'a' <=> NULLফলন 0এবং NULL <=> NULLফলন 1।

কাজেরতা

এটি কার্যকর হতে পারে যখন উভয় অপারেন্ডে থাকতে পারে NULLএবং আপনার দুটি কলামের মধ্যে একটি সামঞ্জস্যপূর্ণ তুলনা ফলাফল প্রয়োজন need

আর একটি ব্যবহারের ক্ষেত্রে প্রস্তুত বিবৃতি আছে, উদাহরণস্বরূপ:

... WHERE col_a <=> ? ...

এখানে, স্থানধারক হয় একটি স্কেলারের মান হতে পারে বা NULLকোয়েরি সম্পর্কে কোনও পরিবর্তন না করেই হতে পারে।

সম্পর্কিত অপারেটর

এছাড়াও <=>আরও দুটি অপারেটর রয়েছে যা তুলনা করতে ব্যবহার করা যেতে পারে NULL, যথা IS NULLএবং IS NOT NULL; তারা এএনএসআই স্ট্যান্ডার্ডের একটি অংশ এবং তাই অন্য ডাটাবেসে সমর্থিত, এর বিপরীতে <=>যা মাইএসকিউএল-নির্দিষ্ট।

আপনি এগুলি মাইএসকিউএল এর বিশেষত্ব হিসাবে ভাবতে পারেন <=>:

'a' IS NULL     ==> 'a' <=> NULL
'a' IS NOT NULL ==> NOT('a' <=> NULL)

এর ভিত্তিতে, আপনার নির্দিষ্ট ক্যোয়ারী (টুকরা) আরও পোর্টেবলে রূপান্তর করা যেতে পারে:

WHERE p.name IS NULL

সমর্থন

এসকিউএল: 2003 স্ট্যান্ডার্ড এটির জন্য একটি প্রিকিট চালু করেছিল, যা <=>নিচের ফর্মটিতে ঠিক মাইএসকিউএল'র অপারেটরের মতো কাজ করে :

IS [NOT] DISTINCT FROM 

নিম্নলিখিতটি সর্বজনীনভাবে সমর্থিত তবে এটি আপেক্ষিক জটিল:

CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
     THEN 1
     ELSE 0
END = 1

2
সুতরাং এর অর্থ কি কোনও পার্থক্য নেই? এবং <=>এটি কিছুটা অকেজো অপারেটর? ঠিক আছে?
— zzlalani

16
@zzlalani একেবারেই নয়; <=>দুটি অপারেন্ড নেয় যেখানে IS (NOT) NULLকেবল একটি লাগে; বড় পার্থক্য ... এটি =সেই সম্মানের ক্ষেত্রে নিজের মতোই কার্যকর ।
— জ্যাক

12
@Zlalani IS NULLএবং IS NOT NULLএসকিউএল স্ট্যান্ডার্ড হয়। <=>একটি মাইএসকিউএল নির্দিষ্ট এক্সটেনশন।
— ড্যানিয়েল ডিনিজ

5
সুতরাং, is not distinct fromঅপারেটর মত । মাইএসকিউএল এতে কোনও সূচক ব্যবহার করতে পারে কিনা তা জানতে আগ্রহী ...
— ডেনিস ডি বার্নার্ডি

3
@ পেসিয়ার নং, বিপরীতটি a <=> bহল NOT(a <=> b)।
— জ্যাক

57

হয় <=> NULL-safe equal to operator

এই অপারেটরটি = অপারেটরের মতো সমতার তুলনা সম্পাদন করে, তবে দুটি অপারেন্ড NULL হলে NULL এর পরিবর্তে 1 এবং একটি অপারেন্ড NULL হলে NUL এর চেয়ে 0 প্রদান করে।

ডকুমেন্টেশন জন্য এখানে দেখুন

নমুনা:

আপনার ব্যবহার করা উচিত নয়। (তুলনা অপারেটরগুলি = এবং <> উভয়ই অভিব্যক্তির উভয় দিকে NULL দিয়ে UNKNOWN দেয়))

SELECT * 
FROM table 
WHERE YourColumn IS NOT NULL;

নাল নিরাপদ সমতা অপারেটরটিকেও তুচ্ছ করতে পারে তবে এটি স্ট্যান্ডার্ড এসকিউএল নয়।

SELECT *
FROM table 
WHERE NOT (YourColumn <=> NULL);

1
সংশোধন: সমতুল্য অপারেটর<=> বলা উচিত এবং এটি অনিরাপদ সমতুল্য অপারেটর। =NULL
— পেসারিয়ার 11

26

এটি অপারেটরের সমান NULL- নিরাপদ

<=> অপারেটর ক্ষেত্রের সাথে NULL মানগুলি তুলনা করতে ব্যবহৃত হয়। যদি সাধারণ = (সমান) অপারেটরগুলি তুলনা মানগুলির একটিতে NULL হয় তবে NUL প্রদান করে। <=> অপারেটরটি সত্য বা মিথ্যা প্রত্যাবর্তন করে। <=> অপারেটর IS নাল হিসাবে একই।

ম্যানুয়াল থেকে:

<=> = অপারেটরের মতো সমতার তুলনা সম্পাদন করে, তবে দুটি অপারেন্ড NULL হলে NULL এর পরিবর্তে 1 এবং একটি অপারেন্ড NULL হলে NULL এর পরিবর্তে 0 প্রদান করে।

mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
        -> 1, 1, 0
mysql> SELECT 1 = 1, NULL = NULL, 1 = NULL;
        -> 1, NULL, NULL

সম্পাদনা করুন: - ( অনেক দেরি উল্লেখ একটি গুরুত্বপূর্ণ সাইড নোট যোগ করার জন্য যদিও না <=> পাশাপাশি )

পাশের নোটে: -

নয় <=>

আরও একটি পয়েন্ট নেই <=> যা ক্ষেত্রের সাথে নুল মানগুলির তুলনা করতে ব্যবহৃত হয়। যদি সাধারণ! = বা <> (সমান নয়) অপারেটরগুলি তুলনা মানগুলির মধ্যে একটি যদি NULL হয় তবে অপারেটররা NULL প্রদান করে। <=> প্রয়োগ না করে অপারেটরটি সত্য বা মিথ্যা প্রত্যাবর্তন করে। <=> প্রয়োগ করা হয়নি অপারেটরটি নাল নয় as

উদাহরণ: -

SELECT NULL != NULL,         //--Result is NULL
   NOT NULL <=> NULL,        //--Result is 0
   NULL IS NOT NULL;         //--Result is 0

1
NOT <=>এটি অপারেটর নয়, এটি NOTফলাফলের জন্য প্রয়োগ করা হয় op1 <=> op2।
— জ্যাক

@ জ্যাক: - হ্যাঁ আপনি ঠিক বলেছেন। উত্তর আপডেট! যোগ করা হয়েছে যাতে একটি পয়েন্ট তৈরি করতে :)
— রাহুল ত্রিপাঠি

সুতরাং আমি অনুমান করি যে কোনও <!=>অপারেটর নেই
— কিপ করুন

@ কিপ: নেই!
— রাহুল ত্রিপাঠি

18

<=>মাইএসকিউএল এর নাল-সেফ "সমান সমান" অপারেটর। ম্যানুয়াল থেকে :

সমান-নিরাপদ এই অপারেটরটি = অপারেটরের মতো সমতার তুলনা সম্পাদন করে, তবে দুটি অপারেন্ড NULL হলে NULL এর পরিবর্তে 1 এবং একটি অপারেন্ড NULL হলে NUL এর চেয়ে 0 প্রদান করে।

mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
        -> 1, 1, 0
mysql> SELECT 1 = 1, NULL = NULL, 1 = NULL;
        -> 1, NULL, NULL

11

সমান-নিরাপদ এই অপারেটরটি = অপারেটরের মতো সমতার তুলনা সম্পাদন করে, তবে দুটি অপারেন্ড NULL হলে NULL এর পরিবর্তে 1 এবং একটি অপারেন্ড NULL হলে NUL এর চেয়ে 0 প্রদান করে।

mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
        -> 1, 1, 0
mysql> SELECT 1 = 1, NULL = NULL, 1 = NULL;
        -> 1, NULL, NULL

এর তাত্পর্য:

আপনি যখন কোনও নুল মানকে একটি নন-নুল মানের সাথে তুলনা করেন আপনি নুল পাবেন। আপনি যদি মানটি নাল কিনা তা পরীক্ষা করতে চান।

ইক্যুয়ালিটি অপারেটর (<=>) যা NUL কে একটি সাধারণ মান হিসাবে বিবেচনা করে, সুতরাং উভয় মান NULL হলে এটি 1 (NULL নয়) ফেরত দেয় এবং মানগুলির মধ্যে একটি যদি NULL হয় তবে 0 (NULL নয়) প্রদান করে:

যেমন

 SELECT NULL <=> NULL -- 1
 SELECT TRUE <=> TRUE -- 1
 SELECT col1 <=> col2 FROM myTable

10

<=>হ'ল নাল-সেফ সমতুল্য অপারেটর । a <=> bলেখার মতোই:

CASE
    WHEN a IS NULL AND b IS NULL THEN 1 -- both operands null then 1
    WHEN a IS NULL OR  b IS NULL THEN 0 -- one operand is null then 0
    ELSE a = b                          -- else behave like normal = operator
END

এবং দুঃখিত, আমি এই অপারেটরের পরিবর্তে ব্যবহার করার জন্য একটি ভাল কারণ খুঁজে পাইনি AND/OR IS (NOT) NULL । উদাহরণস্বরূপ আপনার উদাহরণটি WHERE p.name <=> NULLএকই WHERE p.name IS NULL।


9

থেকে মাইএসকিউএল ডকুমেন্টেশন :

সমান-নিরাপদ এই অপারেটরটি = অপারেটরের মতো সমতার তুলনা সম্পাদন করে, তবে দুটি অপারেন্ড NULL হলে NULL এর চেয়ে 1 এবং একটি অপারেন্ড NULL হলে NULL এর চেয়ে 0 প্রদান করে।

<=>অপারেটরটি ব্যবহার করার একটি উদাহরণ হ'ল :

SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;

যা ফিরে আসবে:

1, 1, 0

নিয়মিত =অপারেটরের উদাহরণ হ'ল :

SELECT 1 = 1, NULL = NULL, 1 = NULL;

যা ফিরে আসবে:

1, NULL, NULL

<=>অপারেটর খুব অনুরূপ =, অপারেটর ছাড়া <=>আর ফেরত আসবে নাNULL



1
mysql> SELECT * FROM t JOIN t2 WHERE t2.ids = t.ids;
+----+------+----+------+
| id | ids  | id | ids  |
+----+------+----+------+
|  1 |    1 |  1 |    1 |
|  2 |    2 |  2 |    2 |
|  5 |    6 |  5 |    6 |
|  6 |    7 |  6 |    7 |
+----+------+----+------+
4 rows in set (0.00 sec)

mysql> SELECT * FROM t JOIN t2 WHERE t2.ids <=> t.ids;
+----+------+----+------+
| id | ids  | id | ids  |
+----+------+----+------+
|  1 |    1 |  1 |    1 |
|  2 |    2 |  2 |    2 |
|  3 | NULL |  3 | NULL |
|  4 | NULL |  3 | NULL |
|  3 | NULL |  4 | NULL |
|  4 | NULL |  4 | NULL |
|  5 |    6 |  5 |    6 |
|  6 |    7 |  6 |    7 |
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.