Minus-Operation in MySQL
-
MINUS
-Operator in MySQL emulieren (8.0.27) -
Wann sollte man
NOT IN
,NOT EXISTS
undLEFT JOIN
/IS NULL
VERWENDEN? - Fazit
Der Operator MINUS
wird in SQL verwendet, um eindeutige Elemente von Tabelle A zu finden, die in Tabelle B nicht vorhanden sind.
In diesem Tutorial werden wir sehen, wie man den MINUS
-Operator in MySQL simuliert, um die gewünschten Ergebnisse zu erzielen. Wir werden es verstehen, wenn wir NOT IN
, NOT EXISTS
, LEFT JOIN
und IS NULL
verwenden.
Wir werden auch die Syntax jeder der genannten Methoden sehen und einige Unterschiede zwischen ihnen untersuchen.
MINUS
-Operator in MySQL emulieren (8.0.27)
Verwendung von NOT IN
in MySQL
Nehmen wir ein Beispiel für eine Schüler-Kurs-Beziehung, erstellen Sie eine Datenbank und zwei Tabellen innerhalb der Datenbank. Einer heißt student
, der andere course
.
Die Tabelle student
enthält die Spalten ID
, FIRST_NAME
, LAST_NAME
, GENDER
der Studenten, und die Tabelle course
enthält die Spalten COURSE_CODE
, COURSE_TITLE
und STUDENT_ID
.
Beispielcode:
/*
create the database and use it for table creation and other manipulation*/
CREATE SCHEMA db_practice_minus_operator;
USE db_practice_minus_operator;
# create student table
CREATE TABLE db_practice_minus_operator.student (
ID INT AUTO_INCREMENT PRIMARY KEY,
FIRST_NAME VARCHAR(64) NOT NULL,
LAST_NAME VARCHAR(64) NOT NULL,
GENDER VARCHAR(30) NOT NULL
);
#create course table
CREATE TABLE course (
COURSE_CODE VARCHAR(60) NOT NULL,
COURSE_TITLE VARCHAR(64) NOT NULL,
STUDENT_ID INT NOT NULL,
PRIMARY KEY(COURSE_CODE),
FOREIGN KEY (STUDENT_ID) REFERENCES student(ID)
);
Denken Sie daran, dass die Tabelle course
nur naturwissenschaftliche Fächer enthält, und wir möchten die Studenten kennen, die sich für keinen der naturwissenschaftlichen Kurse eingeschrieben haben. Lassen Sie uns die Tabellen füllen und uns die Tabellen student
und course
ansehen.
Beispielcode:
# populate student table
INSERT INTO
student(FIRST_NAME, LAST_NAME,GENDER)
VALUES
('Shaajeel', 'Daniel', 'Male'),
('Nayya', 'Preston', 'Female'),
('James', 'Robert', 'Male'),
('Jennifer', 'John', 'Female'),
('Sarah', 'Paul', 'Female'),
('Karen', 'Donald','Female'),
('Thomas', 'Christopher','Male'),
('Lisa', 'Mark', 'Female'),
('Anthony', 'Richard', 'Male'),
('Matthew', 'Charles', 'Male');
# populate course table
INSERT INTO
course(COURSE_CODE, COURSE_TITLE, STUDENT_ID)
VALUES
(125854, 'Biology', 1),
(542968, 'Mathematics', 2),
(125648, 'Computer Science', 5),
(654891, 'Physics', 4),
(483215, 'Chemistry', 8),
(147934, 'Artificial Intelligence',6);
Die aktuellen Daten in beiden Tabellen sehen wie folgt aus.
Schülertisch:
Kurstabelle:
Schreiben Sie nun die folgende SQL-Abfrage, um die Simulation der Operation MINUS
in MySQL zu verstehen.
Beispielcode:
# Simulate Minus Operator in MySQL
SELECT * FROM student
WHERE student.ID NOT IN
(SELECT STUDENT_ID FROM course);
Ausgabe:
Verwendung von NOT EXISTS
in MySQL
Beispielcode:
# Simulate Minus Operator in MySQL
SELECT * FROM student std
WHERE NOT EXISTS
(SELECT STUDENT_ID FROM course WHERE std.ID = STUDENT_ID);
Ausgabe:
Verwendung von LEFT JOIN
und IS NULL
in MySQL
Beispielcode:
SELECT * FROM student
LEFT JOIN course on student.ID = course.STUDENT_ID
WHERE course.STUDENT_ID IS NULL;
Ausgabe:
In der obigen Ausgabe sind COURSE_CODE
, COURSE_TITLE
und STUDENT_ID
als NULL
sichtbar, da sich diese Studenten für keine Kurse eingeschrieben oder angemeldet haben.
Sie können auch die Spalten ID
, FIRST_NAME
, LAST_NAME
und GENDER
mit der Ausgabe anderer Methoden vergleichen, um zu sehen, ob alles wie erwartet funktioniert.
Wann sollte man NOT IN
, NOT EXISTS
und LEFT JOIN
/IS NULL
VERWENDEN?
Die Frage ist nun, wie man eine dieser drei Methoden auswählt. Sie können anhand einiger grundlegender Punkte entscheiden.
- Der Hauptunterschied zwischen diesen drei Methoden besteht darin, dass
NOT IN
undNOT EXISTS
nur die Werte aus der linken Tabelle (der ersten Auswahlabfrage) anzeigen. - Aber das
LEFT JOIN
/IS NULL
wird die linke Tabelle sowie dieNULL
-Werte anstelle der Werte der rechten Tabelle ausgeben, wenn keine Übereinstimmung zwischen der linken und der rechten Tabelle gefunden wird, weilLEFT JOIN
/IS NULL
wird verwendet, um Daten aus mehr als einer Tabelle abzurufen. - Ein weiterer Unterschied besteht darin, wie sie mit den
NULL
-Werten aus der rechten Tabelle umgehen, daLEFT JOIN
/IS NULL
undNOT EXISTS
semantisch äquivalent sind, währendNOT IN
dies nicht ist. NOT EXISTS
gibtTRUE
zurück, wenn in der rechten Tabelle keine Zeile gefunden wird, die die Gleichheitsbedingung erfüllt.NOT IN
verhält sich anders; wenn eine Zeile in der Liste gefunden wird, gibtIN
TRUE
aus, dann gibtNOT IN
FALSE
zurück. Wenn andererseits eine Zeile nicht in der Liste gefunden wird, gibtIN
NULL
zurück, undNOT IN
ergibt ebenfallsNULL
, da die Negation zuNULL
NULL
ist.
Fazit
In Anbetracht aller oben besprochenen Details sind wir zu dem Schluss gekommen, dass MySQL die MINUS
-Operation nicht unterstützt, aber es gibt andere Möglichkeiten, den MINUS
-Operator zu emulieren. Sie können es je nach Bedarf, Komfort und Anforderungen verwenden.