JavaRush /جاوا بلاگ /Random-UR /ہم ڈیٹا بیس اور SQL زبان کا تجزیہ کرتے ہیں۔ (حصہ 6 - حتمی...

ہم ڈیٹا بیس اور SQL زبان کا تجزیہ کرتے ہیں۔ (حصہ 6 - حتمی تفویض کی جانچ پڑتال) - "A سے Z تک جاوا پروجیکٹ"

گروپ میں شائع ہوا۔
جاوا پروجیکٹ بنانے کے سلسلے میں ایک مضمون (دیگر مواد کے لنکس آخر میں ہیں)۔ اس کا مقصد کلیدی ٹیکنالوجیز کا تجزیہ کرنا ہے، نتیجہ ٹیلی گرام بوٹ لکھنا ہے۔ یہ حصہ ڈیٹا بیس پر آخری کام کا تجزیہ پر مشتمل ہے۔ "A سے Z تک جاوا پروجیکٹ": ہم ڈیٹا بیس اور SQL زبان کا تجزیہ کرتے ہیں۔  حصہ 6 - حتمی کام کی جانچ کرنا - 1سلام، پیارے قارئین۔ آج ہم ڈیٹا بیس پر آخری مضمون سے کام کا تجزیہ کریں گے۔ یہ دلچسپ ہے کیونکہ یہ درمیانی سطح پر انٹرویوز کے لیے ہے۔ یعنی، اس کام کے بعد آپ پہلے ہی انٹرویو کے لیے جا سکتے ہیں، اور آپ کامیابی کے ساتھ کم از کم اس کا کچھ حصہ پاس کر لیں گے جو متعلقہ ڈیٹا بیس سے متعلق ہے۔ میں جانتا ہوں کہ یہ مضمون کتنا ضروری ہو سکتا ہے، اور اس لیے میں اسے مفید اور دلچسپ بنانے کے لیے اپنے تمام تجربے لگاؤں گا۔ اور اگر آپ مضمون کے بیچ میں نہیں سوتے ہیں تو اس کا مطلب یہ ہوگا کہ میں نے اپنا مقصد حاصل کرلیا۔ میں پورے کام کو نہیں دہراؤں گا: میں ہر کام کو مکمل کرنے سے پہلے اسے ترچھی شکل میں انڈر لائن کرتے ہوئے اس کا حوالہ دوں گا۔ میں امید کرتا ہوں کہ ہر کوئی جو اس مضمون کو پڑھتا ہے وہ اپنے ڈیٹا بیس میں تمام سوالات کو چلاتا ہے اور ایک ہی چیز حاصل کرتا ہے۔ اس سے کاروبار کو زیادہ سے زیادہ فائدہ پہنچے گا۔ اور میں اس سوچ سے تھوڑا زیادہ خوش ہوں گا کہ میں نے اپنے مشکل کام میں کسی کی مدد کی)

ورزش 1

