Stunde11-dpm.ink SQL: Einfügen, Ändern und Löschen von Werten 1. Einfügen von Werten Syntax: INSERT INTO <tabellenname> (<spaltenname1>, ...<spaltenname_n) VALUES (<wert1>, ... <wert_n>); Beispiel: INSERT INTO busfahrer (busname, busnummer) VALUES ('MAN', 50); 2. Ändern von Werten Syntax: UPDATE <tabellenname> SET <spaltenname1> = <wert1>, <spaltenname_n> = <wert_n> WHERE <bedingung> Beispiele: UPDATE busfahrer SET busnummer = 12 WHERE busname='MAN'; UPDATE busfahrer SET busnummer = 2 * busnummer; UPDATE busfahrer SET busname = 'SETRA' where busnummer > 12; 1 Stunde11-dpm.ink 3. Löschen von Werten Syntax: DELETE FROM <tabellenname> WHERE <bedingung>; Beispiel: DELETE FROM busfahrer WHERE busname = 'Mercedes'; DELETE FROM busfahrer WHERE busnummer > 12; SQL: Abfragen von Daten/Werten SELECT <select_item> FROM <table_specification> [WHERE <bedingung>] [GROUP BY <group condition>] [HAVING <have_condition>] [ORDER BY <order_condition>] (Tabellenspalten oder * für alle Spalten *)) (Name(n) der Tabellen) Anmerkung[] bedeutet optional SELECT busnummer, busname FROM busfahrer WHERE busnummer < 16; *) bei mehreren Tabellen wird der Tabellenname dem Spaltenname vorangestellt <tabellenname>.<spaltenname> 2 Stunde11-dpm.ink 1. Where-Bedingung In der WHERE-Bedingung können Datensätze mit einer oder mehreren Bedingungen beschränkt werden. Die Bedingungen beziehen sich auf Werte in den angegbenen Spalten und werden (falls mehrere Bedingungen angegben werden) mit AND oder OR verknüpft. Beispiel: SELECT * FROM busfahrer WHERE busnummer=15 OR busname='Scania'; Als Bedinung stehen zur Verfügung - Vergleichsoperatoren (<, >, <=, >=) busname = 'Scania' busnummer <= 17 - Bereichsprüfungen busnummer BETWEEN 12 AND 19 - Mustervergleich busname LIKE 'S%' (% ist Platzhalter für beliebigen Wert) - Elementprüfung busname IN ('Setra', 'Mercedes') - Nullwertprüfung busname IS NULL Die Bedinungen können mit NOT negiert werden. busname IS NOT NULL busname NOT LIKE 'S%' 3 Stunde11-dpm.ink 2. Abfragen über mehrere Tabellen Da relationale Datenbanken die Daten in der Regel über mehrere Tabellen verteilen, besteht auch die Notwendigkeit, Abfragen über mehrere Tabellen erstrecken zu lassen. a) Verknüpfung über "Inner Join" (Nur Tabellen, bei denen Fremd und Primärschlüssel übereinstimmen, werden angezeigt) SELECT busfahrer.busnummer, busfahrer.busname, Firma.firmenname FROM busfahrer, firma WHERE busfahrer.firmennummer = Firma.firmennr Anmerkung zur Syntax: den Spaltennamen müssen die Tabellenname vorangestellt werden: <tabellenname_x>.<spaltenname_y>, ... 4 Stunde11-dpm.ink Mit alternativer Syntax SELECT busfahrer.busnummer, busfahrer.busname, Firma.firmenname FROM busfahrer INNER JOIN firma ON busfahrer.firmennummer = Firma.firmennr b) Ließe man die Bedingung weg, würde man das karthesische Produkt beider Tabellen bekommen, den sogenannten Cross-Join (bei IMUK1 GZSZ-Join (jede mit jedem) genannt) Hausaufgabe CJ: Lösung für Übungsaufgabe 1 auf Übungsblatt bereitstellen 5