NATURAL LEFT [OUTER] JOIN – złączenie zewnętrzne lewostronne naturalne
Wynik obu komend NATURAL LEFT JOIN
i NATURAL LEFT OUTER JOIN
jest jednakowy.
Różnica między LEFT [OUTER] JOIN i NATURAL LEFT [OUTER] JOIN jest niewielka. W LEFT OUTER JOIN po słowie ON specyfikujemy nazwy kolumn z wcześniej wymienionych tabel. Nazwy kolumn mogą być różne. W NATURAL LEFT [OUTER] JOIN podajemy jedynie nazwy złączanych tabel, a jeżeli w obu istnieje kolumna o tej samej nazwie Derby automatycznie ustanawia połączenie. To powoduje, że polecenie jest znacznie krótsze i przez to nieco łatwiejsze w obsłudze.
Teoria zbiorów
Oznaczmy zbiór z lewej jako A, a zbiór z prawej jako B.
W sensie teorii zbiorów jest to cały zbiór A.
Elementy wybrane employee.LastName | employee.DepartmentID | department.DepartmentID |
---|---|---|
Rafferty | 31 | 31 |
Jones, Heissenberg | 33 | 33 |
Robinson, Smith | 34 | 34 |
Williams | null | – |
– | – | 35 |
Klasa Java
package aderby.sqls.joins; import aderby.DerbyUtil; import java.sql.*; public class R119_NATURAL_LEFT_OUTER_JOIN { private static final String baza = "C:/Przyklady/zatrudnieni_db"; static final String joinsql1 = "SELECT * FROM employee " + "NATURAL LEFT OUTER JOIN department"; static final String joinsql2 = "SELECT * FROM employee " + "NATURAL LEFT JOIN department"; public static void main(String[] args) { DerbyUtil.startDerbyEngine(DerbyUtil.embdriver); Connection con = DerbyUtil.connectEmbeddedDB(baza, ";create=false"); Statement stat = null; ResultSet rs = null; ResultSetMetaData rsmd; try { stat = con.createStatement(); rs = stat.executeQuery(joinsql1); rsmd = rs.getMetaData(); int cols = rsmd.getColumnCount(); while(rs.next()) { for(int i = 1; i <cols + 1; i++) { if(i<cols) { System.out.print(rs.getString(i) + ", "); } else{ System.out.print(rs.getString(i)); } } System.out.println(); } } catch (SQLException e) { e.printStackTrace(); } DerbyUtil.close(rs); DerbyUtil.close(stat); DerbyUtil.close(con); DerbyUtil.shutdownEmbeddedDB(baza); DerbyUtil.shutdownDerbyEngine(); } }
Po uruchomieniu klasy na konsoli zobaczymy
31, Rafferty, Sales 33, Jones, Engineering 33, Heisenberg, Engineering 34, Robinson, Clerical 34, Smith, Clerical null, Williams, null
Więcej na temat złączenia można znaleźć w dokumentacji Apache Derby.
Pliki do ściągnięcia
Aktualny (tworzony narastająco) plik module-info.java
Aktualny (tworzony narastająco) plik DerbyUtil.java
Pliki tworzone narastająco zastępują poprzednie pliki o tej samej nazwie i działają dla wszystkich wcześniej opublikowanych przykładów we wszystkich wpisach w projekcie. W przypadku pliku module-info.java
może być potrzebne skreślenie niepotrzebnych wpisów.