درج ذیل فیلڈز کے ساتھ 'سٹوڈنٹ' ٹیبل بنانے کے لیے ایس کیو ایل اسکرپٹ لکھیں: آئی ڈی (بنیادی کلید)، نام، آخری نام، ای میل (منفرد)۔ ہم پہلے ہی یہ کر چکے ہیں، اس لیے کوئی مسئلہ نہیں ہونا چاہیے۔ اسکرپٹ میں آپ کو بنیادی کلید اور ایک منفرد فیلڈ کی وضاحت کرنے کی ضرورت ہے جو بنیادی کلید سے مختلف ہو۔ سب سے پہلے، آئیے اس کام کے لیے ایک نیا ڈیٹا بیس بنائیں: $ CREATE DATABASE final_task; اور آئیے اس ڈیٹا بیس کو استعمال کریں: $USE final_task; ایک بار جب ماحول قائم ہو جائے اور کام چلانے کے لیے تیار ہو جائے، ہم درج ذیل اسکرپٹ لکھ سکتے ہیں: $ CREATE TABLE طالب علم ( id INT AUTO_INCREMENT، نام VARCHAR(40)، آخری_نام VARCHAR(50)، ای میل VARCHAR(100)، بنیادی کلید ( id)، منفرد (ای میل)؛ اب تک، اس کے مقابلے میں کوئی نئی چیز نہیں ہے جو ہم پہلے سے گزر چکے ہیں۔ کوئی تبصرہ غیر ضروری ہے، آئیے آگے بڑھتے ہیں۔

ٹاسک 2-3

درج ذیل فیلڈز کے ساتھ 'کتاب' ٹیبل بنانے کے لیے ایک SQL اسکرپٹ لکھیں: id، عنوان (id + title = بنیادی کلید)۔ 'طالب علم' اور 'کتاب' کو 'طالب علم' ایک سے کئی 'کتاب' کے تعلق سے جوڑیں۔ آئیے اسے تیز تر اور زیادہ آسان بنانے کے لیے دو کاموں کو ایک میں جوڑ دیں۔ میں نے پہلے ہی پچھلے مضامین میں غیر ملکی کلید کو الگ سے شامل کرنے کے بارے میں پہلے ہی بات کی ہے۔ شامل کرنے کے لیے، ہمیں یہ یاد رکھنے کی ضرورت ہے کہ ہم کنکشن کیسے بناتے ہیں اور کس کے ذریعے۔ پچھلا مضمون آپ کی مدد کرے گا، اور پھر اسکرپٹ یہ ہے: $ CREATE TABLE book ( id INT, title VARCHAR(100), student_id INT DEFAULT NULL, PRIMARY KEY (id, title), FOREIGN KY (student_id) حوالہ جات طالب علم (id )) اس آسان طریقے سے، ہم نے اپنی ٹیبل PRIMARY KEY (id، title) کے لیے ایک جامع کلید شامل کی ، اب کلید بالکل وہی جوڑی ہوگی۔ اس کا مطلب ہے کہ ٹیبل میں ایک سے زیادہ ایک جیسی id فیلڈ ویلیو ہو سکتی ہے۔ اور بالکل وہی عنوان کے لیے۔

ٹاسک 4

درج ذیل فیلڈز کے ساتھ 'ٹیچر' ٹیبل بنانے کے لیے ایس کیو ایل اسکرپٹ لکھیں: آئی ڈی (بنیادی کلید)، نام، آخری نام، ای میل (منفرد)، موضوع۔ ہم سوالات کے لیے اپنا ڈیٹا بیس تیار کرنا جاری رکھتے ہیں، ایک ٹیچر ٹیبل بنائیں: $ CREATE TABLE استاد (ID INT AUTO_INCREMENT، نام VARCHAR(30)، آخری_نام VARCHAR(30)، ای میل VARCHAR(100)، موضوع VARCHAR(40)، بنیادی کلید ( id)، منفرد (ای میل)؛ اب تک یہ مشکل نہیں ہے، ٹھیک ہے؟ تین کام پہلے ہی ختم ہو چکے ہیں!

ٹاسک 5

'طالب علم' اور 'استاد' کو 'طالب علم' کے کئی سے کئی اساتذہ کے رشتے سے جوڑیں۔ اب یہ زیادہ دلچسپ ہے! ہم نے ابھی آخری بار اس کے بارے میں بات کی تھی۔ میں آپ کو یاد دلاتا ہوں کہ اسے حاصل کرنے کے لیے کیا ضروری ہے: آپ کو ایک انٹرمیڈیٹ ٹیبل بنانے کی ضرورت ہے جس میں طالب علم اور استاد کے جوڑے محفوظ ہوں۔ اس کی مدد سے کئی سے کئی رشتہ بنانا ممکن ہو گا۔ لہذا، آئیے ایک ٹیبل بناتے ہیں students_x_techers ۔ نام دینے کا طریقہ کھلا ہے اور یہ بھی ہو سکتا ہے: student_teacher ۔ $ ٹیبل بنائیں طلباء_x_ٹیچرز (طالب علم_آئی ڈی INT NOT NULL، استاد_id INT NOT NULL، بنیادی کلید (student_id، teacher_id)، فارن کلید (student_id) حوالہ جات طالب علم (id)، FOREIGN KEY (teacher_ID))؛ REFEIGN KEY (teacher_ID) جیسا کہ آپ دیکھ سکتے ہیں، سب کچھ واضح اور مربوط طریقے سے کیا جاتا ہے. ہمارے پاس دو غیر ملکی کلیدوں کے لیے ایک جامع کلید ہے: student_id اور استاد_id۔ کیوں ایک غیر ملکی چابی بھی؟ ہمارے لیے اس بات کا یقین کرنے کے لیے کہ طالب علم اور اساتذہ کی میزوں میں ریکارڈ کیے جانے والے جوڑوں کے لیے ریکارڈ موجود ہے۔

ٹاسک 6

'طالب علم' کو منتخب کریں جن کے آخری نام میں 'oro' ہے، مثال کے طور پر 'Sidorov'، 'Voronovsky'۔ اسے ہمارے لیے دلچسپ اور بصری بنانے کے لیے، میں پہلے کئی طلبہ کو شامل کرنے کا مشورہ دیتا ہوں، تاکہ ان میں سے کچھ اس درخواست کے لیے موزوں ہوں، اور کچھ نہیں۔ لہذا، آئیے ان لوگوں کو لکھتے ہیں جنہیں درخواست کے نتیجے میں شامل کیا جانا چاہئے : $INSERT INTO طالب علم (نام، آخری_نام، ای میل) VALUES ('Ivan', 'Sidorov', 'ivan.sidorov@gmail.com'); $ INSERT INTO طالب علم (نام, last_name, email) VALUES ('Nikolay', 'Voronovsky', 'nikolay.voronovsky@gmail.com'); اور جن کو داخل نہیں ہونا چاہیے: $ INSERT INTO طالب علم (نام, last_name, email) VALUES ('Roman', 'Fortny', 'roman.fortny@gmail.com'); $ INSERT INTO طالب علم (نام, last_name, email) VALUES('Kostya', 'Petrov', 'kostya.petrov@gmail.com'); آئیے نتیجہ چیک کرتے ہیں، طلباء کے ٹیبل میں ڈیٹا کی فہرست دیکھیں: $ SELECT * طالب علم سے؛ اور ہمیں ملتا ہے: "A سے Z تک جاوا پروجیکٹ": ہم ڈیٹا بیس اور SQL زبان کا تجزیہ کرتے ہیں۔  حصہ 6 - حتمی کام کی جانچ کرنا - 2کل چار ریکارڈز ہیں، ان میں سے دو کو فٹ ہونا چاہیے، اور دو کو نہیں ہونا چاہیے۔ درخواست کے لیے تمام ڈیٹا تیار کرنے کے بعد، ہم خود اس کام کے لیے ایک درخواست کر سکتے ہیں: $ SELECT * طالب علم جہاں کا آخری نام '%oro%' کی طرح؛ "A سے Z تک جاوا پروجیکٹ": ہم ڈیٹا بیس اور SQL زبان کا تجزیہ کرتے ہیں۔  حصہ 6 - حتمی کام کی جانچ کرنا - 3نتیجے کے طور پر، آئیون اور نکولائی فہرست کے ذریعے چلا گیا.

ٹاسک 7

اگلا کام، ہم پڑھتے ہیں: 'طالب علم' ٹیبل سے تمام آخری نام ('last_name') اور ان کی تکرار کی تعداد منتخب کریں۔ اس بات پر غور کریں کہ ڈیٹا بیس میں نام موجود ہیں۔ نزولی ترتیب میں مقدار کے لحاظ سے ترتیب دیں۔ یہ اس طرح نظر آنا چاہئے:
آخری_نام مقدار
پیٹروف 15
ایوانوف 12
سیدوروف 3
وضاحت کے لیے، آپ کو مزید ڈیٹا شامل کرنے کی ضرورت ہے۔ مزید اڈو کے بغیر، آئیے پیٹرووس، ایوانوف اور سیڈوروف کو شامل کرتے ہیں، جو اپنے رشتہ داروں کو نہیں جانتے ہیں؛) میں کوئی ای میل ایڈریس ایجاد نہیں کروں گا، میں اسے صرف نئے اندراجات سے خارج کردوں گا۔ آئیے درج ذیل کمانڈ کو 12 بار چلائیں: $ INSERT INTO student (name, last_name) VALUES ('Ivan', 'Ivanov'); آئیے 15 پیٹرو شامل کریں: $ INSERT INTO طالب علم (نام، آخری_نام) VALUES ('Petr', 'Petrov'); اور دو Sidorovs (ہمارے پاس پہلے سے ہی ایک ہے))): $ INSERT INTO طالب علم (نام, last_name) VALUES ('Sidor', 'Sidorov'); ڈیٹا اب تیار ہے۔ اس طرح کا ڈیٹا حاصل کرنے کے لیے، آپ کو ایک گروپنگ کرنے کی ضرورت ہے؛ ایک گروپنگ کرنے کے لیے، آپ کو گروپ بائے آپریٹر استعمال کرنے کی ضرورت ہے، اور آپ کو یہ آخری_نام فیلڈ کے ذریعے کرنا ہوگا۔ آپ یہ بھی دیکھ سکتے ہیں کہ تکرار کی تعداد کو quantity کے طور پر نامزد کیا گیا ہے ، اور یہاں آپ کو یہ بھی یاد رکھنے کی ضرورت ہے کہ SQL میں عرفی نام کیسے بنایا جائے: $ SELECT last_name، COUNT(*) کو مقدار کے طور پر طالب علم کے گروپ کے ذریعہ آخری_نام کے ذریعہ ترتیب دیں COUNT(*) DESC ; "A سے Z تک جاوا پروجیکٹ": ہم ڈیٹا بیس اور SQL زبان کا تجزیہ کرتے ہیں۔  حصہ 6 - حتمی کام کی جانچ کرنا - 4تو میں نے اسے پیٹرو کے ساتھ زیادہ کیا - یہ 16 نکلا))

