Skip to content

Commit

Permalink
jobs 1 to 8 + docs
Browse files Browse the repository at this point in the history
  • Loading branch information
Aimen-prog committed Jan 3, 2024
1 parent 9d1d50d commit 926af2e
Show file tree
Hide file tree
Showing 9 changed files with 344 additions and 11 deletions.
78 changes: 67 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,19 +76,75 @@ Cette opération MongoDB insère un document représentant un client avec son no
````
db.client.insert({ nom: 'Client A', commande: ['Product1', 'Product2'] });
````
<hr>

<b>E.</b> Qu’est ce qu’une base de données relationnelle ? Qu’est ce qu’une base de
données non relationnelle ? Donnez la différence entre les deux avec des
exemples d’applications









données non relationnelle ? Donnez la différence entre les deux avec des exemples d’applications



# Job0: Setup

$ sudo mysql<br>
mysql> CREATE DATABASE aimen_dbms;<br>
mysql> SHOW DATABASES;<br>
mysql> USE aimen_dbms;<br>



CREATE TABLE world (<br>
name VARCHAR(255),<br>
region VARCHAR(255),<br>
population DOUBLE,<br>
area FLOAT,<br>
population_density FLOAT,<br>
coastline_ratio FLOAT,<br>
net_migration FLOAT,<br>
infant_mortality FLOAT,<br>
gdp_per_capita INT,<br>
literacy_rate DOUBLE,<br>
phones_per_1000 FLOAT,<br>
arable_percent FLOAT,<br>
crops_percent FLOAT,<br>
other_percent FLOAT,<br>
climate VARCHAR(255),<br>
birthrate FLOAT,<br>
deathrate FLOAT,<br>
agriculture DOUBLE,<br>
industry FLOAT,<br>
service FLOAT<br>
);




LOAD DATA INFILE '/var/lib/mysql-files/countriesoftheworld.csv'<br>
INTO TABLE world<br>
FIELDS TERMINATED BY ',' ENCLOSED BY '"'<br>
LINES TERMINATED BY '\n'<br>
IGNORE 1 ROWS<br>
(@name, @region, @population, @area, @population_density, @coastline_ratio, @net_migration, @infant_mortality, @gdp_per_capita, @literacy_rate, @phones_per_1000, @arable_percent, @crops_percent, @other_percent, @climate, @birthrate, @deathrate, @agriculture, @industry, @service)<br>
SET<br>
name = TRIM(@name),<br>
region = TRIM(@region),<br>
population = IF(@population = '', 0.0, REPLACE(@population, ',', '.')),<br>
area = IF(@area = '', 0.0, REPLACE(@area, ',', '.')),<br>
population_density = IF(@population_density = '', 0.0, REPLACE(@population_density, ',', '.')),<br>
coastline_ratio = IF(@coastline_ratio = '', 0.0, REPLACE(@coastline_ratio, ',', '.')),<br>
net_migration = IF(@net_migration = '', 0.0, REPLACE(@net_migration, ',', '.')),<br>
infant_mortality = IF(@infant_mortality = '', 0.0, REPLACE(@infant_mortality, ',', '.')),<br>
gdp_per_capita = IF(@gdp_per_capita = '', 0.0, REPLACE(@gdp_per_capita, ',', '.')),<br>
literacy_rate = IF(@literacy_rate = '', 0.0, REPLACE(@literacy_rate, ',', '.')),<br>
phones_per_1000 = IF(@phones_per_1000 = '', 0.0, REPLACE(@phones_per_1000, ',', '.')),<br>
arable_percent = IF(@arable_percent = '', 0.0, REPLACE(@arable_percent, ',', '.')),<br>
crops_percent = IF(@crops_percent = '', 0.0, REPLACE(@crops_percent, ',', '.')),<br>
other_percent = IF(@other_percent = '', 0.0, REPLACE(@other_percent, ',', '.')),<br>
climate = TRIM(@climate),<br>
birthrate = IF(@birthrate = '', 0.0, REPLACE(@birthrate, ',', '.')),<br>
deathrate = IF(@deathrate = '', 0.0, REPLACE(@deathrate, ',', '.')),<br>
agriculture = IF(@agriculture = '', 0.0, REPLACE(@agriculture, ',', '.')),<br>
industry = IF(@industry = '', 0.0, REPLACE(@industry, ',', '.')),<br>
service = IF(@service = '', 0.0, REPLACE(@service, ',', '.'));



Expand Down
6 changes: 6 additions & 0 deletions job1.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
-- 1. Modifiez la requête ci-dessus afin d’afficher la population de “Germany”.
SELECT population FROM world WHERE name = 'Germany';
-- 2. Modifiez la requête ci-dessus afin d’afficher le nom et la population des pays “Sweden”, “Norway” et “Denmark”.
SELECT name, population FROM world WHERE name IN ('Sweden', 'Norway', 'Denmark');
-- 3. Créez une requête permettant d’afficher les pays dont la superficie est supérieure à 200 000 mais inférieure à 300 000.
SELECT name FROM world WHERE area > 200000 AND area < 300000;
16 changes: 16 additions & 0 deletions job2.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
-- 1. Créez une requête permettant de trouver les noms de pays commençant par la lettre B.
SELECT name FROM world WHERE name LIKE "B%";
-- 2. Créez une requête permettant de trouver les noms de pays commençant par “Al”.
SELECT name FROM world WHERE name LIKE "Al%";
-- 3. Créez une requête permettant de trouver les noms de pays finissant par la lettre y.
SELECT name FROM world WHERE name LIKE "%y";
-- 4. Créez une requête permettant de trouver les noms de pays finissant par “land”.
SELECT name FROM world WHERE name LIKE "%land";
-- 5. Créez une requête permettant de trouver les noms de pays contenant la lettre w.
SELECT name FROM world WHERE name LIKE "%w%";
-- 6. Créez une requête permettant de trouver les noms de pays contenant “oo” ou “ee”.
SELECT name FROM world WHERE name LIKE "%oo%" OR name LIKE "%ee%" ;
-- 7. Créez une requête permettant de trouver les noms de pays contenant au moins trois fois la lettre a.
SELECT name FROM world WHERE name LIKE "%a%a%a%" ;
-- 8. Créez une requête permettant de trouver les noms de pays ayant la lettre r comme seconde lettre.
SELECT name FROM world WHERE name LIKE "_r%" ;
7 changes: 7 additions & 0 deletions job3.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
-- 1. Créez une requête permettant d’afficher toutes les colonnes de la table students.
SELECT * FROM students ;
-- 2. Créez une requête permettant de filtrer la table et d’afficher les élèves âgés de strictement plus de 20 ans.
SELECT * FROM students WHERE age > 20;
-- 3. Créez une requête permettant de faire un classement des élèves selon leur note dans un ordre croissant, puis dans un ordre décroissant.
SELECT * FROM students ORDER BY grade ASC;
SELECT * FROM students ORDER BY grade DESC;
11 changes: 11 additions & 0 deletions job4.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
-- 1. Créez une requête permettant d’afficher les prix nobels de 1986.
SELECT * FROM nobel WHERE yr = 1986 ;
-- 2. Créez une requête permettant d’afficher les prix nobels de littérature de 1967.
SELECT * FROM nobel WHERE subject = 'Literature' AND yr = 1967 ;
-- 3. Créez une requête permettant d’afficher l’année et le sujet du prix nobel d’Albert Einstein.
SELECT yr, subject FROM nobel WHERE winner = 'Albert Einstein';
-- 4. Créez une requête permettant d’afficher les détails (année, sujet, lauréat) des lauréats du prix de Littérature de 1980 à 1989 inclus
SELECT yr, subject, winner FROM nobel WHERE subject = 'Literature' AND yr >= 1980 AND yr <= 1989 ;
-- 5. Créez une requête permettant d’afficher les détails des lauréats du prix de Mathématiques.
SELECT yr, subject, winner FROM nobel WHERE subject = 'Mathematics';
-- Combien y en a-t-il ? 0, il n'existe pas de prix Nobel de Mathématiques
17 changes: 17 additions & 0 deletions job5.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
-- 1. Créez une requête permettant d’afficher les pays dont la population est supérieure à celle de "Russia".
SELECT name FROM world WHERE population > (SELECT population FROM world WHERE name = "Russia") ;

