4.1 সীমা

আপনি যদি আপনার SQL কোয়েরি থেকে অনেক বেশি ডেটা ফেরত পাওয়ার আশা করেন, তাহলে আপনি আগে থেকেই সর্বোচ্চ সংখ্যা সীমিত করতে পারেন। সর্বোপরি, টেবিলে হাজার হাজার বা এমনকি লক্ষ লক্ষ সারি থাকতে পারে।

SQL ব্যবহার করে একটি প্রশ্নের ফলাফলে সারির সংখ্যা সীমিত করা খুব সহজ করে তোলে LIMIT। এই কীওয়ার্ডটি SQL কোয়েরির একেবারে শেষে ব্যবহার করা হয় এবং দেখতে এইরকম:

LIMIT quantity

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

SELECT * FROM product
LIMIT 10

এবং আমরা নিম্নলিখিত ক্যোয়ারী ফলাফল পেতে:

আইডি নাম ব্র্যান্ড মূল্য গণনা
1 টেবিল আইকেইএ 20.00 15
2 চেয়ার আইকেইএ ৫.০০ 45
3 সোফা আইকেইএ 80.00 10
4 বিছানা আইকেইএ 75.00 10
5 আলমারি বোশ 125.00 15
6 তাক তাক ২৫.০০ 114
7 টেলিভিশন এলজি 350.00 4
8 বাতি এলজি 15.00 100
9 ড্রেসার আইকেইএ 99.00 10
10 প্লেট বোশ 199.00 10

এখন আমরা শুধুমাত্র প্রথম 5 সারি অনুরোধ করব। এই অনুরোধটি দেখতে কেমন হবে:

SELECT * FROM product
LIMIT 5

আমরা নিম্নলিখিত ক্যোয়ারী ফলাফল পেতে:

আইডি নাম ব্র্যান্ড মূল্য গণনা
1 টেবিল আইকেইএ 20.00 15
2 চেয়ার আইকেইএ ৫.০০ 45
3 সোফা আইকেইএ 80.00 10
4 বিছানা আইকেইএ 75.00 10
5 আলমারি বোশ 125.00 15

4.2 অফসেট

গতবার আমরা শিখেছি কিভাবে সার্ভার প্রতিক্রিয়ায় লাইনের সংখ্যা সীমিত করতে হয়। এবং এখন, পণ্য টেবিল থেকে হাজার হাজার সারির পরিবর্তে, আমরা প্রথম 10টি সারি পেতে পারি এবং সেগুলি ব্যবহারকারীর কাছে প্রদর্শন করতে পারি। এটা নিখুঁত. কিন্তু কিভাবে আমরা দ্বিতীয় 10 সারি প্রদর্শন করব? আর তৃতীয়টি?

যদি আমরা লিখি LIMIT 20, বা LIMIT 30, সার্ভারটি যথাক্রমে 20 এবং 30 সারি দেবে না?

এই ক্ষেত্রে এসকিউএল-এর একটি বিশেষ কীওয়ার্ড রয়েছে OFFSETযার সাহায্যে আপনি সার্ভারকে এর প্রতিক্রিয়াতে N লাইন এড়িয়ে যেতে বলতে পারেন। এই কীওয়ার্ডটি এসকিউএল কোয়েরির একেবারে শেষে ব্যবহার করা হয় (পরে LIMIT) এবং এর মত দেখাচ্ছে:

OFFSET quantity

আসুন প্রোডাক্ট টেবিলে একটি ক্যোয়ারী লিখি এবং 11 থেকে 15 রেকর্ড পেতে চেষ্টা করি। অন্য কথায়, আমরা সার্ভারকে আমাদের কাছে 5টি সারি ফেরত দিতে বলছি, কিন্তু প্রতিক্রিয়ার প্রথম 10টি সারি বাদ দিন। এই অনুরোধটি দেখতে কেমন হবে:

SELECT * FROM product
LIMIT 5
OFFSET 10

আমরা নিম্নলিখিত ক্যোয়ারী ফলাফল পেতে:

আইডি নাম ব্র্যান্ড মূল্য গণনা
এগারো আর্মচেয়ার বোশ 44.00 8
12 ফুলদানি স্মার্টফ্লাওয়ার 99.00 9
13 দাঁড়ান আইকেইএ 100.00 10

সার্ভারটি শুধুমাত্র 3টি সারি ফেরত দিয়েছে, যার মানে আমাদের টেবিলে মোট 13টি সারি ছিল। সার্ভার প্রথম 10টি এড়িয়ে গেছে এবং পরবর্তী 5টি ফিরিয়ে দিয়েছে।

4.3 আলাদা নির্বাচন করুন

আরেকটি দরকারী কীওয়ার্ড হল DISTINCT। যখন টেবিলে ডুপ্লিকেট রেকর্ড থাকে এবং আমরা সদৃশগুলি সরাতে চাই তখন এটি ব্যবহার করা হয়।

আমাদের টেবিলে সদৃশ কোথা থেকে আসে? টেবিলে সদৃশ নাও থাকতে পারে, কিন্তু প্রশ্নের ফলে, এটি সহজ। আসুন একটি প্রশ্ন লিখি যা আমাদের বিক্রি করা সমস্ত পণ্যের ব্র্যান্ড ফেরত দেবে। এই অনুরোধটি দেখতে কেমন হবে:

SELECT brand FROM product

আমরা নিম্নলিখিত ক্যোয়ারী ফলাফল পেতে:

ব্র্যান্ড
আইকেইএ
আইকেইএ
আইকেইএ
আইকেইএ
বোশ
বোশ
এলজি
এলজি
আইকেইএ
বোশ
বোশ
স্মার্টফ্লাওয়ার
আইকেইএ

