Datenmanipulation in SQL. Select Anweisung

Ähnliche Dokumente
Datenmanipulation in SQL (1): Subselect:

SQL als Zugriffssprache

Abfragen (Queries, Subqueries)

Übersicht der wichtigsten MySQL-Befehle

SQL. Ziele. Grundlagen von SQL. Beziehung zur relationalen Algebra SELECT, FROM, WHERE. Joins ORDER BY. Aggregatfunktionen. dbis.

insert, update, delete Definition des Datenbankschemas select, from, where Rechteverwaltung, Transaktionskontrolle

SELECT dient dazu, aus einer vorhandenen Datenbank bestimmte Spalten und Zeilen auszugeben es handelt sich also um eine Auswahlabfrage.

MySQL-Befehle. In diesem Tutorial möchte ich eine kurze Übersicht der wichtigsten Befehle von MySQL geben.

Es geht also im die SQL Data Manipulation Language.

ACCESS SQL ACCESS SQL

Datenbanksysteme Kapitel 5: SQL Data Manipulation Language

Daniel Warner SQL. Das Praxisbuch. Mit 119 Abbildungen. Franzis

Datenbankabfragen und Datenmanipulation

Universität Augsburg, Institut für Informatik WS 2008/2009 Prof. Dr. W. Kießling 23. Nov Dr. A. Huhn, M. Endres, T. Preisinger Lösungsblatt 5

Anwendungsentwicklung Datenbanken SQL. Stefan Goebel

Seminar 2. SQL - DML(Data Manipulation Language) und. DDL(Data Definition Language) Befehle.

PRG2 Folien Zicari Teil 5. Einführung in Datenbanken SS 2007

SQL. DDL (Data Definition Language) Befehle und DML(Data Manipulation Language)

Daten-Definitionssprache (DDL) Bisher: Realwelt -> ERM -> Relationen-Modell -> normalisiertes Relationen-Modell. Jetzt: -> Formulierung in DDL

ISU 1. Ue_08/02_Datenbanken/SQL. 08 Datenbanken. Übung. SQL Einführung. Eckbert Jankowski.

SQL-Sprachvielfalt. Peter Willadt (Ludwig-Erhard-Schule) SQL-Befehle / 47

WS 2010/11 Datenbanksysteme Fr 15:15 16:45 R Vorlesung #4. SQL (Teil 2)

Wiederholung VU Datenmodellierung

Kapitel 3: Datenbanksysteme

Kapitel 6. Datenmalipulation (DML) d. h. insert, update, delete, select im Relationenmodell (in Oracle)

Welche Kunden haben die gleiche Ware bestellt? select distinct a1.name, a2.name from Auftrag a1, Auftrag a2 where a1.ware = a2.ware.

Dieser Foliensatz darf frei verwendet werden unter der Bedingung, dass diese Titelfolie nicht entfernt wird.

Verbunde (Joins) und mengentheoretische Operationen in SQL

SQL Data Manipulation Language (DML) und Query Language (QL)

Tabellen verknüpfen: Joins

Verbunde (Joins) und mengentheoretische Operationen in SQL

Wiederholung VU Datenmodellierung

3 Query Language (QL) Einfachste Abfrage Ordnen Gruppieren... 7

12 BG EDV Access / Inf-SQL1 Theodor-Heuss-Schule Wetzlar

WS 2010/11 Datenbanksysteme Fr 15:15 16:45 R Vorlesung #3. SQL (Teil 1)

Grundlagen von SQL. Informatik 2, FS18. Dr. Hermann Lehner (Material von Dr. Markus Dahinden) Departement Informatik, ETH Zürich

5/14/18. Grundlagen von SQL. Grundlagen von SQL. Google, Facebook und Co. setzen auf SQL. Whatsapp

SQL: Weitere Funktionen

SQL. Abfragesprache Datenmanipulation - DML

Datenbanksysteme Kapitel 5: SQL - Grundlagen

