Minus-Operation in MySQL

Mehvish Ashiq 15 Februar 2024
  1. MINUS-Operator in MySQL emulieren (8.0.27)
  2. Wann sollte man NOT IN, NOT EXISTS und LEFT JOIN/IS NULL VERWENDEN?
  3. Fazit
Minus-Operation in MySQL

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:

Minus-Operation in mysql - Studententabellendaten

Kurstabelle:

Minus-Operation in MySQL - Kurstabellendaten

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:

Minus-Operation in MySQL - nicht in

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:

Minus-Operation in MySQL - not exists

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:

minus Operation in mysql - left join und ist null

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 und NOT EXISTS nur die Werte aus der linken Tabelle (der ersten Auswahlabfrage) anzeigen.
  • Aber das LEFT JOIN/IS NULL wird die linke Tabelle sowie die NULL-Werte anstelle der Werte der rechten Tabelle ausgeben, wenn keine Übereinstimmung zwischen der linken und der rechten Tabelle gefunden wird, weil LEFT 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, da LEFT JOIN/IS NULL und NOT EXISTS semantisch äquivalent sind, während NOT IN dies nicht ist.
  • NOT EXISTS gibt TRUE 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, gibt IN TRUE aus, dann gibt NOT IN FALSE zurück. Wenn andererseits eine Zeile nicht in der Liste gefunden wird, gibt IN NULL zurück, und NOT IN ergibt ebenfalls NULL, da die Negation zu NULL 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.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook