DBIS-2016-SQL-DML

Werbung
Datenmanipulation mit SQL
DML
Wintersemester 16/17
DBIS
1
Übersicht
• Anweisungen für Datenänderung:
• INSERT
• UPDATE
• DELETE
• Anweisungen für Datenzugriff:
• SELECT
• CREATE / DROP VIEW (Konzeptuelle Ebene)
• DML-Anweisungen sind mengenorientiert: Mit einer Anweisungen
kann mehr als ein Tupel eingefügt, geändert, gelöscht oder
gelesen werden
Wintersemester 16/17
DBIS
2
Der „INSERT“- Befehl
• Befehl zum Einfügen von Datensätzen in eine Tabelle
• Ausprägungsformen
• Einfügen von Tupeln als Konstanten
• Einfügen von Tupeln aus einem Abfrageergebnis (SFW-Klausel)
• Beispiele im Folgenden (zunächst) für Buch und Ausleihe:
CREATE TABLE Buch (
InvNr INTEGER NOT NULL,
Titel VARCHAR(30),
ISBN CHAR(5),
Autor VARCHAR(40),
PRIMARY KEY (InvNr))
Wintersemester 16/17
CREATE TABLE Ausleihe (
InvNr INTEGER NOT NULL,
Name VARCHAR(20),
PRIMARY KEY (InvNr),
FOREIGN KEY (InvNr)
REFERENCES Buch(InvNr))
DBIS
3
INSERT – Tupel als Konstanten I
• Syntax:
INSERT INTO Basisrelationenname [(Spaltenname_1, ..., Spaltenname_k)]
VALUES (Wert_11, ..., Wert_k1) [, ...,
(Wert_1n, ..., Wert_kn)]
• Beispiel 1: Einfügen eines Tupels in Relation „Buch“
INSERT INTO Buch (InvNr, Titel, ISBN, Autor)
VALUES (1201,'Objektbanken','3-111','Heuer')
• Beispiel 2: Einfügen eines unvollständigen Tupels in Relation „Buch“
INSERT INTO Buch (InvNr, ISBN)
VALUES (4867,'3-221')
 Werte für „Autor“ und „Titel“ werden auf NULL gesetzt!
