JavaRush /وبلاگ جاوا /Random-FA /ما پایگاه داده ها و زبان SQL را تجزیه و تحلیل می کنیم. (ق...
Roman Beekeeper
مرحله

ما پایگاه داده ها و زبان SQL را تجزیه و تحلیل می کنیم. (قسمت 4 - بررسی تکالیف) - "پروژه جاوا از A تا Z"

در گروه منتشر شد
مقاله ای از مجموعه ای در مورد ایجاد یک پروژه جاوا (لینک به سایر مواد در پایان است). هدف آن تجزیه و تحلیل فناوری های کلیدی است که نتیجه آن نوشتن یک ربات تلگرام است. مقالات قبلی و تحلیل تکالیف در پایگاه های اطلاعاتی: 1 , 2 , 3 . به همه کسانی که صبر و تحمل داشتند، به همه کسانی که برای مقاله چهارم همراه من بودند - آفرین. همانطور که می گویند، کسی که راه می رود می تواند بر جاده مسلط شود. این هفته آخرین مقاله در مورد پایگاه داده منتشر خواهد شد که در آن در مورد انواع روابط و پیوستن صحبت خواهیم کرد . اما قبل از اینکه به اطلاعات جدید بپردازیم، بیایید تکالیف خود را بررسی کنیم... من واقعاً احساس می کردم معلم هستم. با من عصبانی نباشید: من تحصیلات آموزشی ندارم، مطمئناً. از آنجایی که هفته گذشته بررسی دقیق کنترل از راه دور سهم بزرگی از مطالب را به خود اختصاص داد، تصمیم گرفتم تجزیه و تحلیل تکالیف خود و بررسی مطالب جدید را به دو بخش تقسیم کنم."پروژه جاوا از A تا Z": ما پایگاه های داده و زبان SQL را تجزیه و تحلیل می کنیم.  قسمت 4 - بررسی تکالیف - 1

در واقع، تجزیه و تحلیل تکالیف

من قطعا خوشحالم که افرادی هستند که PD را انجام می دهند و در مورد آن صحبت می کنند. این باحال است! من تا آنجا که ممکن است مطمئن هستم که خواندن ساده بدون تثبیت دانش راهی به ناکجاآباد است. بنابراین، هر کسی که انجام داده یا تلاش کرده است - احترام بگذارد. اجازه دهید شرایط وظایف را به شما یادآوری کنم:
  1. عملگر HAVING را درک کنید و یک پرس و جوی مثال برای جداول مثال ما بنویسید. اگر نیاز به اضافه کردن چند فیلد یا مقادیر بیشتری برای واضح تر شدن آن دارید، آنها را اضافه کنید. اگر کسی می خواهد، راه حل نمونه خود را در نظرات بنویسد - تا اگر وقت داشتم، آن را نیز بررسی کنم.
  2. MySQL Workbench را برای کار با پایگاه داده از طریق UI نصب کنید. من فکر می کنم ما قبلاً تمرین کافی از کنسول را داشته ایم. به پایگاه داده متصل شوید. اگر از چیز دیگری برای کار با پایگاه داده استفاده می کنید، از این کار صرف نظر کنید. در اینجا و بیشتر من فقط از MySQL Workbench استفاده خواهم کرد.
  3. درخواست های دریافت را با استفاده از داده های ما بنویسید:
    1. کوچکترین/پرجمعیت ترین کشور؛
    2. میانگین تعداد ساکنان کشور؛
    3. میانگین تعداد ساکنان کشورهایی که نام آنها با "الف" ختم می شود.
    4. تعداد کشورهایی که بیش از چهار میلیون نفر جمعیت دارند؛
    5. دسته بندی کشورها با کاهش تعداد ساکنان
    6. کشورها را بر اساس نام به ترتیب طبیعی مرتب کنید.

بیایید در مورد داشتن صحبت کنیم

دانستن اپراتور Having می تواند به شما کمک کند بیش از یک مصاحبه را انجام دهید که در آن مشکلات SQL وجود دارد. بنابراین، درک آن بسیار مهم است. اتفاقاً نمی توانید از شرایط برای جمع آوری توابع (SUM، MIN، MAX، AVG) استفاده کنید. به علاوه برای فیلدهایی که گروه بندی شده اند از HAVING استفاده می شود. چه مفهومی داره؟ به عنوان مثال، اگر بخواهیم کشورهایی را بدست آوریم که میانگین تعداد ساکنان شهرها بیش از 50000 نفر باشد، نمی توانیم بدون استفاده از HAVING انجام دهیم. همانطور که من متوجه شدم، این کار به این دلیل انجام می شود که پس از اجرای دستور WHERE تجمیع اتفاق می افتد و اضافه کردن مقادیر تجمعی به آن غیرممکن است که بعداً محاسبه می شود. حتی اگر تا اینجا نظرات من چیز زیادی به درک مطلب اضافه نکرده باشد، می توانید به سادگی این را به عنوان یک واقعیت بپذیرید و با آن همراه شوید. در برنامه نویسی، اغلب اتفاق می افتد که اگر چیزی در یک لحظه نامشخص باشد، ممکن است به این معنی باشد که مغز هنوز آن را هضم نکرده است. با این فکر بخواب، روز بعد همه چیز روشن تر خواهد شد.

نصب MySQL Workbench

در اینجا و بیشتر از Workbench برای پرس و جوها استفاده خواهم کرد. آنچه را که برای نصب و ایجاد اتصال به پایگاه داده نیاز دارید به شما نشان خواهم داد. این محصول اوراکل است، بنابراین شما فقط باید به وب سایت آنها بروید و نسخه و سیستم عامل مورد نظر خود را انتخاب کنید. برای انجام این کار، این پیوند را دنبال کنید : "Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 2در اینجا می توانید دقیقاً سیستم عامل مورد نیاز خود را انتخاب کنید. روی دانلود کلیک کنید ، اما به جای دانلود، این پنجره را خواهیم دید: "Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 3گم نشوید، فقط به دنبال دکمه ای به نام نه، تشکر، فقط دانلود من را شروع کنید ، دانلود شروع می شود. چرا این کار را می کنند؟ احتمالاً برای اینکه افراد بیشتری در آنها ثبت نام کنند، این برای ما مهم نیست. پس از دانلود موفق، فایل نصب را اجرا کنید. در MacOS به این صورت است: "Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 4فقط نماد را بکشید و تمام، نصب کامل شد. به سختی نصب MySQL نیست، درست است؟ یا تازه به آن عادت کرده ایم و با تجربه تر شده ایم ؛) بخش دوم این کار برقراری ارتباط با پایگاه داده ما است. چه چیزی برای این مورد نیاز است؟ روی علامت مثبت کنار MySQL Connections کلیک کنید: "Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 5در پنجره ای که ظاهر می شود، داده های لازم را وارد کنید:
  • نام اتصال - نام اتصال ما. اسامی را تا حد امکان واضح بنویسید تا بعداً برای شناسایی مشکلی پیش نیاید. من نام این اتصال را JRTB_DB می دهم .
  • نام میزبان - قبلاً به عنوان محلی 127.0.0.1 (معروف به localhost) تنظیم می شود . در مورد ما، هیچ چیز نیاز به تغییر ندارد، زیرا پایگاه داده روی رایانه نصب شده است، اما اگر پایگاه داده در جای دیگری باشد، باید میزبان (IP دستگاهی که پایگاه داده روی آن در حال اجرا است) تغییر کند.
  • نام کاربری - در صورت لزوم می توانید کاربر خود را نیز مشخص کنید. اگر چیزی در این کلید اضافه نکرده اید، آن را بدون تغییر بگذارید.
  • رمز عبور - روی Store در Keychain کلیک کنید و دقیقاً رمز عبوری را که برای خود تعیین کرده اید تنظیم کنید. من همه چیز را ساده گذاشتم - ریشه .
برای بررسی اینکه آیا اتصال کار می کند، روی Test Connection کلیک کنید : "Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 6خوب، اگر همه چیز به درستی انجام شد، نتیجه دیری نخواهد آمد: "Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 7اکنون یک اتصال ذخیره شده در پایگاه داده داریم و نیازی به ایجاد یک اتصال و پر کردن نداریم. هر بار در نام و رمز عبور. و این شادی به این صورت خواهد بود: "Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 8ما به اتصال جدید ایجاد شده می رویم و پنجره درخواست را می بینیم. برای اطمینان از درست بودن همه چیز، بیایید فهرست پایگاه‌های داده را بررسی کنیم، به پایگاه داده خودمان برویم و تمام داده‌های مربوط به شهرها را دریافت کنیم: "Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 9و در اینجا کارت سفید برای آنچه نیاز داریم دریافت می‌کنیم. بخش اول مسئول اسکریپتی است که وارد می کنیم. بعد، در Result Grid ، نتیجه آخرین عملیات اسکریپت را می بینیم. و Action Output لیستی از عملیات و نتیجه آن را نشان می دهد. یک چیز بسیار مفید، می خواهم به شما بگویم: با کمک آن می توانید سرعت اجرای اسکریپت های خاصی را نظارت کنید. چرا مهم است؟ یکی از رایج ترین مشکلات در سرعت اجرای وظایف در یک برنامه، سرعت اجرای پرس و جو در پایگاه داده است. در اینجا می توانید سریع و راحت آنها را با دست بررسی کنید.

درخواست های لازم را می نویسیم

ما فقط 7 درخواست برای تکمیل داریم، بریم!

  1. پرجمعیت ترین کشور را دریافت کنید. در اینجا می توانید با حیله گری بروید و چندین مسیر را انتخاب کنید:

  • طبق جدول کشور

سپس ما فقط باید پرس و جو خود را بر اساس جمعیت مرتب کنیم و فقط یک رکورد را برداریم. برای انجام این کار، باید یک عملگر LIMIT در انتهای اسکریپت اضافه کنید و مقدار مورد نیاز را مشخص کنید: $ SELECT * FROM country ORDER BY جمعیت DESC LIMIT 1;"Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 10

  • طبق جدول شهر

همه چیز در اینجا جالب تر است، زیرا درخواست پیچیده تر، اما جالب تر نیز خواهد بود. از آنجایی که ما هنوز هیچ ایده ای درباره پیوستن ها نداریم، فقط می توانیم شناسه کشور را دریافت کنیم: $ SELECT country_id, SUM(population) FROM city GROUP BY country_id ORDER BY SUM(جمعیت) DESC LIMIT 1; "Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 11در اینجا ما یک کار جالب انجام دادیم - مجموع جمعیت همه شهرهای شناخته شده در هر کشور را جمع آوری کردیم، بر اساس این مجموع مرتب شده و اولین عنصر را انتخاب کردیم. خب عالیه؟ من خوشحالم :D بعد از این شما بلافاصله احساس می کنید که یک معلم پرس و جو هستید ... (البته نه برای مدت طولانی))

  1. کوچکترین کشور را دریافت کنید. در اینجا می توانید با حیله بروید و چندین مسیر را طی کنید

در این مورد، همه چیز دقیقاً یکسان خواهد بود. تنها تفاوت این است که مرتب سازی معکوس خواهد شد - این همه چیز است. بنابراین، من به سادگی درخواست ها را می نویسم:

  • طبق جدول شهر

$ SELECT country_id، SUM (جمعیت) FROM شهر GROUP BY country_id ORDER BY SUM (جمعیت) LIMIT 1;

  • طبق جدول کشور

$ SELECT * از کشور ترتیب بر اساس جمعیت LIMIT 1; و نتیجه را خودتان ببینید!

  1. میانگین تعداد ساکنان کشور

اینجا بازم مشخصات فنی یه جورایی دقیق نیست انگار مدیر نوشته... چرا این تصمیم رو گرفتم؟ چون معلوم نیست در کدام جدول کار کنیم. اما این طبیعی است: به سادگی هیچ وظیفه ای وجود ندارد که در آن همه چیز بلافاصله واضح و قابل درک باشد. بنابراین، باید وظایف را با دقت بخوانید و اگر سؤالی دارید، فوراً آنها را بپرسید! درست است، یک تذکر. با در نظر گرفتن داده هایی که در پایگاه داده داریم، با استفاده از داده های شهرها جستجو می کنیم. برای انجام این کار، عبارت زیر را بنویسید: $ SELECT country_id, AVG(population) FROM city GROUP BY country_id; "Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 12اینجا ساده است: ما از تابع AVG استفاده می کنیم و رکوردهای شهرمان را بر اساس کشور گروه بندی می کنیم.

  1. میانگین تعداد ساکنان کشورهایی که نام آنها با "الف" ختم می شود.

در صورت درخواست تغییر جزئی در اینجا وجود خواهد داشت. قبل از انجام گروه بندی باید فیلتر را بر اساس نام اضافه کنیم. من مثل همه دانش آموزان قبل از انتشار این مقاله تکالیف خود را انجام می دهم و می دانم که این مشکل بدون پیوستن حل نمی شود. چرا؟ چون علاوه بر شناسه کشوری باید نام او را هم بگیریم. و این کار را نمی توان بدون پیوستن دو جدول به یک رکورد انجام داد. بنابراین، البته، من این کار را انجام خواهم داد، اما این قسمت من است...))) من می خواستم با استفاده از LIKE در درخواست، یک کار ایجاد کنم...) $ SELECT ci.country_id, AVG(ci.population ) از شهر ci INNER عضویت کشور co ON ci.country_id = co.id جایی که co.name مانند "%a" GROUP BY country_id; "Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 13اینجا چه اتفاقی افتاد؟ ابتدا، ما رکوردها را از جداول شهر و کشور با استفاده از کلید خارجی country_id، که بر اساس نام کشورها فیلتر شده به طوری که به "a" ختم می‌شوند، متصل کردیم و تنها پس از آن بر اساس country_id گروه‌بندی شدند.

  1. تعداد کشورهایی که بیش از چهار میلیون نفر جمعیت دارند

