JavaRush /جاوا بلاگ /Random-SD /اسان ڊيٽابيس ۽ SQL ٻولي جو تجزيو ڪريون ٿا. (حصو 6 - حتمي ...

اسان ڊيٽابيس ۽ SQL ٻولي جو تجزيو ڪريون ٿا. (حصو 6 - حتمي اسائنمينٽ جي جانچ ڪندي) - "جاوا پروجيڪٽ A کان Z تائين"

گروپ ۾ شايع ٿيل
جاوا پروجيڪٽ ٺاهڻ بابت هڪ سيريز مان هڪ مضمون (ٻين مواد جي لنڪ آخر ۾ آهن). ان جو مقصد اهم ٽيڪنالاجي جو تجزيو ڪرڻ آهي، نتيجو هڪ ٽيليگرام بوٽ لکڻ آهي. ھن حصي ۾ ڊيٽابيس تي آخري ڪم جو تجزيو شامل آھي. "جاوا پروجيڪٽ A کان Z تائين": اسان ڊيٽابيس ۽ SQL ٻولي جو تجزيو ڪريون ٿا.  حصو 6 - آخري ڪم کي جانچڻ - 1سلام، پيارا پڙهندڙ. اڄ اسان ڊيٽابيس تي آخري آرٽيڪل مان ڪم جو تجزيو ڪنداسين. اهو دلچسپ آهي ڇو ته اهو وچولي سطح تي انٽرويو لاء ارادو ڪيو ويو آهي. اهو آهي، هن ڪم کان پوء توهان اڳ ۾ ئي هڪ انٽرويو لاء وڃي سگهو ٿا، ۽ توهان ڪاميابيء سان گهٽ ۾ گهٽ حصو پاس ڪري سگهو ٿا جيڪو تعلق رکندڙ ڊيٽابيس سان لاڳاپيل آهي. مون کي خبر آهي ته هي مضمون ڪيترو ضروري ٿي سگهي ٿو، ۽ تنهن ڪري مان پنهنجو سمورو تجربو ان کي ڪارائتو ۽ دلچسپ بنائڻ ۾ وجهندس. ۽ جيڪڏھن توھان آرٽيڪل جي وچ ۾ ننڊ نه ڪريو، ان جو مطلب اھو ٿيندو ته مون پنھنجو مقصد حاصل ڪيو. مان پوري ڪم کي نه ورجائيندس: مان هر ڪم کي مڪمل ڪرڻ کان اڳ ان جو حوالو ڏيندس، ان کي ترڪيب ۾ هيٺ لکندي. مون کي اميد آهي ته هرڪو جيڪو هن آرٽيڪل کي پڙهي ٿو انهن جي ڊيٽابيس ۾ سڀني سوالن کي هلائيندو ۽ ساڳيو شيء حاصل ڪندو. اهو واپار کي وڌ ۾ وڌ فائدو ڏيندو. ۽ مان ان سوچ کان ٿورو خوش ٿيندس ته مون اسان جي مشڪل ڪم ۾ ڪنهن جي مدد ڪئي)

ورزش 1

هيٺ ڏنل شعبن سان 'شاگرد' جدول ٺاهڻ لاءِ SQL اسڪرپٽ لکو: id (پرائمري ڪيئي)، نالو، آخري_نام، اي ميل (منفرد). اسان اڳ ۾ ئي ڪري چڪا آهيون، تنهنڪري ڪو به مسئلو نه هجڻ گهرجي. اسڪرپٽ ۾ توهان کي پرائمري ڪي ۽ هڪ منفرد فيلڊ بيان ڪرڻ جي ضرورت آهي جيڪا پرائمري کان مختلف هجي. پهرين، اچو ته هن ڪم لاءِ هڪ نئون ڊيٽابيس ٺاهي: $ 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 KEY (student_id) حوالو شاگرد (id )؛ ھن سادي طريقي سان، اسان پنھنجي جدول جي PRIMARY KEY (id، title) لاءِ ھڪڙي جامع ڪيئي شامل ڪئي آھي ، ھاڻي چاٻي بلڪل ھوندي. هن جو مطلب اهو آهي ته ٽيبل ۾ هڪ کان وڌيڪ هڪجهڙائي واري فيلڊ قدر ٿي سگهي ٿي. ۽ بلڪل ساڳيو عنوان لاء.

ڪم 4

