Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Both sides previous revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
views [2016/01/08 15:56] chorn |
views [2016/01/08 00:00] (aktuell) |
||
---|---|---|---|
Zeile 11: | Zeile 11: | ||
| | ||
Daten einpflegen | Daten einpflegen | ||
- | | + | |
+ | <code sql> | ||
insert into products(asin, name, price) values | insert into products(asin, name, price) values | ||
("A1", "Apfel", 1.23), | ("A1", "Apfel", 1.23), | ||
("B2", "Birne", 2.34), | ("B2", "Birne", 2.34), | ||
("C3", "Orange", 3.45), | ("C3", "Orange", 3.45), | ||
- | ("E5", "Pflaume", 3.45); | + | ("D4", "Pflaume", 3.45); |
- | + | </code> | |
+ | |||
+ | <code sql> | ||
insert into orders(asin, quantity, buy) values | insert into orders(asin, quantity, buy) values | ||
("A1", 2, "2016-01-08 12:00:00"), -- ok | ("A1", 2, "2016-01-08 12:00:00"), -- ok | ||
("B2", 3, "2016-01-07 12:00:00"), -- ok | ("B2", 3, "2016-01-07 12:00:00"), -- ok | ||
- | ("D4", 4, "2016-01-06 12:00:00"), -- no related product | + | ("E5", 4, "2016-01-06 12:00:00"), -- no related product |
("A1", 5, "2016-01-05 12:00:00"), -- out of time | ("A1", 5, "2016-01-05 12:00:00"), -- out of time | ||
("C3", 1, "2016-01-06 12:00:00") -- insufficient quantity | ("C3", 1, "2016-01-06 12:00:00") -- insufficient quantity | ||
- | | + | </code> |
Was steht drin? | Was steht drin? | ||
- | | + | |
+ | <code sql> | ||
select * from products | select * from products | ||
- | | + | </code> |
- | "A1", "Apfel", 1 | + | |
- | "B2", "Birne", 2 | + | |
- | "C3", "Orange", 3 | + | ^ asin ^ name ^ price ^ |
- | + | | A1 | Apfel | 1.23 | | |
+ | | B2 | Birne | 2.34 | | ||
+ | | C3 | Orange | 3.45 | | ||
+ | | D4 | Pflaume | 3.45 | | ||
+ | |||
+ | |||
+ | <code sql> | ||
select * from orders | select * from orders | ||
- | | + | </code> |
- | "A1", 2, "2016-01-08 12:00:00" | + | |
- | "B2", 3, "2016-01-06 12:00:00" | + | |
- | "D4", 4, "2016-01-06 12:00:00" | + | ^ asin ^ quantity ^ buy ^ |
- | "A1", 5, "2016-01-05 12:00:00" | + | | A1 | 2 | 2016-01-08 12:00:00 | |
- | "C3", 1, "2016-01-06 12:00:00" | + | | B2 | 3 | 2016-01-07 12:00:00 | |
- | + | | E5 | 4 | 2016-01-06 12:00:00 | | |
+ | | A1 | 5 | 2016-01-05 12:00:00 | | ||
+ | | C3 | 1 | 2016-01-06 12:00:00 | | ||
+ | |||
Eine View für Bestellungen ab dem 6.1. | Eine View für Bestellungen ab dem 6.1. | ||
- | | + | |
+ | <code sql> | ||
create view recentOrders as | create view recentOrders as | ||
select * | select * | ||
Zeile 53: | Zeile 69: | ||
buy asc, | buy asc, | ||
quantity desc | quantity desc | ||
+ | </code> | ||
+ | <code sql> | ||
select * from recentOrders | select * from recentOrders | ||
- | | + | </code> |
Ergebnis: | Ergebnis: | ||
- | | + | |
- | asin, quantity, buy, name, price | + | |
- | "B2", 3, "2016-01-06 12:00:00", "Birne", 2.34 | + | ^ asin ^ quantity ^ buy ^ name ^ price ^ |
- | "A1", 2, "2016-01-08 12:00:00", "Apfel", 1.23 | + | | B2 | 3 | 2016-01-07 12:00:00 | Birne | 2.34 | |
+ | | A1 | 2 | 2016-01-08 12:00:00 | Apfel | 1.23 | | ||
| | ||
Für C, D, und E sind keine Ergebnisse vorhanden, da kein entsprechendes Produkt vorlag, die Bestellung älter als einen Tag oder die Stückzahl zu klein war. | Für C, D, und E sind keine Ergebnisse vorhanden, da kein entsprechendes Produkt vorlag, die Bestellung älter als einen Tag oder die Stückzahl zu klein war. | ||
Und hier eine View für Artikel mit höchsten Umsatz: | Und hier eine View für Artikel mit höchsten Umsatz: | ||
- | | + | |
+ | <code sql> | ||
create view highSalery as | create view highSalery as | ||
- | select p.*, count(o.asin) as sold, count(o.asin) * price as total | + | select |
+ | p.*, | ||
+ | count(o.asin) as sold, | ||
+ | count(o.asin) * price as total | ||
from products p | from products p | ||
left join orders o using(asin) | left join orders o using(asin) | ||
group by asin | group by asin | ||
order by total desc | order by total desc | ||
+ | </code> | ||
+ | <code sql> | ||
select * from highSalery | select * from highSalery | ||
- | | + | </code> |
Ergebnis: | Ergebnis: | ||
- | | + | |
- | asin, name, price, sold, total | + | |
- | "C3", "Orange", 3.45, 1, 3.45 | + | ^ asin ^ name ^ price ^ sold ^ total ^ |
- | "A1", "Apfel", 1.23, 2, 2.46 | + | | C3 | Orange | 3.45 | 1 | 3.45 | |
- | "B2", "Birne", 2.34, 1, 2.34 | + | | A1 | Apfel | 1.23 | 2 | 2.46 | |
- | "E5", "Pflaume", 3.45, 0, 0.00 | + | | B2 | Birne | 2.34 | 1 | 2.34 | |
+ | | D4 | Pflaume | 3.45 | 0 | 0.00 | | ||
---- | ---- | ||
Zeile 94: | Zeile 124: | ||
Um eine Materialized View anzulegen braucht man nur das entsprechende Schlüsselwort voranzustellen, z.B.: | Um eine Materialized View anzulegen braucht man nur das entsprechende Schlüsselwort voranzustellen, z.B.: | ||
+ | <code sql> | ||
create materialized view recentOrders as ... | create materialized view recentOrders as ... | ||
+ | </code> | ||
+ | |||
+ | danach kann man die View durch beliebige Trigger auf involvierte Relationen aktualisieren | ||
+ | |||
+ | <code sql> | ||
+ | CREATE TRIGGER materialize after insert or update or delete on orders EXECUTE PROCEDURE materialize(); | ||
+ | </code> |