Zielony Smok - logo witryny

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.