هيٺ ڏنل شعبن سان 'استاد' ٽيبل ٺاهڻ لاءِ SQL اسڪرپٽ لکو: id (پرائمري ڪيئي)، نالو، آخري_نالو، اي ميل (منفرد)، مضمون. اسان سوالن لاءِ پنهنجو ڊيٽابيس تيار ڪرڻ جاري رکون ٿا، هڪ ٽيچر ٽيبل ٺاهيو: $ CREATE TABLE استاد( id INT AUTO_INCREMENT، نالو VARCHAR(30)، آخري_نام VARCHAR(30)، اي ميل VARCHAR(100)، موضوع VARCHAR(40)، PRIMARY KEY ( id)، منفرد (اي ميل))؛ ايترو پري اهو ڏکيو ناهي، صحيح؟ ٽي ڪم اڳ ۾ ئي ختم ٿي ويا آهن!

ڪم 5

ڳنڍيو ’شاگرد‘ ۽ ’استاد‘ سان ’شاگرد‘ سان ڪيترن ئي استادن سان تعلق. هاڻي اهو وڌيڪ دلچسپ آهي! اسان صرف هن آخري وقت بابت ڳالهايو. اچو ته مان توهان کي ياد ڏياريان ته هن کي حاصل ڪرڻ لاءِ ڇا گهربل آهي: توهان کي هڪ وچولي ٽيبل ٺاهڻ جي ضرورت آهي جيڪا شاگردن ۽ استادن جي جوڙي کي محفوظ ڪري. ان جي مدد سان، اهو ممڪن ٿيندو ته ڪيترن ئي کان گهڻن تعلق پيدا ڪرڻ. تنهن ڪري، اچو ته هڪ ٽيبل ٺاهيو students_x_techers . نالو ڏيڻ جو طريقو کليل آهي ۽ اهو پڻ ٿي سگهي ٿو: student_teacher . $ CREATE TABLE students_x_teachers ( student_id INT NOT NULL , teacher_id INT NOT NULL , PRIMARY KEY (student_id , teacher_id ) , FOREIGN KEY (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، اي ميل) VALUES ('رومن'، 'Fortny'، 'roman.fortny@gmail.com')؛ $ INSERT INTO شاگرد (نالو، last_name، email) VALUES('Kostya', 'Petrov', 'kostya.petrov@gmail.com'); اچو ته نتيجو چيڪ ڪريو، شاگردن جي ٽيبل ۾ ڊيٽا جي فهرست ڏسو: $ SELECT * FROM شاگرد؛ ۽ اسان حاصل ڪريون ٿا: "جاوا پروجيڪٽ A کان Z تائين": اسان ڊيٽابيس ۽ SQL ٻولي جو تجزيو ڪريون ٿا.  حصو 6 - آخري ڪم کي جانچڻ - 2مجموعي طور تي چار رڪارڊ آهن، انهن مان ٻه مناسب هجڻ گهرجن، ۽ ٻه نه هجڻ گهرجن. درخواست لاءِ سمورو ڊيٽا تيار ڪرڻ کان پوءِ، اسان پاڻ ئي ٽاسڪ لاءِ درخواست ڪري سگھون ٿا: $ SELECT * FROM Student WHERE last_name LIKE '%oro%'; "جاوا پروجيڪٽ A کان Z تائين": اسان ڊيٽابيس ۽ SQL ٻولي جو تجزيو ڪريون ٿا.  حصو 6 - آخري ڪم کي جانچڻ - 3نتيجي طور، Ivan ۽ Nikolai فهرست جي ذريعي ويا.

ڪم 7

اڳيون ڪم، اسين پڙهون ٿا: 'شاگردن' جي ٽيبل مان چونڊيو سڀئي آخري نالا ('last_name') ۽ انهن جي ورجائي جو تعداد. غور ڪريو ته ڊيٽابيس ۾ نالا آهن. مقدار جي لحاظ سان ترتيب ڏنل ترتيب ۾. اهو هن طرح ڏسڻ گهرجي:
آخري نالو مقدار
پيٽروف 15
ايوانوف 12
سدوروف 3
وضاحت لاء، توهان کي وڌيڪ ڊيٽا شامل ڪرڻ جي ضرورت آهي. اڳتي وڌڻ کان سواءِ، اچو ته پيٽروفس، ايوانوف ۽ سدوروف کي شامل ڪريون، جن کي سندن رشتي جي خبر نه آهي؛) مان ڪو اي ميل پتو نه ٺاهيندس، مان صرف ان کي نئين داخلائن مان خارج ڪندس. اچو ته ھيٺئين ڪمانڊ کي 12 ڀيرا ھلايون: $ INSERT INTO student (name, last_name) VALUES ('Ivan', 'Ivanov'); اچو ته شامل ڪريون 15 Petrovs: $ INSERT INTO student (name, last_name) VALUES ('Petr', 'Petrov'); ۽ ٻه Sidorovs (اسان وٽ اڳ ۾ ئي هڪ آهي))): $ INSERT INTO شاگرد (نالو، آخري_نالو) VALUES ('Sidor', 'Sidorov'); ڊيٽا هاڻي تيار آهي. اهڙي ڊيٽا حاصل ڪرڻ لاءِ، توهان کي هڪ گروپ ڪرڻ جي ضرورت آهي؛ هڪ گروهه ڪرڻ لاءِ، توهان کي استعمال ڪرڻ جي ضرورت آهي گروپ پاران آپريٽر، ۽ توهان کي اهو ڪرڻ جي ضرورت آهي آخري_نام واري فيلڊ ذريعي. توهان اهو پڻ نوٽيس ڪري سگهو ٿا ته ورجائي جو تعداد مقرر ڪيو ويو آهي مقدار جي طور تي ، ۽ هتي توهان کي ياد رکڻ جي ضرورت آهي ته SQL ۾ عرف ڪيئن ٺاهيو وڃي: $ SELECT last_name، COUNT(*) quantity FROM students GROUP by last_name ORDER BY COUNT(*) DESC ؛ "جاوا پروجيڪٽ A کان Z تائين": اسان ڊيٽابيس ۽ SQL ٻولي جو تجزيو ڪريون ٿا.  حصو 6 - آخري ڪم کي جانچڻ - 4تنهن ڪري مون ان کي پيٽروفس سان وڌايو - اهو نڪتو 16))