Wintersemester 16/17
DBIS
4
INSERT – Tupel als Konstanten II
• Beispiel 3: Einfügen eines Tupels in Relation „Buch“ ohne Inventarnummer
INSERT INTO Buch (Titel, ISBN, Autor)
VALUES ('Modula-4','3-222','Wirth')
• Fehlermeldung, da NULL-Wert für InvNr nicht erlaubt (Primärschlüssel!)
• Beispiel 4: Weglassen der Attributliste bei der INTO-Klausel
INSERT INTO Buch
VALUES (4710,'Modula-4','3-222','Wirth')
• Werte der VALUES-Klausel werden den Attributen in der Reihenfolge
zugeordnet, wie sie beim CREATE-Statement aufgeführt waren
• 4711  InvNr, 'Modula-4'  Titel, '3-222'  ISBN, 'Wirth'  Autor
Wintersemester 16/17
DBIS
5
INSERT – Tupel als Konstanten III
• Beispiel 5: Einfügen eines Tupels in Relation „Ausleihe“
INSERT INTO Ausleihe
VALUES (0815,'Liebisch')
• Anweisung scheitert, wenn kein zugehöriger Primärschlüsselwert (InvNr
= 0815) in Relation „Buch“ existiert (Fremdschlüssel-Beziehung)
• Beispiel 6: Einfügen von zwei Tupeln in Relation „Ausleihe“
INSERT INTO Ausleihe (InvNr, Name)
VALUES (1201,'Liebisch'), (4710,'Küspert')
Wintersemester 16/17
DBIS
6
INSERT – Tupel als SFW-Klausel I
• Syntax:
INSERT INTO Basisrelationenname [(Spaltenname_1, ..., Spaltenname_k)]
<lesende SQL-Anfrage>
• Wirkung:
• Ergebnis der lesenden SQL-Anfrage wird in die angegebene Relation
eingefügt
•
Abgeschlossenheit: SELECT-Anfrage liefert wieder eine Menge
•
Mengenorientiertheit: INSERT-Operation kann Mengen verarbeiten
• Voraussetzung sind strukturell gleiche Relationen
•
Identische Anzahl von Attributen
•
Kompatibilität der Attribut-Wertebereiche
•
Reihenfolge der Attribute wichtig oder explizite Benennung
• SQL-Anfrage kann beliebig komplex sein
Wintersemester 16/17
DBIS
7
INSERT – Tupel als SFW-Klausel II
• Beispiel 7: Verdopplung der Tupel in Relation „Ausleihe“
INSERT INTO Ausleihe
SELECT * FROM Ausleihe
• Selektion aller Tupel (= *) aus Relation „Ausleihe“ als Menge
• Einfügen der Tupelmenge in Relation „Ausleihe“
• Anweisung scheitert wegen Primärschlüssel-Verletzung
Wintersemester 16/17
DBIS
8
INSERT – Tupel als SFW-Klausel III
• Beispiel 8: Kopieren von Inhalten verschiedener Tabellen
• Angenommen, es gibt zusätzlich eine Relation Ausleihe_alt mit denjenigen
Büchern, die schon länger als 2 Jahre ausgeliehen sind
• Inhalt dieser Relation soll nun, damit er nicht in Vergessenheit gerät, wieder in
Relation Ausleihe übernommen werden
INSERT INTO Ausleihe (InvNr, Name)
SELECT InvNr_alt, Name_alt FROM Ausleihe_Alt
• Anweisung fügt alle Tupel aus Relation „Ausleihe_alt” in Relation „Ausleihe”
ein (Kopieren)
Wintersemester 16/17
DBIS
9
Der „UPDATE“- Befehl
• Syntax:
UPDATE Basisrelationenname
SET Spaltenname_1 = Ausdruck_1 [, Spaltenname_k = Ausdruck_k]
[WHERE Bedingung]
• Wirkung:
• In allen Tupeln von Basisrelationenname, welche die (optionale) Bedingung
erfüllen, werden die Attributwerte der Spaltenname_i wie angegeben ersetzt
• Ausdruck_i: Konstante, Attribut, SFW-Ausdruck (Subselect)
Wintersemester 16/17
DBIS
10
UPDATE – Beispiele I
• Beispiel 1: Der Titel des Buches mit der InvNr = 1201 („Objektbanken“)
soll in „Objektdatenbanken“ geändert werden
UPDATE Buch
SET
Titel = 'Objektdatenbanken'
WHERE
InvNr = 1201
• Anweisung ändert immer nur ein einzelnes Tupel, weil InvNr als
Primärschlüssel definiert ist
Wintersemester 16/17
DBIS
11
UPDATE – Beispiele II
• Beispiel 2: Alternative Anweisung für Beispiel 1
UPDATE Buch
SET
Titel = 'Objektdatenbanken'
WHERE
Titel = 'Objektbanken'
• Anweisung ändert datenabhängig ein oder mehrere Tupel, je nach
dem wieviele Tupel den Titel 'Objektbanken' haben
• Beispiel 3: Für alle Bücher mit InvNr > 1000 soll der Autor auf „Dr.
Seltsam“ gesetzt werden (Explizites Mengen-Update)
UPDATE Buch
SET
Autor = 'Dr. Seltsam'
WHERE
InvNr > 1000
Wintersemester 16/17
DBIS
12
UPDATE – Beispiele III
• Beispiel 4: Gib allen Angestellten der Relation
Angest(PNr, Name, Gehalt, ...) eine Gehaltserhöhung um 1000,- EUR
UPDATE Angest
SET
Gehalt = Gehalt + 1000
• Beispiel 5: Für alle Bücher soll die InvNr auf 9999 gesetzt werden
UPDATE Buch
SET
InvNr = 9999
• WHERE-Klausel nicht benötigt, da alle Tupel der Relation zu ändern sind
• Operation verletzt Konsistenz („Duplicate key“) und wird vom DBMS nicht
ausgeführt / ungeschehen gemacht
Wintersemester 16/17
DBIS
13
UPDATE – Beispiele IV
• Beispiel 6: Das Buch mit InvNr = 1201 soll den gleichen Titel bekommen
wie das Buch mit InvNr = 4710
UPDATE Buch
SET
Titel = (SELECT Titel FROM Buch WHERE InvNr = 4710)
WHERE
InvNr = 1201
• Subselect holt den Titel zum Buch mit InvNr = 4710
• Ergebnis wird als Titel für das Buch mit InvNr = 1201 gesetzt
Wintersemester 16/17
DBIS
14
Der „DELETE“- Befehl
• Syntax:
DELETE
FROM
Basisrelationenname
[WHERE Bedingung]
• Wirkung:
• Alle Tupel in Basisrelationenname, welche die (optionale) Bedingung erfüllen,
werden gelöscht
• Relationsschema bleibt unverändert (im Gegensatz zu DROP TABLE)
Wintersemester 16/17
DBIS
15
DELETE – Beispiele I
• Beispiel 1: Das von Hr. Meyer ausgeliehene Buch mit InvNr = 4711
wurde zurückgegeben und soll aus der Relation „Ausleihe“ gelöscht
werden
DELETE
FROM
Ausleihe
WHERE
InvNr = 4711
• Alternative Bedingung (Name = 'Meyer') löscht eventuell mehr
Wintersemester 16/17
DBIS
16
DELETE – Beispiele II
• Beispiel 2: Löschung des gesamten Inhalts der Relation „Ausleihe“
DELETE
FROM
Ausleihe
• Beispiel 3: Kann eine DELETE-Anweisung zur Integritätsverletzung
führen (analog zu „Duplikate key“ beim UPDATE)?
DELETE
FROM
Buch
WHERE
Titel = 'Objektdatenbanken'
• Verletzung der Fremdschlüsselbeziehung zwischen Ausleihe und Buch
(Fremdschlüsselwert 4710 für Ausleihe.InvNr würde ins „Leere zeigen“)
• Zurückweisung der Operation
Wintersemester 16/17
DBIS
17
Der „SELECT“- Befehl I
• Fundamentales Konstrukt für den DB-Zugriff mit SQL zur Datenermittlung
ist die SELECT-FROM-WHERE-Klausel (SFW-Klausel)
• SELECT:
• Festlegung der Ergebnisstruktur (Projektionsliste) einer Anfrage
• Welche Tabellenspalten soll die Anfrage liefern?
• FROM:
• Festlegung der Datenherkunft für die Anfrage
• Welche Relationen werden zur Beantwortung der Anfrage benötigt?
• WHERE:
• Festlegung der Selektionsbedingung
• Welche Daten (Tupel) sollen genau ermittelt werden?
• Wie erfolgt ggf. eine Datenverknüpfung über mehrere Relationen (impliziter Join,
expliziter JOIN-Operator seit SQL-92)?
Wintersemester 16/17
DBIS
18
Der „SELECT“- Befehl II
• Ergänzung der SFW-Klausel durch weitere Klauseln
• GROUP BY (Gruppierung)
• HAVING (Bedingung für gruppierte Daten)
• ORDER BY (Sortierung der Ergebnisdaten)
ALL
variable
SELECT
ziel-liste
FROM
relation
,
DISTINCT
WHERE
where-Bedingung
GROUP BY
attr-ref
,
HAVING
have-Bedingung
ORDER BY
attr-ref
ASC
DESC
,
nur die Ergebnisdarstellung betreffend
Wintersemester 16/17
DBIS
19
Der „SELECT“- Befehl III
Grundlage für nachfolgende Beispiele:
CREATE TABLE Angest (
AngNr INTEGER PRIMARY KEY,
Name VARCHAR(30),
Wohnort VARCHAR(40),
Beruf VARCHAR(40),
AbtNr INTEGER,
Jahresurlaub INTEGER,
Resturlaub INTEGER)
CREATE TABLE Projekt (
ProNr INTEGER PRIMARY KEY ,
PName VARCHAR(30),
Beschreibung VARCHAR(50),
PLeiter INTEGER)
ANGEST
n
Prozent
Mitarbeit
m
PROJEKT
Wintersemester 16/17
DBIS
CREATE TABLE Mitarbeit (
ProNr INTEGER ,
AngNr INTEGER,
Prozent INTEGER,
PRIMARY KEY (ProNr, AngNr),
FOREIGN KEY (ProNr) REFERENCES
Projekt(ProNr),
FOREIGN KEY (AngNr) REFERENCES
Angest(AngNr))
20
SELECT – Beispiele I
• Beispiel 1: Gesucht sind alle Angestellten jeweils mit Name und Wohnort
die in einer Abteilung mit AbtNr>3 arbeiten. Ausgabe soll nach Name
absteigend sortiert erfolgen und Duplikate sollen nicht eliminiert werden.
SELECT ALL Name, Wohnort
FROM
Angest
WHERE
AbtNr > 3
ORDER BY
Name DESC
• Ergebnis:
• Schlüsselwort ALL erzeugt Multimenge, welche Duplikate erlaubt
• Streng genommen nicht mehr Teil des „rein relationalen“ Modells
• Abweichungen in SQL und Produkten (Performance, Funktionalität)
Wintersemester 16/17
DBIS
21
SELECT – Beispiele II
• Beispiel 2: Gib alle Angestellten aus, die von Beruf 'Hundezüchter' sind
(Selektion)
• Variante 1
SELECT ALL
AngNr, Name, Wohnort, Beruf,
AbtNr, Jahresurlaub, Resturlaub
FROM
Angest
WHERE
Beruf = 'Hundezüchter'
• Variante 2 (ALL ist Default, kann also weggelassen werden)
SELECT
AngNr, Name, Wohnort, Beruf,
AbtNr, Jahresurlaub, Resturlaub
FROM
Angest
WHERE
Beruf = 'Hundezüchter'
Wintersemester 16/17
DBIS
22
SELECT – Beispiele III
• Variante 3 (enthält die Zielliste alle Attribute der Eingangsrelation, darf
statt dessen  geschrieben werden)
SELECT *
FROM
Angest
WHERE
Beruf = 'Hundezüchter'
• DISTINCT in der SELECT-Klausel sorgt für Duplikatelimination
• Verwendung im Beispiel 2 möglich, aber unnötig
• DBMS sollte diese Angabe ignorieren, wenn in der Zielliste der
Primärschlüssel enthalten ist
Wintersemester 16/17
DBIS
23
SELECT – Beispiele IV
• Beispiel 3: Gib für alle Angestellten Beruf und Wohnort aus und zwar in
dieser Reihenfolge (Projektion, „mehr“ als Algebra)
• Variante 1 (WHERE-Klausel entfällt, da alle Angestellten gefragt sind,
alternativ ist „WHERE true“ möglich)
SELECT Beruf, Wohnort
FROM
Angest
• Attributreihenfolge in der Ergebnisrelation bedeutungslos aus „streng
relationaler Sicht“ aber Wesentlich für die Ausgabe/Darstellung zum
Benutzer
Wintersemester 16/17
DBIS
24
SELECT – Beispiele V
• Verwendung von DISTINCT diesmal relevant!
SELECT DISTINCT Beruf, Wohnort
FROM
Angest
• DBMS müsste Duplikate eliminieren, weil der Primärschlüssel (AngNr) im
Ergebnis fehlt
• Duplikatprüfung in der Regel auf sortierter Ergebnisrelation
• Ausgabe dann vermutlich auch sortiert, als Anwender nicht darauf
verlassen sondern bei Bedarf explizit anfordern (ORDER BY)!
Wintersemester 16/17
DBIS
25
SELECT – Beispiele VI
• Beispiel 4: Gib die Namen aller Angestellten mit AbtNr zwischen 2 und 6
aus (Projektion und Selektion)
• Variante 1
SELECT
Name
FROM
Angest
WHERE
AbtNr >= 2 AND AbtNr <= 6
• Variante 2
…WHERE
AbtNr BETWEEN 2 AND 6
• Variante 3
…WHERE
AbtNr IN (2,3,4,5,6)
• Nach IN folgt Multimenge atomarer Werte (die natürlich auch einelementig
oder leer sein darf) oder ein SFW-Ausdruck
Wintersemester 16/17
DBIS
26
SELECT – Beispiele VII
• Beispiel 5: Gib die Attribute Name und Wohnort der Angest-Relation
aufsteigend sortiert nach den Werten des Attributs Name aus
SELECT
Name, Wohnort
FROM
Angest
ORDER BY
Name ASC
• Die ASC-Angabe kann weggelassen werden, da Default
• In welcher Reihenfolge erscheinen die Werte
für Wohnort in der Ausgabe?
 unsortiert bzw. „zufällige“ Reihenfolge