-- 2. Créez une requête permettant d’afficher les pays d'Europe dont le PIB par habitant est supérieur à celui d’ "Italy".
SELECT name FROM world WHERE region LIKE '%EUROPE%' AND gdp_per_capita > (SELECT gdp_per_capita FROM world WHERE name = 'Italy');

-- 3. Créez une requête permettant d’afficher les pays dont la population est supérieure à celle du Royaume-Uni mais inférieure à celle de l'Allemagne.
SELECT name FROM world WHERE population > (SELECT population FROM world WHERE name = 'United Kingdom') AND population < (SELECT population FROM world WHERE name = 'Germany');

-- 4. Créez une requête permettant d’afficher le nom et la population de chaque pays d'Europe, en pourcentage de la population de l'Allemagne.
SELECT name, (population / (SELECT population FROM world WHERE name = 'Germany')) * 100 AS percentage_of_germany_population FROM world WHERE region LIKE '%EUROPE%';

-- 5. Créez une requête permettant de trouver le plus grand pays de chaque continent, en indiquant son continent, son nom et sa superficie.
SELECT region, name, area FROM world WHERE area IN (SELECT MAX(area) FROM world GROUP BY region);

-- 6. Créez une requête permettant de trouver les continents où tous les pays ont une population inférieure ou égale à 25 000 000.
SELECT region FROM world GROUP BY region HAVING MAX(population) <= 25000000;
23 changes: 23 additions & 0 deletions job6.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
-- 1. Créez une requête permettant d’afficher la population totale du monde.
SELECT SUM(population) AS total_population FROM world ;

-- 2. Créez une requête permettant d’afficher la population totale de chacun des continents.
SELECT region, SUM(population) AS total_region_population from world GROUP BY region ;

-- 3. Créez une requête permettant d’afficher le PIB total du continent de chacun des continents.
SELECT region, SUM(gdp_per_capita) AS total_region_gdp from world GROUP BY region ;

-- 4. Créez une requête permettant d’afficher le PIB total du continent africain.
SELECT SUM(total_african_gdp) AS overall_gdp_for_africa FROM (SELECT region, SUM(gdp_per_capita) AS total_african_gdp FROM world GROUP BY region) AS gdp_per_capita WHERE region LIKE "%AFRICA%";

-- 5. Créez une requête permettant d’afficher le nombre de pays ayant une superficie supérieure ou égale à 1 000 000m².
SELECT COUNT(name) FROM world WHERE area >= 1000000;

-- 6. Créez une requête permettant d’afficher la population totale des pays suivants : Estonia, Latvia, Lithuania.
SELECT SUM(population) FROM world WHERE name IN ('Estonia', 'Latvia', 'Lithuania');

-- 7. Créez une requête permettant d’afficher le nombre de pays de chaque continent.
SELECT region, COUNT(name) AS countries FROM world GROUP BY region;

-- 8. Créez une requête permettant d’afficher les continents ayant une population totale d’au moins 100 millions d’individus.
SELECT region FROM world GROUP BY region HAVING SUM(population) >= 100000000;
54 changes: 54 additions & 0 deletions job7.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
-- 1. Observez le schéma relationnel de la base de données UEFA EURO 2012. Analysez les cardinalités.

-- Selon le modèle relationnel de la base de données UEFA EURO 2012. On trouve des cardinalités de type un-à-un (1:1) :càd que chaque ligne dans la première table est liée à une seule ligne dans la deuxième table et que chaque ligne dans la deuxième table est liée à une seule ligne dans la première table.
-- On trouve également des cardinalités de type 0:N souvent appelée "zéro à plusieurs" et elles relèvent de la catégorie d'une relation un-à-plusieurs (1:N) : càd que chaque ligne dans la première table peut être liée à plusieurs lignes dans la deuxième table et que chaque ligne dans la deuxième table est liée à une seule (1:N) ou à aucune (0:N) ligne dans la première table.

