NATURAL RIGHT [OUTER] JOIN – złączenie zewnętrzne prawostronne naturalne
Wynik obu komend NATURAL RIGHT JOIN
i NATURAL RIGHT OUTER JOIN
jest jednakowy.
Różnica między RIGHT [OUTER] JOIN i NATURAL RIGHT [OUTER] JOIN jest niewielka. W RIGHT OUTER JOIN po słowie ON specyfikujemy nazwy kolumn z wcześniej wymienionych tabel. Nazwy kolumn mogą być różne. W NATURAL RIGHT [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 B.
Elementy wybrane employee.LastName | employee.DepartmentID | department.DepartmentID |
---|---|---|
Rafferty | 31 | 31 |
Jones, Heissenberg | 33 | 33 |
Robinson, Smith | 34 | 34 |
– | – | 35 |
Williams | null | – |
Klasa Java
package aderby.sqls.joins; import aderby.DerbyUtil; import java.sql.*; public class R121_NATURAL_RIGHT_OUTER_JOIN { private static final String baza = "C:/Przyklady/zatrudnieni_db"; static final String joinsql1 = "SELECT * FROM employee " + "NATURAL RIGHT OUTER JOIN department"; static final String joinsql2 = "SELECT * FROM employee " + "NATURAL RIGHT 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 35, null, Marketing
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.