eBizTalk - Berichten, Unterhalten, Weiterbilden
Ob Branchendiskurs, Fachartikel oder ein Blick hinter die Unternehmenskulissen: eBizTalk ist die Plattform, die uns auffordert, unsere Leser über Events und Projekte auf dem Laufenden zu halten. Und uns gegenseitig natürlich auch.

Microsoft Office Automation – Der erste Kontakt

Veröffentlicht am 01.05.2016 von Alexander Müller , Automation , Custom Development

Um die Qualität und Geschwindigkeit bei der Erstellung häufig benötigter Dokumente im Unternehmen zu verbessern, hat eBiz sich mit dem Thema Microsoft Office Automation auseinandergesetzt. In diesem Kontext haben wir die verschiedenen Erweiterungsmöglichkeiten von Microsoft Office näher betrachtet und die gewonnenen Erkenntnisse in diesem Beitrag zusammengefasst.

Das Schreiben von Firmendokumenten wie Rechnungen oder Verträge kann schnell zu einer zeitfressenden Aufgabe werden, sodass andere wichtige Themen in den Hintergrund gedrängt werden. Zusätzlich schleichen sich leicht Fehler ein, vor allem, wenn Dokumente unter Zeitdruck verfasst werden. Um dem entgegenzusteuern, haben wir untersucht, auf welche Weise eine automatische Generierung solcher Dokumente mit Microsoft Office erreicht werden kann.

Erweiterung von Microsoft Office

eBiz setzt, wie die Mehrzahl der Unternehmen, auf die Office Suite aus dem Hause Microsoft. Um diese zu erweitern, bietet Microsoft verschiedene Modelle an, die unter dem Begriff Office Add-Ins geführt und im Speziellen in die drei folgenden Typen untergliedert werden:

  • COM-Add-Ins

    Seit Office 97 lassen sich Office-Anwendungen durch Component Object Model (COM) Add-Ins erweitern. Diese Möglichkeit besteht bis heute, wird aber seit der Einführung der “bequemeren” Visual Studio Tools for Office (VSTO)-Add-Ins selten genutzt.

  • VSTO-Add-Ins

    VSTO-Add-Ins wurden mit Office 2003 eingeführt und erlauben die Entwicklung von Add-Ins unter Verwendung der .NET Plattform und bspw. C# oder VB.NET. Dabei werden aus einer verwalteten Laufzeitumgebung über Primary Interop Assembly (PIA) die Office COM-Schnittstellen verwendet.

  • Office Web-Add-Ins

    Der jüngste Add-In-Typ ermöglicht die Office-Entwicklung mit aktuellen Webtechnologien und ist ab Office 2013 verfügbar. Der Weg soll zukünftig weg vom proprietären Visual Basic for Applications (VBA) und “schwergewichtigen” Add-In-Typen hin zu den weitverbreiteten, webbasierten Sprachen (HTML, CSS, JavaScript usw.) führen. Dazu hat Microsoft eine JavaScript API veröffentlicht und ermöglicht damit die Integration von Web-Inhalten in Office Client-Anwendungen.

Die Qual der Wahl

Die Wahl des geeigneten Typs ist abhängig von den technischen und fachlichen Anforderungen, die an das Add-In gestellt werden. Auch der Bedarf an zukünftigen, zusätzlichen Features muss abgeschätzt werden, da ein nachträglicher Typen-Wechsel eine Neuimplementierung erfordert.

Ein Office Web-Add-In ist dann gut geeignet, wenn

  • Daten mit Webkomponenten visualisiert werden sollen,
  • Inhalte des Dokuments rudimentär verändert werden sollen,
  • das Add-In möglichst einfach verteilt werden soll (Office Store) oder/und
  • Know-How in der Webentwicklung vorhanden ist.

Aber sie unterliegen auch einigen Einschränkungen, die bei der Entscheidung berücksichtigt werden müssen. So lassen sich beispielsweise nur einfache Vorgänge innerhalb des Dokuments automatisieren, und ein Zugriff auf das Host-System ist gar nicht möglich. Dadurch kann ein Großteil der klassischen Office Automatisierungsthemen nicht bedient werden.

