Minus-Operation in MySQL
-
MINUS-Operator in MySQL emulieren (8.0.27) -
Wann sollte man
NOT IN,NOT EXISTSundLEFT JOIN/IS NULLVERWENDEN? - 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 INundNOT EXISTSnur die Werte aus der linken Tabelle (der ersten Auswahlabfrage) anzeigen. - Aber das
LEFT JOIN/IS NULLwird 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 NULLwird 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 NULLundNOT EXISTSsemantisch äquivalent sind, währendNOT INdies nicht ist. NOT EXISTSgibtTRUEzurück, wenn in der rechten Tabelle keine Zeile gefunden wird, die die Gleichheitsbedingung erfüllt.NOT INverhält sich anders; wenn eine Zeile in der Liste gefunden wird, gibtINTRUEaus, dann gibtNOT INFALSEzurück. Wenn andererseits eine Zeile nicht in der Liste gefunden wird, gibtINNULLzurück, undNOT INergibt ebenfallsNULL, da die Negation zuNULLNULList.
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.
