مقاله ای از مجموعه ای در مورد ایجاد یک پروژه جاوا (لینک به سایر مواد در پایان است). هدف آن تجزیه و تحلیل فناوری های کلیدی است که نتیجه آن نوشتن یک ربات تلگرام است. مقالات قبلی و تحلیل تکالیف در پایگاه های اطلاعاتی: 1 , 2 , 3 . به همه کسانی که صبر و تحمل داشتند، به همه کسانی که برای مقاله چهارم همراه من بودند - آفرین. همانطور که می گویند، کسی که راه می رود می تواند بر جاده مسلط شود. این هفته آخرین مقاله در مورد پایگاه داده منتشر خواهد شد که در آن در مورد انواع روابط و پیوستن صحبت خواهیم کرد . اما قبل از اینکه به اطلاعات جدید بپردازیم، بیایید تکالیف خود را بررسی کنیم... من واقعاً احساس می کردم معلم هستم. با من عصبانی نباشید: من تحصیلات آموزشی ندارم، مطمئناً. از آنجایی که هفته گذشته بررسی دقیق کنترل از راه دور سهم بزرگی از مطالب را به خود اختصاص داد، تصمیم گرفتم تجزیه و تحلیل تکالیف خود و بررسی مطالب جدید را به دو بخش تقسیم کنم.
سپس ما فقط باید پرس و جو خود را بر اساس جمعیت مرتب کنیم و فقط یک رکورد را برداریم. برای انجام این کار، باید یک عملگر LIMIT در انتهای اسکریپت اضافه کنید و مقدار مورد نیاز را مشخص کنید: $ SELECT * FROM country ORDER BY جمعیت DESC LIMIT 1;
همه چیز در اینجا جالب تر است، زیرا درخواست پیچیده تر، اما جالب تر نیز خواهد بود. از آنجایی که ما هنوز هیچ ایده ای درباره پیوستن ها نداریم، فقط می توانیم شناسه کشور را دریافت کنیم: $ SELECT country_id, SUM(population) FROM city GROUP BY country_id ORDER BY SUM(جمعیت) DESC LIMIT 1; در اینجا ما یک کار جالب انجام دادیم - مجموع جمعیت همه شهرهای شناخته شده در هر کشور را جمع آوری کردیم، بر اساس این مجموع مرتب شده و اولین عنصر را انتخاب کردیم. خب عالیه؟ من خوشحالم :D بعد از این شما بلافاصله احساس می کنید که یک معلم پرس و جو هستید ... (البته نه برای مدت طولانی))
در این مورد، همه چیز دقیقاً یکسان خواهد بود. تنها تفاوت این است که مرتب سازی معکوس خواهد شد - این همه چیز است. بنابراین، من به سادگی درخواست ها را می نویسم:
$ SELECT country_id، SUM (جمعیت) FROM شهر GROUP BY country_id ORDER BY SUM (جمعیت) LIMIT 1;
$ SELECT * از کشور ترتیب بر اساس جمعیت LIMIT 1; و نتیجه را خودتان ببینید!
اینجا بازم مشخصات فنی یه جورایی دقیق نیست انگار مدیر نوشته... چرا این تصمیم رو گرفتم؟ چون معلوم نیست در کدام جدول کار کنیم. اما این طبیعی است: به سادگی هیچ وظیفه ای وجود ندارد که در آن همه چیز بلافاصله واضح و قابل درک باشد. بنابراین، باید وظایف را با دقت بخوانید و اگر سؤالی دارید، فوراً آنها را بپرسید! درست است، یک تذکر. با در نظر گرفتن داده هایی که در پایگاه داده داریم، با استفاده از داده های شهرها جستجو می کنیم. برای انجام این کار، عبارت زیر را بنویسید: $ SELECT country_id, AVG(population) FROM city GROUP BY country_id; اینجا ساده است: ما از تابع AVG استفاده می کنیم و رکوردهای شهرمان را بر اساس کشور گروه بندی می کنیم.
در صورت درخواست تغییر جزئی در اینجا وجود خواهد داشت. قبل از انجام گروه بندی باید فیلتر را بر اساس نام اضافه کنیم. من مثل همه دانش آموزان قبل از انتشار این مقاله تکالیف خود را انجام می دهم و می دانم که این مشکل بدون پیوستن حل نمی شود. چرا؟ چون علاوه بر شناسه کشوری باید نام او را هم بگیریم. و این کار را نمی توان بدون پیوستن دو جدول به یک رکورد انجام داد. بنابراین، البته، من این کار را انجام خواهم داد، اما این قسمت من است...))) من می خواستم با استفاده از LIKE در درخواست، یک کار ایجاد کنم...) $ SELECT ci.country_id, AVG(ci.population ) از شهر ci INNER عضویت کشور co ON ci.country_id = co.id جایی که co.name مانند "%a" GROUP BY country_id; اینجا چه اتفاقی افتاد؟ ابتدا، ما رکوردها را از جداول شهر و کشور با استفاده از کلید خارجی country_id، که بر اساس نام کشورها فیلتر شده به طوری که به "a" ختم میشوند، متصل کردیم و تنها پس از آن بر اساس country_id گروهبندی شدند.
در اینجا ما فقط باید از تابع COUNT استفاده کنیم و فیلتر را روی جمعیت اضافه کنیم: $ SELECT COUNT(*) از کشور WHERE جمعیت > 4000000; در نتیجه متوجه می شویم که 3 کشور این چنینی وجود دارد آیا این درست است؟ بله، فقط مولداوی از این نقطه عطف عبور نمی کند.
برای این کار باید از عملگر ORDER BY که قبلاً می شناسیم استفاده کنیم. اما به خاطر داشته باشید که به طور پیش فرض مرتب سازی به ترتیب طبیعی است. برای اعداد این به این معنی است که به ترتیب صعودی مرتب شده است، برای رشته ها به این معنی است که از اولین کاراکترها مرتب شده است. اگر به مرتب سازی نزولی نیاز داریم، به معکوس طبیعی نیاز داریم: $ SELECT * FROM کشور ORDER BY جمعیت DESC;
اینجاست که آگاهی از چیستی نظم طبیعی مفید خواهد بود. از آنجایی که پیش فرض است، برای ما یک تکه کیک است: $ SELECT * FROM کشور ORDER BY name;
در واقع، تجزیه و تحلیل تکالیف
من قطعا خوشحالم که افرادی هستند که PD را انجام می دهند و در مورد آن صحبت می کنند. این باحال است! من تا آنجا که ممکن است مطمئن هستم که خواندن ساده بدون تثبیت دانش راهی به ناکجاآباد است. بنابراین، هر کسی که انجام داده یا تلاش کرده است - احترام بگذارد. اجازه دهید شرایط وظایف را به شما یادآوری کنم:- عملگر HAVING را درک کنید و یک پرس و جوی مثال برای جداول مثال ما بنویسید. اگر نیاز به اضافه کردن چند فیلد یا مقادیر بیشتری برای واضح تر شدن آن دارید، آنها را اضافه کنید. اگر کسی می خواهد، راه حل نمونه خود را در نظرات بنویسد - تا اگر وقت داشتم، آن را نیز بررسی کنم.
- MySQL Workbench را برای کار با پایگاه داده از طریق UI نصب کنید. من فکر می کنم ما قبلاً تمرین کافی از کنسول را داشته ایم. به پایگاه داده متصل شوید. اگر از چیز دیگری برای کار با پایگاه داده استفاده می کنید، از این کار صرف نظر کنید. در اینجا و بیشتر من فقط از MySQL Workbench استفاده خواهم کرد.
- درخواست های دریافت را با استفاده از داده های ما بنویسید:
- کوچکترین/پرجمعیت ترین کشور؛
- میانگین تعداد ساکنان کشور؛
- میانگین تعداد ساکنان کشورهایی که نام آنها با "الف" ختم می شود.
- تعداد کشورهایی که بیش از چهار میلیون نفر جمعیت دارند؛
- دسته بندی کشورها با کاهش تعداد ساکنان
- کشورها را بر اساس نام به ترتیب طبیعی مرتب کنید.
بیایید در مورد داشتن صحبت کنیم
دانستن اپراتور Having می تواند به شما کمک کند بیش از یک مصاحبه را انجام دهید که در آن مشکلات SQL وجود دارد. بنابراین، درک آن بسیار مهم است. اتفاقاً نمی توانید از شرایط برای جمع آوری توابع (SUM، MIN، MAX، AVG) استفاده کنید. به علاوه برای فیلدهایی که گروه بندی شده اند از HAVING استفاده می شود. چه مفهومی داره؟ به عنوان مثال، اگر بخواهیم کشورهایی را بدست آوریم که میانگین تعداد ساکنان شهرها بیش از 50000 نفر باشد، نمی توانیم بدون استفاده از HAVING انجام دهیم. همانطور که من متوجه شدم، این کار به این دلیل انجام می شود که پس از اجرای دستور WHERE تجمیع اتفاق می افتد و اضافه کردن مقادیر تجمعی به آن غیرممکن است که بعداً محاسبه می شود. حتی اگر تا اینجا نظرات من چیز زیادی به درک مطلب اضافه نکرده باشد، می توانید به سادگی این را به عنوان یک واقعیت بپذیرید و با آن همراه شوید. در برنامه نویسی، اغلب اتفاق می افتد که اگر چیزی در یک لحظه نامشخص باشد، ممکن است به این معنی باشد که مغز هنوز آن را هضم نکرده است. با این فکر بخواب، روز بعد همه چیز روشن تر خواهد شد.نصب MySQL Workbench
در اینجا و بیشتر از Workbench برای پرس و جوها استفاده خواهم کرد. آنچه را که برای نصب و ایجاد اتصال به پایگاه داده نیاز دارید به شما نشان خواهم داد. این محصول اوراکل است، بنابراین شما فقط باید به وب سایت آنها بروید و نسخه و سیستم عامل مورد نظر خود را انتخاب کنید. برای انجام این کار، این پیوند را دنبال کنید : در اینجا می توانید دقیقاً سیستم عامل مورد نیاز خود را انتخاب کنید. روی دانلود کلیک کنید ، اما به جای دانلود، این پنجره را خواهیم دید: گم نشوید، فقط به دنبال دکمه ای به نام نه، تشکر، فقط دانلود من را شروع کنید ، دانلود شروع می شود. چرا این کار را می کنند؟ احتمالاً برای اینکه افراد بیشتری در آنها ثبت نام کنند، این برای ما مهم نیست. پس از دانلود موفق، فایل نصب را اجرا کنید. در MacOS به این صورت است: فقط نماد را بکشید و تمام، نصب کامل شد. به سختی نصب MySQL نیست، درست است؟ یا تازه به آن عادت کرده ایم و با تجربه تر شده ایم ؛) بخش دوم این کار برقراری ارتباط با پایگاه داده ما است. چه چیزی برای این مورد نیاز است؟ روی علامت مثبت کنار MySQL Connections کلیک کنید: در پنجره ای که ظاهر می شود، داده های لازم را وارد کنید:- نام اتصال - نام اتصال ما. اسامی را تا حد امکان واضح بنویسید تا بعداً برای شناسایی مشکلی پیش نیاید. من نام این اتصال را JRTB_DB می دهم .
- نام میزبان - قبلاً به عنوان محلی 127.0.0.1 (معروف به localhost) تنظیم می شود . در مورد ما، هیچ چیز نیاز به تغییر ندارد، زیرا پایگاه داده روی رایانه نصب شده است، اما اگر پایگاه داده در جای دیگری باشد، باید میزبان (IP دستگاهی که پایگاه داده روی آن در حال اجرا است) تغییر کند.
- نام کاربری - در صورت لزوم می توانید کاربر خود را نیز مشخص کنید. اگر چیزی در این کلید اضافه نکرده اید، آن را بدون تغییر بگذارید.
- رمز عبور - روی Store در Keychain کلیک کنید و دقیقاً رمز عبوری را که برای خود تعیین کرده اید تنظیم کنید. من همه چیز را ساده گذاشتم - ریشه .
GO TO FULL VERSION