ٹاسک 8

حالت: 'طالب علم' سے سب سے اوپر 3 سب سے زیادہ دہرائے جانے والے ناموں کو منتخب کریں۔ نزولی ترتیب میں مقدار کے لحاظ سے ترتیب دیں۔ یہ اس طرح نظر آنا چاہئے:
نام مقدار
سکندر 27
سرجی 10
پیٹر 7
اوہ، اس مقصد کے لیے ہمارے پاس پہلے سے ہی آئیون، پیٹرز اور سیڈورس موجود ہیں۔ اس لیے ان کو شامل کرنے کی ضرورت نہیں ہے۔ ہم پہلے ہی جانتے ہیں کہ کس طرح ترتیب دینا ہے۔ صرف ایک چیز جس کے بارے میں ہم نے آج بات نہیں کی وہ یہ ہے کہ ریکارڈ کی ایک مخصوص تعداد کو کیسے منتخب کیا جائے۔ یہ ڈیٹا بیس کے مسائل کے پچھلے حلوں میں پہلے ہی ظاہر ہو چکا ہے۔ جن لوگوں نے نہیں پڑھا وہ ضرور پڑھیں۔ باقی کے لیے، آئیے سیدھے نقطہ کی طرف آتے ہیں: $ SELECT name، COUNT(*) مقدار کے طور پر طالب علم کے گروپ سے نام کے لحاظ سے ORDER BY COUNT(*) DESC LIMIT 3؛ "A سے Z تک جاوا پروجیکٹ": ہم ڈیٹا بیس اور SQL زبان کا تجزیہ کرتے ہیں۔  حصہ 6 - حتمی کام کی جانچ کرنا - 5جیسا کہ استفسار سے دیکھا جا سکتا ہے، اگر آپ کو SELECT استفسار میں آپریٹرز کی ترتیب معلوم ہے، تو اس طرح کے استفسار کو انجام دینے میں کوئی مسئلہ نہیں ہوگا۔ اور یہ کام ابھی تک ہم پر ہے۔ اور جو علم پہلے پیش کیا گیا تھا وہ اس مسئلہ کے حل کے لیے کافی ہے۔