Gerade für diese Themen eigenen sich VSTO- und COM-Add-Ins hervorragend, da sie fast uneingeschränkten Zugriff auf die Host-Anwendung bieten und somit Funktionen der Client-Anwendung aufrufen können. Da sie ein gleichwertiges Objekt-Modell verwenden, fällt eine Entscheidung für oder gegen einen der beiden Typen meist auf technischer Argumentationsbasis. Da VSTO-Add-Ins das modernere Programmierkonzept bieten, gehen sie in der Regel als Präferenz hervor.

Fazit

Durch die Einschränkungen der JavaScript Office API, insbesondere was das Thema Automation angeht, ist ein Web-Add-In häufig ungeeignet. Dennoch ist dieser Ansatz durchaus vielversprechend und die zukünftige Entwicklung interessant. Eine Roadmap seitens Microsoft wäre jedoch angebracht. Bei komplexen Anforderungen ist es sinnvoll, direkt ein VSTO-Add-In zu verwenden, um nicht über technische Limitierungen von Web-Add-Ins zu stolpern. Diesen Weg haben auch wir eingeschlagen, und wir haben ihn bisher nicht bereut!

google_about_ebiz fb_about_ebiztwitter_about_ebizxing_about_ebiz
ebiz_consulting_expertise

.NET Mocking Frameworks im Vergleich

Veröffentlicht am 31.08.2015 von Kevin Setiono , Custom Development

Mocking Frameworks gibt es reichlich, und aus der großen Auswahl das Richtige zu wählen, fällt nicht immer leicht. Auch im .NET Umfeld gibt es einige Vertreter mit unterschiedlichen Stärken und Schwächen. Je nach Anforderungsprofil findet damit jeder den passenden Helfer.

Im letzten Artikel dieser Serie “Einführung in Mocking Framework” haben wir vorgestellt, was Mocking Frameworks grundsätzlich sind, und gezeigt, unter welchen Aspekten diese Frameworks sich vergleichen lassen. Im Folgenden knüpfen wir daran an und stellen verschiedene Mocking Frameworks aus dem .NET Umfeld vor und vergleiche diese.

Welche Mocking Frameworks gibt es für .NET?

Es gibt viele Mocking Frameworks, und während Sie diesen Blogartikel lesen, werden wahrscheinlich gerade neue entwickelt. Um eine verwertbare Analyse zu erstellen, müssen wir Abgrenzungen schaffen. Unsere erste Abgrenzung ist: Wir wollen ein quelloffenes Framework und das kostenfrei bzw. ein Open Source Framework. Die Liste der Frameworks war auch nach diesem Kriterium sehr groß, weswegen wir entschieden haben: Wir folgend dem Trend!

Die Trend-Liste besteht nach unseren Recherchen aus folgenden Mocking Frameworks im .NET Bereich:

  • NSubstitute
  • FakeItEasy
  • Moq
  • Rhino Mocks

Aktivität

Werden die Open Source Projekte gewartet, bzw. beteiligt sich die Community noch an dem Projekt? Ansonsten müssen interne Entwickler Fehler im Framework beheben. Das erzeugt Kosten und verlangsamt die Lernkurve.

Release Cycle

In Open Source Projekten gibt es Stable Releases. In großen Softwareprojekten wollen wir uns ungern auf Software verlassen, die keine Qualitätssicherung durchlaufen hat.

Anwendbarkeit

Sie betrifft die Syntax, die Lernkurve und die Dokumentation. Die Dokumentation in Open Source Projekten kommt leider oft zu kurz. Das Problem an fehlender Dokumentation ist, dass in den Quellcode geschaut werden muss. Die Lernkurve steigt – und mit ihr auch die Kosten. Der Elan, mit dem die Entwickler mit dem Framework arbeiten, sinkt dadurch vermutlich auch. Das ist aus meiner Sicht ein nicht unerheblicher Punkt, denn glückliche Mitarrbeiter arbeiten lieber und besser.

Google Trend

