SQL Grundkurs 2: Aufgaben und Lösungen

Beispiel 11: Mehrere Kriterien mit AND und OR – IS, IN()

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Geben Sie alle männlichen Mitarbeiter aus, die in Österreich wohnen und entweder ein Studium abgeschlossen haben oder erst ab 2007 eingestellt worden sind. Mitarbeiter bestimmter Abteilungen sollen allerdings nicht mit ausgegeben werden.

Transkript

In diesem Video geht es um eine Aufgabenstellung bei der es gilt, mehrere Bedingungen in der WHERE-Klausel miteinander zu kombinieren. Gefragt sind aus der Personal Tabelle alle männlichen Mitarbeiter, die in Österreich wohnen, das heißt hier tauchen nur männliche Vornamen auf, und in der Spalte land, im Länderkürzel, finden wir nur ein A. Ausserdem müssen diese entweder ein Studium abgeschlossen haben, das heißt in der Spalte akadgrad gibt es einen Eintrag, oder aber, wenn sie nicht Akademiker sind, erst ab 2007 und nicht früher eingestellt worden sein. Zusätzlich wollen wir Mitarbeiter aus den Abteilungen Controlling und Finanzbuchhaltung, das Kürzel CO und FB, nicht mit ausgeben. Mit anderen Worten, die Einschränkung nicht Controlling und nicht Finanzbuchhaltung gilt für alle, genauso wie A für alle gilt und männlich für alle. Wahlweise gilt zusätzlich, entweder sie müssen einen akademischen Grad haben, oder ein Eintrittsdatum ab 2007. Für eine schönere Optik können wir auch das Datum gerne in einem deutschen Format ausgeben. Dazu müssen wir den ursprünglichen Spaltennamen als Aliasnamen wieder eingeben, damit er auch wieder an dieser Stelle angezeigt wird. Achten Sie beim Sortieren darauf, dass nach dem Formatieren hier ein Text und kein Datum mehr in dieser Spalte zu finden ist. Achten Sie ausserdem beim Filtern darauf, wie Sie ein Datumsformat korrekt eingeben, für die Einschränkung ab 2007. Verwenden Sie eine der Varianten Standardformat, explizite Konvertierung mit einer Konvertierungsfunktion, oder Sie setzen auf Session-Ebene das Datumsformat. Was Sie verwenden überlasse ich Ihnen. Pausieren Sie nun das Video und lösen Sie die Aufgabe. Wenn Sie damit fertig sind, fahren Sie mit dem Video fort und sehen Sie sich meine Musterlösung an. Wir beginnen im Vergleich der Lösungen hier mit MySQL. Neben den Spalten, die wir ausgegeben haben, finde ich hier die FORMAT-Funktion DATE_FORMAT, um das Datum entsprechend zu formatieren. Den ursprünglichen Spaltennamen AS eintritt, habe ich wieder als Aliasname vergeben, daher müssen wir beim Sortieren zum Beispiel darauf achten, dass wir nicht ORDER BY eintritt verwenden, denn dann würde nach diesem Text sortiert werden, der nun nach der Formatierung dieser Spalte vorzufinden ist. Dadurch, dass wir den Namen der Tabelle der Spalte voranstellen, verweisen wir explizit auf die ursprüngliche Datumsspalte, und die Sortierung passt. Wie schaut nun unsere WHERE-Klausel aus? Die erste Bedingung ist, entweder Akademiker, das heißt akadgrad IS NOT NULL, NOT NULL Werte oder NULL Werte müssen wir mit der Operation IS filtern, oder das Eintrittsdatum OR eintritt = und ich habe hier das ISO-Format verwendet unter MySQL '2007-01-01', um alle ab 2007 zu filtern. Dieses Format wird unter MySQL immer korrekt interpretiert. Da nur wahlweise eine dieser zwei Bedingungen gelten soll oder muss, und alle weiteren Bedingungen mit Und (AND) ergänzt werden, muss diese hier in runde Klammern gesetzt werden. Alle anderen Bedingungen die erfüllt werden müssen, werden nun mit AND ergänzt. AND geschlecht = 2, für männlich, AND land = 'A', um nur die Österreicher zu filtern, AND abtlg != 'FB', ungleich können wir in ANSI SQL ja entweder mit !=, oder in dieser Form < hier schreiben, das macht keinen Unterschied, und auch nicht Controlling, und damit, wenn wir diese Anweisung ausführen, kommen diese vier Zeilen heraus. Als Alternative - wie könnte man das hier noch lösen? Diese zwei Bedingungen abtlg ! 'FB', AND != 'CO', könnten wir auch zu einer Bedingung zusammenfassen. Dazu habe ich jetzt hier diese Form verwendet, abtlg NOT IN, mit NOT IN können wir das in dieser Variante auch lösen. Da habe ich nur eine Bedingung, mit NOT, dem logischen NOT, drehe ich das um, IN würde mir die aus den beiden Abteilungen liefern, NOT IN genau das Gegenteil. Ich sehe hier fehlen noch die Bindestriche als Separatoren, und wenn ich diese Anweisung ausführe, bekommen wir exakt dasselbe Ergebnis. Wechseln wir nun zum Microsoft SQL Server. Was ist hier anders? Die Grundlogik ist dieselbe. Sie sehen der einzige Unterschied ist darin zu finden, wie gebe ich das Format ein für das Datum, da verwende ich zum Beispiel dieses Format, das ist das Standardformat beim Microsoft SQL Server, das immer korrekt interpretiert wird. unabhängig von den Datumseinstellungen, dann brauche ich mich nicht weiter darum kümmern, ob auf Session-Ebene zum Beispiel englisches oder deutsches Format vorherrscht. Sonst ist die WHERE-Klausel dieselbe, das heißt, nur die Bindestriche fehlen hier unten natürlich, um das Datum zu formatieren für die Ausgabe verwenden wir hier eine andere Funktion, zum Beispiel die Funktion CONVERT, und das liefert uns dieses Ergebnis. Wahlweise können wir natürlich auch hier, entweder die FORMAT-Funktion einsetzen, zum Beispiel hier mit einem benutzerdefinierten Format, brauche ich dann keine Culture mehr, und auch hier mit NOT IN die Variante, um alle, außer aus diesen beiden Abteilungen, mit NOT IN herauszufiltern. Und zum Abschluss noch die Variante unter Oracle. Auch hier kleine Unterschiede, wir verwenden die Funktion TO_CHAR um das Datum sauber zu formatieren, aber auch hier verwende ich die Funktion TO_DATE, um die Eingabe des Datums sauber zu machen, da gibt es ja kein Standardformat unter Oracle, also verwende ich die Variante der expliziten Datentypkonvertierung, mit TO_DATE, das Gegenstück zu TO_CHAR geben wir dieses Datum als Text an, und über das FORMAT teilen wir dem System mit, wie es zu interpretieren ist. Gleichbleibend kann ich auch hier NOT IN verwenden, um diese zwei Abteilungen auszuschließen. Wir müssen also bei diesem Beispiel darauf achten, wie wir ein Datum formatiert eingeben, damit es korrekt interpretiert wird, für das Filtern nach dem Ja. Die anderen Bedingungen, die wir mit AND ergänzen, können wir hier der Reihe nach ohne Klammern dazuschreiben, nachdem hier ein OR verwendet wird, benötigen wir hier runde Klammern. Die zwei Bedingungen, nicht aus den Abteilungen Finanzbuchhaltung und Controlling, können wir wahlweise mit den zwei Bedingungen mit ungleich !=, oder auch elegant mit NOT IN lösen.

SQL Grundkurs 2: Aufgaben und Lösungen

Vertiefen Sie Ihre SQL-Kenntnisse. In diesem Workshop erhalten Sie zahlreiche Beispielaufgaben, die Sie selbst lösen können. Anschließend zeigt Ihnen der Trainer die Lösung.

7 Std. 41 min (61 Videos)
Derzeit sind keine Feedbacks vorhanden...

Dieses Training setzt SQL-Kenntnisse voraus, wie sie beispielsweise in „SQL lernen und anwenden“ vermittelt werden.

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!