ٹاسک 9

کام کی شرط: وہ 'طالب علم' منتخب کریں جس کے پاس 'کتاب' اور اس سے وابستہ 'ٹیچر' کی سب سے زیادہ تعداد ہو۔ نزولی ترتیب میں مقدار کے لحاظ سے ترتیب دیں۔ یہ اس طرح نظر آنا چاہئے:
استاد کا آخری_نام طالب علم کا آخری_نام کتاب کی مقدار
پیٹروف سیدوروف 7
ایوانوف سمتھ 5
پیٹروف کانکاوا ۔ 2
تو، یہ کام واضح طور پر پچھلے ایک سے زیادہ مشکل ہے، ٹھیک ہے؟ کوئی تعجب کی بات نہیں: یہ جوائن کی طرح بو آ رہا ہے... اور ایک سے زیادہ) سب سے پہلے، ہمیں یہ سمجھنے کی ضرورت ہے کہ کیا کرنا ہے... یہ واضح ہے کہ کتاب کی مقدار کو گروپ بندی کی ضرورت ہے۔ لیکن کیا؟ اور ہم ان کو کیوں گروپ کریں؟ استفسار میں تین میزیں، گروپ بندی، اور چھانٹی شامل ہیں۔ اس حقیقت کو دیکھتے ہوئے کہ جہاں کتابیں نہیں ہیں وہ ریکارڈ نہیں دکھائے گئے ہیں، اس کا مطلب ہے کہ آپ کو اندرونی شمولیت اختیار کرنے کی ضرورت ہے۔ ہم بائیں جانب شمولیت کی درخواست بھی کریں گے تاکہ اس میں کوئی پریشانی نہ ہو۔ اور کئی آپشنز ہیں۔ پہلی چیز جو ہم کرتے ہیں وہ ہے تین ٹیبلز کو ایک ریکارڈ میں جوڑنا۔ اس کے بعد، ہم طالب علم کے حساب سے گروپ بناتے ہیں اور اس میں استاد کا نام شامل کرتے ہیں۔ ہم کیا منتخب کریں گے؟ استاد، طالب علم کا نام اور کتابوں کی تعداد۔ آئیے درخواست کے لیے ڈیٹا شامل کریں:
  • تین اساتذہ؛
  • دس کتابیں؛
  • دو طلباء کو تین اساتذہ سے جوڑیں۔