Datenbanksysteme Kapitel 5: SQL Grundlagen Teil 1

Inhaltsverzeichnis. Inhalt. 1 Einführung in die Datenbanktechnologie

Einführung in die Spezialisierungsrichtungen

Antwort auf QB ist Menge von Tupeln, i-e. selbst wieder Relation (wie bei rel. Algebra) in QB "Zugriff" auf Tupel mit Tupel-Variablen

Datenbanken und SQL. Kapitel 4. Die Datenbankzugriffssprache SQL. Edwin Schicker: Datenbanken und SQL (4)

SQL. DDL (Data Definition Language) Befehle und DML(Data Manipulation Language)

Oracle 10g Einführung

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Lösungen der Übungsaufgaben von Kapitel 10

SQL. SQL SELECT Anweisung SQL-SELECT SQL-SELECT

Einführung in Datenbanken. Kapitel 11: Relationale Algebra in SQL

Query Languages (QL) Relationale Abfragesprachen/Relational

Datenbanksysteme Teil 6 MySQL DML Die SELECT-Anweisung. Stefan Maihack Dipl. Ing. (FH) Datum:

SQL 2. Ziele. Fortgeschrittene SQL-Konstrukte. Aggregatfunktionen revisited. Subqueries. Korrelierte Subqueries

Introduction to Data and Knowledge Engineering. 6. Übung SQL

Oracle 10g Einführung

SQL für Trolle. mag.e. Dienstag, Qt-Seminar

Datenbanksysteme I WS 17/18 HS-Übung. Universität Leipzig, Institut für Informatik Abteilung Datenbanken Prof. Dr. E. Rahm, V. Christen, M.

SQL-Befehlsliste. Vereinbarung über die Schreibweise

Operationen auf Relationen

SQL-Einführung Teil 2

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Rückblick. SQL bietet viele Möglichkeiten zur Anfrageformulierung

Auf einen Blick. Abfrage und Bearbeitung. Erstellen einer Datenbank. Komplexe Abfragen. Vorwort... 13

Inhaltsverzeichnis. Einleitung

DB2 for z/os. Teil 2 SQL

DB2 for z/os. Teil 2 SQL

Datenbankanfragen mit SQL. Dipl.-Ing. D. Gerst Frühjahr 2005

Datenbank und Tabelle mit SQL erstellen

SQL. DDL (Data Definition Language) Befehle und DML(Data Manipulation Language)

Auf einen Blick. Abfrage und Bearbeitung. Erstellen einer Datenbank. Komplexe Abfragen. Vorwort 13

SQL. strukturierte Datenbankabfragesprache eine Datenbanksprache zur. Structured Query Language:

Induktionsschluss: Sei Q RA eine Anfrage der Relationenalgebra mit n > 0 Operatoren.

SQL. Komplexe Abfragen. SQL-Komplexe Abfragen. SQL-Komplexe Abfragen. Komplexe Abfragen verknüpfen mehrere Tabellen miteinander.

Datenbanksysteme Kapitel 5: SQL Data Manipulation Language

Einführung in SQL. Sprachumfang: Indizes. Datensätzen. Zugriffsrechten

ARBEITSBLATT ZUR SQL-BEFEHLEN

U 8 SQL. = Structured Query Language (heute auch Standard Query Language) ALLGEMEIN:

1 Vorstellung Kursbeispiel

Datenmanagement I SoSe 2006 Aufgabenblatt 4

Informationsmanagement u. Numerische Methoden

SQL: Abfragen für einzelne Tabellen

Datenbanksysteme noch Kapitel 7: SQL. Vorlesung vom Oliver Vornberger. Institut für Informatik Universität Osnabrück

7. Einfache Auswertungen aus der Datenbank (select)

C++ Anwendungskurs Tag 4: Datenbanken Daniela Horn Institut für Neuroinformatik Real-time Computer Vision

Datenbanken: Relationales Modell und SQL. Dr. Matthias Uflacker, Stefan Klauck 23. April 2018

dbis Praktikum DBS I SQL Teil 2

Schnellübersichten. SQL Grundlagen und Datenbankdesign

Seminar 1 SQL Abfragen DML. MatrNr Name Vorname Age Gruppe Schmidt Hans Meisel Amelie

Microsoft Access 2010 SQL nutzen

Inhaltsverzeichnis. Vorwort Kapitel 1 Einleitung... 15

4.5 Anfragen mit Mengenoperatoren

Mengenvergleiche: Alle Konten außer das, mit dem größten Saldo.

VIEWS UND WEITERE TABELLEN-OPERATIONEN

Kapitel 2: Einstieg in SQL

Diskussion: Personal (1)

Transkript:

Datenmanipulation in SQL Unter Datenmanipulation wird sowohl der lesende Zugriff auf die Daten (Select Statement) als auch die Änderung von Daten (Insert, Delete, Update) subsummiert. Wir beginnen mit der Betrachtung des Select Statement. Select Anweisung Ein wesentlicher Begriff ist der des Subselect (und damit zusammenhängend der der Subquery). Ein Subselect ist ein Statement der Form Select [distinct all] Kommaliste von Spaltenausdrücken From Kommaliste von Tabellenausdrücken Where Suchbedingung auf Zeilenebene Group By Kommaliste von Spalten(ausdrücken) Having Suchbedingung auf Gruppenebene Unter einer Subquery verstehen wir ein geklammertes Subselect.

In Spaltenausdrücken sind erlaubt: Spalten eines Tabellenausdrucks Konstanten SQL Operatoren Funktionswerte von SQL Funktionen Subqueries, die einen atomaren Wert liefern Als Tabellenausdruck sind erlaubt: Tabellen Views Synonyme / Alias Namen Subqueries Join Konstrukte Eine Suchbedingung ist ein Spaltenausdruck, der einen boole schen Wert hat.

SQL Operatoren und Funktionen Operatoren: Arithmetisch: +, -, *, / String:, (+) Datetime/Interval: +, - Vergleich: =,!= (<>), <, <=, >, >= Boolean: not, and, or Funktionen: Arithmetisch: mod, round, trunc, floor, ceil String: length, size substring, position, replace lower, upper, initcap ltrim, rtrim, trim lpad, rpad, pad Datetime/Interval: Proprietär Typkonversion: Explizit und Implizit Abbildung NULL=>Exception: nvl, coalesce Case Ausdrücke: decode, case decode(expression,s1,w1,s2,w2,...,w) case Expression when s1 then W1 when s2 then W2 else W end

Nach dieser allgemeinen Betrachtung soll der Bezug zwischen den Operatoren der relationalen Algebra und dem Select Statement dargestellt werden. Wir betrachten zunächst den Zugriff auf eine Tabelle: In der relationalen Algebra gibt es hierzu die Operatoren Projektion (Auswahl von Spalten aus einer Relation mit Duplikat Entfernung) Restriktion (Auswahl von Zeilen aus einer Relation aufgrund einer Suchbedingung) Die Projektion ist in SQL realisiert durch Select distinct Spaltenliste From Tabelle Die Restriktion ist in SQL realisiert durch Select * From Tabelle Where Suchbedingung Im Rahmen der Suchbedingung dürfen die o.g. SQL Operatoren und Funktionen verwendet werden, sofern das Ergebnis ein boolescher Ausdruck ist. Spezielle SQL Operatoren sind: [ not ] between is [ not ] null [ not ] like [ not ] in Verwendung von Subqueries: In darf nicht nur zum Vergleich mit konstanten Listen verwendet werden, sondern auch zum Vergleich mit Listen, die durch eine Subquery repräsentiert werden. Vergleichsoperatoren dürfen ebenfalls zum Vergleich mit Listen, die durch eine Subquery repräsentiert werden, herangezogen werden, wobei für den Fall, daß das Ergebnis der Subquery nicht atomar, also eine Liste aus mehr als einem Element ist, eines der Schlüsselworte any/some oder all nach dem Vergleichsoperator zu verwenden ist. Exists darf auf eine Subquery angewandt werden, wobei exists subquery genau dann wahr ist, wenn die Subquery mindestens eine Zeile liefert.

