2017-06-01 1 views
1

Angenommen, Sie haben eine Abteiltabelle mit DepartmentID als Primärschlüssel und eine Mitarbeitertabelle mit DepartmentID als Fremdschlüssel. Sie können dann die Tatsache verwenden, dass diese Spalten den gleichen Namen haben, um einen natürlichen Join auszuführen, mit dem Sie den Spaltennamen aus der Abfrage auslassen können. (Ich bin nicht kommentieren, ob Sie sollten oder nicht - das ist eine Frage der Meinung - nur die Tatsache, dass diese Abkürzung Teil der SQL-Syntax ist.)Ist natürlich die einzige Elision des Fremdschlüsselnamens?

Es gibt verschiedene andere Fälle in SQL-Syntax, auf die Sie sich beziehen können die Spaltennamen mit Ausdrücken wie . Gibt es noch andere Fälle, in denen eine Art Kurzschrift es erlaubt, die Tatsache zu verwenden, dass die Spalten den gleichen Namen haben, um den Spaltennamen wegzulassen?

+2

Natürliche Joins wissen nichts über Fremdschlüssel, nur Spaltennamen. – jarlh

+1

Inner Join mit 'using' kann es in Oracle tun. – Utsav

Antwort

1

SQL weiß nicht direkt über Fremdschlüssel; Es hat nur Fremdschlüssel Einschränkungen, die Sie daran hindern, ungültige Daten zu erstellen. Wenn Sie einen Fremdschlüssel haben, möchten Sie sowohl eine Integritätsregel als auch Verknüpfungen für sie, aber die Datenbank leitet nicht automatisch eine von der anderen ab.

Wie auch immer, wenn Sie ein auf zwei Säulen mit den gleichen Namen verbinden verwenden:

SELECT ... 
FROM employee 
JOIN department ON employee.DepartmentID = department.DepartmentID 

dann können Sie die ON-Klausel mit den USING clause ersetzen:

SELECT ... 
FROM employee 
JOIN department USING (DepartmentID) 

Wenn es eine USING-Klausel muss dann jeder der angegebenen Spaltennamen in den Datensätzen links und rechts neben dem Join-Operator vorhanden sein. Für jedes Paar von benannten Spalten wird der Ausdruck "Lhs.X = rhs.X" für jede Zeile des kartesischen Produkts als boolescher Ausdruck ausgewertet. Nur Zeilen, für die alle diese Ausdrücke wahr sind, werden von der Ergebnismenge eingeschlossen.
[...]
Für jedes durch eine USING-Klausel identifizierte Spaltenpaar wird die Spalte aus dem rechten Datensatz aus dem verknüpften Datensatz weggelassen. Dies ist der einzige Unterschied zwischen einer USING-Klausel und ihrer äquivalenten ON-Einschränkung.

(die doppelte Spalte Weglassen zählt nur, wenn Sie SELECT * verwenden (ich nicht, ob Sie sollten oder nicht bin zu kommentieren -. Das ist eine Frage der Meinung - nur die Tatsache beachten, dass dies eine Abkürzung Teil von SQL-Syntax .))

Verwandte Themen