এসকিউএল লজিক অপারেটর অগ্রাধিকার: এবং এবং


179

দুটি বিবৃতি সমান হয়?

SELECT [...]
FROM [...]
WHERE some_col in (1,2,3,4,5) AND some_other_expr

এবং

SELECT [...]
FROM [...]
WHERE some_col in (1,2,3) or some_col in (4,5) AND some_other_expr

এটি যাচাই করতে আমি ব্যবহার করতে পারি এমন কোনও সত্যের টেবিল রয়েছে?


4
চেষ্টা করুন: টিটি এফ (টি বা টি) এবং এফ টি বা (টি এবং এফ)। কোড পাঠক কোডের লেখকের অভিপ্রায়টি স্পষ্টভাবে দেখতে সক্ষম হওয়া উচিত। এবং লেখকের অবশ্যই নিশ্চিত হওয়া দরকার যে মেশিনটি তার ইচ্ছা অনুযায়ী কাজ করছে। প্যারেন্টেসিস তিনটি সারিবদ্ধ: পাঠক, লেখক এবং মেশিন। :)
আসাদ ইব্রাহিম

উত্তর:


290

Andঅগ্রাধিকার আছে Or, তাই, এমনকি যদিa <=> a1 Or a2

Where a And b 

হিসাবে একই হয় না

Where a1 Or a2 And b,

কারণ যে হিসাবে কার্যকর করা হবে

Where a1 Or (a2 And b)

এবং আপনি কী চান, সেগুলি একই করার জন্য নিম্নলিখিতটি (অগ্রাধিকারের নিয়মগুলিকে ওভাররাইড করার জন্য প্রথম বন্ধনী ব্যবহার করে):

 Where (a1 Or a2) And b

উদাহরণস্বরূপ এখানে উদাহরণ দেওয়া হল:

Declare @x tinyInt = 1
Declare @y tinyInt = 0
Declare @z tinyInt = 0

Select Case When @x=1 OR @y=1 And @z=1 Then 'T' Else 'F' End -- outputs T
Select Case When (@x=1 OR @y=1) And @z=1 Then 'T' Else 'F' End -- outputs F

যারা রেফারেন্সের সাথে পরামর্শ করতে পছন্দ করেন (বর্ণানুক্রমিক ক্রমে):


18
প্রথম বন্ধনীগুলির প্রয়োজন না হলেও ব্যবহার করা ভাল অনুশীলন। খুব কম প্রোগ্র্যামার (যদি থাকে) সমস্ত অপারেটর উপলব্ধ এর অগ্রাধিকার জানেন।
Trismegistos

1
@ ট্রাইসমেজিস্টোস কাশ যদি এটি না হয় ... এমন হওয়া উচিত নয়, তবে আমি অনুমান করছি যে আপনি ঠিক আছেন।
চার্লস বেতানা

1
এই ANDতাহলে ORনজরে এসকিউএল স্ট্যান্ডার্ড অংশ?
জাইমে হাবলুটজেল

@ জাইম, হ্যাঁ, এবং আফিক, এটি সমস্ত প্রোগ্রামিং ভাষার জন্য মানেরও একটি অংশ।
চার্লস বেতানা

4
@ বিসিয়েন, আপনি কী করেছেন তা নিশ্চিত নন, তবে এটি স্ট্যান্ডার্ড এসকিউএল এবং মাইএসকিউএল ডকুমেন্টেশনের সাথে অসামঞ্জস্যপূর্ণ ... dev.mysql.com/doc/refman/5.0/en/operator-precedence.html আপনার আবার চেষ্টা করা উচিত - সাবধানতার সাথে এটি সময় ... চেষ্টা করুন declare @x tinyInt = 1 declare @y tinyInt = 0 declare @z tinyInt = 0 select case when @x=1 or @y=1 and @z=1 then'T' else 'F' end select case when (@x=1 or @y=1) and @z=1 then'T' else 'F' end
চার্লস ব্রেটানা

