Database
 sql >> Datenbank >  >> RDS >> Database

12 häufig verwendete SQL-Operatoren

In SQL ist ein Operator ein Sonderzeichen oder Schlüsselwort, das eine Aktion angibt, die für einen oder mehrere Ausdrücke ausgeführt wird.

SQL-Operatoren sind ein integraler Bestandteil von SQL und ermöglichen es uns, Abfragen zu schreiben, die relevante Ergebnisse zurückgeben.

In diesem Artikel stelle ich 12 der am häufigsten verwendeten SQL-Operatoren beim Schreiben von SQL-Abfragen vor.

Die Gleichen (= ) Operator

Der Equals-Operator (= ) ist wahrscheinlich der am häufigsten verwendete Operator in SQL. Es vergleicht die Gleichheit zweier Ausdrücke. Selbst wenn Sie mit SQL nicht mehr als vage vertraut sind, werden Sie diesen Operator wahrscheinlich kennen.

Stellen Sie sich vor, wir haben eine Datenbank für ein Haustierhotel und möchten Informationen über alle Haustiere mit dem Namen Fluffy erhalten.

In diesem Fall könnten wir Folgendes tun:

SELECT PetId, PetName, DOB 
FROM Pets
WHERE PetName = 'Fluffy';

Ergebnis:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 6       | Fluffy    | 2020-09-17 |
+---------+-----------+------------+

Unsere Abfrage verwendet den Equals-Operator (= ), um die Gleichheit des Werts von PetName zu vergleichen Spalte und die Zeichenfolge Fluffy .

In unserem Fall können wir sehen, dass das Haustierhotel derzeit zwei Haustiere namens Fluffy hat.

Größer als (> ) Operator

Der Größer-als-Operator (> ) vergleicht zwei Ausdrücke und gibt TRUE zurück wenn der linke Operand einen höheren Wert hat als der rechte Operand; andernfalls ist das Ergebnis FALSE .

SELECT PetName, DOB 
FROM Pets
WHERE DOB > '2020-01-01';

Ergebnis:

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fluffy    | 2020-11-20 |
| Wag       | 2020-03-15 |
| Tweet     | 2020-11-28 |
| Fluffy    | 2020-09-17 |
+-----------+------------+

In diesem Fall wird der Wert von DOB verglichen Spalte und das Datum 2020-01-01 um zu sehen, ob das DOB Spalte ist größer.

Kleiner als (< ) Operator

Der Kleiner-als-Operator (< ) bewirkt das Gegenteil. Es vergleicht zwei Ausdrücke und gibt TRUE zurück wenn der linke Operand einen niedrigeren Wert als der rechte Operand hat; andernfalls ist das Ergebnis FALSE .

SELECT PetName, DOB 
FROM Pets
WHERE DOB < '2020-01-01';

Ergebnis:

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fetch     | 2019-08-16 |
| Scratch   | 2018-10-01 |
+-----------+------------+

Größer als oder gleich (>= ) Operator

Der Größer-als-gleich-Operator (>= ) vergleicht zwei Ausdrücke und gibt TRUE zurück wenn der linke Operand einen Wert hat, der größer oder gleich dem rechten Operanden ist; andernfalls wird FALSE zurückgegeben .

SELECT PetName, DOB 
FROM Pets
WHERE DOB >= '2020-09-17';

Ergebnis:

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fluffy    | 2020-11-20 |
| Tweet     | 2020-11-28 |
| Fluffy    | 2020-09-17 |
+-----------+------------+

Beachten Sie, dass 2020-09-17 zurückgegeben wurde und alle Daten größer als das. Wenn wir den Größer-als-Operator (> ), wären nur die ersten beiden Zeilen zurückgegeben worden.

Kleiner als oder gleich (<= ) Operator

Der Kleiner-als-gleich-Operator (<= ) vergleicht zwei Ausdrücke und gibt TRUE zurück wenn der linke Operand einen Wert hat, der kleiner oder gleich dem rechten Operanden ist; andernfalls ist das Ergebnis FALSE .

