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.
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:
Bestelltabelle:
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
customerdie
order` 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:
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:
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:
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.