تین اساتذہ

$ INSERT INTO استاد(last_name) VALUES ('Matvienko'); $ INSERT INTO استاد(last_name) VALUES ('Shevchenko'); $ INSERT INTO استاد(last_name) VALUES ('Vasilenko');

10 کتابیں۔

میں پہلی اور دوسری جماعت کے طلباء کی شناخت لوں گا۔ میں ان کے ساتھ کتابیں منسلک کروں گا۔ چونکہ AUTO_INCREMENT سیٹ نہیں کیا گیا تھا، اس لیے ہر بار نئی ID نہ لکھنے کے لیے، آپ کو درج ذیل کام کرنے کی ضرورت ہے: $ ALTER TABLE book MODIFY id INT NOT NULL AUTO_INCREMENT; اس کے بعد، پہلے طالب علم کے لیے کتابیں شامل کریں: $ INSERT INTO book (title, student_id) VALUES('book1', 1); $ INSERT INTO book (title, student_id) VALUES('book2', 1); $ INSERT INTO book (title, student_id) VALUES('book3', 1); $ INSERT INTO book (title, student_id) VALUES('book4', 1); $ INSERT INTO book (title, student_id) VALUES('book5', 1); $ INSERT INTO book (title, student_id) VALUES('book6', 1); اور دوسرے طالب علم کے لیے کتابیں: $ INSERT INTO book (title, student_id) VALUES('book7', 2); $ INSERT INTO book (title, student_id) VALUES('book8', 2); $ INSERT INTO book (title, student_id) VALUES('book9', 2); $ INSERT INTO book (title, student_id) VALUES('book10', 2);

استاد اور طالب علم کے رابطے

ایسا کرنے کے لیے، طالب علم_x_ٹیچرز کو ٹیبل میں شامل کریں: $ INSERT INTO students_x_teachers VALUES (1,1); طلباء_x_ٹیچرز کے قدروں میں $INSERT(1,2); طلباء_x_اساتذہ کے قدروں میں $INSERT(2,3);

آئیے درخواست پر عمل درآمد کریں۔