SELECT PetName, DOB 
FROM Pets
WHERE DOB <= '2020-09-17';

Ergebnis:

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fetch     | 2019-08-16 |
| Scratch   | 2018-10-01 |
| Wag       | 2020-03-15 |
| Fluffy    | 2020-09-17 |
+-----------+------------+

Beachten Sie, dass 2020-09-17 zurückgegeben wurde und alle Daten darunter. Wenn wir den Kleiner-als-Operator (< ), wären nur die ersten drei Zeilen zurückgegeben worden.

Das AND Betreiber

Das AND Operator kombiniert zwei boolesche Ausdrücke und gibt TRUE zurück wenn beide Ausdrücke TRUE sind .

Hier ist ein Beispiel.

SELECT PetId, DOB 
FROM Pets
WHERE PetName = 'Fluffy'
AND DOB > '2020-01-01';

Ergebnis:

+---------+------------+
| PetId   | DOB        |
|---------+------------|
| 1       | 2020-11-20 |
| 6       | 2020-09-17 |
+---------+------------+

In diesem Fall erhalten wir nur Details zu den Haustieren, deren Name Fluffy und ist ihr Geburtsdatum liegt zwischen den beiden Daten.

Das OR Betreiber

Das OR Operator kombiniert zwei boolesche Ausdrücke und gibt TRUE zurück wenn eine der Bedingungen TRUE ist .

Hier ist ein Beispiel.

SELECT 
    PetId, 
    PetName,
    DOB 
FROM Pets
WHERE PetName = 'Fluffy' OR PetName = 'Bark';

Ergebnis:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 6       | Fluffy    | 2020-09-17 |
| 7       | Bark      | NULL       |
+---------+-----------+------------+

Dies ist im Grunde das Gegenteil von AND Operator. Wenn wir AND verwendet hätten , wären keine Zeilen zurückgegeben worden, da wir nicht zwei verschiedene Werte gleichzeitig in einer Spalte haben können.

Der BETWEEN Betreiber

Der BETWEEN -Operator ermöglicht es uns, einen zu testenden Bereich anzugeben. Beispielsweise können wir damit Haustiere zurückgeben, die zwischen zwei Daten geboren wurden.

SELECT
    PetName,
    DOB
FROM Pets
WHERE DOB BETWEEN '2018-01-01' AND '2020-01-01';

Ergebnis:

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fetch     | 2019-08-16 |
| Scratch   | 2018-10-01 |
+-----------+------------+

Das NOT Betreiber

Das NOT -Operator negiert eine boolesche Eingabe (er kehrt den Wert eines beliebigen booleschen Ausdrucks um). Gibt daher TRUE zurück wenn der Ausdruck FALSE ist .

Folgendes passiert, wenn wir NOT hinzufügen Operator zu unserem vorherigen Beispiel.

SELECT
    PetName,
    DOB
FROM Pets
WHERE DOB NOT BETWEEN '2018-01-01' AND '2020-01-01';

Ergebnis:

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fluffy    | 2020-11-20 |
| Wag       | 2020-03-15 |
| Tweet     | 2020-11-28 |
| Fluffy    | 2020-09-17 |
+-----------+------------+

Dieses Mal haben wir alle anderen Haustiere bekommen – die Haustiere, die keine waren zwischen diesen Daten geboren.

In MariaDB NOT ist auf das Negieren von IN beschränkt , BETWEEN , und EXISTS Klauseln. Die meisten anderen DBMSs erlauben NOT jeden Ausdruck zu negieren.

Der IN Betreiber

Der IN -Operator bestimmt, ob ein angegebener Wert mit einem beliebigen Wert in einer Unterabfrage oder einer Liste übereinstimmt.

Hier ist ein Beispiel.

SELECT 
    PetId, 
    PetName, 
    DOB 
FROM Pets
WHERE PetName IN ('Fluffy', 'Bark', 'Wag');

