Answer by reaanbは正しいので、受け入れてください。
実際のSQLコードを示すJava JDBCコードの例です。私はMySQLを使っていません(質問のように)。代わりに、この例ではH2 Database Engineを使用して、一時的なメモリ内データベースを作成します。
try {
Class.forName ("org.h2.Driver");
} catch (final ClassNotFoundException e) {
e.printStackTrace ();
}
try (Connection conn = DriverManager.getConnection ("jdbc:h2:mem:trash_me_db") ;
Statement stmt = conn.createStatement ()) {
String sql = null;
// Table 1
sql = "CREATE TABLE t1_ (\n" +
" id_ INT IDENTITY ,\n" +
" name_ VARCHAR \n" +
");";
stmt.executeUpdate (sql);
stmt.execute ("INSERT INTO t1_ (name_) VALUES ('Jesse');");
stmt.execute ("INSERT INTO t1_ (name_) VALUES ('Wendy');");
stmt.execute ("INSERT INTO t1_ (name_) VALUES ('Lisa');");
stmt.execute ("INSERT INTO t1_ (name_) VALUES ('Susan');");
stmt.execute ("INSERT INTO t1_ (name_) VALUES ('Jimmy');");
stmt.execute ("INSERT INTO t1_ (name_) VALUES ('Wine');");
// Dump
System.out.println ("\nDump table t1_");
try (ResultSet rs = stmt.executeQuery ("SELECT * FROM t1_ ;")) {
while (rs.next ()) {
final int id = rs.getInt ("id_"); //Retrieve by column name
final String name = rs.getString ("name_");
System.out.println ("id: " + id + " | name: " + name);
}
}
// Table 2
sql = "CREATE TABLE t2_ (\n" +
" id_ INT IDENTITY ,\n" +
" name_ VARCHAR \n" +
");";
stmt.executeUpdate (sql);
stmt.execute ("INSERT INTO t2_ (name_) VALUES ('Jesse');");
stmt.execute ("INSERT INTO t2_ (name_) VALUES ('Wendy');");
stmt.execute ("INSERT INTO t2_ (name_) VALUES ('Lisa');");
stmt.execute ("INSERT INTO t2_ (name_) VALUES ('Susan');");
stmt.execute ("INSERT INTO t2_ (name_) VALUES ('Jimmy');");
stmt.execute ("INSERT INTO t2_ (name_) VALUES ('Beer');");
// Dump
System.out.println ("\nDump table t2_");
try (ResultSet rs = stmt.executeQuery ("SELECT * FROM t2_ ;")) {
while (rs.next ()) {
final int id = rs.getInt ("id_"); //Retrieve by column name
final String name = rs.getString ("name_");
System.out.println ("id: " + id + " | name: " + name);
}
}
// Difference, left.
System.out.println ("\nShow names that exist in t1_ but not in t2_.");
sql = "SELECT *\n" +
"FROM t1_ \n" +
"LEFT JOIN t2_ ON t1_.name_ = t2_.name_\n" +
"WHERE t2_.name_ IS NULL";
try (ResultSet rs = stmt.executeQuery (sql)) {
while (rs.next ()) {
final int id = rs.getInt ("id_"); //Retrieve by column name
final String name = rs.getString ("name_");
System.out.println ("id: " + id + " | name: " + name);
}
}
// Difference, right.
System.out.println ("\nShow names that exist in t2_ but not in t1_.");
sql = "SELECT *\n" +
"FROM t2_ \n" +
"LEFT JOIN t1_ ON t2_.name_ = t1_.name_\n" +
"WHERE t1_.name_ IS NULL";
try (ResultSet rs = stmt.executeQuery (sql)) {
while (rs.next ()) {
final int id = rs.getInt ("id_"); //Retrieve by column name
final String name = rs.getString ("name_");
System.out.println ("id: " + id + " | name: " + name);
}
}
} catch (final SQLException e) {
e.printStackTrace ();
}
実行時。
Dump table t1_
id: 1 | name: Jesse
id: 2 | name: Wendy
id: 3 | name: Lisa
id: 4 | name: Susan
id: 5 | name: Jimmy
id: 6 | name: Wine
Dump table t2_
id: 1 | name: Jesse
id: 2 | name: Wendy
id: 3 | name: Lisa
id: 4 | name: Susan
id: 5 | name: Jimmy
id: 6 | name: Beer
Show names that exist in t1_ but not in t2_.
id: 6 | name: Wine
Show names that exist in t2_ but not in t1_.
id: 6 | name: Beer
table1には存在するがtable2には存在しない名前のリストを参照したいだけですか? – reaanb
正確に、可能であれば、Javaで結果を照会して印刷する方法は可能です。私は既にJavaプログラムにMySQLの接続を持っていますので、私が知りたいのは、どのようにしてクエリを設定するのかです。 –