Aria

Apache Derby – tutorial

CROSS JOIN – złączenie krzyżowe

Teoria zbiorów

Oznaczmy zbiór z lewej jako A, a zbiór z prawej jako B.

W sensie teorii zbiorów jest to iloczyn kartezjąński zbiorów A × B (połączenie każdego elementu A z każdym elementem B.

W opisanym przypadku tworzenie złączenia oczywiście nie ma sensu. Złączenie przeznaczone jest dla danych innego typu.

Klasa Java

package aderby.sqls.joins;

import aderby.DerbyUtil;

import java.sql.*;

public class C09_CROSS_JOIN {
    private static final String baza = "C:/Przyklady/zatrudnieni_db";
    static final String joinsql1 = "SELECT * FROM employee CROSS JOIN department";
    static final String joinsql2 = "SELECT * FROM employee, department";
    static final String joinsql3 = "SELECT * FROM employee INNER JOIN department ON 1=1";
    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(joinsql2);
            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

Rafferty, 31, 31, Sales
Jones, 33, 31, Sales
Heisenberg, 33, 31, Sales
Robinson, 34, 31, Sales
Smith, 34, 31, Sales
Williams, null, 31, Sales
Rafferty, 31, 33, Engineering
Jones, 33, 33, Engineering
Heisenberg, 33, 33, Engineering
Robinson, 34, 33, Engineering
Smith, 34, 33, Engineering
Williams, null, 33, Engineering
Rafferty, 31, 34, Clerical
Jones, 33, 34, Clerical
Heisenberg, 33, 34, Clerical
Robinson, 34, 34, Clerical
Smith, 34, 34, Clerical
Williams, null, 34, Clerical
Rafferty, 31, 35, Marketing
Jones, 33, 35, Marketing
Heisenberg, 33, 35, Marketing
Robinson, 34, 35, Marketing
Smith, 34, 35, Marketing
Williams, null, 35, Marketing

Więcej na temat złączenia można znaleźć w dokumentacji Apache Derby.

Pliki do ściągnięcia

Klasyfikacja złączeń, informacja o użytych tabelach, skrypt tworzący bazę danych oraz klasa sprawdzająca poprawność

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.