added shit

This commit is contained in:
Jurn Wubben 2025-02-21 11:26:08 +00:00
parent 1854d56b4a
commit f50efb55f7
5 changed files with 146 additions and 1 deletions

View file

@ -1 +1,43 @@
# SQL [![Review Assignment Due Date](https://classroom.github.com/assets/deadline-readme-button-22041afd0340ce965d47ae6ef1cefeee28c7c493a6346c4f15d667ab976d596c.svg)](https://classroom.github.com/a/gRBNb6cO)
# Toets Databases
Succes met de toets!
Open **queries.sql** en voer de opdrachten uit.
In `db.png` kan je een schema van de hele database zien.
Als je
```python
python run.py
```
in de console uitvoert, kan je het resultaat van je queries zien. Controleer goed of je het goede antwoord hebt gevonden.
## Voorbeelden
| Operatie | Syntax |
|------------------|-----------------------------------------------------------|
| **Tabel maken** | `CREATE TABLE naam (attribuut VARCHAR(50));` |
| **Data toevoegen** | `INSERT INTO naam VALUES (waarde);` |
| **Data selecteren** | `SELECT ... FROM tabelnaam;` |
| **Data filteren** | `SELECT ... FROM tabelnaam WHERE ...;` |
| **Data orderen** | `SELECT ... FROM tabelnaam ORDER BY ... (ASC or DESC);` |
| **Tellen** | `SELECT COUNT(...) FROM ...;` |
| **Tel unieke waarden** | `SELECT COUNT(DISTINCT ...) from ...;` |
| **Grootste** | `SELECT MAX(...) FROM ...;` |
| **Kleinste** | `SELECT MIN(...) FROM ...;` |
| **Som** | `SELECT SUM(...) FROM ...;` |
## Joins
```SQL
select albums.title, artists.name
from artists
join albums on artists.artistid = albums.artistid
```

BIN
db.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 972 KiB

BIN
music.db Normal file

Binary file not shown.

76
queries.sql Normal file
View file