33

আমি 2 পয়েন্ট যুক্ত করব:

  • "IN" কার্যকরভাবে তাদের আশেপাশে প্রথম বন্ধনীর সাথে ORS
  • এবং আমি জানি প্রতিটি ভাষায় ও এর চেয়ে বেশি প্রাধান্য পেয়েছে

সুতরাং, 2 এক্সপ্রেশন কেবল সমান নয়।

WHERE some_col in (1,2,3,4,5) AND some_other_expr
--to the optimiser is this
WHERE
     (
     some_col = 1 OR
     some_col = 2 OR 
     some_col = 3 OR 
     some_col = 4 OR 
     some_col = 5
     )
     AND
     some_other_expr

সুতরাং, আপনি যখন আইএন ক্লজ আপটি ভাঙবেন তখন আপনি সিরিয়াল ওআরএসকে বিভক্ত করবেন এবং প্রাধান্য পরিবর্তন করেছেন।


জিবিএন কি ওড়াকল এসকিউএল-তে সাহচর্য রয়েছে? যদি হ্যাঁ, তবে কিভাবে এবং কোথায় আমি সমস্ত অপারেটরদের সাহস পেতে পারি?
আসিফ মোশতাক

2
এটি যতটা কষ্ট দেয় বলে আমার মনে হয়, এবং তার উপর রুবি বা অগ্রাধিকার নেই! আরো খারাপ করতে, && করে বেশি প্রাধান্য আছে ||! আমি রুবি পছন্দ করি না এর একটি কারণ - এটি আমার পক্ষে বার বার কমপক্ষে অবাক হওয়ার নীতি লঙ্ঘন করে। 2.2.1: 007> সত্য বা সত্য এবং মিথ্যা => মিথ্যা 2.2.1: 008> সত্য || সত্য && মিথ্যা => সত্য
অ্যালেক্স এল

23
  1. পাটিগণিত অপারেটর
  2. সংঘবদ্ধ অপারেটর
  3. তুলনা শর্ত
  4. হয় [নয়] নাল, পছন্দ, [না]
  5. [নয়] নীচে
  6. অসমান
  7. যৌক্তিক অবস্থা নয়
  8. এবং যৌক্তিক অবস্থা
  9. বা যৌক্তিক অবস্থা

অগ্রাধিকারের নিয়মগুলিকে ওভাররাইড করতে আপনি প্রথম বন্ধনী ব্যবহার করতে পারেন।


9

3-ভেরিয়েবল বুলিয়ান এক্সপ্রেশন সত্য টেবিলটি দেখানোর জন্য প্রশ্ন:

;WITH cteData AS
(SELECT 0 AS A, 0 AS B, 0 AS C
UNION ALL SELECT 0,0,1
UNION ALL SELECT 0,1,0
UNION ALL SELECT 0,1,1
UNION ALL SELECT 1,0,0
UNION ALL SELECT 1,0,1
UNION ALL SELECT 1,1,0
UNION ALL SELECT 1,1,1
)
SELECT cteData.*,
    CASE WHEN

(A=1) OR (B=1) AND (C=1)

    THEN 'True' ELSE 'False' END AS Result
FROM cteData

এর জন্য ফলাফল (A=1) OR (B=1) AND (C=1):

A   B   C   Result
0   0   0   False
0   0   1   False
0   1   0   False
0   1   1   True
1   0   0   True
1   0   1   True
1   1   0   True
1   1   1   True

জন্য ফলাফল (A=1) OR ( (B=1) AND (C=1) )একই।

এর জন্য ফলাফল ( (A=1) OR (B=1) ) AND (C=1):

A   B   C   Result
0   0   0   False
0   0   1   False
0   1   0   False
0   1   1   True
1   0   0   False
1   0   1   True
1   1   0   False
1   1   1   True
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.