Google Trend ist eine Analyse von Google, die die Suchfrequenz von Begriffen über die Zeit verfolgt. Wir analysieren mit Google Trend die Marktverbreitung bzw. wie oft Entwickler nach dem jeweiligen Mocking Framework bei Google eingeben.

Moq

Moq wird stetig weiterentwickelt. Die letzte Änderung am Quellcode ist aktuell ungefähr einen Monat her. Der Release Cycle von Moq ist nicht ganz so erfreulich, das letzte Release kam 2013 heraus. Die Dokumentation ist nicht ausführlich, sozusagen minimal. Es lassen sich aber im Internet viele Beispiele finden, weil Moq einen großen Bekanntheitsgrad hat und sich intuitiv anwenden lässt. Moq liegt – obwohl es eines der ältesten .NET Mocking Frameworks ist – im Trend, was sich mit Google Trends nachweisen lässt. Die Google Trends Kurve steigt stetig.

Rhino Mocks

Rhino Mocks wurde seit 2010 nicht mehr weiterentwickelt, somit ist auch der Release Cycle nicht relevant. Rhino Mocks ist leider, wie die Entwicklung vermuten lässt, veraltet und der Google Trend geht stark zurück. Sehr positiv fällt bei Rhino Mocks dennoch die Dokumentation aus, die ausführlich und einfach verständlich ist. Mock Beispiele sind dennoch sehr häufig im Internet zu finden, was auf das Alter zurückzuführen ist.

NSubstitute

Die Community und der Release Cycle sind auf Zack. Es werden im Jahr mehrere Releases erzeugt. Der Trend von NSubstitute geht nach oben. Es ist anzunehmen, dass NSubstitute eine ernstzunehmende Konkurrenz für Moq ist. Die Dokumentation ist ausführlich und leicht verständlich. Die Syntax ist “state of the art”, es ist eine Fluent API.

FakeItEasy

Wie bei NSubstitute ist der Release Cycle und die Community aktiv. Es werden ebenfalls mehrere Releases im Jahr erzeugt. Der Trend von FakeItEasy ist seit circa einem Jahr konstant hoch, somit ist auch FakeItEasy eine ernstzunehmende Konkurrenz für Moq und NSubstitute. Auch hier gilt: Die Syntax ist “state of the art”, es ist eine Fluent API.

Ein kurzer Direktvergleich von FakeItEasy, NSubstitute und Moq

Alle drei Mocking Frameworks unterstützen Fluent API. Fluent APIs sind “state of the art”, da die Syntax einfacher lesbar ist. Die Frameworks sind aufgrund der gleichen API Syntax und Technologiebasis ähnlich. NSubstitute verwendet keine Lambda Ausdrücke, die anderen beiden dagegen schon.

Die unterstützten Features der einzelnen Mocking Frameworks unterscheiden sich nur in kleinen Details, die meines Erachtens für eine erste Auswahl nicht relevant sind. Sollte das Team mit einen der Mocking Frameworks Erfahrungen haben, ist dies entscheiender als die Feature-Unterschiede.

Im nächsten Artikel werden wir ein ausgewähltes Mocking Framework detaillierter betrachten. Welches Mocking Framework es wird, wollen wir noch nicht verraten …

google_about_ebiz fb_about_ebiztwitter_about_ebizxing_about_ebiz
ebiz_consulting_expertise

SQL Server 2014 – “In Memory”

Veröffentlicht am 01.12.2014 von Ireen Raue , Custom Development

Mit dem neuen SQL Server ist eine In Memory-Technologie auch ohne teure Erweiterungen oder High End Geräte möglich – wenn auch nicht ganz ohne Einschränkungen…

Der SQL Server 2014 wurde im Februar 2014 in San Francisco offiziell freigegeben. Microsoft bietet ihn in drei Versionen an – “Standard” mit Basis-Datenbank, Reporting- und Analysefunktionen, “Business Intelligence” mit erweiterten Reporting- und Analysefunktionen und Self-Service-BI sowie “Enterprise” für geschäftskritische Anwendungen und Data Warehousing.

Die wohl entscheidende Erweiterung ist eine neue Technologie, die eine In Memory Verarbeitung der Daten ermöglicht. Hier kann auf Tabellen-Ebene entschieden werden, welche Daten im Arbeitsspeicher gehalten werden sollen. Dadurch wird die bestehende Hardware optimal ausgenutzt. 