ہم پہلا مرحلہ کرتے ہیں - ہم تین ٹیبلز کو ایک ریکارڈ میں جوڑتے ہیں: $ SELECT * FROM استاد tch INNER JOIN students_x_teachers st_x_tch ON tch.id = st_x_tch.teacher_id اندرونی شمولیت طالب علم st ON st_x_tch.student_id = st.id INNER b JOIN کتاب .id = b.student_id; "A سے Z تک جاوا پروجیکٹ": ہم ڈیٹا بیس اور SQL زبان کا تجزیہ کرتے ہیں۔  حصہ 6 - حتمی کام کی جانچ کرنا - 6یقینا، ہمارے پاس ابھی تک کوئی ریکارڈ نہیں ہے، تاہم، ہم دیکھ سکتے ہیں کہ ہم نے کامیابی کے ساتھ تین ٹیبلز کو جوڑ دیا ہے۔ اب ہم کتابوں کی گروپ بندی، چھانٹی اور ان فیلڈز کو شامل کرتے ہیں جن کی ہمیں ضرورت ہے: $ SELECT tch.last_name, st.last_name, st.id, COUNT(*) طالب علم سے کتابوں کے طور پر st INNER جوائن کریں b ON st.id = b.student_id INNER طلباء_x_ٹیچرز میں شامل ہوں لیکن ہمیں ایس کیو ایل میں ایک خرابی اور درج ذیل جواب ملتا ہے: ایرر کوڈ: 1055۔ SELECT فہرست کا اظہار #1 GROUP BY شق میں نہیں ہے اور اس میں غیر جمع شدہ کالم 'final_task.tch.last_name' ہے جو کہ GROUP BY میں کالموں پر فعال طور پر منحصر نہیں ہے۔ شق ان عناصر کو لے کر کام نہیں کرتی کیونکہ استاد اور طالب علم کے درمیان کئی سے زیادہ رشتہ ہوتا ہے۔ اور یہ سچ ہے: ہمیں فی طالب علم صرف ایک استاد نہیں مل سکتا۔ تو آئیے دوسری طرف چلتے ہیں۔ آئیے ویو ایس کیو ایل نامی کچھ استعمال کریں۔ آئیڈیا کیا ہے: ہم ایک علیحدہ نظریہ بناتے ہیں، جو کہ ایک نیا ٹیبل ہے، پہلے ہی اس گروپنگ کے ساتھ جس کی ہمیں ضرورت ہے۔ اور اس ٹیبل میں ہم اساتذہ کے ضروری نام شامل کریں گے۔ لیکن ہم اس حقیقت کو مدنظر رکھتے ہیں کہ ایک سے زیادہ اساتذہ ہوسکتے ہیں، لہذا اندراجات کو دہرایا جائے گا۔ ایک منظر بنائیں: $ تخلیق کریں طالب علم کی کتابیں بطور SELECT st.last_name,st.id,COUNT(*) بطور کتابیں طالب علم سے st INNER جوائن کریں کتاب b پر st.id=b.student_id GROUP BY st.id ORDER BY Books DESC; اگلا، ہم اس منظر کے ساتھ ایک سادہ جدول کے طور پر کام کرتے ہیں جس میں تین فیلڈز ہیں: طالب علم کا آخری_نام، طالب علم_آئی ڈی اور کتابوں کی گنتی۔ طالب علم کی ID کے مطابق، ہم ایک استاد کو دو جوائنز کے ذریعے بھی شامل کر سکتے ہیں: $SELECT tch.last_name بطور 'استاد'، sbw.last_name 'طالب علم'، sbw.books بطور 'کتابیں' طالب علم کی کتاب سے sbw INNER JOIN students_x_teachers stch ON sbw۔ id = stch.student_id INNER JOIN استاد tch ON tch.id = stch.teacher_id; اور اب نتیجہ یہ ہوگا: "A سے Z تک جاوا پروجیکٹ": ہم ڈیٹا بیس اور SQL زبان کا تجزیہ کرتے ہیں۔  حصہ 6 - حتمی کام کی جانچ کرنا - 7ہاہ! یہ ایک درخواست ہے، ٹھیک ہے؟) یہ توقع کے مطابق نکلا: id=1 والے طالب علم کے پاس چھ کتابیں اور دو اساتذہ ہیں، اور id=2 والے طالب علم کے پاس چار کتابیں اور ایک استاد ہے۔

