Intersect-Operator in MySQL

Mehvish Ashiq 15 Februar 2024
  1. Einführung in den INTERSECT-Operator in MySQL
  2. INTERSECT-Operator in MySQL
  3. Fazit
Intersect-Operator in MySQL

Dieser Artikel hilft Ihnen, den Operator INTERSECT kennenzulernen. Obwohl MySQL INTERSECT und MINUS/EXCEPT nicht unterstützt, gibt es andere Möglichkeiten, diese Funktionalität zu simulieren.

Wir werden sehen, was INTERSECT ist, seine Vorteile und die verschiedenen Möglichkeiten, um zu lernen, wie man INTERSECT in MySQL emuliert.

Einführung in den INTERSECT-Operator in MySQL

INTERSECT ist ein Mengenoperator, der verwendet wird, um die gemeinsamen Elemente aus zwei Mengen abzurufen. Es wird auch verwendet, um DISTINCT (oder gemeinsame) Datensätze (Zeilen) aus zwei Tabellen zu erhalten.

Wir können auch sagen, dass der Operator INTERSECT nur identische Zeilen zurückgibt, die als Ausgabe von zwei SELECT-Anweisungen abgerufen werden. Werfen Sie einen Blick auf das folgende Venn-Diagramm, um INTERSECTION zu verstehen.

Intersect-Operator in MySQL - Venn-Diagramm

Der gelbe Rasterbereich ist hier die KREUZUNG. Der große Vorteil von INTERSECT ist, dass Sie auf identische Datensätze aus vielen Tabellen zugreifen können.

Obwohl MySQL den INTERSECT-Operator nicht unterstützt, können wir andere Alternativen verwenden, um diese Funktionalität zu erreichen.

INTERSECT-Operator in MySQL

Wie bereits erwähnt, ist der Operator INTERSECT in MySQL nicht verfügbar. Dennoch können wir dies je nach Komplexität und Anforderungen der Abfrage mit der INNER JOIN- und IN-Klausel und der EXISTS-Klausel simulieren.

Wir verwenden zwei Tabellen namens order und customer. Die Felder der Tabelle customer umfassen customer_id, customer_firstname, customer_lastname, customer_age und customer_salary.

Die Tabelle order enthält order_id, order_date, order_amount und customer_id (die customer_id ist hier ein Fremdschlüssel). Unsere Tabellen customer und order sehen wie folgt mit Daten aus.

Mit dem folgenden Beispielcode können Sie sowohl Tabellen erstellen als auch Daten einfügen.

#create customer table
CREATE TABLE customer(
customer_id INT NOT NULL PRIMARY KEY,
customer_firstname VARCHAR(60) NOT NULL,
customer_lastname VARCHAR(60) NOT NULL,
customer_age INT NOT NULL,
customer_salary INT NOT NULL
);

#create order table
CREATE TABLE order(
order_id INT NOT NULL PRIMARY KEY,
order_date DATETIME NOT NULL,
order_amount INT NOT NULL,
customer_id INT NOT NULL,
FOREIGN KEY (customer_id) REFERENCES customer(customer_id)
);

#insert into customer table
INSERT INTO customer VALUES
(1, 'Shajeel', 'Daniel', 23, 9000),
(2, 'Nayya', 'Preston', 54, 1500),
(3, 'James', 'Robert', 36, 2500),
(4, 'Jennifer', 'John', 29, 5000),
(5, 'Sarah', 'Paul', 15, 8000),
(6, 'Karen', 'Donald', 40, 3500);

#insert into order table
INSERT INTO order VALUES
(1, '2019-12-03 10:25:30', 500, 2),
(2, '2019-12-10 12:00:30', '1500', 4);

Kundentabelle:

Intersect-Operator in MySQL - Kundendaten

Bestelltabelle:

Intersect-Operator in MySQL - Bestelldaten

Emulieren Sie INTERSECT über INNER JOIN in MySQL

Wir möchten die order-Details (``order_id, order_amount, order_date) und die customer-Details (customer_id, customer_firstname, customer_lastname) finden, um zu wissen, welcher customerdieorder` an welchem ​​Datum.

Das heißt, wir wollen den customer finden, der mit der customer-Tabelle und der order-Tabelle identisch ist. Es ist auch zu beachten, dass die Daten aus zwei Tabellen stammen; wir können einen join namens INNER JOIN verwenden.

#MySQL Version 8.0.27
SELECT 
order.order_id, customer.customer_id, customer.customer_firstname,
customer.customer_lastname,order.order_amount,order.order_date
FROM order
INNER JOIN 
customer ON order.customer_id = customer.customer_id;

Im obigen Code werden die Werte order_id, customer_id, customer_firstname, customer_lastname, order_amount und order_date für diejenigen abgerufen, deren customer_id in der customer-Tabelle und der order-Tabelle gleich ist.

Ausgabe:

Intersect-Operator in MySQL - Schnittmenge mit Inner Join

Emulieren Sie INTERSECT über die IN-Klausel in MySQL

Jetzt haben wir eine andere Situation. Hier benötigen wir nur die kundenbezogenen Daten.

Diese Daten beinhalten customer_id, customer_firstname, customer_lastname und customer_age. Und dieser Kunde muss in der Tabelle order vorhanden sein.

Hier können wir die IN-Klausel verwenden, um die INTERSECT-Operation zu simulieren.

#MySQL version 8.0.27
SELECT 
customer.customer_id, customer.customer_firstname,
customer.customer_lastname, customer.customer_age
FROM customer
WHERE customer.customer_id IN ( SELECT order.customer_id FROM order);

Die Unterabfrage wird zuerst ausgeführt, indem alle customer_id aus der obigen order-Tabelle gesammelt werden. Dann werden nur die kundenbezogenen Angaben ausgewählt, deren customer_id im Ergebnis der Unterabfrage enthalten ist.

Ausgabe:

intersect operator in mysql - Schnittmenge mit in-Klausel

Simulieren Sie INTERSECT über die EXISTS-Klausel in MySQL

In diesem Szenario möchten wir nur die customer-Daten, deren Alter weniger als 45 beträgt und mindestens eine order aufgeben muss. Die Klausel EXISTS wird wie folgt verwendet.

Der folgende Code erzeugt auch dieselbe Ausgabe, wenn Sie die Klausel EXISTS weglassen.

SELECT 
customer.customer_id, customer.customer_firstname, 
customer.customer_lastname, customer.customer_age
FROM customer
WHERE customer.customer_age < 45 
AND EXISTS
(SELECT order.customer_id FROM order where order.customer_id = customer.customer_id);

Die Unterabfrage wird zuerst ausgeführt und gibt alle customer_id aus der order-Tabelle an, wobei die customer_id in beiden Tabellen (order- und customer-Tabelle) gleich ist. Dann werden nur die kundenbezogenen Angaben AUSGEWÄHLT, deren Alter kleiner als 45 ist und die customer_id im Ergebnis der Unterabfrage vorhanden sind.

Ausgabe:

Intersect-Operator in MySQL - Schnittmenge mit und Klausel

Fazit

Dieser Artikel hat viele andere Alternativen zur Durchführung einer Operation abgeschlossen.

Wir haben auch verschiedene Möglichkeiten kennengelernt, INTERSECT in MySQL zu simulieren. Es enthält die Klauseln INNER JOIN, IN und EXISTS.

Wir haben sogar gesehen, wie wir WHERE und AND verwenden können, während wir INTERSECT-Operationen in MySQL emulieren.

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