ڪم 8

حالت: 'شاگرد' مان مٿيان 3 سڀ کان وڌيڪ ورجايل نالا چونڊيو. مقدار جي لحاظ سان ترتيب ڏنل ترتيب ۾. اهو هن طرح ڏسڻ گهرجي:
نالو مقدار
سڪندر 27
سرجي 10
پيٽر 7
اوه، ان مقصد لاءِ اسان وٽ اڳ ۾ ئي ايوان، پيٽرس ۽ سيڊورس موجود آهن. تنهن ڪري ان کي شامل ڪرڻ جي ڪا ضرورت ناهي. اسان اڳ ۾ ئي ڄاڻون ٿا ته ڪيئن ترتيب ڏيو. صرف هڪ شيء جيڪا اسان اڄ جي باري ۾ نه ڳالهايو آهي اهو آهي ته هڪ مخصوص نمبر کي ڪيئن چونڊيو وڃي. اهو اڳ ۾ ئي ظاهر ٿيو آهي ڊيٽابيس جي مسئلن جي پوئين حلن ۾. انهن لاءِ جن نه پڙهيو آهي، پڙهو. باقي لاءِ، اچو ته سڌو سنئون نقطي تي وڃون: $ SELECT name, COUNT(*) as quantity FROM students GROUP BY name 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 ڪتاب