In der Subquery darf Bezug auf die (äußere) Tabelle genommen werden, auf der die Restriktion durchgeführt wird. Es wird dann jeweils die aktuell betrachtete Zeile der Tabelle angesprochen. Man spricht dann von einer korrelierten Subquery, die äußere Tabelle wird i.a. in der Subquery durch einen Korrelationsnamen angesprochen: Select... From tabelle_außen t Where exists ( select * from tabelle_innen where pk = t.fk )

Wir betrachten als nächstes den Zugriff auf mehrere Tabellen, wobei zunächst nicht auf die mengentheoretischen Operatoren eingegangen wird. In der relationalen Algebra gibt es hierzu die Operatoren Kartesisches Produkt Join Quotient Das kartesische Produkt zweier Tabellen T1 und T2 ist definiert durch Select * From T1,T2 Diese Operation sollte (auch vom DBS intern) nur dann angewandt werden, wenn eine der beteiligten Tabellen aus einer Zeile oder sehr wenigen Zeilen besteht. Join Konstrukte gibt es in der relationalen Algebra einige: Equi Join: Verknüpfung aufgrund der Gleichheit von Attributwerten Natural Join: Verknüpfung aufgrund der Gleichheit von Fremdschlüsselwerten und zugehörigen Schlüsselkandidatwerten (Z.T. wird auch die Elimination der Fremdschlüssel Attribute oder der Schlüsselkandidat Attribute gefordert!) Semi Join: Projektion des Natural Join auf eine Tabelle Inner Join: alternativer Begriff zum Natural Join Left Outer Join, Right Outer Join, Full Outer Join: Ergänzung des natural / inner Joins durch Berücksichtigung von Zeilen in der linken Tabelle ohne passende Zeilen rechts, Zeilen in der rechten Tabelle ohne passende Zeilen links sowie beidem Auto / Self Join: Verknüpfung einer Tabelle mit sich selbst (betrifft reflexive Beziehungstypen) Theta Join: Verknüpfung aufgrund von (beliebigen) Vergleichen von Attributwerten

Wir betrachten hier: Inner Joins Outer Joins Auto / Self Joins (Der Theta Join zeichnet sich nur dadurch aus, daß in der ersten betrachteten Join Variante andere Vergleichsoperatoren möglich sind. Er wird hier nicht weiter betrachtet. Es sollte allerdings bemerkt werden, daß Theta Joins oft ein Performance Thema sind!) Seien T1 und T2 zwei Tabellen, k Schlüsselkandidat von T1 und zugehöriger Fremdschlüssel von T2, s1 weitere Spalte in T1 und s2 weitere Spalten in T2. Dann ist der Inner Join von T1 und T2 in SQL implementiert durch Select T1.k, T1.s1, T2.s2 From T1, T2 Where T1.k = T2.k Alternativ gibt es im SQL Standard Join Konstrukte analog denen der relationalen Algebra, z.b. für den inner join Select T1.k, T2.s1, T2.s2 From T1 inner join T2 on T1.k=T2.k Diese Join Konstrukte haben sich allerdings noch nicht allgemein durchgesetzt, z.b. stehen sie bei Oracle vor Release 9i nicht zur Verfügung. Ausgehend von dem inner join Konstrukt ist es offensichtlich, wie Outer Joins entsprechend dargestellt werden: Select T1.k, T2.s1, T2.s2 From T1 left / right / full outer join T2 on T1.k=T2.k

