SELF JOIN – samozłączenie
Złączenie nie występuje w Apache Derby. W klasyfikacji jest to rodzaj złączenia wewnętrznego. Ponieważ mamy tylko jedną tabelę konieczne jest utworzenie aliasów tabeli. Złączenie jest wykonywane na aliasach.
Klasa Java
package aderby.sqls.joins; import aderby.DerbyUtil; import java.sql.*; public class R128_SELF_JOIN { private static final String baza = "C:/Przyklady/zatrudnieni_db"; static final String joinsql1 ="SELECT A.LastName, B.LastName, A.DepartmentID " + "FROM employee A, employee B " + "WHERE A.LastName != B.LastName AND A.DepartmentID = B.DepartmentID "; 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
Jones, Heisenberg, 33 Heisenberg, Jones, 33 Robinson, Smith, 34 Smith, Robinson, 34
Wyszukiwaliśmy te osoby, które pracują w tym samym departamencie. Ponieważ wyszukiwanie odbywa się po nazwiskach, to dla każdej pary mamy dwa wyniki.
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.