Codename Hekaton

Die Datenbankengine dafür entstand unter dem Namen Hekaton. Hier wurde mit OLTP (Online Transaction Processing) eine Arbeitsspeicheroptimierung eingearbeitet, die es ermöglicht, einzelne Tabellen im Arbeitsspeicher zu halten und damit langwierige Lese- und Schreibzugriffe zu verringern.

 112414_1926_SQLServer202.png

Vereinfachte Darstellung der SQL Server Engine inkl. der In-Memory OLTP Komponenten

Das Wissen, welche Daten hochtransaktional sind, ist dafür grundlegend, das heißt das Nutzungsverhalten der DB sollte zu Beginn und auch später in regelmäßigen Abständen analysiert werden, um die relevanten Tabellen zu identifizieren.  Auch hierfür werden entsprechende Analysetools angeboten. 

Transaktionsleistungssammler

Für die Migration bestehender Datenbanken stellt Microsoft das Tool AMR (Analysis, Migrate and Report) bereit, das die Tabellen analysiert, die sich für die Verlagerung in den Arbeitsspeicher eignen. Damit lassen sich gezielt diejenigen Tabellen in den Arbeitsspeicher verschieben, die hohe Zugriffe aufweisen. Dabei hat sich die Handhabung des Microsoft SQL Servers 2014 durch die neue Technologie kaum verändert. Tabellen können weiterhin mit den herkömmlichen SQL Statements abgefragt werden, unabhängig davon ob es sich um ganz normale oder ‚InMemory’-Tabellen handelt.

Über das SQL Management Studio 2014 ist auch die Analyse von z.B. 2008 SQL Server DBs möglich. So kann bereits im Vorfeld ermittelt werden, ob bei der Migration auf 2014 auch die ‚InMemory’-Technologie genutzt werden kann, da hierfür nicht alle Tabellen geeignet sind.

Zu dem Vorteil des schnelleren Zugriffs kommen ein paar Nachteile oder Stolpersteine, die eine Migration zu einer ‚InMemory’-Tabelle erschweren.

Dazu gehören unter anderem:

  • kein ALTER einer bestehenden Tabelle hin zu einer ‚In-Memory’-Tabelle möglich, dies funktioniert nur über CREATE-TABLE à man muss eine neue Tabelle anlegen und die Daten migrieren
  • Hinzufügen eines Index nur beim Create der Tabelle möglich
  • keine Check oder Foreign Key Constrains möglich à damit zwingend über SPs erforderlich.
  • keine Nutzung von Trigger möglich
  • keine berechneten Spalten. 

Außerdem muss die Arbeitsspeicherauslastung gut überwacht werden. Ist die Datenmenge größer als der verfügbare Arbeitsspeicher, wird ein Fehler geworfen. Um diesen Fall zu verhindern, gibt es neue Reports im SQL Server, die die Nutzung des Arbeitsspeichers zeigen.

Eine kostenlose Testversion von SQL Server 2014 können Interessierte bei Microsoft herunterladen oder in der Azure-Cloud ausprobieren.

google_about_ebiz fb_about_ebiztwitter_about_ebizxing_about_ebiz
ebiz_consulting_expertise

Einführung in Mocking Framework

Veröffentlicht am 03.11.2014 von Kevin Setiono , Custom Development

Die Blog-Serie “Mocking Frameworks” durchleuchtet das Thema Mocking aus Sicht des Managements und aus technischer Sicht. “Was sind Mocking Frameworks?”, “Wie wähle ich das korrekte Mocking Framework aus?” und “Warum ist Mocking wichtig?” sind Fragen, die dieser Artikel beantwortet. Im Verlauf der Serie werden vertiefte Einblicke in die technische Anwendung und Funktionsweise von Mocking Frameworks gewährt.