Oracle (Release < 9i) verwendet für den Outer Join lediglich proprietäre Konstrukte: Left Outer Join: Select T1.k, T1.s1, T2.s2 From T1, T2 Where T1.k = T2.k(+) Right Outer Join: Select T1.k, T1.s1, T2.s2 From T1, T2 Where T1.k(+) = T2.k Ein Auto Join zeichnet sich dadurch aus, daß T1 und T2 die gleiche Tabelle T repräsentieren. In diesem Fall muß ein Konstrukt verwendet werden, das auch sonst sinnvoll eingesetzt werden kann: der Korrelationsname. Im Fall des Auto Joins sollte er die Rolle andeuten, in der die Tabelle jeweils verwendet wird, ansonsten werden Korrelationsnamen häufig verwendet als Kürzel von Tabellennamen. Sei T jetzt eine Tabelle mit Schlüsselkandidat sk, Fremdschlüssel fk, der sich auf sk bezieht, und einer weiteren Spalte s. Dann kann der auto join wie folgt definiert werden (mit Korrelationsnamen t1 und t2 für T): Select t1.sk, t1.s, t2.sk, t2.s From T t1, T t2 Where t1.sk = t2.fk

Gruppierung von Daten, statistische Auswertungen In diesem Abschnitt werden SQL Konstrukte betrachtet, die über den Rahmen der relationalen Algebra hinausgehen. SQL bietet Aggregate an (statistische Funktionen), die auf der Gruppierung von Daten beruhen. Es sind dies die Aggregate count (*) zum Zählen der Zeilen count min max sum avg var stddev Diese statistischen Funktionen haben Argumente der Form [distinct] Spaltenname, um die jeweilige statistische Funktion auf die [verschiedenen] Werte ungleich NULL in einer Spalte anzuwenden. I.A. werden Aggregate für Gruppen von Daten gebildet. Diese Gruppen werden in einer group by Klausel spezifiziert: Die Daten mit gleichen Werten in den Spalten der in der group by Klausel spezifizierten Spaltenliste repräsentieren eine Gruppe. Ohne group by Klausel beziehen sich sämtliche Aggregate auf die Gesamtheit der betrachteten Daten! Es ist folgende Einschränkung in SQL zu beachten: In der Select Liste dürfen außerhalb von Aggregaten nur Spalten vorkommen, die in der group by Klausel stehen! Wie mit der where Klausel eine Suchbedingung auf Zeilenebene definiert werden kann, kann mit der having Klausel eine Suchbedingung auf Gruppenebene definiert werden.

An dieser Stelle kommen wir wieder zurück zum Quotient der relationalen Algebra: Ist R eine Relation mit zwei Attributkombinationen A und B und S eine Relation, deren Attribute gerade die aus B sind, so ist der Quotient von R und S definiert als die Menge aller Werte a in A, so daß (a,b) für alle b in S in A ist. Interpretation: Der Quotient von R und S ist die Menge aller Gruppen a (nach Gruppierung bezüglich der Attribute in A), für die die Anzahl zugehöriger Elemente mit b in S gleich der Anzahl der Elemente von S ist. Diese Interpretation führt zu folgendem SQL Statement (für den Fall, daß A und B aus einem Attribut bestehen): select R.a from R, S where R.b = S.b group by R.a having count(*) = (select count(*) from S); Eine weitere Implementierung des Quotienten aus der relationalen Algebra in SQL erhält man, wenn man die Definition des Quotienten folgendermaßen umformuliert: Der Quotient von R und S ist die Menge aller Werte a in A, so daß kein b in S existiert mit der Eigenschaft, daß (a,b) nicht in R ist, also keine Zeile r in R existiert mit r=(a,b): select a from R RA where not exists ( select * from S where not exists ( select * from R where a=ra.a and b=b.b ) ) Diese Formulierung ist i.a. nicht nur schwieriger nachzuvollziehen, sondern auch weniger performant!

