a) Welche PC-Modelle haben eine Geschwindigkeit von mindestens 3,00? σ speed > 3.0 PC b) Welche Hersteller:innen produzieren Laptops mit einer Festplatte von mindestens 100 GB? ∂ (π maker ((σ hd > 100 Laptop) ⨝ Product)) c) Finde die Modellnummer und den Preis aller Produkte (welchen Typs auch immer), die von Hersteller B produziert werden. (π model, price ((σ maker='HP' Product) ⨝ PC)) ∪ (π model, price ((σ maker='HP' Product) ⨝ Laptop)) ∪ -- Printer haben ebenfalls eine Spalte "type", deshalb kein Natural Join (π Product.model, price ((σ maker='HP' Product) ⨝ (Product.model = Printer.model) Printer)) d) Finde die Modellnummern aller Farblaserdrucker. π model (σ color=true∧type='Laser' Printer) e) Finde diejenigen Hersteller:innen, die Laptops, aber keine PCs verkaufen. Jeweils mit Delta, da sonst mehr Laptop-Einträge als PC-Einträge falsch herauskämen. (∂ (π maker (σ type='Laptop' Product))) - ∂ ( (π maker (σ type='PC' Product))) f) Finde diejenigen Festplattengrößen, die bei zwei oder mehr PCs vorkommen. Lösung mit GAMMA: π hd (σ anzahl >= 2 (γ hd;count(hd)→anzahl PC)) Lösung mit Kreuzprodukt: ∂ (π hd1 ( σ model1 > model2 ∧ hd1 = hd2 ( (π model→model1, hd→hd1 PC) ⨯ (π model→model2, hd→hd2 PC) ) ) ) g) Finde diejenigen Paare von PC-Modellen, die sowohl dieselbe Geschwindigkeit als auch denselben Arbeitsspeicher haben. Ein Paar soll nur einmal aufgeführt werden; z.B. also (i,j), aber nicht (j,i). π model1, model2 ( σ model1 > model2 ∧ speed1 = speed2 ∧ ram1 = ram2 ( (π model→model1, speed→speed1, ram→ram1 PC) ⨯ (π model→model2, speed→speed2, ram→ram2 PC) ) ) !! h) Finde diejenigen Hersteller:innen von mindestens zwei verschiedenen Computern (PCs oder Laptops) mit einer Geschwindigkeit von mindestens 2,80. --Union PC/Laptop ("speed" ist für das Ergebnis unnötig) (π maker, model, speed (Product ⨝ (σ speed>=2.8 PC))) ∪ (π maker, model, speed (Product ⨝ (σ speed>=2.8 Laptop))) --Gruppieren: σ anzahl >= 2 ( γ maker; count(maker)→anzahl ( (π maker, model, speed (Product ⨝ (σ speed>=2.8 PC))) ∪ (π maker, model, speed (Product ⨝ (σ speed>=2.8 Laptop))) ) ) !! i) Finde die Hersteller:innen des Computers (PC oder Laptop) mit der höchsten verfügbaren Geschwindigkeit. --Wieder Union und mit dem MaxSpeed-Wert joinen. γ maker; max(speed)→maxSpeed ( (π maker, model, speed (Product ⨝ PC)) ∪ (π maker, model, speed (Product ⨝ Laptop)) ) ⨝ -- Maximaler Speed: Relax unterssützt keine Funktionen in Projektion, deshalb GAMMA davorschalten. ( γ ; max(speed)→maxSpeed ( (π maker, model, speed (Product ⨝ PC)) ∪ (π maker, model, speed (Product ⨝ Laptop)) ) ) --Vereinfacht mit linearer Notation: PCProducts = (π maker, model, speed (Product ⨝ PC)) LaptopProducts = (π maker, model, speed (Product ⨝ Laptop)) AllProducts = PCProducts ∪ LaptopProducts γ maker; max(speed)→maxSpeed ( AllProducts ) ⨝ -- Maximaler Speed: Relax unterssützt keine Funktionen in Projektion, deshalb GAMMA davorschalten. ( γ ; max(speed)→maxSpeed ( AllProducts ) ) !! j) Finde die Hersteller:innen von PCs mit mindestens drei verschiedenen Geschwindigkeiten. -- Pro Maker die verschiedenen Speeds (ohne Duplikate) MakerSpeeds = ∂ (π maker, speed (Product ⨝ PC)) -- jetzt nach Maker gruppieren und die unterschiedlichen Geschwindigkeiten zählen: MakerDifferentSpeeds = γ maker; count(speed)→verschiedeneGeschwindigkeiten MakerSpeeds -- Nur Maker rausgeben, die 3 oder mehr unterschiedliche Geschwindigkeiten haben: σ verschiedeneGeschwindigkeiten>= 3 MakerDifferentSpeeds !! k) Finde diejenigen Hersteller:innen, die genau drei verschiedene PC-Modelle verkaufen. MakerModelle = γ maker; count(maker)→anzahlModelle (Product ⨝ PC) σ anzahlModelle = 3 MakerModelle