Du befindest dich hier: FSI Informatik » jahrgaenge » 2006 » Lösungen SoS 3b (SQL) (Übersicht)
no way to compare when less than two revisions
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
— | jahrgaenge:2006:sos3b [22.02.2008 23:10] (aktuell) – angelegt Noya | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Lösungen SoS 3b (SQL) ====== | ||
+ | ===== a3b1 ===== | ||
+ | <code sql> | ||
+ | SELECT produktbeschreibung | ||
+ | FROM produkt p | ||
+ | JOIN bestellung_produkt bp ON bp.artikelnummer = p.artikelnummer | ||
+ | JOIN bestellung b ON b.id = bp.bestellung | ||
+ | JOIN kunde k ON k.kreditkartennummer = b.kunde | ||
+ | WHERE k.stadt = ' | ||
+ | ORDER BY produktbeschreibung ASC; | ||
+ | EXIT; | ||
+ | </ | ||
+ | |||
+ | ===== a3b2 ===== | ||
+ | <code sql> | ||
+ | SELECT produktbeschreibung, | ||
+ | FROM produkt p | ||
+ | JOIN bestellung_produkt bp ON bp.artikelnummer = p.artikelnummer | ||
+ | GROUP BY p.artikelnummer, | ||
+ | ORDER BY bestellungen ASC, p.artikelnummer ASC; | ||
+ | EXIT; | ||
+ | </ | ||
+ | |||
+ | ===== a3b3 ===== | ||
+ | <code sql> | ||
+ | SELECT firma.firmenname, | ||
+ | firma.plz, COUNT(firmenname) As produkte | ||
+ | FROM firma | ||
+ | JOIN produkt ON produkt.strasse = firma.strasse AND produkt.hausnummer = | ||
+ | firma.hausnummer AND produkt.stadt = firma.stadt AND produkt.plz = | ||
+ | firma.plz | ||
+ | HAVING COUNT(firmenname) > 1 | ||
+ | GROUP BY firma.firmenname, | ||
+ | firma.plz | ||
+ | ORDER BY COUNT(firmenname) ASC, firma.firmenname ASC, firma.strasse ASC, | ||
+ | firma.hausnummer ASC, firma.stadt ASC, firma.plz ASC; | ||
+ | EXIT; | ||
+ | </ | ||
+ | |||
+ | ===== a3b4 ===== | ||
+ | <code sql> | ||
+ | CREATE VIEW eink AS | ||
+ | SELECT kunde.kreditkartennummer, | ||
+ | FROM kunde | ||
+ | JOIN bestellung ON bestellung.kunde = kunde.kreditkartennummer | ||
+ | JOIN bestellung_produkt bp ON bp.bestellung = bestellung.id | ||
+ | JOIN produkt ON produkt.artikelnummer = bp.artikelnummer | ||
+ | GROUP BY kunde.kreditkartennummer; | ||
+ | |||
+ | CREATE VIEW werb AS | ||
+ | SELECT kk.werber AS kreditkartennummer, | ||
+ | FROM eink | ||
+ | JOIN kunde_kunde kk ON kk.geworbener = eink.kreditkartennummer | ||
+ | GROUP BY kk.werber; | ||
+ | |||
+ | SELECT kreditkartennummer AS kunde, SUM(gewinn) AS gewinn | ||
+ | FROM ((SELECT * FROM eink UNION SELECT * FROM werb) | ||
+ | UNION SELECT kreditkartennummer, | ||
+ | GROUP BY kreditkartennummer | ||
+ | ORDER BY gewinn ASC, kreditkartennummer ASC; | ||
+ | |||
+ | DROP VIEW eink; | ||
+ | DROP VIEW werb; | ||
+ | |||
+ | EXIT; | ||
+ | </ | ||
+ | |||
+ | ===== a3b5 ===== | ||
+ | <code sql> | ||
+ | CREATE VIEW best AS | ||
+ | SELECT firma.firmenname, | ||
+ | firma.plz, SUM(produkt.einkaufspreis * bp.anzahl) AS einnahmen | ||
+ | FROM bestellung_produkt bp | ||
+ | JOIN produkt ON bp.artikelnummer = produkt.artikelnummer | ||
+ | JOIN firma ON produkt.strasse = firma.strasse AND produkt.hausnummer = | ||
+ | firma.hausnummer AND produkt.stadt = firma.stadt | ||
+ | AND produkt.plz = firma.plz | ||
+ | GROUP BY firma.firmenname, | ||
+ | firma.stadt, | ||
+ | |||
+ | CREATE VIEW lag AS | ||
+ | SELECT firma.firmenname, | ||
+ | firma.plz, SUM(produkt.einkaufspreis * plb.anzahl) AS einnahmen | ||
+ | FROM produkt_lager_lagerbestellung plb | ||
+ | JOIN produkt ON produkt.artikelnummer = plb.artikelnummer | ||
+ | JOIN firma ON produkt.strasse = firma.strasse AND produkt.hausnummer = | ||
+ | firma.hausnummer AND produkt.stadt = firma.stadt AND produkt.plz = | ||
+ | firma.plz | ||
+ | GROUP BY firma.firmenname, | ||
+ | firma.plz; | ||
+ | |||
+ | CREATE VIEW ein AS | ||
+ | SELECT firmenname, strasse, hausnummer, stadt, plz, SUM(einnahmen) AS | ||
+ | einnahmen | ||
+ | FROM ((SELECT * FROM best UNION SELECT * FROM lag) | ||
+ | UNION SELECT firmenname, strasse, hausnummer, stadt, plz, 0 AS | ||
+ | einnahmen FROM firma) | ||
+ | GROUP BY firmenname, strasse, hausnummer, stadt, plz; | ||
+ | |||
+ | SELECT COUNT(*) AS rang, a.firmenname, | ||
+ | FROM ein a, ein b | ||
+ | WHERE a.einnahmen <= b.einnahmen | ||
+ | HAVING COUNT(*) <= 10 | ||
+ | GROUP BY a.firmenname, | ||
+ | a.plz | ||
+ | ORDER BY rang; | ||
+ | |||
+ | DROP VIEW best; | ||
+ | DROP VIEW lag; | ||
+ | DROP VIEW ein; | ||
+ | |||
+ | EXIT; | ||
+ | </ | ||
+ | |||
+ | ===== a3b6 ===== | ||
+ | <code sql> | ||
+ | CREATE VIEW fk AS | ||
+ | SELECT firma.strasse, | ||
+ | firma.firmenname | ||
+ | FROM firma | ||
+ | JOIN kunde ON kunde.strasse = firma.strasse AND kunde.hausnummer = | ||
+ | firma.hausnummer AND kunde.stadt = firma.stadt AND kunde.plz = | ||
+ | firma.plz; | ||
+ | |||
+ | CREATE VIEW xauf_lager AS | ||
+ | SELECT fk.firmenname, | ||
+ | FROM fk | ||
+ | JOIN produkt ON produkt.strasse = fk.strasse AND produkt.hausnummer = | ||
+ | fk.hausnummer AND produkt.stadt = fk.stadt AND produkt.plz = fk.plz | ||
+ | JOIN produktexemplar ex ON ex.artikelnummer = produkt.artikelnummer | ||
+ | JOIN produktexemplar_lager exla ON exla.artikelnummer = ex.artikelnummer | ||
+ | AND exla.seriennummer = ex.seriennummer | ||
+ | GROUP BY fk.firmenname, | ||
+ | fk.stadt, fk.plz, produkt.artikelnummer; | ||
+ | |||
+ | CREATE VIEW xlagerbestellt AS | ||
+ | SELECT fk.firmenname, | ||
+ | lagerbestellt | ||
+ | FROM fk | ||
+ | JOIN produkt ON produkt.strasse = fk.strasse AND produkt.hausnummer = | ||
+ | fk.hausnummer AND produkt.stadt = fk.stadt AND produkt.plz = fk.plz | ||
+ | JOIN produkt_lager_lagerbestellung lb ON lb.artikelnummer = | ||
+ | produkt.artikelnummer | ||
+ | GROUP BY fk.firmenname, | ||
+ | fk.stadt, fk.plz, produkt.artikelnummer; | ||
+ | |||
+ | CREATE VIEW xversendet AS | ||
+ | SELECT fk.firmenname, | ||
+ | FROM fk | ||
+ | JOIN produkt ON produkt.strasse = fk.strasse AND produkt.hausnummer = | ||
+ | fk.hausnummer AND produkt.stadt = fk.stadt AND produkt.plz = fk.plz | ||
+ | JOIN paket_produktexemplar pex ON pex.artikelnummer = produkt.artikelnummer | ||
+ | GROUP BY fk.firmenname, | ||
+ | fk.stadt, fk.plz, produkt.artikelnummer; | ||
+ | |||
+ | CREATE VIEW xbestellt AS | ||
+ | SELECT fk.firmenname, | ||
+ | FROM fk | ||
+ | JOIN produkt ON produkt.strasse = fk.strasse AND produkt.hausnummer = | ||
+ | fk.hausnummer AND produkt.stadt = fk.stadt AND produkt.plz = fk.plz | ||
+ | JOIN bestellung_produkt bp ON bp.artikelnummer = produkt.artikelnummer | ||
+ | GROUP BY fk.firmenname, | ||
+ | fk.stadt, fk.plz, produkt.artikelnummer; | ||
+ | |||
+ | SELECT xauf_lager.firmenname, | ||
+ | lagerbestellt, | ||
+ | FROM xauf_lager | ||
+ | JOIN xlagerbestellt ON xlagerbestellt.firmenname = xauf_lager.firmenname | ||
+ | AND xlagerbestellt.artikelnummer = xauf_lager.artikelnummer | ||
+ | JOIN xversendet ON xversendet.firmenname = xauf_lager.firmenname | ||
+ | AND xversendet.artikelnummer = xauf_lager.artikelnummer | ||
+ | JOIN xbestellt ON xbestellt.firmenname = xauf_lager.firmenname | ||
+ | AND xbestellt.artikelnummer = xauf_lager.artikelnummer | ||
+ | ORDER BY xauf_lager.firmenname ASC, xauf_lager.artikelnummer; | ||
+ | |||
+ | DROP VIEW fk; | ||
+ | DROP VIEW xauf_lager; | ||
+ | DROP VIEW xlagerbestellt; | ||
+ | DROP VIEW xversendet; | ||
+ | DROP VIEW xbestellt; | ||
+ | |||
+ | EXIT; | ||
+ | </ | ||
+ | |||
+ | ===== a3b7 ===== | ||
+ | <code sql> | ||
+ | CREATE VIEW best AS | ||
+ | SELECT bestellung.kunde, | ||
+ | bp.anzahl AS zahl | ||
+ | FROM bestellung | ||
+ | JOIN bestellung_produkt bp ON bp.bestellung = bestellung.id; | ||
+ | |||
+ | CREATE VIEW ges AS | ||
+ | SELECT bestellung.kunde, | ||
+ | COUNT(*) AS zahl | ||
+ | FROM bestellung | ||
+ | JOIN paket ON paket.bestellung = bestellung.id | ||
+ | JOIN paket_produktexemplar pex ON pex.paketnummer = paket.paketnummer | ||
+ | GROUP BY bestellung.kunde, | ||
+ | |||
+ | SELECT kunde.vorname, | ||
+ | a.bestellung, | ||
+ | gesendet | ||
+ | FROM (SELECT * FROM ges MINUS SELECT * FROM best) a | ||
+ | LEFT JOIN best ON best.bestellung = a.bestellung AND best.artikelnummer | ||
+ | = a.artikelnummer | ||
+ | LEFT JOIN ges ON ges.bestellung = a.bestellung AND ges.artikelnummer = | ||
+ | a.artikelnummer | ||
+ | JOIN kunde ON kunde.kreditkartennummer = a.kunde | ||
+ | ORDER BY kunde.kreditkartennummer ASC, a.bestellung ASC, a.artikelnummer | ||
+ | ASC; | ||
+ | |||
+ | DROP VIEW best; | ||
+ | DROP VIEW ges; | ||
+ | |||
+ | EXIT; | ||
+ | </ | ||
+ | |||
+ | ===== a3b8 ===== | ||
+ | <code sql> | ||
+ | CREATE VIEW kp AS | ||
+ | SELECT kunde.kreditkartennummer, | ||
+ | FROM kunde | ||
+ | JOIN bestellung ON bestellung.kunde = kunde.kreditkartennummer | ||
+ | JOIN bestellung_produkt bp ON bp.bestellung = bestellung.id | ||
+ | GROUP BY kunde.kreditkartennummer, | ||
+ | |||
+ | CREATE VIEW kpa AS | ||
+ | SELECT kp.kreditkartennummer, | ||
+ | FROM kp | ||
+ | GROUP BY kp.kreditkartennummer; | ||
+ | |||
+ | CREATE VIEW gleichh AS | ||
+ | SELECT a.kreditkartennummer AS kunde1, b.kreditkartennummer AS kunde2, | ||
+ | COUNT(*) * | ||
+ | 100 / | ||
+ | kpa.panzahl AS | ||
+ | gleichheit | ||
+ | FROM kp a | ||
+ | JOIN kp b ON b.kreditkartennummer != a.kreditkartennummer AND | ||
+ | b.artikelnummer = a.artikelnummer | ||
+ | JOIN kpa ON kpa.kreditkartennummer = a.kreditkartennummer | ||
+ | GROUP BY a.kreditkartennummer, | ||
+ | |||
+ | CREATE VIEW max AS | ||
+ | SELECT gleichh.kunde1, | ||
+ | gleichheit | ||
+ | FROM gleichh | ||
+ | GROUP BY gleichh.kunde1; | ||
+ | |||
+ | SELECT gleichh.kunde1, | ||
+ | FROM gleichh | ||
+ | JOIN max ON max.kunde1 = gleichh.kunde1 AND max.gleichheit = | ||
+ | gleichh.gleichheit | ||
+ | ORDER BY gleichheit ASC, kunde1 ASC, kunde2 ASC; | ||
+ | |||
+ | DROP VIEW kp; | ||
+ | DROP VIEW kpa; | ||
+ | DROP VIEW gleichh; | ||
+ | DROP VIEW max; | ||
+ | |||
+ | EXIT; | ||
+ | </ |