3.1 Werte vergleichen: <, >, =, <>
Eines der am häufigsten verwendeten Schlüsselwörter beim Schreiben von SQL-Abfragen ist WHERE
. Mit seiner Hilfe teilen wir MySQL mit, welche Tabellenzeilen wir filtern (auswählen) möchten.
Nach dem Schlüsselwort WHERE
können Sie sehr komplexe und knifflige Bedingungen schreiben. Welche Operationen kann diese Bedingung also enthalten?
Operator | Beschreibung | Beispiel |
---|---|---|
< | Weniger | Gehalt < 40000 |
> | Mehr | Gehalt > 100000 |
<= | Weniger oder gleich | Alter <= 25 |
>= | Mehr oder gleich | Alter >= 18 |
= | Gleich | Beruf = 'Programmierer' |
<>, != | Nicht gleich | Jahr(join_date) != 2015 |
Im Gegensatz zur Java-Sprache wird hier für strikte Gleichheit ein Gleichheitszeichen verwendet und nicht zwei .
Wenn Sie überprüfen möchten, ob die Werte nicht gleich sind, können Sie dies auf zwei Arten tun: <>
Entweder !=
Der erste Ansatz wird in Sprachen wie Pascal verwendet, der zweite ist typisch für Sprachen wie C++ und Java.
Für die Zuweisung in SQL wird es :=
wie in Pascal verwendet, die Zuweisung selbst wird jedoch sehr selten verwendet.
Schreiben wir eine Abfrage, in der wir alle Mitarbeiter anzeigen, die 2015 nicht eingestellt wurden.
SELECT * FROM employee WHERE YEAR(join_date) != 2015
Und wir erhalten das folgende Abfrageergebnis:
Ausweis | Name | Beruf | Gehalt | Alter | Beitrittsdatum |
---|---|---|---|---|---|
1 | Iwanow Iwan | Programmierer | 100.000 | 25 | 30.06.2012 |
2 | Petrov Petr | Programmierer | 80.000 | 23 | 12.08.2013 |
3 | Iwanow Sergej | Prüfer | 40.000 | dreißig | 01.01.2014 |
6 | Vaska | Der Kater | 1.000 | 3 | 01.01.2018 |
3.2 Logische Operationen UND, ODER, NICHT
Sie können auch WHERE
die logischen Operationen AND
, OR
und verwenden NOT
. Und sie sind genau so geschrieben, wie ich sie hier beschrieben habe. Keine &&
, ||
oder!
Schreiben wir eine SQL-Abfrage, in der wir Mitarbeiter auswählen, die über 20 Jahre alt sind und ein Gehalt von weniger als 50.000 erhalten.
SELECT * FROM employee WHERE age > 20 AND salary < 50000
Und wir erhalten das folgende Abfrageergebnis:
Ausweis | Name | Beruf | Gehalt | Alter | Beitrittsdatum |
---|---|---|---|---|---|
3 | Iwanow Sergej | Prüfer | 40.000 | dreißig | 01.01.2014 |
5 | Kirienko Anastasia | Büroleiter | 40.000 | 25 | 10.10.2015 |
Zu einfach. Schreiben wir eine Abfrage, in der wir Mitarbeiter auswählen, die mehr als 100.000 erhalten und nicht als Direktor arbeiten:
SELECT * FROM employee WHERE salary >= 100000 AND NOT occupation = 'Director'
Hier haben wir gezielt !=
den Operator anstelle des Symbols verwendet NOT
.
Und wir erhalten das folgende Abfrageergebnis:
Ausweis | Name | Beruf | Gehalt | Alter | Beitrittsdatum |
---|---|---|---|---|---|
1 | Iwanow Iwan | Programmierer | 100.000 | 25 | 30.06.2012 |
3.3 ZWISCHEN: Wertebereich
Auch in SQL gibt es einen speziellen Operator, BETWEEN
mit dem man prüfen kann, ob eine Variable zwischen zwei Werten liegt. Dieser Operator wird in booleschen Ausdrücken verwendet. Die allgemeine Form eines solchen Operators ist:
variable BETWEEN bottom line AND top_bound
In diesem Fall sind im Gegensatz zur Java-Sprache sowohl die untere als auch die obere Grenze im zulässigen Intervall enthalten.
Schreiben wir ein Beispiel, in dem wir alle Mitarbeiter mit einem Gehalt von 40.000 bis 100.000 auswählen. Die Anfrage sieht folgendermaßen aus:
SELECT * FROM employee WHERE salary BETWEEN 40000 AND 100000
Und wir erhalten das folgende Abfrageergebnis:
Ausweis | Name | Beruf | Gehalt | Alter | Beitrittsdatum |
---|---|---|---|---|---|
1 | Iwanow Iwan | Programmierer | 100.000 | 25 | 30.06.2012 |
2 | Petrov Petr | Programmierer | 80.000 | 23 | 12.08.2013 |
3 | Iwanow Sergej | Prüfer | 40.000 | dreißig | 01.01.2014 |
5 | Kirienko Anastasia | Büroleiter | 40.000 | 25 | 10.10.2015 |
Der Operator BETWEEN
unterstützt nicht nur numerische Typen, sondern auch Datumsangaben und sogar String-Typen . Bei der Arbeit mit Strings wird die lexikografische Reihenfolge verwendet: aaba kommt vor aabb
3.4 IN: Werteliste
Darüber hinaus verfügt SQL über einen speziellen Operator, IN
mit dem Sie prüfen können, ob eine Variable in der angegebenen Liste enthalten ist. Dieser Operator wird in booleschen Ausdrücken verwendet. Die allgemeine Form eines solchen Operators ist:
variable IN (value 1 , value 2 , ... value N)
Schreiben wir eine Abfrage, in der wir Mitarbeiter auswählen, die 20, 25 oder 30 Jahre alt sind. Die Anfrage sieht folgendermaßen aus:
SELECT * FROM employee WHERE age IN (20, 25, 30)
Und wir erhalten das folgende Abfrageergebnis:
Ausweis | Name | Beruf | Gehalt | Alter | Beitrittsdatum |
---|---|---|---|---|---|
1 | Iwanow Iwan | Programmierer | 100.000 | 25 | 30.06.2012 |
3 | Iwanow Sergej | Prüfer | 40.000 | dreißig | 01.01.2014 |
5 | Kirienko Anastasia | Büroleiter | 40.000 | 25 | 10.10.2015 |
Und jetzt schreiben wir eine Abfrage, bei der wir im Gegenteil Mitarbeiter auswählen, deren Alter not
20, 25 oder 30 Jahre beträgt. Die Abfrage sieht so aus:
SELECT * FROM employee WHERE age NOT IN (20, 25, 30)
Und wir erhalten das folgende Abfrageergebnis:
Ausweis | Name | Beruf | Gehalt | Alter | Beitrittsdatum |
---|---|---|---|---|---|
2 | Petrov Petr | Programmierer | 80.000 | 23 | 12.08.2013 |
4 | Rabinovich Moisha | Direktor | 200.000 | 35 | 12.05.2015 |
6 | Vaska | Der Kater | 1.000 | 3 | 01.01.2018 |
Alles hat wie erwartet funktioniert. Schönheit.
3.5 LIKE: Saitenmuster
Und schließlich noch ein weiterer wichtiger und sehr oft verwendeter Operator – LIKE
. Es wird beim Vergleich von Zeichenfolgen verwendet. Es kann verwendet werden, um ein Saitenmuster festzulegen. Dieser Operator wird in booleschen Ausdrücken verwendet. Die allgemeine Form eines solchen Operators ist:
variable LIKE 'sample'
Im Muster können Sonderzeichen verwendet werden: %
und _
.
- Unterstrich bedeutet ein beliebiges Zeichen, immer 1 Stk.
- Prozent bedeutet ein beliebiges Zeichen und eine beliebige Häufigkeit (einschließlich 0-mal).
Schreiben wir eine Abfrage, die alle Personen auswählt, deren Nachname mit dem Buchstaben „I“ beginnt. Die Anfrage sieht folgendermaßen aus:
SELECT * FROM employee WHERE name LIKE 'I%'
Und wir erhalten das folgende Abfrageergebnis:
Ausweis | Name | Beruf | Gehalt | Alter | Beitrittsdatum |
---|---|---|---|---|---|
1 | Iwanow Iwan | Programmierer | 100.000 | 25 | 30.06.2012 |
3 | Iwanow Sergej | Prüfer | 40.000 | dreißig | 01.01.2014 |
Jetzt machen wir die Aufgabe komplizierter: Der Name sollte „o“ enthalten und mit „a“ enden. Die Anfrage sieht folgendermaßen aus:
SELECT * FROM employee WHERE name LIKE '%o%a'
Und wir erhalten das folgende Abfrageergebnis:
Ausweis | Name | Beruf | Gehalt | Alter | Beitrittsdatum |
---|---|---|---|---|---|
4 | Rabinovich Moisha | Direktor | 200.000 | 35 | 12.05.2015 |
Okay, machen wir es etwas schwieriger. Lassen Sie uns alle Mitarbeiter herausfiltern, deren Alter mit der Zahl „3“ beginnt. Die Anfrage sieht folgendermaßen aus:
SELECT * FROM employee WHERE age LIKE '3%'
Und wir erhalten das folgende Abfrageergebnis:
Ausweis | Name | Beruf | Gehalt | Alter | Beitrittsdatum |
---|---|---|---|---|---|
3 | Iwanow Sergej | Prüfer | 40.000 | dreißig | 01.01.2014 |
4 | Rabinovich Moisha | Direktor | 200.000 | 35 | 12.05.2015 |
6 | Vaska | Der Kater | 1.000 | 3 | 01.01.2018 |
Unsere Altersspalte ist übrigens vom Typ , funktioniert also nicht nur mit Strings . Was kann man nicht, aber freuen.int
LIKE