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


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.