এই টেবিলে ডুপ্লিকেট সারি আছে তা দেখতে সহজ। এটি নিশ্চিত করতে হবে যে কোনও সদৃশ নেই এবং আপনাকে কীওয়ার্ড ব্যবহার করতে হবে DISTINCT। এখানে সংশোধন করা অনুরোধটি দেখতে কেমন হবে:

SELECT DISTINCT brand
FROM product

আমরা নিম্নলিখিত ক্যোয়ারী ফলাফল পেতে:

ব্র্যান্ড
আইকেইএ
বোশ
এলজি
স্মার্টফ্লাওয়ার

অনেক ভালো. তাই না? ;)

4.4 অর্ডার করুন

এবং অবশেষে আমরা বাছাই পেয়েছিলাম . একটি প্রশ্নের ফলাফল বাছাই করার জন্য, আপনাকে কীওয়ার্ড ব্যবহার করতে হবে ORDER BY। প্রযুক্তিগতভাবে, এই দুটি শব্দ, কিন্তু সারাংশ গুরুত্বপূর্ণ নয়. দুটি শব্দ, একটি অপারেটর।

এটি অবশ্যই কীওয়ার্ডের পরে লিখতে হবে WHERE, তবে আগে LIMITএবং OFFSETORDER BYআপনি যদি পরে লেখেন LIMIT, তাহলে SQL সার্ভার আপনাকে একটি ত্রুটি ফেরত দেবে।

সাধারণভাবে, এই অপারেটর এই মত দেখায়:

ORDER BY column order

যেখানে কলাম টেবিলে কলামের নাম/বাছাই ফলাফল। আর অর্ডার হল সাজানোর অর্ডার।

সাজানোর ক্রম তিন ধরনের হতে পারে:

  • ASC(আরোহী থেকে) - আরোহী;
  • DESC(from descending) - descending;
  • নির্দিষ্ট করা নেই - ব্যবহার করা হবেASC

আসুন একটি ক্যোয়ারী লিখি যা ঊর্ধ্বক্রম অনুসারে দাম অনুসারে সাজানো পণ্যের তালিকা ফিরিয়ে দেবে। এই অনুরোধটি দেখতে কেমন হবে:

SELECT * FROM product
ORDER BY price ASC
LIMIT 10

আমরা নিম্নলিখিত ক্যোয়ারী ফলাফল পেতে:

আইডি নাম ব্র্যান্ড মূল্য গণনা
2 চেয়ার আইকেইএ ৫.০০ 45
8 বাতি এলজি 15.00 100
1 টেবিল আইকেইএ 20.00 15
6 তাক বোশ ২৫.০০ 114
এগারো আর্মচেয়ার বোশ 44.00 8
4 বিছানা আইকেইএ 75.00 10
3 সোফা আইকেইএ 80.00 10
12 ফুলদানি স্মার্টফ্লাওয়ার 99.00 9
9 ড্রেসার আইকেইএ 99.00 10
13 দাঁড়ান আইকেইএ 100.00 10

আমরা একই ফলাফল পাব যদি আমরা সাজানোর ক্রম নির্দিষ্ট না করি - আমরা শব্দটি এড়িয়ে যাব ASC

4.5 একাধিক কলাম জুড়ে অর্ডার করুন৷

অপারেটর ORDER BYআপনাকে বিভিন্ন কলাম দ্বারা ফলাফল বাছাই করার অনুমতি দেয়। প্রথম কলামে প্রচুর ডুপ্লিকেট উপাদান থাকলে এটি খুব কার্যকর হতে পারে। এই অপারেটরের সাধারণ ফর্ম নিম্নরূপ:

ORDER BY column 1 order 1, column 2 order 2, column 3 order 3

অন্য কথায়, যদি প্রথম কলাম অনুসারে বাছাই করার পরে আপনার কাছাকাছি বেশ কয়েকটি অভিন্ন মান থাকে, তবে সেগুলি দ্বিতীয় কলাম দ্বারা বাছাই করা হয়, ইত্যাদি।

আসুন একটি প্রশ্ন লিখি যা আমাদের পণ্যগুলিকে ব্র্যান্ড অনুসারে বাছাই করবে এবং একই ব্র্যান্ডের পণ্যগুলির জন্য - তাদের সংখ্যার ক্রমানুসারে। এই অনুরোধটি দেখতে কেমন হবে:

SELECT * FROM product
ORDER BY brand ASC, count
DESC

আমরা নিম্নলিখিত ক্যোয়ারী ফলাফল পেতে:

আইডি নাম ব্র্যান্ড মূল্য গণনা
6 তাক বোশ ২৫.০০ 114
5 আলমারি বোশ 125.00 15
10 প্লেট বোশ 199.00 10
এগারো আর্মচেয়ার বোশ 44.00 8
2 চেয়ার আইকেইএ ৫.০০ 45
1 টেবিল আইকেইএ 20.00 15
9 ড্রেসার আইকেইএ 99.00 10
13 দাঁড়ান আইকেইএ 100.00 10
4 বিছানা আইকেইএ 75.00 10
3 সোফা আইকেইএ 80.00 10
8 বাতি এলজি 15.00 100
7 টেলিভিশন এলজি 350.00 4
12 ফুলদানি স্মার্টফ্লাওয়ার 99.00 9

টেবিলটি ঘনিষ্ঠভাবে দেখুন - এর সারিগুলি ব্র্যান্ডের নাম (বর্ণানুক্রমিক ক্রম) অনুসারে বাছাই করা হয়েছে এবং একই ব্র্যান্ডের নামের সারিগুলি পণ্যের সংখ্যা দ্বারা নিম্নোক্ত ক্রমে (শেষ কলাম) অনুসারে সাজানো হয়েছে।