@ -0,0 +1,76 @@
-- THEORIE
--(2p) 1. Wat is een database en wat zijn de voordelen van een database?
-- Een database is een bestand waarin je informatie georganiseerd kan opslaan en gebruiken. Dit is heel erg handig voor applicaties want dan kunnen ze bijvoorbeeld gebruiker gegevens zoals email addressen, wachtwoorden en meer op een makkelijke manier opslaan en bewerken.
--(2p) 2. Waar staat SQL voor en wat is SQL?
-- Sequal query language. Het is een syntax om informatie in een database op te roepen, bewerken, verwijderen of in te voegen.
--(2p) 3. Leg uit wat een join doet en wat het effect hiervan is op de data?
-- Met join kan je informatie uit meerdere tables tegelijkertijd oproepen. Op deze manier kan je data goed georganiseerd houden en er makkelijk bij komen.
--(2p) 4. Waarom is een unieke identifier essentieel bij het maken van joins?
-- Zonder een UID weet je niet welke informatie bij welke informatie hoort, en kan je dus ook niet informatie oproepen.
--(2p) 5. Wat is het datatype van ReportsTo in de tabel Employees? Waarom is het dit datatype? Waar verwijst het naar? Leg in je eigen woorden uit wat daar gebeurt.
-- ReportsTo is een integer (nummer). Het is een nummer omdat het referenced naar de EmployeeId, de uid van de table, zo kan je zien wie de manager is van dat persoon. Vaak is de UID een nummer omdat het heel erg makkelijk is om er een aan te maken. Je pakt gewoon de UID van de laatste entry en doet +1.
-- QUERIES
--(2p) 6a. Maak een database-tabel met daarin 3 kolommen, let op de types:
-- - Voornaam
-- - Achternaam
-- - Leeftijd
CREATE TABLE mensen (Voornaam VARCHAR(20), Achternaam VARCHAR(20), Leeftijd INTEGER);
--(2p) 6b. Voeg 3 personen toe aan de database-tabel.
INSERT INTO mensen VALUES ("Jurn", "Wubben", 16), ("Elmar", "Leistra", 16), ("Damian", "Czapnik", 16);
-- SELECT * from tabel;
--(2p) 7. Schrijf een query die de voornaam, achternaam en titel laat zien van alle employees, sorteer op achternaam
SELECT FirstName, LastName, Title FROM employees ORDER BY LastName;
--(2p) 8. Schrijf een query die de InvoiceDate en BillingAddress laat zien van alle Invoices met BillingState ```MassaChusetts (MA)``` en die duurder waren dan 10 euro (HINT: selecteer eerst alles van de Invoices tabel met * zodat je kan zien hoe alles heet en hoe het in de database staat)
SELECT InvoiceDate, BillingAddress FROM invoices WHERE BillingState == "MassaChusetts (MA)" AND Total > 10;
--(2p) 9. Schrijf een query die alle data uit de customers tabel laat zien
SELECT * FROM customers;
--(2p) 10. Laat alle voor- en achternamen zien van employees die in de IT werken, sorteer op naam van stad (aflopend)
SELECT FirstName, LastName FROM employees ORDER BY City;
--(2p) 11 Schrijf een query die TELT hoeveel tracks er zijn die langer dan 10 minuten duren (1 min = 60 sec = 60000 millisec)
SELECT COUNT(TrackId) FROM tracks WHERE Milliseconds > 60000 * 10;
--(2p) 12. Schrijf een query die TELT hoeveel unieke prijzen er voor tracks zijn
SELECT COUNT(DISTINCT UnitPrice) FROM tracks;
--(2p) 13. Schrijf een query die alle voor- en achternamen van Employees laat zien die NIET naar de ```General Manager``` reporten. Je hoeft hier géén join te gebruiken. Je mag gewoon in de tabel kijken en een where gebruiken.
-- SELECT * FROM employees;
-- SELECT FirstName, LastName FROM employees WHERE ReportsTo == 1;
SELECT FirstName, LastName FROM employees WHERE ReportsTo == (SELECT EmployeeId FROM employees WHERE Title == "General Manager" LIMIT 1);
--(2p) 14. Schrijf een query die de naam van de track weergeeft die de minste ruimte in beslag neemt
SELECT Name, MIN(Bytes) FROM tracks; -- Maar hier staat er ook 'Bytes' bij in de query en ik weet niet hoe ik dat moet fixen op deze manier dus dan maar een andere manier.
SELECT Name FROM tracks ORDER BY Bytes LIMIT 1;
--(2p) 15. Schrijf een query die uitrekent hoeveel alle tracks uit het album met de titel ```Frank``` in totaal gezamenlijk kosten, gebruik hierbij een join
SELECT SUM(tracks.UnitPrice) FROM tracks JOIN albums ON albums.AlbumId == tracks.AlbumId WHERE albums.Title == "Frank";
--(2p) 16. Schrijf een query die alle InvoiceDates vindt van customers die uit Nederland komen
-- SELECT * FROM invoices LIMIT 1;
-- SELECT * FROM customers LIMIT 1;
SELECT invoices.InvoiceDate FROM invoices JOIN customers ON invoices.CustomerId == customers.CustomerId WHERE customers.Country == "Netherlands";
--(2p) 17. Schrijf een query die alle tracks vindt die zijn gemaakt door de artiest ```Queen```
SELECT tracks.Name FROM tracks JOIN albums ON tracks.AlbumId == albums.AlbumId JOIN artists ON albums.ArtistId == artists.ArtistId WHERE artists.Name == "Queen";
--(2p) 18. Schrijf een query die alle InvoiceDates vindt, waarbij employee ```Jane Peacock``` heeft geholpen
SELECT invoices.InvoiceDate FROM invoices JOIN customers ON invoices.CustomerId == customers.CustomerId JOIN employees ON customers.SupportRepId == employees.EmployeeId WHERE employees.FirstName == "Jane" AND employees.LastName == "Peacock";
--(2p) 19. Schrijf een query die alle unieke album titels en artiesten namen toont van alle tracks die in het genre 'Rock' vallen.
SELECT DISTINCT albums.Title, artists.Name FROM albums JOIN artists ON albums.ArtistId == artists.ArtistId JOIN tracks ON tracks.AlbumId == albums.AlbumId JOIN genres ON genres.GenreId == tracks.GenreId WHERE genres.Name == "Rock";

27
run.py Normal file
View file

@ -0,0 +1,27 @@
import sqlite3
from tabulate import tabulate
def run_queries(db_path, sql_file):
with sqlite3.connect(db_path) as conn, open(sql_file, "r") as f:
queries = f.read().split(";")
for query in queries:
query = query.strip()
if query:
print(f"Query aan het uitvoeren:\n{query}\n")
cursor = conn.execute(query)
rows = cursor.fetchall()
# If the query returns columns (e.g. a SELECT), format them
if cursor.description:
headers = [desc[0] for desc in cursor.description]
print(tabulate(rows, headers=headers, tablefmt="psql"))
else:
print("Geen Select Statement.")
print("----\n")
if __name__ == "__main__":
DB_PATH = "music.db" # Path to your database
SQL_FILE = "queries.sql" # Path to the SQL file
run_queries(DB_PATH, SQL_FILE)