Ergebnis:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 4       | Wag       | 2020-03-15 |
| 6       | Fluffy    | 2020-09-17 |
| 7       | Bark      | NULL       |
+---------+-----------+------------+

Wir könnten dasselbe Ergebnis erzielen, indem wir zwei OR verwenden Operatoren:

SELECT 
    PetId, 
    PetName, 
    DOB 
FROM Pets
WHERE PetName = 'Fluffy' 
    OR PetName = 'Bark' 
    OR PetName = 'Wag';

Allerdings ist der IN Operator ist eine prägnantere Möglichkeit, dies zu tun. Der IN Der Operator ist besonders nützlich, wenn Sie eine lange Liste von Werten haben, mit denen Sie vergleichen möchten.

Der IN -Operator wird fast immer schneller ausgeführt als mehrere OR Operatoren, insbesondere bei größeren Datensätzen.

Ein weiterer Vorteil des IN Operator, ist, dass er ein weiteres SELECT enthalten kann aufführen. Dies wird als Unterabfrage bezeichnet . Eine Unterabfrage ist eine Abfrage, die in eine andere Abfrage (oder sogar eine andere Unterabfrage) eingebettet ist.

Hier ist ein Beispiel.

SELECT 
    PetTypeId,
    PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );

Ergebnis:

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 1           | Bird      |
| 2           | Cat       |
| 3           | Dog       |
+-------------+-----------+

Dieses Beispiel zeigt uns, wie viele Tierarten es in unserem Tierhotel gibt.

Wir könnten das NOT verwenden Bediener, um dies umzudrehen und zu sehen, wie viele Arten von Haustieren nicht sind in unserem Tierhotel.

SELECT 
    PetTypeId,
    PetType
FROM PetTypes
WHERE PetTypeId NOT IN ( SELECT PetTypeId FROM Pets );

Ergebnis:

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 4           | Rabbit    |
+-------------+-----------+

Unsere Datenbank enthält also eine Haustierart von Rabbit , aber wir haben derzeit keine Kaninchen als Haustiere.

Der + und || Zeichenfolgenverkettungsoperatoren

Das + und || Zeichenfolgenverkettungsoperatoren ermöglichen das Verketten von Zeichenfolgen. Die Zeichenfolgenverkettung ist der Vorgang, bei dem Zeichenfolgen von Ende zu Ende verbunden werden.

Der Grund, warum ich zwei Operatoren aufgelistet habe, die dasselbe tun, ist der + Operator wird in SQL Server unterstützt und der || Operator wird in DB2, Oracle, PostgreSQL, SQLite unterstützt.

Hier ist ein Beispiel, das in SQL Server funktioniert.

SELECT 
    FirstName,
    LastName,
    FirstName + LastName
FROM Owners;

Ergebnis:

+-------------+------------+--------------------+
| FirstName   | LastName   | (No column name)   |
|-------------+------------+--------------------|
| Homer       | Connery    | HomerConnery       |
| Bart        | Pitt       | BartPitt           |
| Nancy       | Simpson    | NancySimpson       |
| Boris       | Trump      | BorisTrump         |
+-------------+------------+--------------------+

In diesem Fall haben Besitzer ihren Vor- und Nachnamen in verschiedenen Spalten gespeichert. In unserem SELECT list, rufen wir diese zuerst einzeln ab, aber wir rufen sie auch noch einmal ab, indem wir einen Verkettungsoperator verwenden, um sie miteinander zu verbinden.

Es gibt jedoch ein paar Probleme mit unseren Ergebnissen.

  • Zwischen dem Vor- und Nachnamen steht kein Leerzeichen.
  • Es gibt keinen Spaltennamen.

Glücklicherweise ist dies leicht zu beheben.

Wir können die gleiche Verkettungsoperation verwenden, um Leerzeichen zwischen dem Vornamen und dem Nachnamen einzufügen.