Die Thematik “Mocking Frameworks” lässt sich aus verschiedenen Perspektiven betrachten. Um das Thema im vollständig zu erfassen, werden mehrere Artikel zu einer Blog-Serie zusammengefasst. Heute: “Was sind Mocking Frameworks?” Der Artikel geht der Frage auf den Grund: “Wie wähle ich das richtige Mocking Framework?”. Die nächsten Artikel sind der technischen Anwendung und Funktionsweise von Mocking Frameworks gewidmet.

Was sind Mocking Frameworks?

Mocking Frameworks bieten die Rahmenstruktur zur Erstellung, Manipulation und Kontrolle von Mock Objekten. Diese “Mocks” sind Objekte, die das Verhalten von realen Objekten simulieren. Daher kommen Mocking Frameworks im Rahmen der Qualitätssicherung von Software im Bereich des Testing zum Einsatz. Simulierte Teile (Units) der Software werden mit den “Mocks” abgegrenzt, um den Fokus auf den zu testenden Teil (Unit) der Software zu legen.

Zum Beispiel: Eine Software chiffriert Daten mit einem Schlüssel. Um die Verschlüsselung zu testen, sollte es irrelevant sein, woher der Schlüssel kommt. Der Test für die Verschlüsselung sollte ebenfalls weiterhin erfolgreich sein, wenn sich im Produktiv-System der Schlüssel ändert. Das Generieren des Schlüssels wird auf einen fixen Wert gemockt.

Ein Mock könnte wie folgt aussehen:

interface IKey
{   
    /// <summary>
    /// Holt einen Schlüssel
    /// </summary>
    string GetKey();
}

Mock<IKey> mock = new Mock<IKey>();
mock.Setup("GetKey").Returns("ExampleKey");

Was ist die Definition von einem Mock (Fake, Stub)?

Im Artikel wird das Wort “Mock” als Überbegriff für “Fake” und “Stub” verwendet. Alle drei Begriffe stehen für das Abgrenzen von Software Teilen, unterscheiden sich aber in ihrem Verhalten.

Der Fake ist ein Mock, der lediglich den simulierenden Teil der Software in einer vereinfachten Variante zur Verfügung stellt.

Ein Stub enthält im Vergleich zu einem Fake kaum bis keine Logik, aber sammelt meistens Informationen über die simulierten Funktionen der Software, beispielsweise: “Wie wurde die Methode ‚GetKey’?” aufgerufen.

Mocks sind eine Mischung von Fake und Stub. Sie können einen Teil der Software simulieren wie ein Fake und sammeln dabei Informationen wie ein Stub. Darüber hinaus ermöglicht ein Mock dem Test, Erwartungen zu definieren. Beispielweise kann ein Test validieren, dass die Methode ‚GetKey’ nur einmal aufgerufen wird. Ein anderer Test kann den Mock natürlich anpassen, um beispielsweise zu definieren, dass die Methode ‚GetKey’ 10x oder niemals aufgerufen wird.

Gründe für das Verwenden von Mocking Frameworks?

Einen Grund haben wir vorweg genommen: Unit Tests sind ohne ein Mock der Umgebung meistens nicht möglich, da der zu testende Teil der Software meistens nicht ohne den nicht zu testenden Teil der Software funktioniert.
Unit Tests ermöglichen das Finden von Fehlern und bei Änderungen am Quellcode wird schnell ersichtlich, was alles nicht mehr wie gewollt funktioniert.

Ein weiterer Grund, Mocks zu verwenden ist das spezifizieren von Software. Im Grunde genommen wird die Vorgehensweise umgedreht. Es wird zuerst ein Test erstellt, der ein Unit (Modul) verwendet, das über ein Mock benutzt wird. Nachdem der Test erstellt wurde, wird die Produktiv-Implementierung erstellt/erweitert, um dem Test im Produktivsystem gerecht zu werden. Diese Vorgehensweise findet sich zum Beispiel im Test-Driven-Development wieder.

Herausforderungen bei Mocking?

Das Simulieren der Umgebung kann auch mit einer “normalen” Software Implementierung umgesetzt werden. Es entwickelt sich oft eine Art “Tunnelblick”; für alles werden Mocks erstellt. Wird ein Mock sehr kompliziert, kann es teilweise einfacher sein, eine weitere Testklasse einem Mock vorzuziehen. Außerdem muss beachtet werden, dass das Entwicklerteam mit einem Mocking Framework umgehen kann. Das Entwicklerteam muss am Anfang bei der Testerstellung umdenken und ggf. lernen, mit dem Mocking Framework umzugehen. In kleineren Projekten kann das Benutzen von Mocking Frameworks eine große Investition darstellen.

Das eine Mocking Framework unter vielen

Die Mocking Frameworks lassen sich unter vielen Aspekten vergleichen. Die wichtigsten Vergleichspunkte sind:

  1. Marktanteile
    Die Verbreitung der verwendeten Mocking Frameworks ist ein Punkt, der nicht unterschätzt werden darf. Die Marktverbreitung entscheidet darüber, wie gut Informationen im Internet über Herausforderungen und deren Lösungen gefunden werden. Außerdem ist es bei Investitionen wie für das Einarbeiten in ein Mocking Framework immer wichtig, dass das angeeignete Wissen zum Einsatz kommt. Bei weit verbreiteten Mocking Frameworks ist die Chance größer, diese in unterschiedlichen Projekten wiederzufinden.
  2. Mock Möglichkeiten
    Fast alle Mocking Frameworks unterstützen das Mocken/Faken von Interfaces, aber es kann nötig sein, abstrakte Klassen oder konkrete Klassen zu simulieren. Die benötigten Features sind projektabhängig. Auf einem Green Field kann auch kontrolliert werden, dass nicht vorhandene Features umgangen werden.
  3. Mehrfaches Mocken
    Tests benötigen oft mehrere Mocks, da sie von mehreren Units (Modulen) abhängig sind und diese simultan simuliert werden müssen.
  4. Multi-Thread
    Die Multi-Thread-Fähigkeit kann wichtig sein, falls Multi-Thread-Tests benötigt werden.
  5. Preis
    Der Preis ist als letzter Punkt aufgelistet, das die meisten Mocking Frameworks im C# Bereich kostenlos zur Verfügung stehen.

Zusammenfassung

Software, die auf Herz und Nieren getestet wird und somit mit einem guten Gewissen ausgerollt werden kann, wird meistens mittels Mocking Frameworks testfähig gemacht. Es gibt viele verschiedene Mocking Frameworks und es gibt viele Entscheidungskriterien, nach denen ein Mocking Framework ausgewählt werden kann. Das Wissen über diese Frameworks lässt sich erfahrungsgemäß gut auf andere übertragen, somit ist am Anfang nicht entscheidend, welches, sondern eher, dass überhaupt Wissen über Mocking Frameworks im Team vorhanden ist.

Im nächsten Artikel werden wir mehrere Mocking Frameworks für .NET vorstellen und miteinander vergleichen.

google_about_ebiz fb_about_ebiztwitter_about_ebizxing_about_ebiz
ebiz_consulting_expertise

DBJoins oder “Wie verknüpfe ich Datenbank-Tabellen richtig!”

Veröffentlicht am 26.09.2014 von Ireen Raue , Custom Development

Nachfolgend findet ihr eine kleine Übersicht, welche Joins es im (T-)SQL gibt und wie sich diese auf das Ergebnis einer Abfrage auswirken.

Als Ausgangspunkt haben wir die zwei folgenden Tabellen

SELECT * FROM Obst

SELECT * FROM Baum

ID

Obstname

1 Apfel
2 Birne
3 Erdbeere
4 Pfirsich
5 Kirsche
6 Heidelbeere

ID

Baumname

1 Pfirsich
2 Apfel
3 Birne
4 Linde
5 Kastanie
6 Kirsche

 

INNER JOIN

Mit einem INNER JOIN erhält man alle Datensätze, die über die Join-Bedingung in beiden Tabellen vorhanden sind, wobei das Wort “INNER” auch weggelassen werden kann. Ein einfacher Join ist immer ein Inner Join.

SELECT * FROM Obst
INNER JOIN Baum ON Obst.Obstname=Baum.Baumname

SELECT * FROM Obst
JOIN Baum ON Obst.Obstname=Baum.Baumname

ID

Obstname

ID

Baumname

