Datenmanipulation Datenmanipulation Daten einfügen direktes Einfügen mit und ohne Spaltennamen insert into person (knr,nachname,vorname,konto) values (3395,'Brenner','Karl',-4913.00) insert into person values (3390,'Heigert','Maria',-2.19) Zeilen einfügen aus einer anderen Tabelle insert into person select knr, nachname, vorname, konto from kunde where konto < 0 Daten einfügen, ändern, löschen Die Sprachkonzepte von SQL kommen in geeigneter Weise in den Änderungskommandos wieder vor. insert into kunde (knr,anrede,nachname,vorname,plz,ort,konto) values (3914,'Herr','Fehrbach','Karl',22359,'Hamburg',0.00) update kunde set plz = 70441, ort = 'Stuttgart' where knr = 3390 delete from kunde Daten lesen: Spaltenauswahl Durch Aufzählen der gewünschten Spalten in der ersten Zeile erhält man die Ergebnistabelle mit den zugehörigen Spalten in derselben Anordnung. select nachname, vorname from kunde select vorname, nachname from kunde select * from kunde Daten lesen: Zeilenauswahl Die Zeilenauswahl geschieht durch eine Wertebedingung in der WHERE-Zeile. select anrede, vorname, nachname, ort from kunde where ort = 'Muenchen' select nachname, ort, konto from kunde where konto = 0.0 select nachname, ort from kunde where konto is null TFH Berlin/Steyer 3-1 Datenmanipulation Daten lesen: Sortieren/doppelte Zeilen select distinct ort from kunde order by ort desc Daten lesen: logische Verknüpfungen Die Zeilenauswahl kann durch Logik im WHERE-Teil beeinflusst, z.B. verschärft werden. select vorname, nachname, ort, konto from kunde where ort = 'Muenchen' or konto > 0 select vorname, nachname, ort, konto from kunde where ort = 'Muenchen' and konto > 0 = GLEICH < KLEINER ALS <= KLEINER ODER GLEICH > GRÖSSER ALS >= GRÖSSER ODER GLEICH <> UNGLEICH für mehrere Bedingungen AND, OR für Werte in einem Bereich BETWEEN x AND y für Werte in einer Menge IN (x,y,z) für Vergleich mit einem Teilwert LIKE '%abc% oder LIKE '_a_' für verneinte Bedingungen NOT Klammernsetzung ist möglich Daten lesen: Arithmetik Arithmetische Ausdrücke sind an zwei Stellen möglich: In der WHERE-Bedingung dienen sie zur flexibleren Zeilenauswahl: in der Ausgabeliste und in der WHERE-Bedingung select hname, ort, preis from hotel where preis*7 < 500 select hname, ort, preis, preis+preis, preis*7 from hotel Daten lesen: Tabellenverknüpfung select buchung.bnr, kunde.nachname, buchung.von_dat, bis_dat from kunde, buchung where kunde.nachname = 'Barth' and kunde.knr=buchung.knr; Die Verknüpfung der beiden Kundennummern erfolgt über zwei identische Spalten, im WHERE-Teil. Weitere Operatoren: TFH Berlin/Steyer = < <= <> > >= (gleich) (kleiner) (kleiner oder gleich) (ungleich) (grösser) (grösser oder gleich) 3-2 Datenmanipulation Inner Join: SELECT * FROM mitarbeiter, abteilung WHERE wohnort = stadt m_nr m_name m_vorname abt_nr wohnort abt_nr abt_name stadt ---------------------------------------------------------------------------------------------------------------------------2581 Kaufmann Brigitte a2 München a2 Diagnose München 25348 Keller Hans a3 München a1 Beratung München 2581 Kaufmann Brigitte a2 München a1 Beratung München 25348 Keller Hans a3 München a2 Diagnose München (4 rows affected) Outer Join: SELECT mitarbeiter.*, abteilung.abt_nr FROM mitarbeiter, abteilung WHERE wohnort *= stadt m_nr m_name m_vorname abt_nr wohnort abt_nr ---------------------------------------------------------------------------------------------25348 Keller Hans a3 München a1 25348 Keller Hans a3 München a2 2581 Kaufmann Brigitte a2 München a1 2581 Kaufmann Brigitte a2 München a2 29346 Probst Andreas a2 Augsburg NULL 9031 Maier Rainer a2 Augsburg NULL 10102 Huber Petra a3 Landshut NULL 28559 Mozer Sybille a1 Ulm NULL 18316 Müller Gabriele a1 Rosenheim NULL (9 rows affected) Subselects An der Stelle von Werten können (in Klammern) untergeordnete Selects stehen, die diese Werte erst ermitteln. delete from bestellt where kundennr = (select kundennr from kunde where nachname = 'Müller') and artikelnr = (select artikelnr from artikel where artikelname = 'Rahmen'); Daten lesen: V ereinigung von Ergebnismengen select hname, ort, preis, 'UEBER 100' from hotel where preis > 100.00 union select hname, ort, preis, 'UNTER 100' from hotel where not preis > 100.00 order by 1, 2 Die Teile müssen vereinigungsverträglich sein. TFH Berlin/Steyer 3-3 Datenmanipulation Mengenoperationen für die ganze Tabelle select sum(gehalt) from Person Mengenoperationen gruppenweise select sum(gehalt) from Person group by wohnort Mengenoperationen gruppenweise nur für bestimmte Gruppen select sum(gehalt) from Person group by wohnort having sum(gehalt) < 5000 Trigger Es gibt eine Tabelle person (nr integer, pname char(12)) Insert-Protokoll: create table insprot (nr integer, pname char(12)) create trigger insertprotokoll on person for insert as insert into insprot values (222,'Emil') insert into person ... select * from insprot nr pname ----------- -----------222 Emil (1 row(s) affected) Update-Protokoll: create table updprot (nr integer, pname char(12)) create trigger updateprotokoll on person for update as insert into updprot values (99,'xaver') update person ... und select * from updprot Delete-Protokoll: create table delprot (nr integer, pname char(12)) create trigger deleteprotokoll on person for delete as insert into delprot values (99,'xaver') delete from person ... und select * from delprot TFH Berlin/Steyer 3-4