Tietokantojen perusteet syksy 2023

Tehtävä 6: NoSQL-tietokannat

MongoDB on suosittu NoSQL-tietokanta, joka ei perustu relaatiomalliin ja SQL-kieleen kuten useimmat perinteiset tietokannat. Etsi tietoa MongoDB:stä netistä ja vastaa sitten seuraaviin tehtäviin.

Yksi hyvä paikka lähteä liikkeelle on MongoDB:n dokumentaation sivu Getting Started. Sivulla on myös selaimessa toimiva MongoDB-tulkki, jonka avulla voit suorittaa tämän tehtävän.

Jokaisessa osatehtävässä käännä annetut SQL-komennot MongoDB-kielelle. Varmista MongoDB-tulkin avulla, että komentosi toimivat. Saat kaikista osatehtävistä 2 pistettä paitsi viimeisestä osatehtävästä 3 pistettä.

1. Tiedon lisääminen

sqlite> CREATE TABLE Tyontekijat (id INTEGER PRIMARY KEY, nimi TEXT, yritys TEXT, palkka INTEGER);
sqlite> INSERT INTO Tyontekijat (nimi, yritys, palkka) VALUES ('Maija', 'Google', 8000);
sqlite> INSERT INTO Tyontekijat (nimi, yritys, palkka) VALUES ('Uolevi', 'Amazon', 5000);
sqlite> INSERT INTO Tyontekijat (nimi, yritys, palkka) VALUES ('Kotivalo', 'Google', 7000);
sqlite> INSERT INTO Tyontekijat (nimi, yritys, palkka) VALUES ('Kaaleppi', 'Facebook', 6000);
sqlite> INSERT INTO Tyontekijat (nimi, yritys, palkka) VALUES ('Liisa', 'Amazon', 9000);
sqlite> INSERT INTO Tyontekijat (nimi, yritys, palkka) VALUES ('Anna', 'Amazon', 6500);

Kirjoita kuusi insertOne-komentoa, jotka lisäävät tiedot kokoelmaan db.tyontekijat. Huomaa, että MongoDB:ssä kokoelmaa ei tarvitse erikseen luoda, vaan se syntyy automaattisesti.

2. Tiedon hakeminen

sqlite> SELECT * FROM Tyontekijat;
id          nimi        yritys      palkka    
----------  ----------  ----------  ----------
1           Maija       Google      8000      
2           Uolevi      Amazon      5000      
3           Kotivalo    Google      7000      
4           Kaaleppi    Facebook    6000      
5           Liisa       Amazon      9000      
6           Anna        Amazon      6500      

Kirjoita find-komento, joka hakee kaiken sisällön kokoelmasta.

3. Tiedon muuttaminen

sqlite> UPDATE Tyontekijat SET palkka=5500 WHERE nimi='Uolevi';
sqlite> SELECT * FROM Tyontekijat;
id          nimi        yritys      palkka    
----------  ----------  ----------  ----------
1           Maija       Google      8000      
2           Uolevi      Amazon      5500      
3           Kotivalo    Google      7000      
4           Kaaleppi    Facebook    6000      
5           Liisa       Amazon      9000      
6           Anna        Amazon      6500      

Kirjoita updateOne-komento, joka muuttaa kokoelman sisältöä, ja sen jälkeen taas find-komento.

4. Tietojen rajaaminen

sqlite> SELECT nimi, palkka FROM Tyontekijat WHERE yritys='Amazon';
nimi        palkka    
----------  ----------
Uolevi      5500      
Liisa       9000      
Anna        6500      

Kirjoita find-komento, joka hakee nimen ja palkan jokaisesta Amazonin työntekijästä. Komento ei saa hakea muuta tietoa.

5. Lukumäärän laskeminen

sqlite> SELECT COUNT(*) FROM Tyontekijat WHERE yritys='Google';
COUNT(*)  
----------
2         

Kirjoita count-komento, joka hakee Googlen työntekijöiden määrän.

6. Vertailu ehdossa

sqlite> SELECT nimi, yritys FROM Tyontekijat WHERE palkka>6000;
nimi        yritys    
----------  ----------
Maija       Google    
Kotivalo    Google    
Liisa       Amazon    
Anna        Amazon    

Kijoita find-komento, joka hakee niiden työntekijöiden nimen ja yrityksen, joiden palkka on yli 6000.

7. Ryhmittely

sqlite> SELECT yritys, COUNT(*), MAX(palkka) FROM Tyontekijat GROUP BY yritys;
yritys      COUNT(*)    MAX(palkka)
----------  ----------  -----------
Amazon      3           9000       
Facebook    1           6000       
Google      2           8000       

Kirjoita aggregate-komento, joka hakee jokaisen yrityksen työntekijöiden määrän ja työntekijän suurimman palkan.

The deadline for this task has passed but you can still check your answers


Return to task list