1 Apfel 2 Apfel
2 Birne 3 Birne
4 Pfirsich 1 Pfirsich
5 Kirsche 6 Kirsche

 

OUTER JOIN

Ein OUTER JOIN gibt alle Datensätze aus beiden Tabellen aus. Verknüpft werden dabei die Zeilen, die der Join-Bedingung entsprechen. Dort wo es keine Entsprechung in der anderen Tabelle gibt, werden NULL-Werte ausgegeben.

Es wird unterschieden, ob man alle Zeilen von einer Tabelle oder von beiden Tabellen erhalten möchte. Das heißt es sind immer die Zusätze LEFT, RIGHT oder FULL erforderlich und das Wort OUTER ist wie INNER optional.

LEFT OUTER JOIN

Mit einem LEFT OUTER JOIN erhält man alle Datensätze der linken Tabelle inklusive der Entsprechungen aus der rechten Tabelle.

SELECT * FROM Obst
LEFT OUTER JOIN Baum ON Obst.Obstname=Baum.Baumname

SELECT * FROM Obst
LEFT JOIN Baum ON Obst.Obstname=Baum.Baumname

ID

Obstname

ID

Baumname

1 Apfel 2 Apfel
2 Birne 3 Birne
3 Erdbeere NULL NULL
4 Pfirsich 1 Pfirsich
5 Kirsche 6 Kirsche
6 Heidelbeere NULL NULL

 

Wenn man nur die Datensätze der linken Tabelle ohne Verknüpfung zu der rechten Tabelle als Ergebnis haben möchte, kann man diese über die WHERE-Klausel ausschließen.

SELECT * FROM Obst
LEFT OUTER JOIN Baum ON Obst.Obstname=Baum.Baumname
WHERE Baum.ID IS NULL

ID

Obstname

ID

Baumname

3 Erdbeere NULL NULL
6 Heidelbeere NULL NULL

 

RIGHT OUTER JOIN

Mit einem RIGHT OUTER JOIN erhält man alle Datensätze der rechten Tabelle inklusive der Entsprechungen aus der linken Tabelle.

SELECT * FROM Obst
RIGHT OUTER JOIN Baum ON Obst.Obstname=Baum.Baumname

SELECT * FROM Obst
RIGHT JOIN Baum ON Obst.Obstname=Baum.Baumname

ID

Obstname

ID

Baumname

4 Pfirsich 1 Pfirsich
1 Apfel 2 Apfel
2 Birne 3 Birne
NULL NULL 4 Linde
NULL NULL 5 Kastanie
5 Kirsche 6 Kirsche

 

Möchte man nur die Datensätze der rechten Tabelle ohne Verknüpfung zu der linken Tabelle im Ergebnis, kann man diese über die WHERE-Klausel ausklammern.

SELECT * FROM Obst
RIGHT OUTER JOIN Baum ON Obst.Obstname=Baum.Baumname
WHERE Obst.ID IS NULL

 

ID

Obstname

ID

Baumname

NULL NULL 4 Linde
NULL NULL 5 Kastanie

 

FULL OUTER JOIN

Mit einem FULL OUTER JOIN erhält man alle Datensätze aus beiden Tabellen. Die Zeilen mit einer Entsprechung in der anderen Tabelle sind dann mit Werten gefüllt, die ohne Entsprechung enthalten NULL.

SELECT * FROM Obst
FULL OUTER JOIN Baum ON Obst.Obstname=Baum.Baumname 

SELECT * FROM Obst
FULL JOIN Baum ON
Obst.Obstname=Baum.Baumname 

SELECT * FROM Obst
LEFT OUTER JOIN Baum ON Obst.Obstname=Baum.Baumname
UNION
SELECT * FROM Obst
RIGHT OUTER JOIN Baum ON Obst.Obstname=Baum.Baumname

ID

Obstname

ID

Baumname

1 Apfel 2 Apfel
2 Birne 3 Birne
3 Erdbeere NULL NULL
4 Pfirsich 1 Pfirsich
5 Kirsche 6 Kirsche
6 Heidelbeere NULL NULL
NULL NULL 4 Linde
NULL NULL 5 Kastanie

 