مان 1st ۽ 2nd شاگردن جي سڃاڻپ وٺندس. مان انهن سان ڪتاب جوڙيندس. جيئن ته AUTO_INCREMENT مقرر نه ڪيو ويو هو، هر دفعي نئين ID نه لکڻ لاءِ، توهان کي هيٺيان ڪرڻ گهرجن: $ ALTER TABLE ڪتاب 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_teachers کي ٽيبل تي شامل ڪريو: $ INSERT INTO students_x_teachers VALUES (1,1); $INSERT INTO students_x_teachers VALUES(1,2); $INSERT INTO students_x_teachers VALUES(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 BOIN ڪتاب .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 شاگرد شامل ٿيو st_x_tch ON st.id = st_x_tch.student_id اندروني شامل ٿيو استاد tch ON tch.id = st_x_tch.teacher_id گروپ طرفان st.id ORDER BY ڪتابن DESC؛ پر اسان کي SQL ۽ ھيٺ ڏنل جواب ۾ ھڪڙي غلطي ملي ٿي: غلطي ڪوڊ: 1055. SELECT لسٽ جو اظهار #1 GROUP BY شق ۾ نه آھي ۽ ان ۾ غير جمع ٿيل ڪالم 'final_task.tch.last_name' شامل آھي جيڪو فعلي طور تي GROUP BY ۾ ڪالمن تي منحصر نه آھي. شق اهو ڪم نٿو ڪري ته انهن عنصرن کي وٺو ڇو ته استاد ۽ شاگرد جي وچ ۾ ڪيترن ئي کان گهڻا تعلق آهي. ۽ اهو سچ آهي: اسان هر شاگرد کي صرف هڪ استاد حاصل نٿا ڪري سگهون. سو اچو ته ٻئي طرف هلون. اچو ته View SQL نالي ڪا شيءِ استعمال ڪريون. ڇا خيال آهي: اسان هڪ الڳ ڏيک ٺاهي رهيا آهيون، جيڪو هڪ نئين جدول آهي، اڳ ۾ ئي اسان کي گهربل گروپن سان. ۽ هن ٽيبل تي اسان استادن جا ضروري نالا شامل ڪنداسين. پر اسان ان حقيقت کي نظر ۾ رکون ٿا ته اتي هڪ کان وڌيڪ استاد ٿي سگهن ٿا، تنهنڪري داخلا ورجائي ويندي. ھڪڙو نظارو ٺاھيو: $ ٺاھيو شاگردن جي ڪتابن کي SELECT st.last_name,st.id,COUNT(*) طور ڪتابن جي طور تي شاگردن کان ڪتاب شامل ڪريو st.id=b.student_id گروپ طرفان st.id ORDER BY DESC؛ اڳيون، اسان هن ڏيک سان هڪ سادي جدول جي طور تي ڪم ڪريون ٿا جنهن ۾ ٽي شعبا آهن: شاگردن جو آخري نالو، شاگرد_آئڊ ۽ ڪتابن جي ڳڻپ. شاگردن جي ID جي مطابق، اسان استاد کي ٻن جوائن ذريعي پڻ شامل ڪري سگھون ٿا: $ SELECT tch.last_name as 'استاد'، sbw.last_name 'Student'، sbw.books as 'Books' from students book sbw INNER JOIN students_x_teachers stch ON sbw. id = stch.student_id اندروني شامل ٿيو استاد 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) 'ڪتاب' طور شاگردن جي ڪتاب مان sbw اندروني شامل ڪريو students_x_teachers stch ON sbw.id = stch.student_id اندروني شامل ڪريو استاد tch ON tch. استاد_ID گروپ tch.id طرفان؛ نتيجي طور، اسان حاصل ڪريون ٿا: "جاوا پروجيڪٽ A کان Z تائين": اسان ڊيٽابيس ۽ SQL ٻولي جو تجزيو ڪريون ٿا.  حصو 6 - آخري ڪم کي جانچڻ - 8استاد Vasilenko وٽ 10 ڪتاب آهن، ۽ Shevchenko وٽ 6 ...)

ڪم 11

حالت: هڪ ’استاد‘ چونڊيو جنهن جي سڀني ’شاگردن‘ لاءِ ’ڪتابن‘ جو تعداد 7 ۽ 11 جي وچ ۾ هجي. مقدار جي لحاظ سان ترتيب ڏنل ترتيب ۾. اهو هن طرح ڏسڻ گهرجي:
استاد جو نالو ڪتاب جو مقدار
پيٽروف يارنهن
سدوروف 9
ايوانوف 7
هي آهي جتي اسان استعمال ڪنداسين HAVING. اسان هن جي باري ۾ ڳالهايو. گذارش بلڪل ساڳي ئي هوندي جيئن اڳي هئي، صرف توهان کي شرط شامل ڪرڻ جي ضرورت آهي ته ڪتابن جو تعداد هڪ خاص حد ۾ هوندو. ۽ جيئن مون پوئين مضمونن ۾ چيو آھي، جڏھن اسان کي گروپنگ ۽/يا ايگريگيشن ڪمن دوران فلٽرنگ ڪرڻ جي ضرورت آھي، اسان کي استعمال ڪرڻ جي ضرورت آھي HAVING : $ SELECT tch.last_name جيئن ’استاد‘، SUM(sbw.books) بطور ’ڪتاب‘ شاگردن جو ڪتاب sbw اندروني شموليت students_x_teachers stch ON sbw.id = stch.student_id اندروني شامل ٿيو استاد tch ON tch.id = stch.teacher_id گروپ tch.id طرفان شامل ڪريو SUM(sbw.books) > 6 ۽ SUM(sbw.2) <sbw. مون شامل ڪيل حصو کي نمايان ڪيو. ۽، حقيقت ۾، متوقع نتيجو: "جاوا پروجيڪٽ A کان Z تائين": اسان ڊيٽابيس ۽ SQL ٻولي جو تجزيو ڪريون ٿا.  حصو 6 - آخري ڪم کي جانچڻ - 9صرف Vasilenko هن دور ۾ گذري ويا))