ٹاسک 10

شرط: اس 'استاد' کو منتخب کریں جس کے تمام 'طلبہ' میں 'کتابیں' سب سے زیادہ ہوں۔ نزولی ترتیب میں مقدار کے لحاظ سے ترتیب دیں۔ یہ اس طرح نظر آنا چاہئے:
استاد کا آخری_نام کتاب کی مقدار
پیٹروف 9
ایوانوف 5
یہاں ہم پچھلے کام سے تیار شدہ درخواست استعمال کرسکتے ہیں۔ ہمیں اس میں تبدیلی کرنے کی کیا ضرورت ہے؟ ہمارے پاس یہ ڈیٹا پہلے ہی موجود ہے، ہمیں صرف ایک اور گروپنگ شامل کرنے اور آؤٹ پٹ ڈیٹا سے طالب علم کا نام ہٹانے کی ضرورت ہے۔ لیکن پہلے، آئیے نتیجہ کو مزید دلچسپ بنانے کے لیے ایک اور طالب علم کو استاد میں شامل کریں۔ ایسا کرنے کے لیے، ہم لکھتے ہیں: $INSERT INTO students_x_teachers VALUES (2, 1); اور خود سوال: $ SELECT tch.last_name بطور 'ٹیچر'، SUM(sbw.books) بطور 'Books' طالب علم کی کتاب سے sbw INNER JOIN students_x_teachers stch ON sbw.id = stch.student_id INNER JOIN استاد tch ON stchid = stch. ٹیچر_آئی ڈی گروپ بذریعہ tch.id؛ نتیجے کے طور پر، ہمیں ملتا ہے: "A سے Z تک جاوا پروجیکٹ": ہم ڈیٹا بیس اور SQL زبان کا تجزیہ کرتے ہیں۔  حصہ 6 - حتمی کام کی جانچ کرنا - 8وہ استاد واسیلینکو کے پاس 10 کتابیں ہیں، اور شیوچینکو کے پاس 6...)

ٹاسک 11

شرط: ایک 'استاد' کا انتخاب کریں جس کے تمام 'طلبہ' کے لیے 'کتابوں' کی تعداد 7 اور 11 کے درمیان ہو۔ نزولی ترتیب میں مقدار کے لحاظ سے ترتیب دیں۔ یہ اس طرح نظر آنا چاہئے:
استاد کا آخری_نام کتاب کی مقدار
پیٹروف گیارہ
سیدوروف 9
ایوانوف 7
یہ وہ جگہ ہے جہاں ہم HAVING استعمال کریں گے۔ ہم نے اس کے بارے میں بات کی۔ درخواست بالکل پہلے کی طرح ہوگی، صرف آپ کو یہ شرط شامل کرنے کی ضرورت ہے کہ کتابوں کی تعداد ایک خاص حد میں ہوگی۔ اور جیسا کہ میں نے پچھلے مضامین میں کہا تھا، جب ہمیں گروپنگ اور/یا ایگریگیشن فنکشنز کے دوران فلٹرنگ کرنے کی ضرورت ہوتی ہے، تو ہمیں HAVING : $ SELECT tch.last_name بطور 'استاد'، SUM(sbw.books) کو بطور 'کتابیں' استعمال کرنے کی ضرورت ہوتی ہے۔ طالب علم کی کتاب sbw اندرونی شمولیت طلباء_x_teachers stch ON sbw.id = stch.student_id اندرونی جوائن استاد کے ساتھ tch ON tch.id = stch.teacher_id گروپ BY tch.id کے پاس SUM(sbw.books) > 6 اور SUM(sbw.2) <sbw. میں نے جو حصہ شامل کیا ہے اس پر روشنی ڈالی ہے۔ اور، حقیقت میں، متوقع نتیجہ: "A سے Z تک جاوا پروجیکٹ": ہم ڈیٹا بیس اور SQL زبان کا تجزیہ کرتے ہیں۔  حصہ 6 - حتمی کام کی جانچ کرنا - 9صرف واسیلینکو نے اس دور کو پاس کیا))

ٹاسک 12

