it-swarm.com.de

Was ist Semi-Join in der Datenbank?

Ich habe Probleme beim Versuch, das Konzept des Semi-Join zu verstehen und wie es sich vom herkömmlichen Join unterscheidet. Ich habe bereits einen Artikel ausprobiert, bin aber nicht zufrieden mit der Erklärung. Könnte mir bitte jemand helfen, das zu verstehen?

7
DarkShadow

Einfaches Beispiel. Lassen Sie uns Schüler mit Noten auswählen, die den Left Outer Join verwenden:

SELECT DISTINCT s.id
FROM  students s
      LEFT JOIN grades g ON g.student_id = s.id
WHERE g.student_id IS NOT NULL

Nun dasselbe mit linkem Semi-Join:

SELECT s.id
FROM  students s
WHERE EXISTS (SELECT 1 FROM grades g
              WHERE g.student_id = s.id)

Letzteres ist viel effizienter.

7
Iurii Ant

Soweit ich weiß, sind SQL-Dialekte, die SEMIJOIN/ANTISEMI unterstützen, U-SQL/Cloudera Impala.

SEMIJOIN :

Semijoins sind eine Methode von U-SQL, die ein Rowset basierend auf der Aufnahme seiner Zeilen in ein anderes Rowset filtert. Andere SQL-Dialekte drücken dies mit dem Muster SELECT * FROM A WHERE A.key IN (SELECT B.key FROM B) aus. 

Weitere Informationen Semi-Join und Anti-Join sollten ihre eigene Syntax in SQL haben :

"Semi" bedeutet, dass wir uns nicht wirklich auf der rechten Seite befinden. Wir prüfen nur, ob ein Join zu einem bestimmten Tuple führt.

-- IN
SELECT *
FROM Employee
WHERE DeptName IN (
  SELECT DeptName
  FROM Dept
)

-- EXISTS
SELECT *
FROM Employee
WHERE EXISTS (
  SELECT 1
  FROM Dept
  WHERE Employee.DeptName = Dept.DeptName
)
2
Lukasz Szozda