Narzędzia użytkownika

Narzędzia witryny


notatki:mysql_world

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Nowa wersja
Poprzednia wersja
notatki:mysql_world [2025/05/13 15:45] – utworzono administratornotatki:mysql_world [2025/05/16 17:26] (aktualna) administrator
Linia 1: Linia 1:
-====== Przykłady zapytań MySQL na bazie World ======+~~NOTOC~~ 
 +====== MySQL: Przykłady zapytań na bazie World ======
  
 {{:notatki:pasted:20250513-154333.png}}\\ {{:notatki:pasted:20250513-154333.png}}\\
Linia 5: Linia 6:
  
 Baza world jest to przykładowa baza jeżeli wybierzemy to będzie instalowana razem ze środowiskiem MySQL community. Baza world jest to przykładowa baza jeżeli wybierzemy to będzie instalowana razem ze środowiskiem MySQL community.
 +
 +Zapytania można wykonać i zaobserwować wyniki za pomocą aplikacji: https://wiki.ostrowski.net.pl/php_mysql/world.php
  
 ===== Wyświetlenie 10 największych krajów według populacji ===== ===== Wyświetlenie 10 największych krajów według populacji =====
Linia 96: Linia 99:
 JOIN EnglishSpeakingCountries esc ON c.Code = esc.CountryCode JOIN EnglishSpeakingCountries esc ON c.Code = esc.CountryCode
 ORDER BY c.Population DESC; ORDER BY c.Population DESC;
 +</code>
 +
 +===== Kraj z największym średnim zaludnieniem miast =====
 +(czyli gdzie średnia liczba mieszkańców na miasto jest największa)
 +<code sql>
 +SELECT co.Name, AVG(ci.Population) AS AvgCityPopulation
 +FROM Country co
 +JOIN City ci ON co.Code = ci.CountryCode
 +GROUP BY co.Code
 +HAVING COUNT(ci.ID) > 1
 +ORDER BY AvgCityPopulation DESC
 +LIMIT 1;
 +</code>
 +===== Miasta w krajach, których populacja jest powyżej średniej, i w których oficjalnym językiem jest angielski =====
 +
 +<code sql>
 +SELECT ci.Name AS City, co.Name AS Country, ci.Population
 +FROM City ci
 +JOIN Country co ON ci.CountryCode = co.Code
 +WHERE co.Population > (
 +    SELECT AVG(Population) FROM Country
 +)
 +AND co.Code IN (
 +    SELECT CountryCode FROM CountryLanguage
 +    WHERE Language = 'English' AND IsOfficial = 'T'
 +);
 +</code>
 +===== Lista krajów, które mają mniej miast niż średnia liczba miast na kraj, ale powyżej średniej populacji =====
 +
 +<code sql>
 +SELECT co.Name, COUNT(ci.ID) AS CityCount, co.Population
 +FROM Country co
 +LEFT JOIN City ci ON co.Code = ci.CountryCode
 +GROUP BY co.Code
 +HAVING COUNT(ci.ID) < (
 +    SELECT AVG(CityCount)
 +    FROM (
 +        SELECT CountryCode, COUNT(*) AS CityCount
 +        FROM City
 +        GROUP BY CountryCode
 +    ) AS SubCityCounts
 +)
 +AND co.Population > (
 +    SELECT AVG(Population) FROM Country
 +);
 +</code>
 +===== Wszystkie oficjalne języki krajów, których stolica ma populację powyżej 1 miliona =====
 +
 +<code sql>
 +SELECT DISTINCT cl.Language, co.Name AS Country
 +FROM Country co
 +JOIN CountryLanguage cl ON co.Code = cl.CountryCode
 +WHERE cl.IsOfficial = 'T'
 +AND co.Capital IN (
 +    SELECT ID FROM City WHERE Population > 1000000
 +);
 +</code>
 +===== Kraje z największą różnicą między populacją kraju a jego największym miastem =====
 +
 +<code sql>
 +SELECT co.Name, co.Population - MAX(ci.Population) AS PopulationDiff
 +FROM Country co
 +JOIN City ci ON co.Code = ci.CountryCode
 +GROUP BY co.Code
 +ORDER BY PopulationDiff DESC
 +LIMIT 10;
 +</code>
 +===== Dla każdego kontynentu: kraj o największej średniej populacji miast =====
 +
 +<code sql>
 +SELECT Continent, Name, AvgCityPop
 +FROM (
 +    SELECT co.Continent, co.Name, AVG(ci.Population) AS AvgCityPop,
 +           RANK() OVER (PARTITION BY co.Continent ORDER BY AVG(ci.Population) DESC) AS rnk
 +    FROM Country co
 +    JOIN City ci ON co.Code = ci.CountryCode
 +    GROUP BY co.Code
 +) AS ranked
 +WHERE rnk = 1;
 +</code>
 +===== Kraje, w których oficjalnie mówi się więcej niż jednym językiem =====
 +<code sql>
 +SELECT co.Name, COUNT(*) AS OfficialLanguages
 +FROM Country co
 +JOIN CountryLanguage cl ON co.Code = cl.CountryCode
 +WHERE cl.IsOfficial = 'T'
 +GROUP BY co.Code
 +HAVING COUNT(*) > 1;
 +</code>
 +===== Kraje, w których mówi się językiem, którego nie zna żaden sąsiad z tego samego kontynentu =====
 +
 +To wymaga analizy języków w kontekście kontynentu i unikalności – trochę "sztuczne", ale ciekawe:
 +<code sql>
 +SELECT DISTINCT c1.Name, cl1.Language
 +FROM Country c1
 +JOIN CountryLanguage cl1 ON c1.Code = cl1.CountryCode
 +WHERE cl1.Language NOT IN (
 +    SELECT cl2.Language
 +    FROM Country c2
 +    JOIN CountryLanguage cl2 ON c2.Code = cl2.CountryCode
 +    WHERE c2.Continent = c1.Continent
 +      AND c2.Code != c1.Code
 +)
 +AND cl1.IsOfficial = 'T';
 +</code>
 +===== Średnia populacja miast dla każdego języka urzędowego w krajach, gdzie ten język jest używany =====
 +<code sql>
 +SELECT cl.Language, AVG(ci.Population) AS AvgCityPopulation
 +FROM CountryLanguage cl
 +JOIN Country co ON cl.CountryCode = co.Code
 +JOIN City ci ON co.Code = ci.CountryCode
 +WHERE cl.IsOfficial = 'T'
 +GROUP BY cl.Language
 +ORDER BY AvgCityPopulation DESC;
 +</code>
 +===== Lista krajów, które nie mają żadnych miast w bazie danych =====
 +<code sql>
 +SELECT co.Name
 +FROM Country co
 +LEFT JOIN City ci ON co.Code = ci.CountryCode
 +WHERE ci.ID IS NULL;
 </code> </code>
notatki/mysql_world.1747143900.txt.gz · ostatnio zmienione: 2025/05/13 15:45 przez administrator