Wenn man nur die Datensätze beider Tabelle ohne Verknüpfung zur anderen Tabelle auslesen möchte, kann man diese über die WHERE-Klausel ausklammern.

SELECT * FROM Obst
FULL OUTER JOIN Baum ON Obst.Obstname=Baum.Baumname
WHERE Obst.ID IS NULL OR
Baum.ID IS NULL

ID

Obstname

ID

Baumname

3 Erdbeere NULL NULL
6 Heidelbeere NULL NULL
NULL NULL 4 Linde
NULL NULL 5 Kastanie

  

CROSS JOIN

Zu guter Letzt gibt es noch den CROSS JOIN. Hiermit werden alle Datensätze der einen Tabelle mit allen Datensätzen der anderen Tabelle verknüpft. Das Ganze wird auch “Kartesisches Produkt” genannt.

Die Zeilenanzahl des Ergebnisses ergibt sich also aus:

Anzahl Zeilen der einen Tabelle *Anzahl Zeilen der anderen Tabelle

In unserem Beispiel: 6*6=36.

Das graphisch darzustellen, ist ein bisschen schwierig. Man stelle sich einfach eine dicke schwarze Wolke vor.
Auf diese Art des Joins sollte man bei großen Tabellen aus Performance-Gründen allerdings besser verzichten. 

SELECT * FROM Obst
CROSS JOIN Baum

SELECT * FROM Obst, Baum

ID

Obstname

ID

Baumname

1 Apfel 1 Pfirsich
2 Birne 1 Pfirsich
3 Erdbeere 1 Pfirsich
4 Pfirsich 1 Pfirsich
5 Kirsche 1 Pfirsich
6 Heidelbeere 1 Pfirsich
1 Apfel 2 Apfel
2 Birne 2 Apfel
3 Erdbeere 2 Apfel
4 Pfirsich 2 Apfel
5 Kirsche 2 Apfel
6 Heidelbeere 2 Apfel
1 Apfel 3 Birne
2 Birne 3 Birne
3 Erdbeere 3 Birne
4 Pfirsich 3 Birne
5 Kirsche 3 Birne
6 Heidelbeere 3 Birne
1 Apfel 4 Linde
2 Birne 4 Linde
3 Erdbeere 4 Linde
4 Pfirsich 4 Linde
5 Kirsche 4 Linde
6 Heidelbeere 4 Linde
1 Apfel 5 Kastanie
2 Birne 5 Kastanie
3 Erdbeere 5 Kastanie
4 Pfirsich 5 Kastanie
5 Kirsche 5 Kastanie
6 Heidelbeere 5 Kastanie
1 Apfel 6 Kirsche
2 Birne 6 Kirsche
3 Erdbeere 6 Kirsche
4 Pfirsich 6 Kirsche
5 Kirsche 6 Kirsche
6 Heidelbeere 6 Kirsche

 

Alternativen

Manchmal brauch man gar nicht unbedingt einen Join für das gewünschte Ergebnis. Mit EXCEPT, INTERSECT oder Subselects lassen sich ebenfalls ähnlich Ergebnisse erzielen. Es kommt aber immer darauf an, was als Ergebnis erwartet wird.

Mit INTERSECT oder einem Subselect bekommt man z.B. die gleichen Daten wie bei einem Inner join.

SELECT Obstname FROM Obst
INTERSECT
SELECT Baumname FROM Baum 

SELECT Obstname FROM Obst
WHERE Obstname IN
(SELECT Baumname FROM Baum)

Obstname

Apfel
Birne
Kirsche
Pfirsich

 

Mit EXCEPT oder einem Subselect kann man die Daten aus der 2. Tabelle aus dem Ergebnis ausschließen.

SELECT Obstname FROM Obst
EXCEPT
SELECT Baumname FROM Baum

SELECT Obstname FROM Obst
WHERE Obstname NOT IN
(SELECT Baumname FROM Baum)

Obstname

Erdbeere
Heidelbeere

 

Zusammenfassung

 

google_about_ebiz fb_about_ebiztwitter_about_ebizxing_about_ebiz
ebiz_consulting_expertise