-- Dans cet exemple:

-- Une équipe peut marquer 0 ou plusieurs buts, et un but est marqué par une seule équipe.
-- Relation : Un-à-Plusieurs (1:N)
-- Explication : Chaque équipe peut marquer plusieurs buts, mais chaque but est attribué à une seule équipe.

-- Une équipe peut jouer 0 ou plusieurs matchs, et un match est joué par une seule équipe.
-- Relation : Un-à-Plusieurs (1:N)
-- Explication : Chaque équipe peut jouer à plusieurs matchs, mais chaque match est associé à une seule équipe.

-- Un but est marqué dans un seul match, et un match peut avoir 0 ou plusieurs buts.
-- Relation : Un-à-Plusieurs (1:N)
-- Explication : Chaque but est lié à un match spécifique, mais un match peut avoir plusieurs buts marqués.



-- 2. La requête qui permet d’afficher le but marqué par un joueur dont le nom de famille est "Bender". L'astérisque (*) indique qu'il faut énumérer toutes les colonnes du tableau - une façon d’appeler toutes les colonnes de la table goal (matchid, teamid, player, gtime). Modifiez cette requête afin d’afficher le numéro de match et le nom du joueur pour tous les buts marqués par l'Allemagne. Afin d’identifier les joueurs allemands, vérifiez que : teamid = 'GER'
SELECT matchid, player FROM goal WHERE teamid = 'GER';

-- 3. Créez une requête permettant d’afficher les colonnes id, stadium, team1, team2 pour le match dont l’id est 1012.
SELECT id, stadium, team1, team2 FROM game WHERE id = 1012;

-- 4. La requête suivante permet de joindre la table game et la table goal sur la colonne id-matchid. Modifiez cette requête afin d’afficher player, teamid, stadium et mdate de chaque but allemand.
SELECT player, teamid, stadium, mdate FROM game JOIN goal ON id = matchid WHERE teamid = 'GER';

-- 5. Créez une requête permettant d’afficher team1, team2 et player pour chaque but marqué par un joueur appelé Mario.
SELECT team1, team2, player FROM game JOIN goal ON id = matchid WHERE player LIKE '%Mario%';

-- 6. Créez une requête permettant de joindre la table goal et la table eteam sur les clés id - teamid.
SELECT teamname, player, gtime FROM eteam JOIN goal ON id = teamid;

-- 7. Créez une requête permettant d’afficher player, teamid, coach, gtime pour tous les buts marqués dans les 10 premières minutes des matchs.
SELECT player, teamid, coach, gtime FROM goal JOIN eteam ON teamid = id WHERE gtime <= 10;

-- 8. La requête suivante permet de joindre la table game et la table eteam sur les clés team1 - eteam.id. Créez une requête permettant d’afficher les dates des matches ainsi que le nom de l'équipe dont "Fernando Santos" était le coach de l’équipe team1.
SELECT mdate, teamname FROM game JOIN eteam ON team1 = id WHERE coach = 'Fernando Santos';

-- 9. Créez une requête permettant d’afficher la liste des joueurs pour chaque but marqué lors d'un match dont le stade était le “National Stadium, Warsaw”.
SELECT player FROM game JOIN goal ON id = matchid WHERE stadium = 'National Stadium, Warsaw';

-- 10. Créez une requête permettant d’afficher le nombre total de buts marqués pour chaque équipe de la table goal.
SELECT teamid, COUNT(*) FROM goal GROUP BY teamid;

-- 11. Créez une requête permettant d’afficher les stades et le nombre de buts marqués dans chacun des stades de la jointure de game-goal.
SELECT stadium, COUNT(*) FROM game JOIN goal ON id = matchid GROUP BY stadium;

-- 12. Pour chaque match où l’équipe de France a marqué, créez une requête permettant d’afficher l'id du match, la date du match et le nombre de buts marqués par "FRA".
SELECT matchid, mdate, COUNT(*) FROM game JOIN goal ON id = matchid WHERE teamid = 'FRA' GROUP BY matchid;

Loading

0 comments on commit 926af2e

Please sign in to comment.