Isang artikulo mula sa isang serye tungkol sa paglikha ng isang proyekto ng Java (nasa dulo ang mga link sa iba pang mga materyales). Ang layunin nito ay pag-aralan ang mga pangunahing teknolohiya, ang resulta ay pagsulat ng isang telegram bot. Mga nakaraang artikulo at pagsusuri ng takdang-aralin sa mga database: 1 , 2 , 3 . Sa lahat ng may pasensya at tibay, sa lahat ng sumama sa akin para sa ikaapat na artikulo - magaling. Sabi nga nila, nakakabisado ng naglalakad ang daan. Sa linggong ito ang huling artikulo tungkol sa Mga Database ay ilalabas, kung saan pag-uusapan natin ang tungkol sa mga uri ng mga relasyon at pagsali . But before we deal with the new information, let’s check our homework... I really felt like a teacher. Huwag kang magalit sa akin: Wala akong pedagogical education, sigurado iyon. Dahil noong nakaraang linggo ang isang detalyadong pagsusuri ng remote control ay kinuha ang malaking bahagi ng materyal, nagpasya akong hatiin ang pagsusuri ng araling-bahay at ang pagsusuri ng bagong materyal sa dalawang bahagi.
Тогда необходимо просто отсортировать наш request по населению и взять только одну запись. Для этого дела в конце скрипта нужно добавить оператор LIMIT и указать необходимое количество: $ SELECT * FROM country ORDER BY population DESC LIMIT 1;
Здесь все интереснее, потому что request будет сложнее, но и интереснее. Так How мы еще не имеем понятия о джоинах, можем получить только ID-шник страны: $ SELECT country_id, SUM(population) FROM city GROUP BY country_id ORDER BY SUM(population) DESC LIMIT 1;Здесь мы сделали прикольную вещь — собрали сумму населения всех известных городов по каждой стране, отсортировали по этой сумме и взяли первый элемент. Ну How, здорово? Я вот в восторге :D После такого сразу ощущаешь себя гуру requestов… (ненадолго, конечно))
В этом случае все будет ровно так же. Difference лишь в том, что сортировать будет обратно — и все. Поэтому просто пишу requestы:
$ SELECT country_id, SUM(population) FROM city GROUP BY country_id ORDER BY SUM(population) LIMIT 1;
$ SELECT * FROM country ORDER BY population LIMIT 1; А результат уже посмотрите сами!
Вот опять ТЗ стоит How-то не точно, How будто писал менеджер... Почему я так решил? Потому что неясно, в Howой таблице работать. Но это нормально: задач, в которых будет сразу все понятно и ясно, просто не бывает. Поэтому нужно внимательно вчитываться в задачи, и если есть вопросы — сразу задавать их! Это так, ремарка. С учетом данных, которые есть у нас в БД, будем искать по данным из городов. Для этого пишем следующий request: $ SELECT country_id, AVG(population) FROM city GROUP BY country_id;Здесь все просто: мы используем функцию AVG и группируем наши записи городов по странам.
Здесь будет небольшое изменение по requestу. Нужно добавить фильтрацию по именам, прежде чем мы будем делать группировку. Делаю я домашку, How и все студенты, перед публикацией этой статьи, и понимаю, что без джоинов эту задачу не решить. Почему? Потому что помимо ID-шника страны нам нужно еще получить его Name. А это нельзя сделать без соединения двух таблиц в одну запись. Поэтому я сделаю эту задачу, конечно, но это мой косяк…))) Хотел придумать задачу с использованием LIKE в requestе…) $ SELECT ci.country_id, AVG(ci.population) FROM city ci INNER JOIN country co ON ci.country_id = co.id WHERE co.name LIKE "%a" GROUP BY country_id;What здесь произошло? Вначале мы соединor записи с таблицы city и country по внешнему ключу country_id, отфильтровали по именам стран, чтобы они заканчивались на “a”, и уже потом группировали по country_id.
Здесь нам нужно просто использовать функцию COUNT и добавить фильтрацию на население: $ SELECT COUNT(*) from country WHERE population > 4000000; В результате узнаем, что таких стран 3. Правильно ли это? Да, только Молдова не проходит этот рубеж.
Whatбы сделать это, нужно использовать уже известный нам оператор ORDER BY. Но учтите, что по умолчанию sorting идёт в натуральном порядке. Для чисел это значит, что сортируется по возрастанию, для строк — что начиная с первых символов. Если нам нужна sorting по убыванию, нам нужен обратный от натурального: $ SELECT * FROM country ORDER BY population DESC;
Вот здесь нам и пригодятся знания того, что такое натуральный порядок. Так How он по умолчанию, для нас это проще простого: $ SELECT * FROM country ORDER BY name;
Actually, homework analysis
Talagang natutuwa ako na may mga taong nag-PD at pinag-uusapan ito. Ito ay astig! Sigurado ako hangga't maaari na ang simpleng pagbabasa nang walang pagsasama-sama ng kaalaman ay isang daan patungo sa wala. Samakatuwid, lahat ng gumawa o sinubukang gawin - igalang. Hayaan akong ipaalala sa iyo ang mga kondisyon ng mga gawain:- Unawain ang HAVING operator at magsulat ng isang halimbawang query para sa mga talahanayan mula sa aming halimbawa. Kung kailangan mong magdagdag ng ilang mga patlang o higit pang mga halaga upang gawin itong mas malinaw, idagdag ang mga ito. Kung nais ng sinuman, isulat ang iyong halimbawang solusyon sa mga komento - para masuri ko rin ito kung may oras ako.
- I-install ang MySQL Workbench upang gumana sa database sa pamamagitan ng UI. Sa tingin ko mayroon na kaming sapat na pagsasanay sa pagtatrabaho mula sa console. Kumonekta sa database. Kung gumamit ka ng ibang bagay upang magtrabaho kasama ang database, huwag mag-atubiling laktawan ang gawaing ito. Dito at higit pa ay gagamitin ko lamang ang MySQL Workbench.
- Sumulat ng mga kahilingan para sa resibo gamit ang aming data:
- ang pinakamaliit/pinaka-mataong bansa;
- average na bilang ng mga naninirahan sa bansa;
- average na bilang ng mga naninirahan sa mga bansa na ang mga pangalan ay nagtatapos sa "a";
- ang bilang ng mga bansang may populasyon na higit sa apat na milyon;
- pag-uri-uriin ang mga bansa sa pamamagitan ng pagbaba ng bilang ng mga naninirahan;
- pagbukud-bukurin ang mga bansa ayon sa pangalan sa natural na pagkakasunud-sunod.
Pag-usapan natin ang HAVING
Знание оператора Having может помочь вам пройти не одно собеседование, где будут задачи на SQL. Поэтому понять его крайне важно. Так уж получилось, что использовать условия для агрегирующих функций (SUM, MIN, MAX, AVG) нельзя. К тому же, HAVING используют для полей, которые группируются. What это значит? Например, если мы хотим получить страны, где среднее количество жителей в городах больше 50 000 жителей, без использования HAVING нам не обойтись. Как я понимаю, сделано это потому, что агрегация происходит уже после того, How выполнится оператор WHERE и нельзя добавить в него значения агрегации, которые будут подсчитаны позже. Даже если пока что мои суждения не сильно добавляют понимания, можно просто принять это How факт и идти с ним. В программировании часто получается так, что если в один момент что-то непонятно, это вполне может означать, что мозг просто еще не переварил это. Переспите с этой мыслью, и на следующий день все станет яснее.Установка MySQL Workbench
Здесь и далее я буду использовать именно Workbench для requestов. Покажу, что нужно для установки и создания соединения с базой данных. Это продукт от Oracle, поэтому нужно просто пойти на их сайт и выбрать нужную версию и операционную систему. Для этого перейдем по этой ссылке:Здесь вы можете выбрать именно ту операционную систему, которая вам нужна. Нажимаем Download, но instead of загрузки мы увидим такое окно:Не теряемся, просто ищем кнопочку с названием No thanks, just start my download, и начнется скачивание. Зачем они это делают? Наверное, чтобы больше регистрировалось у них, нам это не важно. После успешной загрузки запускаем установочный файл. На MacOS это выглядит так:Просто переносим значок — и все, установка завершена. Уже не так сложно, How установка самого MySQL, правда? Или уже просто привыкли и стали более опытные ;) Вторая часть этой задачи — установить соединение с нашей базой данных. What для этого нужно? Нажимаем плюсик рядом с MySQL Connections:В появившемся окне вводим необходимые данные:- Connection Name — Name нашего соединения. Пишите максимально понятные имена, чтобы потом не было проблем с идентификацией. Я этому соединению даю Name JRTB_DB;
- Hostname — уже будет задан How локальный 127.0.0.1 (он же localhost). В нашем случае ничего менять не нужно, так How БД установлена на компьютере, а вот если БД где-то в другом месте, то и хост (ip той машины, на которой запущена БД), соответственно, изменить нужно;
- Username — также по необходимости можно задавать своего юзера. Если вы не добавляли ничего в этом ключе, оставьте его неизменным;
- Password — нажимаем Store in Keychain и задаем именно тот пароль, который вы задавали у себя. Я оставил все по-простому — root.
GO TO FULL VERSION