Und wir können einen Spaltenalias für das verkettete Ergebnis verwenden, um einen Spaltennamen in der Ergebnismenge bereitzustellen.

SELECT 
    FirstName,
    LastName,
    FirstName + ' ' + LastName AS FullName
FROM Owners;

Ergebnis:

+-------------+------------+---------------+
| FirstName   | LastName   | FullName      |
|-------------+------------+---------------|
| Homer       | Connery    | Homer Connery |
| Bart        | Pitt       | Bart Pitt     |
| Nancy       | Simpson    | Nancy Simpson |
| Boris       | Trump      | Boris Trump   |
+-------------+------------+---------------+

Wenn Sie DB2, Oracle, PostgreSQL, SQLite verwenden, tauschen Sie + aus für || und es sollte gut funktionieren.

Wenn Sie MySQL oder MariaDB verwenden, müssen Sie CONCAT() verwenden Funktion zum Verketten von Strings.

Das LIKE Betreiber

Das LIKE -Operator ermöglicht Ihnen den Musterabgleich. Es bestimmt, ob eine bestimmte Zeichenfolge mit einem bestimmten Muster übereinstimmt. Ein Muster kann reguläre Zeichen und Platzhalterzeichen enthalten.

SELECT 
    FirstName,
    LastName,
    Email
FROM Owners
WHERE Email LIKE '%.com';

Ergebnis:

+-------------+------------+-------------------+
| FirstName   | LastName   | Email             |
|-------------+------------+-------------------|
| Homer       | Connery    | [email protected] |
| Bart        | Pitt       | [email protected]  |
+-------------+------------+-------------------+

In diesem Beispiel habe ich den LIKE verwendet Operator in Verbindung mit dem % Wildcard-Operator, um Eigentümer zurückzugeben, deren E-Mail-Adressen auf .com enden .

Bonusbetreiber! Der % Wildcard-Operator

Der % Platzhalteroperator passt auf eine beliebige Zeichenfolge mit null oder mehr Zeichen. Es kann entweder als Präfix oder Suffix verwendet werden, und es kann auch in der Mitte einer Zeichenfolge verwendet werden.

Es wird häufiger als Suffix verwendet und hat eine begrenzte Verwendung in der Mitte von Mustern, obwohl es einige gültige Anwendungsfälle für die Verwendung in der Mitte eines Musters gibt, wie z. B. die folgenden:

SELECT 
    FirstName,
    LastName,
    Email
FROM Owners
WHERE Email LIKE '[email protected]%.com';

Ergebnis:

+-------------+------------+------------------+
| FirstName   | LastName   | Email            |
|-------------+------------+------------------|
| Bart        | Pitt       | [email protected] |
+-------------+------------+------------------+

In diesem Fall kannten wir die E-Mail-Adresse von Bart nicht, aber wir wussten, dass sie mit [email protected] begann und endete mit .com . Daher konnten wir LIKE verwenden in Verbindung mit dem % Wildcard-Operator, um den Rest auszufüllen.

Denken Sie daran, dass diese Technik viele irrelevante Zeilen zurückgeben kann, abhängig von den Daten und davon, wie Sie Ihre SQL-Anweisung aufbauen.

Beachten Sie auch, dass Abfragen, die den LIKE enthalten -Klausel kann viel langsamer als andere Abfragen ausgeführt werden, und Sie sollten wahrscheinlich die Verwendung von LIKE vermeiden Klausel, es sei denn, Sie brauchen es wirklich. Verwenden Sie den % Operator als Präfix kann besonders langsam sein.

Das heißt nicht, dass Sie es überhaupt nicht verwenden sollten. Das LIKE Operator ist ein integraler Bestandteil von SQL, und Sie werden auf viele Szenarien stoßen, in denen dies die einzige Option (oder zumindest die beste Option) sein wird.

Weitere SQL-Operatoren

Siehe meine vollständige Liste der SQL-Operatoren für eine ganze Reihe anderer Operatoren, die hier nicht enthalten sind.