Wintersemester 16/17
DBIS
Name
Abeln
Abeln
Dittrich
Dittrich
Dittrich
Kühne
Kühne
Kühne
Wohnort
Karlsruhe
Mannheim
Jena
Augsburg
Zittau
Zwickau
Leipzig
Leipzig
27
SELECT – Beispiele VIII
• Beispiel 6: Erzeuge eine Ausgabe wie bei Beispiel 5, jedoch sollen
innerhalb einer Namensangabe in der Ausgabe die Wohnorte absteigend
sortiert sein
SELECT
Name, Wohnort
FROM
Angest
ORDER BY Name, Wohnort DESC
Name
Abeln
Abeln
Dittrich
Dittrich
Dittrich
Kühne
Kühne
Kühne
Wohnort
Mannheim
Karlsruhe
Zittau
Jena
Augsburg
Zwickau
Leipzig
Leipzig
• Name 1. Sortierkriterium (1. Priorität),
Wohnort sei 2. Sortierkriterium (2. Priorität)
• Reihenfolge der Sortierkriterien in ORDER BY ist wesentlich!
Wintersemester 16/17
DBIS
28
SELECT – Beispiele IX
• Beispiel 7: Gib die Namen aller Angestellten sowie die Summe von
Jahresurlaub und Resturlaub aus, absteigend sortiert nach dieser Summe
(Existenz der Attribute in Angest vorausgesetzt)
SELECT
Name, Jahresurlaub + Resturlaub
FROM
Angest
ORDER BY
(Jahresurlaub + Resturlaub) DESC
SELECT
Name, Jahresurlaub + Resturlaub
FROM
Angest
ORDER BY
2 DESC
• ORDER BY-Klausel erlaubt die Verwendung einer Attributnummer statt eines
Attributnamens (Position des Attributs in der Zielliste)
• Sinnvoll beim Sortieren komplexer arithmetischer Ausdrücke, die auch in der
Zielliste vorkommen (erspart Redundanz!)
Wintersemester 16/17
DBIS
29
SELECT – Beispiele X
• Beispiel 8: Verwendung von eingebauten Funktionen in SQL, vordefiniert
sind u.a. COUNT, SUM, AVG, MIN, MAX (eigene Funktionen ebenfalls
möglich)
• Wieviele Mitarbeiter arbeiten in unserer Firma?
SELECT COUNT(*)
FROM
Angest
• Wieviele Mitarbeiter wohnen in Erfurt?
SELECT COUNT(*)
FROM
Angest
WHERE
Wohnort = 'Erfurt'
Wintersemester 16/17
DBIS
30
SELECT – Beispiele XI
• Wie lautet die maximale Abteilungsnummer?
SELECT MAX(AbtNr)
FROM
Angest
• Wieviel Tage Resturlaub haben alle Mitarbeiter insgesamt noch?
SELECT SUM(Resturlaub)
FROM
Angest
Wintersemester 16/17
DBIS
31
SELECT – Beispiele XII
• Verwendung von eingebauten Funktionen im Zusammenhang mit der
GROUP BY Klausel
• Beispiel 9: Gib eine Liste der Wohnorte zusammen mit dem
durchschnittlichen Resturlaub der Mitarbeiter aus, die jeweils an diesem
Ort wohnen
SELECT
Wohnort, AVG(Resturlaub) AS MittelResturlaub
FROM
Angest
GROUP BY Wohnort
• Durchschnittsbildung (AVG) wird nicht auf die gesamte Angest-Relation
einmal angewandt, sondern jeweils für eine Gruppierung (Mitarbeiter mit
gleichem Wohnort)
Wintersemester 16/17
DBIS
32
SELECT – Beispiele XIII
SELECT
Wohnort, AVG(Resturlaub) AS MittelResturlaub
FROM
Angest
GROUP BY Wohnort
Wohnort
Aachen
Aachen
Berlin
Erfurt
Erfurt
Erfurt
Resturlaub
14
10
8
6
12
9
Wintersemester 16/17
1. Gruppe (AVG = 12)
2. Gruppe (AVG = 8)
Wohnort
Resturlaub
Aachen
12
Berlin
8
Erfurt
9
3. Gruppe (AVG = 9)
DBIS
33
Ausführungsreihenfolge SFW-Anfrage
1. SELECT ... FROM ... WHERE ... (ohne „built-in functions“)
2. GROUP BY ...
3. „built-in functions“ (SUM, AVG, MAX, ...)
4. HAVING
5. ORDER BY
Wintersemester 16/17
DBIS
34
SELECT – Beispiele XIV
• Formulierung von Gruppierungs-Nebenbedingungen / Auswahl
bestimmter Gruppen
• Beispiel 10: Gib eine Liste der Wohnorte zusammen mit dem
durchschnittlichen und gesamten Resturlaub der Mitarbeiter aus, die
jeweils an diesem Ort wohnen, nicht von Beruf Ingenieur sind und dies
nur für Orte mit mindestens 2 Mitarbeitern
SELECT
Wohnort, AVG(Resturlaub), SUM(Resturlaub)
FROM
Angest
WHERE
Beruf <> 'Ingenieur'
GROUP BY
Wohnort
HAVING
COUNT(*)>=2
Wintersemester 16/17
DBIS
35
SELECT – Beispiele XV
• Beispiel 11: Gib mir jenen Angestellten, der den geringsten Resturlaub
aufweist (soll für eine Beförderung vorgeschlagen werden)
• Variante 1
SELECT
*
FROM
Angest
ORDER BY
Resturlaub
• Liefert gesuchten Angestellten als erstes Tupel
• Zusätzlich aber auch alle anderen Angestellten!
Wintersemester 16/17
DBIS
36
SELECT – Beispiele XVI
• Beispiel 12: Gib mir jenen Angestellten, der den geringsten Resturlaub
aufweist (soll für eine Beförderung vorgeschlagen werden)
• Variante 2
SELECT *
FROM
Angest
WHERE
Resturlaub = (SELECT MIN(Resturlaub) FROM Angest)
• Ausdruck in der WHERE-Bedingung (Subquery) liefert einen Wert
• Bezugnahme in der Subquery „zufällig“ auf gleiche Relation wie in der
Anfrage selbst (Angest)
• Vertiefung von Subquery und multirelationale Anfragen folgt noch
Wintersemester 16/17
DBIS
37
SELECT – Beispiele XVII
• Beispiel 13: Formulierung von unscharfen Suchanfragen (pattern
matching), beispielweise:
„Gib mir die Namen der Angestellten, die vom Beruf Tierzüchter sind“
• Variante 1
SELECT Name
FROM
Angest
WHERE
Beruf = 'Züchter'
• Anfrage liefert keinen Treffer, da 'Züchter' <> 'Hundezüchter'
Wintersemester 16/17
DBIS
38
SELECT – Beispiele XVIII
• Variante 2
SELECT Name
FROM
Angest
WHERE
Beruf = 'Hundezüchter'
• Anfrage liefert 2 Treffer, aber andere Tierzüchter fehlen (z.B. Katzen)
• Variante 3
SELECT Name
FROM
Angest
WHERE
Beruf LIKE '%züchter'
• Anfrage sucht in Spalte „Beruf“ nach allen Attributwerten, die auf 'züchter'
enden
Wintersemester 16/17
DBIS
39
Allgemeines zum Vergleichoperator LIKE
• Anwendbar auf CHARACTER-Attribute fester oder variabler Länge
• Zwei Markierungszeichen („wild cards“):
• An der durch % (Prozentzeichen) markierten Stelle können beliebig viele (auch keine!) zu
ignorierende Zeichen stehen
• An der durch _ (Unterstrich) markierten Stelle wird genau ein Zeichen ignoriert
• % und _ dürfen in einem Suchausdruck beliebiger gemischt vorkommen
• Bsp: Wohnort LIKE 'H%b_rg' liefert Treffer bei Hamburg, Hammelburg, Heidelberg, Humburg,
Hbirg - nicht aber bei Hbrg oder Humbug
• Bsp: Name LIKE 'M_ _er' liefert Treffer bei Meier, Maier, Meyer, Mayer, aber auch bei Mauer etc.
• LIKE darf negiert werden (NOT LIKE)
• Bsp: „Gib mir die Namen aller Angestellten, die vom Beruf nicht Tierzüchter sind“
SELECT Name FROM Angest
WHERE
Wintersemester 16/17
Beruf NOT LIKE '%züchter'
DBIS
40
SELECT – Beispiele XIX
• Phonetische Suche (ähnliche Aussprache) ist im SQL-Standard nicht
abgedeckt, aber in Produkten teilweise vorhanden
• LIKE kennt keine Wortgrenzen
• Textsemantik: Wo hört ein Wort auf, wo ein Satz etc.
• Reines „pattern matching“, das den gesamten Character-Attributwert als eine
unstrukturierte Zeichenkette auffasst und durchsucht
• Anfragen der Art „Finde alle Angestellten, wo im Attribut Stellenbeschreibung
das Wort Datenbank auftritt“ nicht so einfach zu stellen
• Realisierung von LIKE durch das DBMS
• Erfordert häufig sequentielle(!) Suche im Datenbestand (tupelweise)
• Lediglich bei Endmarkierung (z.B. 'Datenbank%' oder 'Datenban_') kann
eventuell vorhandener Baum-Index benutzt werden
Wintersemester 16/17
DBIS
41
Herunterladen