حالت: تمام 'استاد' اور 'طالب علم' کے تمام 'آخری_نام' اور 'نام' کو فیلڈ 'ٹائپ' (طالب علم یا استاد) کے ساتھ پرنٹ کریں۔ حروف تہجی کے لحاظ سے 'last_name' سے ترتیب دیں۔ یہ اس طرح نظر آنا چاہئے:
آخری_نام قسم
ایوانوف طالب علم
کانکاوا ۔ استاد
سمتھ طالب علم
سیدوروف استاد
پیٹروف استاد
یعنی، ہمیں دو آؤٹ پٹ کو یکجا کرنے کی ضرورت ہے، اور یہ بالکل وہی ہے جس کے لیے UNION ہے۔ دوسرے لفظوں میں، ہم طلباء اور اساتذہ سے ریکارڈ لیں گے اور ایک ساتھ پرنٹ کریں گے: $ SELECT last_name، 'teacher' بطور ٹیچر یونین سب منتخب کریں last_name، 'طالب علم' کو طالب علم سے ORDER BY last_name; "A سے Z تک جاوا پروجیکٹ": ہم ڈیٹا بیس اور SQL زبان کا تجزیہ کرتے ہیں۔  حصہ 6 - حتمی کام کی جانچ کرنا - 10اور اساتذہ اور طلباء دونوں ہوں گے۔ ایسا لگتا ہے کہ سب کچھ آسان ہے، لیکن یہ اس وقت ہے جب ہم پہلے سے ہی نتیجہ دیکھتے ہیں. اور اس لیے آپ کو دو چیزوں کا اندازہ لگانے کی ضرورت ہے۔

ٹاسک 13

حالت: موجودہ 'طالب علم' ٹیبل میں ایک کالم 'ریٹ' شامل کریں، جو اس کورس کو محفوظ کرے گا جس میں طالب علم فی الحال ہے (1 سے 6 تک عددی قدر)۔ ALTER TABLE طالب علم کو ADD Constraint check_rate چیک کریں (ریٹ > 0 اور شرح <7)؛ یہاں ہم ALTER TABLE اور CHECK کے ذریعے ایک فیلڈ شامل کر رہے ہیں تاکہ اس فیلڈ کی حد 1 سے 6 تک مقرر کی جا سکے۔

ٹاسک 14

شرط: اس چیز کی ضرورت نہیں ہے، لیکن یہ ایک پلس ہوگا۔ ایک فنکشن لکھیں جو تمام 'کتابوں' سے گزرے گا اور تمام 'ٹائٹلز' کو کوما سے الگ کر کے آؤٹ پٹ کرے گا۔ یہاں آپ کو درخواست کے نتیجے میں صرف ایک لائن واپس کرنے کی ضرورت ہے، جس میں کتابوں کے تمام عنوانات ہوں گے۔ یہاں پھر مجھے گوگل کرنا پڑا۔ ایک ایسا فنکشن ہے - GROUP_CONCAT ، جس کے ساتھ یہ بہت آسانی سے کیا جاتا ہے: $ SELECT GROUP_CONCAT(title) from book; "A سے Z تک جاوا پروجیکٹ": ہم ڈیٹا بیس اور SQL زبان کا تجزیہ کرتے ہیں۔  حصہ 6 - حتمی کام کی جانچ کرنا - 11اور بس...)) تمام 14 کام تیار ہیں۔

نتائج

Uhhh... یہ آسان نہیں تھا۔ یہ دلچسپ تھا۔ کام اس کے قابل تھے، مجھے یقین سے زیادہ ہے۔ جب ہم یہ کام کر رہے تھے، تو ہم نے بہت سی چیزوں کو دیکھا جو پہلے معلوم نہیں تھیں:
  • ایس کیو ایل ویو
  • GROUP_CONCAT
  • یونین
اور اسی طرح. میں نے جو کچھ کیا اسے پڑھنے اور دہرانے کی طاقت رکھنے والے ہر ایک کا شکریہ۔ کون جانتا ہے کہ درخواستوں کو کس طرح بہتر بنانا ہے - تبصرے میں لکھیں، میں انہیں ضرور پڑھوں گا)

سیریز کے تمام مواد کی فہرست اس مضمون کے شروع میں ہے۔

تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION