এসকিউএল এর কি সাবকিউরিস দরকার?
সম্পর্কের ডাটাবেসের জন্য কাঠামোগত ক্যোয়ারী ভাষার যথেষ্ট সাধারণ প্রয়োগ বাস্তবায়ন কল্পনা করুন gine যেহেতু ক্যানোনিকাল এসকিউএল SELECT
স্টেটমেন্টের কাঠামোটি এটির জন্য প্রকৃত পক্ষে গুরুত্বপূর্ণ, তাই আমি সরাসরি সম্পর্কিত বীজগণিতের কাছে আবেদন করি না, তবে আপনি এই পদগুলিতে বাক্যগুলির আকারের উপর উপযুক্ত বিধিনিষেধ তৈরি করে ফ্রেম করতে পারেন।
একটি SQL SELECT
কোয়েরি সাধারণত একটি অভিক্ষেপ (নিয়ে গঠিত SELECT
অংশ) কিছু সংখ্যা JOIN
(অপারেশন JOIN
অংশ) কিছু সংখ্যা SELECTION
কার্যকলাপ (SQL এর যে, WHERE
ক্লজ), এবং তারপর সেট জ্ঞানী কার্যকলাপ ( UNION
, EXCEPT
, INTERSECT
, ইত্যাদি), অন্যের দ্বারা অনুসৃত এসকিউএল SELECT
কোয়েরি।
যোগদান করা টেবিলগুলি এক্সপ্রেশনগুলির গণিত ফলাফল হতে পারে; অন্য কথায়, আমরা যেমন একটি বিবৃতি থাকতে পারে:
SELECT t1.name, t2.address
FROM table1 AS t1
JOIN (SELECT id, address
FROM table2 AS t3
WHERE t3.id = t1.id) AS t2
WHERE t1.salary > 50,000;
আমরা সাবকিউরি হিসাবে একটি এসকিউএল ক্যোয়ারির অংশ হিসাবে একটি কম্পিউটেড টেবিলের ব্যবহার উল্লেখ করব। উপরের উদাহরণে, দ্বিতীয় (ইন্ডেন্টেড) SELECT
একটি সাবকোয়ারি।
সমস্ত এসকিউএল কোয়েরিগুলি এমনভাবে লেখা যেতে পারে যাতে সাবকোয়ারিগুলি ব্যবহার না করা যায়? উপরের উদাহরণটি পারেন:
SELECT t1.name, t2.address
FROM table1 AS t1
JOIN table2 AS t2
ON t1.id = t2.id
WHERE t1.salary > 50,000;
এই উদাহরণটি কিছুটা উত্সাহী বা তুচ্ছ, তবে এমন একটি ঘটনা কল্পনা করতে পারে যেখানে একটি সমতুল্য প্রকাশটি পুনরুদ্ধার করার জন্য আরও বেশি প্রচেষ্টা প্রয়োজন হতে পারে। অন্য কথায়, এটি কি সাবকিউরিয়াস সহ প্রতিটি এসকিউএল কোয়েরি জন্য একই যে সাব এবং কি' ছাড়াই একই অন্তর্নিহিত সারণীর জন্য একই ফলাফল উত্পন্ন করার গ্যারান্টি আছে? আসুন এসকিউএল কোয়েরিগুলি নিম্নলিখিত ফর্মের মধ্যে সীমাবদ্ধ করুন:q ′ q q ′
SELECT <attribute>,
...,
<attribute>
FROM <a table, not a subquery>
JOIN <a table, not a subquery>
...
JOIN <a table, not a subquery>
WHERE <condition>
AND <condition>
...
AND <condition>
UNION
-or-
EXCEPT
-or-
<similar>
SELECT ...
ইত্যাদি। আমি মনে করি বাম এবং ডান বাহ্যিক যোগগুলি খুব বেশি যোগ করে না, তবে আমার যদি ভুল হয় তবে দয়া করে নির্দ্বিধায় এটি নির্ধারণ করুন ... যে কোনও ইভেন্টে, সেগুলিও খালি খেলা। যতক্ষণ সেট অপারেশন চলে যায়, আমি অনুমান করি যে এগুলির যে কোনও একটি ঠিক আছে ... ইউনিয়ন, পার্থক্য, প্রতিসম পার্থক্য, ছেদ, ইত্যাদি ... যা সহায়ক is এমন কোনও জ্ঞাত ফর্ম রয়েছে যেখানে সমস্ত এসকিউএল কোয়েরি হ্রাস করা যায়? এর মধ্যে কি সাবকোয়ারিগুলি দূর হয়? বা এমন কিছু উদাহরণ রয়েছে যেখানে সমতুল্য, subquery- মুক্ত কোয়েরি নেই? রেফারেন্সগুলি প্রশংসা করা হয় ... বা একটি প্রমাণ (প্রমাণ হিসাবে) যে তারা প্রয়োজন বা প্রয়োজন নেই তা চমত্কার হবে। ধন্যবাদ, এবং দুঃখিত যদি এটি একটি উদযাপিত (বা তুচ্ছ) ফলাফল হয় যার ফলস্বরূপ আমি বেদনাদায়ক অজ্ঞ।
select count(*) from (select id from sometable group by id having count(*)>1) d
। কারণ এটি অন্তর্ভুক্ত group by
আমি এটিকে উত্তর হিসাবে রাখি নি।
ON
প্রয়োজনীয় JOIN
, যদিও কেবল একটি কমা দিয়ে ক্রস পণ্য পাওয়া যায়।