ڪم 12

حالت: سڀني ’استاد‘ ۽ ’شاگرد‘ جو سڀ ’لاسٽ_نالو‘ ۽ ’نالو‘ فيلڊ ’قسم‘ (شاگرد يا استاد) سان ڇپايو. الفابيٽ جي ترتيب سان ترتيب ڏيو 'last_name'. اهو هن طرح ڏسڻ گهرجي:
آخري نالو قسم
ايوانوف شاگرد
ڪنڪوا استاد
سمٿ شاگرد
سدوروف استاد
پيٽروف استاد
اھو آھي، اسان کي ٻن ٻاھرين کي گڏ ڪرڻ جي ضرورت آھي، ۽ اھو اھو آھي جيڪو يونين لاء آھي. ٻين لفظن ۾، اسين شاگردن کان ۽ استادن کان رڪارڊ کڻنداسين ۽ گڏجي ڇپائينداسين: $ SELECT last_name، 'teacher' ٽائپ طور استاد UNION ALL چونڊيو last_name، 'شاگرد' جي طور تي شاگرد کان ٽائپ ڪريو ORDER BY last_name؛ "جاوا پروجيڪٽ A کان Z تائين": اسان ڊيٽابيس ۽ SQL ٻولي جو تجزيو ڪريون ٿا.  حصو 6 - آخري ڪم کي جانچڻ - 10۽ اتي استاد ۽ شاگرد ٻئي هوندا. اهو لڳي ٿو ته هر شيء سادو آهي، پر اهو آهي جڏهن اسان اڳ ۾ ئي نتيجو ڏسي رهيا آهيون. ۽ تنهنڪري توهان کي ٻه شيون اندازو ڪرڻ جي ضرورت آهي.

ڪم 13

حالت: موجوده 'شاگردن' جي ٽيبل تي هڪ ڪالم 'ريٽ' شامل ڪريو، جيڪو اهو ڪورس محفوظ ڪندو جنهن ۾ شاگرد هن وقت آهي (1 کان 6 تائين عددي قدر). ALTER ٽيبل شاگرد ADD Constraint check_rate چيڪ ڪريو (ريٽ > 0 ۽ شرح <7)؛ هتي اسان ALTER TABLE ذريعي هڪ فيلڊ شامل ڪري رهيا آهيون ۽ چيڪ ڪريو هن فيلڊ تي حد مقرر ڪرڻ لاءِ 1 کان 6 تائين.

ڪم 14

حالت: هي شيون گهربل ناهي، پر هڪ پلس هوندو. اهڙو فنڪشن لکو جيڪو سڀني ’ڪتابن‘ مان نڪري ۽ سڀني ’عنوان‘ کي ڪاما سان الڳ ڪري ڪڍي. هتي توهان کي صرف درخواست جي نتيجي ۾ هڪ قطار واپس ڪرڻ جي ضرورت آهي، جنهن ۾ سڀني ڪتابن جا عنوان هوندا. هتي وري مون کي گوگل ڪرڻو پيو. اتي ھڪڙو فنڪشن آھي - GROUP_CONCAT ، جنھن سان ھي ڪم بلڪل آسان آھي: $ SELECT GROUP_CONCAT(عنوان) ڪتاب مان؛ "جاوا پروجيڪٽ A کان Z تائين": اسان ڊيٽابيس ۽ SQL ٻولي جو تجزيو ڪريون ٿا.  حصو 6 - آخري ڪم کي جانچڻ - 11۽ اهو ئي آهي ...)) سڀ 14 ڪم تيار آهن.

نتيجا

Uhhhh... اهو آسان نه هو. اهو دلچسپ هو. ڪم ان جي قابل هئا، مان پڪ کان وڌيڪ آهيان. جڏهن اسان اهي ڪم ڪري رهيا هئاسين، اسان ڪيترن ئي شين تي ويا هئاسين جيڪي اڳ ۾ معلوم نه هئا:
  • SQL ڏيک
  • GROUP_CONCAT
  • يونين
۽ ايئن. هر ڪنهن جي مهرباني جن کي پڙهڻ ۽ ٻيهر ورجائڻ جي طاقت هئي جيڪو مون ڪيو. ڪير ڄاڻي ٿو ته درخواستن کي ڪيئن بهتر بڻايو وڃي - تبصرن ۾ لکو، مان ضرور انهن کي پڙهندس)

سيريز ۾ سڀني مواد جي هڪ فهرست هن مضمون جي شروعات ۾ آهي.

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