Wir betrachten schließlich die mengentheoretischen Operatoren in SQL. In der relationalen Algebra gibt es die mengentheoretischen Operatoren Vereinigung Durchschnitt Differenz SQL bietet entsprechende Konstrukte an, die auch in einer satzorientierten all Variante existieren /z.b. union all) und nicht untereinander kombiniert werden können. Union (mengenorientiert, d.h., Duplikate werden anschließend eliminiert) Intersect Minus (Oracle) bzw. Except (DB2) Mit dem Einsatz der mengentheoretischen Operatoren wird der syntaktische Rahmen des Subselect verlassen. Es handelt sich jetzt um eine vollständige Select Anweisung. Man sollte beachten, daß in vielen Situationen nur Subselects verwendet werden dürfen, nicht aber vollständige Selects!

Abschließend soll auf eine Klausel der vollständigen Select Anweisung eingegangen werden, die nicht den Operatoren der relationalen Algebra zugeordnet werden kann, die aber für die Praxis von großer Bedeutung ist: die order by Klausel. Diese Klausel erlaubt es, die Resultate einer Abfrage zu sortieren. Die order by Klausel ist die zuletzt ausgewertete Klausel einer Select-Anweisung. Hier kann eine Liste von Spaltennamen oder nummern der resultierenden Relation eingegeben werden und pro Spalte spezifiziert werden, ob aufsteigend (asc, default) oder absteigend (desc) sortiert werden soll. Die Spaltennamen der resultierenden Relation sind die des ersten beteiligten Subselects, diese werden aus den Namen der referenzierten Spalten in der Select-Liste abgeleitet, falls möglich, ansonsten sollten sie mit einer as Klausel definiert werden.

Datenmanipulation i.e.s. Insert Satzorientierte Variante: Insert into Tabelle (Kommaliste von Spalten) values (Kommaliste von Ausdrücken) Mengenorientierte Variante Insert into Tabelle (Kommaliste von Spalten) Subselect Bemerkungen: Fehlt die Spaltenliste für die Tabelle, ist die Liste aller Spalten gemeint Jede Spalte, die not null definiert ist und keinen Default Wert hat, muß in der Spaltenliste für die Tabelle vorkommen. Spaltenliste und Ausdrucksliste in der values Klausel bzw. der Select Liste des Subselects müssen verträglich sein. Einige DBS verbieten, daß das Subselect sich auf die Tabelle bezieht, in die eingefügt wird! Neben der o.a. mengentheoretischen Variante, die es erlaubt, Daten aus der Datenbank in eine Tabelle einzufügen, gibt es Methoden, Daten aus Hauptspeicherstrukturen oder Dateien in eine Tabelle mengenorientiert einzufügen. Diese Methoden sind allerdings noch wenig standardisiert. Array Insert (Oracle) Mehrere Zeilen in der Values-Klausel (DB2) Sqlldr (Oracle) Load Utility (DB2)

Delete: delete from Tabelle where Suchbedingung Bemerkungen: Einige DBS verbieten es, in der Suchbedingung die Tabelle zu referenzieren, aus der gelöscht wird. Es ist zu beachten, daß das vollständige Löschen der Daten aus einer Tabelle i.a. effizienter möglich ist als per delete-anweisung (truncate Anweisung bei Oracle, Load einer leeren Datei in die Tabelle bei DB2)!

Update Das Update Statement in SQL hat prinzipiell die Form update tabelle set Spalte = Ausdruck, Spalte = Ausdruck,... where suchbedingung Bemerkungen: Die Ausdrücke in der set-klausel können auch Subqueries sein, die maximal eine Zeile liefern. Man spricht dann von einem korrelierten Update. Einige DBS verbieten, daß in den Ausdrücken in der set-klausel oder/und in der Suchbedingung die zu ändernde Tabelle vorkommt. Einige DBMS erlauben es, die set Klausel in der Form Spaltenliste = Ausdruckliste zu formulieren.