sql - injection - এসকিউএল-যেখানে VS হচ্ছে



where having (5)

আমার নিম্নলিখিত দুটি টেবিল আছে:

1. Lecturers (LectID, Fname, Lname, degree).
2. Lecturers_Specialization (LectID, Expertise).

আমি সবচেয়ে বিশেষজ্ঞ সঙ্গে লেকচারার খুঁজতে চান। যখন আমি চেষ্টা করি, এটি কাজ করছে না:

SELECT
  L.LectID, 
  Fname, 
  Lname 
FROM Lecturers L, 
     Lecturers_Specialization S
WHERE L.LectID = S.LectID
AND COUNT(S.Expertise) >= ALL (SELECT
  COUNT(Expertise)
FROM Lecturers_Specialization
GROUP BY LectID);

কিন্তু যখন আমি চেষ্টা করি, এটি কাজ করে:

SELECT
  L.LectID,
  Fname,
  Lname 
FROM Lecturers L,
     Lecturers_Specialization S
WHERE L.LectID = S.LectID
GROUP BY L.LectID,
         Fname,
         Lname 
HAVING COUNT(S.Expertise) >= ALL (SELECT
  COUNT(Expertise)
FROM Lecturers_Specialization
GROUP BY LectID); 

কারণ কি? ধন্যবাদ।

https://ffff65535.com


  1. SELECT, INSERT এবং UPDATE বিবৃতি সহ যেখানে ধারাটি ব্যবহার করা যেতে পারে, তবে HAVING শুধুমাত্র SELECT বিবৃতির সাথে ব্যবহার করা যেতে পারে।

  2. যেখানে একত্রিত হওয়ার আগে ফিল্টারগুলি সারি (GROUP BY), যেখানে সমীকরণের পরে HAVING ফিল্টার গ্রুপ সঞ্চালিত হয়।

  3. সমষ্টিগত ফাংশনটি WHERE বিভাগে ব্যবহার করা যাবে না যতক্ষণ না এটি HAVING অনুচ্ছেদে থাকা একটি উপাদানের মধ্যে থাকে, তবে সামগ্রিক ফাংশন HAVING অনুচ্ছেদে ব্যবহার করা যেতে পারে।

Source


1. আমরা হাফিং বিভাগের সাথে সমষ্টিগত ফাংশন ব্যবহার করতে পারি যেখানে WHERE ধারাটি নয় যেমন মিনিট, সর্বোচ্চ, গড়।

2. যেখানে হাফিং ধারাটি দ্বারা দলিল সংগ্রহের মাধ্যমে গোষ্ঠীকে বাদ দিয়ে রেকর্ড টুপলটি বাতিল করে দেয়

যখন আপনার ডেটা গোষ্ঠী থাকে এবং সারিতে ডাটা থাকে তখন WHERE ব্যবহার করা হয় তখন বেশিরভাগ HAVING ব্যবহার করা হয়।


প্রথমে আমরা ক্লোজগুলি ক্রমানুসারে জানতে চাই যেখানে থেকে> যেখানে GROUP BY> হ্যাভিং> DISTINCT> SELECT> ORDER BY। GROUP BY Clause এর আগে WHERE ধারাটি কার্যকর হওয়ার পর থেকে রেকর্ডগুলি GROUP BY প্রয়োগকৃত রেকর্ডগুলিতে যেখানে আবেদন করে ফিল্টার করা যাবে না।

"হাউজিং WHERE ধারা হিসাবে একই কিন্তু দলবদ্ধ রেকর্ডে প্রয়োগ করা হয়"।

প্রথমে WHERE ধারাটি শর্তের উপর ভিত্তি করে রেকর্ডগুলি সংগ্রহ করে তখন GROUP BY বিভাগ তাদের অনুসারে গোষ্ঠীগুলিকে গোষ্ঠীভুক্ত করে এবং তারপরে HAVING বিভাগটি শর্তের উপর ভিত্তি করে গোষ্ঠী রেকর্ডগুলি সংগ্রহ করে।


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

উদাহরণ প্রশ্নঃ

select empName, sum(Bonus) 
from employees 
order by empName 
having sum(Bonus) > 5000;

এটি একটি সাময়িক স্মৃতিতে ফলাফল সেটটি সংরক্ষণ করবে, তারপরে ধারাটি তার কাজ সম্পাদন করবে। তাই আমরা সহজে এখানে সামগ্রিক ফাংশন ব্যবহার করতে পারেন।


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

থাম্বের নিয়ম হিসাবে, GROUP BY এবং GROUP BY পরে থাকার আগে ব্যবহার করুন। এটি একটি বরং আদিম নিয়ম, কিন্তু এটি 90% এরও বেশি ক্ষেত্রে দরকারী।

আপনি যখন এটিতে থাকবেন, তখন যোগদানের ANSI সংস্করণ ব্যবহার করে আপনি আপনার প্রশ্নটি পুনরায় লিখতে চাইতে পারেন:

SELECT  L.LectID, Fname, Lname
FROM Lecturers L
JOIN Lecturers_Specialization S ON L.LectID=S.LectID
GROUP BY L.LectID, Fname, Lname
HAVING COUNT(S.Expertise)>=ALL
(SELECT COUNT(Expertise) FROM Lecturers_Specialization GROUP BY LectID)

WHERE থta যোগদান শর্ত হিসাবে ব্যবহার করা হয় WHERE এটি মুছে ফেলা হবে।





having