Daten einschränken und sortieren
Die wesentlichen Funktionen der SELECT-Anweisung sind Auswahl, Projektion und Verknüpfung. Das Anzeigen bestimmter Spalten aus einer Tabelle wird als Projektoperation bezeichnet. Wir werden uns nun darauf konzentrieren, bestimmte Ausgabezeilen anzuzeigen. Dies wird als Auswahloperation bezeichnet. Bestimmte Zeilen können durch Hinzufügen einer WHERE-Klausel zu einer SELECT-Abfrage ausgewählt werden. Tatsächlich wird die WHERE-Klausel direkt nach der FROM-Klausel in der SELECT-Abfragehierarchie angezeigt. Die Reihenfolge muss in allen Szenarien eingehalten werden. Bei Verstößen löst Oracle eine Ausnahme aus.
Syntax:
SELECT *|{[DISTINCT] column| expression [alias],..}
FROM table
[WHERE condition(s)]
In der Syntax
WHERE-Klausel ist das Schlüsselwort
[Bedingung] enthält Spaltennamen, Ausdrücke, Konstanten, Literale und einen Vergleichsoperator.
Angenommen, Ihr Manager arbeitet am vierteljährlichen Budget für Ihr Unternehmen. Im Rahmen dieser Aktivität ist es erforderlich, eine Liste der wesentlichen Details jedes Mitarbeiters zu erstellen, jedoch nur für Mitarbeiter, die jährlich mindestens 25.000 US-Dollar erhalten. Die folgende SQL-Abfrage führt diese Aufgabe aus. Beachten Sie die Verwendung der fett gedruckten WHERE-Klausel.
SELECT Employee_ID, Last_Name, First_Name, Salary
FROM employees
WHERE Salary >= 25000;
EMPLOYEE_ID LAST_NAME FIRST_NAME SALARY
---------- --------------- --------------- -----------
88303 Jones Quincey $30,550.00
88404 Barlow William $27,500.00
88505 Smith Susan $32,500.00
3 rows selected
Zu beachtende Punkte -
Eine SELECT-Klausel kann nur eine WHERE-Klausel enthalten. Es können jedoch mehrere Filterbedingungen mit dem Operator AND oder OR an die WHERE-Klausel angehängt werden.
Die Spalten, Literale oder Ausdrücke in einer Prädikatklausel müssen ähnliche oder interkonvertierbare Datentypen haben.
Der Spaltenalias kann in der WHERE-Klausel nicht verwendet werden.
Zeichenliterale müssen in einfache Anführungszeichen gesetzt werden und unterscheiden zwischen Groß- und Kleinschreibung.
Datumsliterale müssen in einfache Anführungszeichen gesetzt werden und sind formatabhängig. Standardformat istDD-MON-RR.
Vergleichsoperatoren
Vergleichsoperatoren werden in Prädikaten verwendet, um einen Begriff oder Operanden mit einem anderen Begriff zu vergleichen. SQL bietet umfassende Sätze von Gleichheits-, Ungleichheits- und verschiedenen Operatoren. Sie können abhängig von der Daten- und Filterbedingungslogik in der SELECT-Abfrage verwendet werden. Wenn Sie Vergleichsoperatoren in einer WHERE-Klausel verwenden, müssen die Argumente (Objekte oder Werte, die Sie vergleichen) auf beiden Seiten des Operators entweder ein Spaltenname oder ein bestimmter Wert sein. Wenn ein bestimmter Wert verwendet wird, muss der Wert entweder ein numerischer Wert oder eine Literalzeichenfolge sein. Wenn der Wert eine Zeichenfolge oder ein Datum ist, müssen Sie den Wert in einfache Anführungszeichen ('') eingeben.
Oracle verfügt über neun Vergleichsoperatoren, die unter Gleichheits- oder Ungleichheitsbedingungen verwendet werden können.
Operator Meaning
= equal to
< less than
> greater than
>= greater than or equal to
<= less than or equal to
!= not equal to
<> not equal to
Andere Oracle-Operatoren sind ZWISCHEN ... UND, IN, LIKE und IS NULL.
Der ZWISCHEN Operator
Mit dem Operator BETWEEN kann ein Spaltenwert innerhalb eines bestimmten Bereichs verglichen werden. Der angegebene Bereich muss eine Unter- und Obergrenze haben, wobei beide beim Vergleich eingeschlossen sind. Seine Verwendung ähnelt dem zusammengesetzten Ungleichungsoperator (<= und> =). Es kann mit numerischen Werten, Zeichen- und Datumstypwerten verwendet werden.
Zum Beispiel die WHERE-Bedingung SALARY BETWEEN 1500 AND 2500 In einer SELECT-Abfrage werden die Mitarbeiter aufgelistet, deren Gehalt zwischen 1500 und 2500 liegt.
Der IN-Operator
Der IN-Operator wird verwendet, um einen Spaltenwert in einem bestimmten Wertesatz zu testen. Wenn die Spalte einem der Werte aus dem angegebenen Satz gleichgesetzt werden kann, wird die Bedingung validiert. Die mit dem IN-Operator definierte Bedingung wird auch als Mitgliedschaftsbedingung bezeichnet.
Zum Beispiel die WHERE-Bedingung SALARY IN (1500, 3000, 2500) In einer SELECT-Abfrage werden die Zeilen eingeschränkt, in denen das Gehalt entweder 1500, 3000 oder 2500 beträgt.
Der LIKE-Operator
Der Operator LIKE wird für den Mustervergleich und die Platzhaltersuche in einer SELECT-Abfrage verwendet. Wenn ein Teil des Spaltenwerts unbekannt ist, kann der unbekannte Teil durch einen Platzhalter ersetzt werden. Es verwendet Platzhalteroperatoren, um die Suchzeichenfolge aufzubauen. Daher wird die Suche als Platzhaltersuche bezeichnet. Diese beiden Operatoren sind Percentile ('%') und Underscore ('_'). Der Unterstrich ('_') ersetzt ein einzelnes Zeichen, während das Perzentil ('%') mehr als ein Zeichen ersetzt. Sie können auch in Kombination verwendet werden.
In der folgenden SELECT-Abfrage werden beispielsweise die Vornamen der Mitarbeiter aufgelistet, deren Nachname mit "SA" beginnt.
SELECT first_name
FROM employees
WHERE last_name LIKE 'SA%';
IST (NICHT) NULL Bedingungen
Zu beachten ist, dass NULL-Werte nicht mit dem Gleichheitsoperator getestet werden können. Dies liegt daran, dass NULL-Werte unbekannt und nicht zugewiesen sind, während der Gleichheitsoperator auf einen bestimmten Wert prüft. Der Operator IS NULL dient als Gleichheitsoperator zum Überprüfen der NULL-Werte einer Spalte.
Zum Beispiel die WHERE-Bedingung COMMISSION_PCT IS NULL In einer SELECT-Abfrage werden Mitarbeiter aufgelistet, die keinen Provisionsprozentsatz haben.
Logische Operatoren
Dem Prädikat der WHERE-Klausel können mehrere Filterbedingungen hinzugefügt werden. Mit den logischen Operatoren AND, OR und NOT können mehrere Bedingungen miteinander kombiniert werden.
AND: Verbindet zwei oder mehr Bedingungen und gibt nur dann Ergebnisse zurück, wenn alle Bedingungen erfüllt sind.
ODER: Verbindet zwei oder mehr Bedingungen und gibt Ergebnisse zurück, wenn eine der Bedingungen erfüllt ist.
NICHT: negiert den darauf folgenden Ausdruck.
Der AND-Operator verknüpft zwei oder mehr Bedingungen in einer WHERE-Klausel und gibt TRUE nur zurück, wenn alle Bedingungen erfüllt sind. Angenommen, ein Manager benötigt eine Liste weiblicher Mitarbeiter. Außerdem sollte die Liste nur Mitarbeiter mit Nachnamen enthalten, die mit dem Buchstaben "E" beginnen oder später im Alphabet erscheinen. Darüber hinaus sollte die Ergebnistabelle nach dem Nachnamen des Mitarbeiters sortiert sein. Es sind zwei einfache Bedingungen zu erfüllen. Die WHERE-Klausel kann wie folgt geschrieben werden: WHERE Geschlecht = 'F' UND Nachname> 'E'.
SELECT last_name "Last Name", first_name "First Name", Gender "Gender"
FROM employees
WHERE Gender = 'F' AND last_name > 'E'
ORDER BY last_name;
Der OR-Operator verknüpft mehr als eine Bedingung in einer WHERE-Klausel und gibt TRUE zurück, wenn eine der Bedingungen true zurückgibt. Angenommen, die Anforderungen Ihres Organisationsmanagers ändern sich geringfügig. Eine weitere Mitarbeiterliste ist erforderlich, aber in dieser Liste sollten die Mitarbeiter: (1) weiblich sein oder (2) einen Nachnamen haben, der mit dem Buchstaben "T" beginnt, oder einen Buchstaben, der später im Alphabet steht. Die Ergebnistabelle sollte nach dem Nachnamen des Mitarbeiters sortiert sein. In dieser Situation kann eine der beiden Bedingungen erfüllt sein, um die Abfrage zu erfüllen. Weibliche Mitarbeiter sollten zusammen mit Mitarbeitern aufgeführt werden, deren Name die zweite Bedingung erfüllt.
Der NOT-Operator wird verwendet, um einen Ausdruck oder eine Konition zu negieren.
Die ORDER BY-Klausel
Wenn Sie nur wenige Datenzeilen anzeigen, ist es möglicherweise nicht erforderlich, die Ausgabe zu sortieren. Wenn Sie jedoch zahlreiche Zeilen anzeigen, können Manager bei der Entscheidungsfindung unterstützt werden, indem die Informationen sortiert werden. Die Ausgabe einer SELECT-Anweisung kann mithilfe der optionalen ORDER BY-Klausel sortiert werden. Wenn Sie die ORDER BY-Klausel verwenden, muss der Spaltenname, für den Sie bestellen, auch ein Spaltenname sein, der in der SELECT-Klausel angegeben ist.
Die folgende SQL-Abfrage verwendet eine ORDER BY-Klausel, um die Ergebnistabelle nach der Spalte last_name in aufsteigender Reihenfolge zu sortieren. Aufsteigende Reihenfolge ist die Standardsortierreihenfolge.
SELECT last_name, first_name
FROM employees
WHERE last_name >= 'J'
ORDER BY last_name;
last_name first_name
--------------- ---------------
Jones Quincey
Klepper Robert
Quattromani Toni
Schultheis Robert
Die Sortierung kann auch auf numerischen und Datumswerten basieren. Das Sortieren kann auch anhand mehrerer Spalten erfolgen.
Standardmäßig sortiert die ORDER BY-Klausel die Ausgabezeilen in der Ergebnistabelle in aufsteigender Reihenfolge. Wir können das Schlüsselwort DESC (kurz für absteigend) verwenden, um die absteigende Sortierung zu aktivieren. Die alternative Standardeinstellung ist ASC, die in aufsteigender Reihenfolge sortiert wird. Das ASC-Schlüsselwort wird jedoch selten verwendet, da es die Standardeinstellung ist. Wenn das optionale Schlüsselwort ASC oder DESC verwendet wird, muss es dem Spaltennamen folgen, nach dem Sie in der WHERE-Klausel sortieren.
Positional Sorting - Die numerische Position der Spalte in der ausgewählten Spaltenliste kann in der ORDER BY-Klausel anstelle des Spaltennamens angegeben werden. Es wird hauptsächlich in UNION-Abfragen verwendet (wird später erläutert). Die Abfrage ordnet die Ergebnismenge nach Gehalt, da sie in der Spaltenliste an zweiter Stelle steht.
SELECT first_name, salary
FROM employees
ORDER BY 2;
Substitutionsvariablen
Wenn eine SQL-Abfrage für die verschiedenen Eingaben mehrmals ausgeführt werden muss, können Substitutionsvariablen verwendet werden. Substitutionsvariablen können verwendet werden, um Benutzereingaben vor der Ausführung der Abfrage anzufordern. Sie werden häufig bei der abfragebasierten Berichterstellung verwendet, bei der der Datenbereich der Benutzer als Eingabe für die bedingte Filterung und Datenanzeige verwendet wird. Substitutionsvariablen wird ein einzelnes kaufmännisches Und (&) vorangestellt, um Werte vorübergehend zu speichern. Zum Beispiel,
SELECT EMPLOYEE_ID, LAST_NAME, SALARY
FROM employees
WHERE LAST_NAME = &last_name
OR EMPLOYEE_ID = &EMPNO;
Wenn die obige SELECT-Abfrage ausgeführt wird, identifiziert oracle das '&' als Substitutionsvariable. Der Benutzer wird aufgefordert, den folgenden Wert für 'Nachname' und 'EMPNO' einzugeben.
Enter value for last_name:
Enter value for empno:
Sobald der Benutzer Eingaben für beide Variablen bereitstellt, werden die Werte ersetzt, die Abfrage überprüft und ausgeführt.
Zu beachtende Punkte -
Wenn die Variable ein Zeichen oder einen Datumswert ersetzen soll, muss das Literal in einfache Anführungszeichen gesetzt werden. Eine nützliche Technik besteht darin, die kaufmännische Und-Substitutionsvariable in einfache Anführungszeichen zu setzen, wenn Zeichen- und Datumswerte behandelt werden.
Sowohl SQL Developer als auch SQL * Plus unterstützen die Substitutionsvariablen und die Befehle DEFINE / UNDEFINE. Obwohl SQL Developer oder SQL * Plus keine Validierungsprüfungen (außer Datentyp) für Benutzereingaben unterstützt.
Sie können die Substitutionsvariablen nicht nur in der WHERE-Klausel einer SQL-Anweisung verwenden, sondern auch als Substitution für Spaltennamen, Ausdrücke oder Text.
Verwenden der Doppel-kaufmännischen Und-Substitutionsvariablen
Wenn dieselbe Substitutionsvariable an mehr als einer Stelle verwendet wird, verwenden wir eine doppelte kaufmännische Und-Substitution, um zu vermeiden, dass dieselben Daten erneut eingegeben werden. In solchen Fällen wird der einmal eingegebene Wert der Substitutionsvariablen zu jedem Zeitpunkt der Verwendung ersetzt.
SELECT first_name, HIRE_DATE, SEPARATION_DATE
FROM employees
WHERE HIRE_DATE LIKE '%&DT%' AND SEPARATION_DATE '%&&DT%'
Beachten Sie, dass der gleiche Wert von & DT in der obigen Abfrage zweimal ersetzt wird. Der vom Benutzer einmal angegebene Wert wird also an zwei Stellen ersetzt.
Die Befehle DEFINE und VERIFY
Das Festlegen der Definition von Variablen in einer Sitzung wird durch die DEFINE-Funktion von SQL * Plus festgelegt. Die Variablen können in der Sitzung definiert werden, um ein Anhalten während der Abfrageausführung zu vermeiden. Oracle liest dieselbe Variable, wenn sie in einer SQL-Abfrage auftritt. Es ist standardmäßig eingeschaltet. Mit Hilfe der DEFINE-Klausel kann eine Variable in der Befehlszeile vor der Ausführung der Abfrage als deklariert werdenDEFINE variable=value;.
Der Befehl Verify überprüft die obige Ersetzung, die als OLD- und NEW-Anweisung angezeigt wird. Es ist standardmäßig AUS und kann mit dem Befehl SET auf EIN gesetzt werden.
SQL> SET DEFINE ON
SQL> SET VERIFY ON
SQL> DEFINE NAME = MARTIN'
SQL> SELECT first_name, SALARY
FROM employees
WHERE first_name = '&NAME';
OLD 1: select first_name, sal from employee where first_name = '&first_name'
new 1: select first_name, sal from employee where first_name = 'MARTIN'
first_name SALARY
------- -------
MARTIN 5000