در اینجا ما فقط باید از تابع COUNT استفاده کنیم و فیلتر را روی جمعیت اضافه کنیم: $ SELECT COUNT(*) از کشور WHERE جمعیت > 4000000; در نتیجه متوجه می شویم که 3 کشور این چنینی وجود دارد آیا این درست است؟ بله، فقط مولداوی از این نقطه عطف عبور نمی کند.

  1. کشورها را با کاهش تعداد ساکنان مرتب کنید

برای این کار باید از عملگر ORDER BY که قبلاً می شناسیم استفاده کنیم. اما به خاطر داشته باشید که به طور پیش فرض مرتب سازی به ترتیب طبیعی است. برای اعداد این به این معنی است که به ترتیب صعودی مرتب شده است، برای رشته ها به این معنی است که از اولین کاراکترها مرتب شده است. اگر به مرتب سازی نزولی نیاز داریم، به معکوس طبیعی نیاز داریم: $ SELECT * FROM کشور ORDER BY جمعیت DESC;"Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 14

  1. کشورها را بر اساس نام به ترتیب طبیعی مرتب کنید

اینجاست که آگاهی از چیستی نظم طبیعی مفید خواهد بود. از آنجایی که پیش فرض است، برای ما یک تکه کیک است: $ SELECT * FROM کشور ORDER BY name;"Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 15

به جای خروجی

اتفاقاً اندازه راه حل تکلیف بسیار بزرگ می شود، بنابراین استثنا قائل می شویم: من این مقاله را با چک منتشر می کنم و روز جمعه مطالب جدید را با اتصالات و پیوستن منتشر خواهم کرد. با تشکر از همه برای خواندن. تا جمعه!

فهرستی از تمام مواد این مجموعه در ابتدای این مقاله است.

نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION