/*
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * Other licenses:
 * -----------------------------------------------------------------------------
 * Commercial licenses for this work are available. These replace the above
 * ASL 2.0 and offer limited warranties, support, maintenance, and commercial
 * database integrations.
 *
 * For more information, please visit: http://www.jooq.org/licenses
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */

package org.jooq;

// ...
// ...
// ...
// ...
// ...
import static org.jooq.SQLDialect.CUBRID;
// ...
import static org.jooq.SQLDialect.DERBY;
import static org.jooq.SQLDialect.FIREBIRD;
import static org.jooq.SQLDialect.H2;
// ...
import static org.jooq.SQLDialect.HSQLDB;
// ...
// ...
import static org.jooq.SQLDialect.MARIADB;
// ...
// ...
import static org.jooq.SQLDialect.MYSQL;
// ...
// ...
// ...
import static org.jooq.SQLDialect.POSTGRES;
// ...
// ...
// ...
import static org.jooq.SQLDialect.SQLITE;
// ...
// ...
// ...
// ...
// ...

import java.sql.Timestamp;
import java.util.Collection;
import java.util.List;
import java.util.function.BiFunction;
import java.util.function.Function;

import org.jooq.TableOptions.TableType;
import org.jooq.conf.Settings;
import org.jooq.impl.DSL;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

A table.

Like Field, a Table is a basic building block of any Query, as they all operate on at least one table. There are many different types of tables, including:

Example:

// Assuming import static org.jooq.impl.DSL.*;
using(configuration)
   .select(ACTOR.FIRST_NAME, ACTOR.LAST_NAME)
   .from(ACTOR) // Table reference
   .fetch();

Instances can be created using DSL.table(Name) and overloads.

Author:Lukas Eder
Type parameters:
  • <R> – The record type associated with this table
/** * A table. * <p> * Like {@link Field}, a {@link Table} is a basic building block of any * {@link Query}, as they all operate on at least one table. There are many * different types of tables, including: * <p> * <ul> * <li>Generated table references</li> * <li>Plain SQL tables created with {@link DSL#table(String)}</li> * <li>Table references created with {@link DSL#table(Name)}</li> * <li>Derived tables created with {@link DSL#table(Select)}</li> * <li>Join expressions created e.g. with {@link Table#join(TableLike)}</li> * <li>Common table expressions ({@link CommonTableExpression})</li> * <li>Unnested arrays referenced through {@link DSL#unnest(Field)} and * overloads</li> * <li>Table valued functions as provided by the code generator</li> * <li>Etc.</li> * </ul> * <p> * <strong>Example:</strong> * <p> * <code><pre> * // Assuming import static org.jooq.impl.DSL.*; * * using(configuration) * .select(ACTOR.FIRST_NAME, ACTOR.LAST_NAME) * .from(ACTOR) // Table reference * .fetch(); * </pre></code> * <p> * Instances can be created using {@link DSL#table(Name)} and overloads. * * @param <R> The record type associated with this table * @author Lukas Eder */
public interface Table<R extends Record> extends TableLike<R>, Qualified {
Get the table type.
/** * Get the table type. */
@NotNull TableType getType();
Get the table options.
/** * Get the table options. */
@NotNull TableOptions getOptions();
The record type produced by this table.
/** * The record type produced by this table. */
@NotNull RecordType<R> recordType();
The record type produced by this table.
/** * The record type produced by this table. */
@NotNull Class<? extends R> getRecordType();
The table's record type as a UDT data type, in case the underlying database supports table records as UDT records.
/** * The table's record type as a UDT data type, in case the underlying * database supports table records as UDT records. */
@NotNull DataType<R> getDataType();
Create a new Record of this table's type.
See Also:
/** * Create a new {@link Record} of this table's type. * * @see DSLContext#newRecord(Table) */
@NotNull R newRecord();
Retrieve the table's IDENTITY information, if available.

With SQL:2003, the concept of IDENTITY columns was introduced in most RDBMS. These are special kinds of columns that have auto-increment functionality when INSERT statements are performed.

An IDENTITY column is usually part of the PRIMARY KEY or of a UNIQUE KEY in the table, although in some RDBMS, this is not required. There can only be at most one IDENTITY column.

Note: Unfortunately, this is not supported in the Oracle dialect, where identities emulated by triggers cannot be formally detected.

Returns:The table's IDENTITY information, or null, if no such information is available.
/** * Retrieve the table's <code>IDENTITY</code> information, if available. * <p> * With SQL:2003, the concept of <code>IDENTITY</code> columns was * introduced in most RDBMS. These are special kinds of columns that have * auto-increment functionality when <code>INSERT</code> statements are * performed. * <p> * An <code>IDENTITY</code> column is usually part of the * <code>PRIMARY KEY</code> or of a <code>UNIQUE KEY</code> in the table, * although in some RDBMS, this is not required. There can only be at most * one <code>IDENTITY</code> column. * <p> * Note: Unfortunately, this is not supported in the Oracle dialect, where * identities emulated by triggers cannot be formally detected. * * @return The table's <code>IDENTITY</code> information, or * <code>null</code>, if no such information is available. */
@Nullable Identity<R, ?> getIdentity();
Retrieve the table's primary key
Returns:The primary key. This is never null for an updatable table.
/** * Retrieve the table's primary key * * @return The primary key. This is never <code>null</code> for an updatable * table. */
@Nullable UniqueKey<R> getPrimaryKey();
A "version" field holding record version information used for optimistic locking

jOOQ supports optimistic locking in UpdatableRecord.store() and UpdatableRecord.delete() if Settings.isExecuteWithOptimisticLocking() is enabled. Optimistic locking is performed in a single UPDATE or DELETE statement if tables provide a "version" or "timestamp" field, or in two steps using an additional SELECT .. FOR UPDATE statement otherwise.

This method is overridden in generated subclasses if their corresponding tables have been configured accordingly. A table may have both a "version" and a "timestamp" field.

See Also:
Returns:The "version" field, or null, if this table has no "version" field.
/** * A "version" field holding record version information used for optimistic * locking * <p> * jOOQ supports optimistic locking in {@link UpdatableRecord#store()} and * {@link UpdatableRecord#delete()} if * {@link Settings#isExecuteWithOptimisticLocking()} is enabled. Optimistic * locking is performed in a single <code>UPDATE</code> or * <code>DELETE</code> statement if tables provide a "version" or * "timestamp" field, or in two steps using an additional * <code>SELECT .. FOR UPDATE</code> statement otherwise. * <p> * This method is overridden in generated subclasses if their corresponding * tables have been configured accordingly. A table may have both a * "version" and a "timestamp" field. * * @return The "version" field, or <code>null</code>, if this table has no * "version" field. * @see #getRecordTimestamp() * @see UpdatableRecord#store() * @see UpdatableRecord#delete() * @see Settings#isExecuteWithOptimisticLocking() */
@Nullable TableField<R, ?> getRecordVersion();
A "timestamp" field holding record timestamp information used for optimistic locking

jOOQ supports optimistic locking in UpdatableRecord.store() and UpdatableRecord.delete() if Settings.isExecuteWithOptimisticLocking() is enabled. Optimistic locking is performed in a single UPDATE or DELETE statement if tables provide a "version" or "timestamp" field, or in two steps using an additional SELECT .. FOR UPDATE statement otherwise.

This method is overridden in generated subclasses if their corresponding tables have been configured accordingly. A table may have both a "version" and a "timestamp" field.

See Also:
Returns:The "timestamp" field, or null, if this table has no "timestamp" field.
/** * A "timestamp" field holding record timestamp information used for * optimistic locking * <p> * jOOQ supports optimistic locking in {@link UpdatableRecord#store()} and * {@link UpdatableRecord#delete()} if * {@link Settings#isExecuteWithOptimisticLocking()} is enabled. Optimistic * locking is performed in a single <code>UPDATE</code> or * <code>DELETE</code> statement if tables provide a "version" or * "timestamp" field, or in two steps using an additional * <code>SELECT .. FOR UPDATE</code> statement otherwise. * <p> * This method is overridden in generated subclasses if their corresponding * tables have been configured accordingly. A table may have both a * "version" and a "timestamp" field. * * @return The "timestamp" field, or <code>null</code>, if this table has no * "timestamp" field. * @see #getRecordVersion() * @see UpdatableRecord#store() * @see UpdatableRecord#delete() * @see Settings#isExecuteWithOptimisticLocking() */
@Nullable TableField<R, ?> getRecordTimestamp();
Retrieve all of the table's indexes.
Returns:All indexes. This is never null. This method returns an unmodifiable list.
/** * Retrieve all of the table's indexes. * * @return All indexes. This is never <code>null</code>. This method returns * an unmodifiable list. */
@NotNull List<Index> getIndexes();
Retrieve all of the table's unique keys.
Returns:All keys. This is never null. This is never empty for a Table with a getPrimaryKey(). This method returns an unmodifiable list.
/** * Retrieve all of the table's unique keys. * * @return All keys. This is never <code>null</code>. This is never empty * for a {@link Table} with a {@link Table#getPrimaryKey()}. This * method returns an unmodifiable list. */
@NotNull List<UniqueKey<R>> getKeys();
Get a list of FOREIGN KEY's of a specific table, referencing a this table.

This will recurse into joined tables.

Params:
  • other – The other table of the foreign key relationship
Type parameters:
  • <O> – The other table's record type
Returns:Some other table's FOREIGN KEY's towards an this table. This is never null. This method returns an unmodifiable list.
/** * Get a list of <code>FOREIGN KEY</code>'s of a specific table, referencing * a this table. * <p> * This will recurse into joined tables. * * @param <O> The other table's record type * @param other The other table of the foreign key relationship * @return Some other table's <code>FOREIGN KEY</code>'s towards an this * table. This is never <code>null</code>. This method returns an * unmodifiable list. */
@NotNull <O extends Record> List<ForeignKey<O, R>> getReferencesFrom(Table<O> other);
Get the list of FOREIGN KEY's of this table
Returns:This table's FOREIGN KEY's. This is never null.
/** * Get the list of <code>FOREIGN KEY</code>'s of this table * * @return This table's <code>FOREIGN KEY</code>'s. This is never * <code>null</code>. */
@NotNull List<ForeignKey<R, ?>> getReferences();
Get a list of FOREIGN KEY's of this table, referencing a specific table.

This will recurse into joined tables.

Params:
  • other – The other table of the foreign key relationship
Type parameters:
  • <O> – The other table's record type
Returns:This table's FOREIGN KEY's towards an other table. This is never null.
/** * Get a list of <code>FOREIGN KEY</code>'s of this table, referencing a * specific table. * <p> * This will recurse into joined tables. * * @param <O> The other table's record type * @param other The other table of the foreign key relationship * @return This table's <code>FOREIGN KEY</code>'s towards an other table. * This is never <code>null</code>. */
@NotNull <O extends Record> List<ForeignKey<R, O>> getReferencesTo(Table<O> other);
Get a list of CHECK constraints of this table.
/** * Get a list of <code>CHECK</code> constraints of this table. */
@NotNull List<Check<R>> getChecks(); // ------------------------------------------------------------------------- // XXX: Expressions based on this table // -------------------------------------------------------------------------
Create a qualified asterisk expression from this table (table.*) for use with SELECT.
See Also:
  • asterisk.asterisk()
/** * Create a qualified asterisk expression from this table * (<code>table.*</code>) for use with <code>SELECT</code>. * * @see DSL#asterisk() */
@NotNull @Support QualifiedAsterisk asterisk();
Get a table.rowid reference from this table.

A rowid value describes the physical location of a row on the disk, which can be used as a replacement for a primary key in some situations - especially within a query, e.g. to self-join a table:

-- Emulating this MySQL statement...
DELETE FROM x ORDER BY x.y LIMIT 1
-- ... in other databases
DELETE FROM x
WHERE x.rowid IN (
  SELECT x.rowid FROM x ORDER BY x.a LIMIT 1
)

It is not recommended to use rowid values in client applications as actual row identifiers as the database system may move a row to a different physical location at any time, thus changing the rowid value. In general, use primary keys, instead.

/** * Get a <code>table.rowid</code> reference from this table. * <p> * A rowid value describes the physical location of a row on the disk, which * can be used as a replacement for a primary key in some situations - * especially within a query, e.g. to self-join a table: * <p> * <code><pre> * -- Emulating this MySQL statement... * DELETE FROM x ORDER BY x.y LIMIT 1 * * -- ... in other databases * DELETE FROM x * WHERE x.rowid IN ( * SELECT x.rowid FROM x ORDER BY x.a LIMIT 1 * ) * </pre></code> * <p> * It is <em>not</em> recommended to use <code>rowid</code> values in client * applications as actual row identifiers as the database system may move a * row to a different physical location at any time, thus changing the rowid * value. In general, use primary keys, instead. */
@NotNull @Support({ H2, POSTGRES, SQLITE }) Field<RowId> rowid(); // ------------------------------------------------------------------------- // XXX: Aliasing clauses // -------------------------------------------------------------------------
Create an alias for this table.

Note that the case-sensitivity of the returned table depends on Settings.getRenderQuotedNames(). By default, table aliases are quoted, and thus case-sensitive in many SQL dialects!

Params:
  • alias – The alias name
Returns:The table alias
/** * Create an alias for this table. * <p> * Note that the case-sensitivity of the returned table depends on * {@link Settings#getRenderQuotedNames()}. By default, table aliases are * quoted, and thus case-sensitive in many SQL dialects! * * @param alias The alias name * @return The table alias */
@NotNull @Support Table<R> as(String alias);
Create an alias for this table and its fields.

Note that the case-sensitivity of the returned table and columns depends on Settings.getRenderQuotedNames(). By default, table aliases are quoted, and thus case-sensitive in many SQL dialects!

Derived column lists for table references

Note, not all databases support derived column lists for their table aliases. On the other hand, some databases do support derived column lists, but only for derived tables. jOOQ will try to turn table references into derived tables to make this syntax work. In other words, the following statements are equivalent:

-- Using derived column lists to rename columns (e.g. Postgres)
SELECT t.a, t.b
FROM my_table t(a, b)
-- Nesting table references within derived tables (e.g. SQL Server)
SELECT t.a, t.b
FROM (
  SELECT * FROM my_table
) t(a, b)

Derived column lists for derived tables

Other databases may not support derived column lists at all, but they do support common table expressions. The following statements are equivalent:

-- Using derived column lists to rename columns (e.g. Postgres)
SELECT t.a, t.b
FROM (
  SELECT 1, 2
) AS t(a, b)
-- Using UNION ALL to produce column names (e.g. MySQL)
SELECT t.a, t.b
FROM (
  SELECT null a, null b FROM DUAL WHERE 1 = 0
  UNION ALL
  SELECT 1, 2 FROM DUAL
) t
Params:
  • alias – The alias name
  • fieldAliases – The field aliases. Excess aliases are ignored, missing aliases will be substituted by this table's field names.
Returns:The table alias
/** * Create an alias for this table and its fields. * <p> * Note that the case-sensitivity of the returned table and columns depends * on {@link Settings#getRenderQuotedNames()}. By default, table aliases are * quoted, and thus case-sensitive in many SQL dialects! * <p> * <h5>Derived column lists for table references</h5> * <p> * Note, not all databases support derived column lists for their table * aliases. On the other hand, some databases do support derived column * lists, but only for derived tables. jOOQ will try to turn table * references into derived tables to make this syntax work. In other words, * the following statements are equivalent: <code><pre> * -- Using derived column lists to rename columns (e.g. Postgres) * SELECT t.a, t.b * FROM my_table t(a, b) * * -- Nesting table references within derived tables (e.g. SQL Server) * SELECT t.a, t.b * FROM ( * SELECT * FROM my_table * ) t(a, b) * </pre></code> * <p> * <h5>Derived column lists for derived tables</h5> * <p> * Other databases may not support derived column lists at all, but they do * support common table expressions. The following statements are * equivalent: <code><pre> * -- Using derived column lists to rename columns (e.g. Postgres) * SELECT t.a, t.b * FROM ( * SELECT 1, 2 * ) AS t(a, b) * * -- Using UNION ALL to produce column names (e.g. MySQL) * SELECT t.a, t.b * FROM ( * SELECT null a, null b FROM DUAL WHERE 1 = 0 * UNION ALL * SELECT 1, 2 FROM DUAL * ) t * </pre></code> * * @param alias The alias name * @param fieldAliases The field aliases. Excess aliases are ignored, * missing aliases will be substituted by this table's field * names. * @return The table alias */
@NotNull @Support Table<R> as(String alias, String... fieldAliases);
Create an alias for this table and its fields.

This works like as(String, String...), except that field aliases are provided by a function. This is useful, for instance, to prefix all columns with a common prefix:

MY_TABLE.as("t1", f ->"prefix_" + f.getName());
Params:
  • alias – The alias name
  • aliasFunction – The function providing field aliases.
Returns:The table alias
Deprecated:- 3.14.0 - [#10156] - These methods will be removed without replacement from a future jOOQ. They offer convenience that is unidiomatic for jOOQ's DSL, without offering functionality that would not be possible otherwise - yet they add complexity in jOOQ's internals.
/** * Create an alias for this table and its fields. * <p> * This works like {@link #as(String, String...)}, except that field aliases * are provided by a function. This is useful, for instance, to prefix all * columns with a common prefix: * <p> * <code><pre> * MY_TABLE.as("t1", f -&gt;"prefix_" + f.getName()); * </pre></code> * * @param alias The alias name * @param aliasFunction The function providing field aliases. * @return The table alias * @deprecated - 3.14.0 - [#10156] - These methods will be removed without * replacement from a future jOOQ. They offer convenience that * is unidiomatic for jOOQ's DSL, without offering functionality * that would not be possible otherwise - yet they add * complexity in jOOQ's internals. */
@Deprecated @NotNull @Support Table<R> as(String alias, Function<? super Field<?>, ? extends String> aliasFunction);
Create an alias for this table and its fields.

This works like as(String, String...), except that field aliases are provided by a function. This is useful, for instance, to prefix all columns with a common prefix:

MY_TABLE.as("t1", (f, i) ->"column" + i);
Params:
  • alias – The alias name
  • aliasFunction – The function providing field aliases.
Returns:The table alias
Deprecated:- 3.14.0 - [#10156] - These methods will be removed without replacement from a future jOOQ. They offer convenience that is unidiomatic for jOOQ's DSL, without offering functionality that would not be possible otherwise - yet they add complexity in jOOQ's internals.
/** * Create an alias for this table and its fields. * <p> * This works like {@link #as(String, String...)}, except that field aliases * are provided by a function. This is useful, for instance, to prefix all * columns with a common prefix: * <p> * <code><pre> * MY_TABLE.as("t1", (f, i) -&gt;"column" + i); * </pre></code> * * @param alias The alias name * @param aliasFunction The function providing field aliases. * @return The table alias * @deprecated - 3.14.0 - [#10156] - These methods will be removed without * replacement from a future jOOQ. They offer convenience that * is unidiomatic for jOOQ's DSL, without offering functionality * that would not be possible otherwise - yet they add * complexity in jOOQ's internals. */
@Deprecated @NotNull @Support Table<R> as(String alias, BiFunction<? super Field<?>, ? super Integer, ? extends String> aliasFunction);
Create an alias for this table.

Note that the case-sensitivity of the returned table depends on Settings.getRenderQuotedNames() and the Name. By default, table aliases are quoted, and thus case-sensitive in many SQL dialects - use DSL.unquotedName(String...) for case-insensitive aliases.

If the argument Name.getName() is qualified, then the Name.last() part will be used.

Params:
  • alias – The alias name
Returns:The table alias
/** * Create an alias for this table. * <p> * Note that the case-sensitivity of the returned table depends on * {@link Settings#getRenderQuotedNames()} and the {@link Name}. By default, * table aliases are quoted, and thus case-sensitive in many SQL dialects - * use {@link DSL#unquotedName(String...)} for case-insensitive aliases. * <p> * If the argument {@link Name#getName()} is qualified, then the * {@link Name#last()} part will be used. * * @param alias The alias name * @return The table alias */
@NotNull @Support Table<R> as(Name alias);
Create an alias for this table and its fields.

Note that the case-sensitivity of the returned table depends on Settings.getRenderQuotedNames() and the Name. By default, table aliases are quoted, and thus case-sensitive in many SQL dialects - use DSL.unquotedName(String...) for case-insensitive aliases.

If the argument Name.getName() is qualified, then the Name.last() part will be used.

Derived column lists for table references

Note, not all databases support derived column lists for their table aliases. On the other hand, some databases do support derived column lists, but only for derived tables. jOOQ will try to turn table references into derived tables to make this syntax work. In other words, the following statements are equivalent:

-- Using derived column lists to rename columns (e.g. Postgres)
SELECT t.a, t.b
FROM my_table t(a, b)
-- Nesting table references within derived tables (e.g. SQL Server)
SELECT t.a, t.b
FROM (
  SELECT * FROM my_table
) t(a, b)

Derived column lists for derived tables

Other databases may not support derived column lists at all, but they do support common table expressions. The following statements are equivalent:

-- Using derived column lists to rename columns (e.g. Postgres)
SELECT t.a, t.b
FROM (
  SELECT 1, 2
) AS t(a, b)
-- Using UNION ALL to produce column names (e.g. MySQL)
SELECT t.a, t.b
FROM (
  SELECT null a, null b FROM DUAL WHERE 1 = 0
  UNION ALL
  SELECT 1, 2 FROM DUAL
) t
Params:
  • alias – The alias name
  • fieldAliases – The field aliases. Excess aliases are ignored, missing aliases will be substituted by this table's field names.
Returns:The table alias
/** * Create an alias for this table and its fields. * <p> * Note that the case-sensitivity of the returned table depends on * {@link Settings#getRenderQuotedNames()} and the {@link Name}. By default, * table aliases are quoted, and thus case-sensitive in many SQL dialects - * use {@link DSL#unquotedName(String...)} for case-insensitive aliases. * <p> * If the argument {@link Name#getName()} is qualified, then the * {@link Name#last()} part will be used. * <p> * <h5>Derived column lists for table references</h5> * <p> * Note, not all databases support derived column lists for their table * aliases. On the other hand, some databases do support derived column * lists, but only for derived tables. jOOQ will try to turn table * references into derived tables to make this syntax work. In other words, * the following statements are equivalent: <code><pre> * -- Using derived column lists to rename columns (e.g. Postgres) * SELECT t.a, t.b * FROM my_table t(a, b) * * -- Nesting table references within derived tables (e.g. SQL Server) * SELECT t.a, t.b * FROM ( * SELECT * FROM my_table * ) t(a, b) * </pre></code> * <p> * <h5>Derived column lists for derived tables</h5> * <p> * Other databases may not support derived column lists at all, but they do * support common table expressions. The following statements are * equivalent: <code><pre> * -- Using derived column lists to rename columns (e.g. Postgres) * SELECT t.a, t.b * FROM ( * SELECT 1, 2 * ) AS t(a, b) * * -- Using UNION ALL to produce column names (e.g. MySQL) * SELECT t.a, t.b * FROM ( * SELECT null a, null b FROM DUAL WHERE 1 = 0 * UNION ALL * SELECT 1, 2 FROM DUAL * ) t * </pre></code> * * @param alias The alias name * @param fieldAliases The field aliases. Excess aliases are ignored, * missing aliases will be substituted by this table's field * names. * @return The table alias */
@NotNull @Support Table<R> as(Name alias, Name... fieldAliases);
Create an alias for this table and its fields.

This works like as(Name, Name...), except that field aliases are provided by a function. This is useful, for instance, to prefix all columns with a common prefix:

MY_TABLE.as("t1", f ->"prefix_" + f.getName());
Params:
  • alias – The alias name
  • aliasFunction – The function providing field aliases.
Returns:The table alias
Deprecated:- 3.14.0 - [#10156] - These methods will be removed without replacement from a future jOOQ. They offer convenience that is unidiomatic for jOOQ's DSL, without offering functionality that would not be possible otherwise - yet they add complexity in jOOQ's internals.
/** * Create an alias for this table and its fields. * <p> * This works like {@link #as(Name, Name...)}, except that field aliases * are provided by a function. This is useful, for instance, to prefix all * columns with a common prefix: * <p> * <code><pre> * MY_TABLE.as("t1", f -&gt;"prefix_" + f.getName()); * </pre></code> * * @param alias The alias name * @param aliasFunction The function providing field aliases. * @return The table alias * @deprecated - 3.14.0 - [#10156] - These methods will be removed without * replacement from a future jOOQ. They offer convenience that * is unidiomatic for jOOQ's DSL, without offering functionality * that would not be possible otherwise - yet they add * complexity in jOOQ's internals. */
@Deprecated @NotNull @Support Table<R> as(Name alias, Function<? super Field<?>, ? extends Name> aliasFunction);
Create an alias for this table and its fields.

This works like as(Name, Name...), except that field aliases are provided by a function. This is useful, for instance, to prefix all columns with a common prefix:

MY_TABLE.as("t1", (f, i) ->"column" + i);
Params:
  • alias – The alias name
  • aliasFunction – The function providing field aliases.
Returns:The table alias
Deprecated:- 3.14.0 - [#10156] - These methods will be removed without replacement from a future jOOQ. They offer convenience that is unidiomatic for jOOQ's DSL, without offering functionality that would not be possible otherwise - yet they add complexity in jOOQ's internals.
/** * Create an alias for this table and its fields. * <p> * This works like {@link #as(Name, Name...)}, except that field aliases * are provided by a function. This is useful, for instance, to prefix all * columns with a common prefix: * <p> * <code><pre> * MY_TABLE.as("t1", (f, i) -&gt;"column" + i); * </pre></code> * * @param alias The alias name * @param aliasFunction The function providing field aliases. * @return The table alias * @deprecated - 3.14.0 - [#10156] - These methods will be removed without * replacement from a future jOOQ. They offer convenience that * is unidiomatic for jOOQ's DSL, without offering functionality * that would not be possible otherwise - yet they add * complexity in jOOQ's internals. */
@Deprecated @NotNull @Support Table<R> as(Name alias, BiFunction<? super Field<?>, ? super Integer, ? extends Name> aliasFunction);
Create an alias for this table based on another table's name.
Params:
  • otherTable – The other table whose name this table is aliased with.
Returns:The table alias.
/** * Create an alias for this table based on another table's name. * * @param otherTable The other table whose name this table is aliased with. * @return The table alias. */
@NotNull @Support Table<R> as(Table<?> otherTable);
Create an alias for this table based on another table's name.
Params:
  • otherTable – The other table whose name this table is aliased with.
  • otherFields – The other fields whose field name this table's fields are aliased with.
Returns:The table alias.
/** * Create an alias for this table based on another table's name. * * @param otherTable The other table whose name this table is aliased with. * @param otherFields The other fields whose field name this table's fields * are aliased with. * @return The table alias. */
@NotNull @Support Table<R> as(Table<?> otherTable, Field<?>... otherFields);
Create an alias for this table and its fields.

This works like as(Table, Field...), except that field aliases are provided by a function. This is useful, for instance, to prefix all columns with a common prefix:

MY_TABLE.as(MY_OTHER_TABLE, f ->MY_OTHER_TABLE.field(f));
Params:
  • otherTable – The other table whose name is used as alias name
  • aliasFunction – The function providing field aliases.
Returns:The table alias
Deprecated:- 3.14.0 - [#10156] - These methods will be removed without replacement from a future jOOQ. They offer convenience that is unidiomatic for jOOQ's DSL, without offering functionality that would not be possible otherwise - yet they add complexity in jOOQ's internals.
/** * Create an alias for this table and its fields. * <p> * This works like {@link #as(Table, Field...)}, except that field aliases * are provided by a function. This is useful, for instance, to prefix all * columns with a common prefix: * <p> * <code><pre> * MY_TABLE.as(MY_OTHER_TABLE, f -&gt;MY_OTHER_TABLE.field(f)); * </pre></code> * * @param otherTable The other table whose name is used as alias name * @param aliasFunction The function providing field aliases. * @return The table alias * @deprecated - 3.14.0 - [#10156] - These methods will be removed without * replacement from a future jOOQ. They offer convenience that * is unidiomatic for jOOQ's DSL, without offering functionality * that would not be possible otherwise - yet they add * complexity in jOOQ's internals. */
@Deprecated @NotNull @Support Table<R> as(Table<?> otherTable, Function<? super Field<?>, ? extends Field<?>> aliasFunction);
Create an alias for this table and its fields.

This works like as(Table, Field...), except that field aliases are provided by a function. This is useful, for instance, to prefix all columns with a common prefix:

MY_TABLE.as("t1", (f, i) ->"column" + i);
Params:
  • otherTable – The other table whose name is used as alias name
  • aliasFunction – The function providing field aliases.
Returns:The table alias
Deprecated:- 3.14.0 - [#10156] - These methods will be removed without replacement from a future jOOQ. They offer convenience that is unidiomatic for jOOQ's DSL, without offering functionality that would not be possible otherwise - yet they add complexity in jOOQ's internals.
/** * Create an alias for this table and its fields. * <p> * This works like {@link #as(Table, Field...)}, except that field aliases * are provided by a function. This is useful, for instance, to prefix all * columns with a common prefix: * <p> * <code><pre> * MY_TABLE.as("t1", (f, i) -&gt;"column" + i); * </pre></code> * * @param otherTable The other table whose name is used as alias name * @param aliasFunction The function providing field aliases. * @return The table alias * @deprecated - 3.14.0 - [#10156] - These methods will be removed without * replacement from a future jOOQ. They offer convenience that * is unidiomatic for jOOQ's DSL, without offering functionality * that would not be possible otherwise - yet they add * complexity in jOOQ's internals. */
@Deprecated @NotNull @Support Table<R> as(Table<?> otherTable, BiFunction<? super Field<?>, ? super Integer, ? extends Field<?>> aliasFunction); // ------------------------------------------------------------------------- // XXX: WHERE clauses on tables // -------------------------------------------------------------------------
Add a WHERE clause to the table, connecting them with each other with Operator.AND.

The resulting table acts like a derived table that projects all of this table's columns and filters by the argument Condition. If syntactically reasonable, the derived table may be inlined to the query that selects from the resulting table.

/** * Add a <code>WHERE</code> clause to the table, connecting them with each * other with {@link Operator#AND}. * <p> * The resulting table acts like a derived table that projects all of this * table's columns and filters by the argument {@link Condition}. If * syntactically reasonable, the derived table may be inlined to the query * that selects from the resulting table. */
@NotNull @Support Table<R> where(Condition condition);
Add a WHERE clause to the table, connecting them with each other with Operator.AND.

The resulting table acts like a derived table that projects all of this table's columns and filters by the argument Condition. If syntactically reasonable, the derived table may be inlined to the query that selects from the resulting table.

/** * Add a <code>WHERE</code> clause to the table, connecting them with each * other with {@link Operator#AND}. * <p> * The resulting table acts like a derived table that projects all of this * table's columns and filters by the argument {@link Condition}. If * syntactically reasonable, the derived table may be inlined to the query * that selects from the resulting table. */
@NotNull @Support Table<R> where(Condition... conditions);
Add a WHERE clause to the table, connecting them with each other with Operator.AND.

The resulting table acts like a derived table that projects all of this table's columns and filters by the argument Condition. If syntactically reasonable, the derived table may be inlined to the query that selects from the resulting table.

/** * Add a <code>WHERE</code> clause to the table, connecting them with each * other with {@link Operator#AND}. * <p> * The resulting table acts like a derived table that projects all of this * table's columns and filters by the argument {@link Condition}. If * syntactically reasonable, the derived table may be inlined to the query * that selects from the resulting table. */
@NotNull @Support Table<R> where(Collection<? extends Condition> conditions);
Add a WHERE clause to the table.

The resulting table acts like a derived table that projects all of this table's columns and filters by the argument Condition. If syntactically reasonable, the derived table may be inlined to the query that selects from the resulting table.

/** * Add a <code>WHERE</code> clause to the table. * <p> * The resulting table acts like a derived table that projects all of this * table's columns and filters by the argument {@link Condition}. If * syntactically reasonable, the derived table may be inlined to the query * that selects from the resulting table. */
@NotNull @Support Table<R> where(Field<Boolean> field);
Add a WHERE clause to the table.

The resulting table acts like a derived table that projects all of this table's columns and filters by the argument Condition. If syntactically reasonable, the derived table may be inlined to the query that selects from the resulting table.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * Add a <code>WHERE</code> clause to the table. * <p> * The resulting table acts like a derived table that projects all of this * table's columns and filters by the argument {@link Condition}. If * syntactically reasonable, the derived table may be inlined to the query * that selects from the resulting table. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#condition(SQL) * @see SQL */
@NotNull @Support @PlainSQL Table<R> where(SQL sql);
Add a WHERE clause to the table.

The resulting table acts like a derived table that projects all of this table's columns and filters by the argument Condition. If syntactically reasonable, the derived table may be inlined to the query that selects from the resulting table.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * Add a <code>WHERE</code> clause to the table. * <p> * The resulting table acts like a derived table that projects all of this * table's columns and filters by the argument {@link Condition}. If * syntactically reasonable, the derived table may be inlined to the query * that selects from the resulting table. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#condition(String) * @see SQL */
@NotNull @Support @PlainSQL Table<R> where(String sql);
Add a WHERE clause to the table.

The resulting table acts like a derived table that projects all of this table's columns and filters by the argument Condition. If syntactically reasonable, the derived table may be inlined to the query that selects from the resulting table.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * Add a <code>WHERE</code> clause to the table. * <p> * The resulting table acts like a derived table that projects all of this * table's columns and filters by the argument {@link Condition}. If * syntactically reasonable, the derived table may be inlined to the query * that selects from the resulting table. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#condition(String, Object...) * @see DSL#sql(String, Object...) * @see SQL */
@NotNull @Support @PlainSQL Table<R> where(String sql, Object... bindings);
Add a WHERE clause to the table.

The resulting table acts like a derived table that projects all of this table's columns and filters by the argument Condition. If syntactically reasonable, the derived table may be inlined to the query that selects from the resulting table.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * Add a <code>WHERE</code> clause to the table. * <p> * The resulting table acts like a derived table that projects all of this * table's columns and filters by the argument {@link Condition}. If * syntactically reasonable, the derived table may be inlined to the query * that selects from the resulting table. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#condition(String, QueryPart...) * @see DSL#sql(String, QueryPart...) * @see SQL */
@NotNull @Support @PlainSQL Table<R> where(String sql, QueryPart... parts);
Add a WHERE EXISTS clause to the table.

The resulting table acts like a derived table that projects all of this table's columns and filters by the argument Condition. If syntactically reasonable, the derived table may be inlined to the query that selects from the resulting table.

/** * Add a <code>WHERE EXISTS</code> clause to the table. * <p> * The resulting table acts like a derived table that projects all of this * table's columns and filters by the argument {@link Condition}. If * syntactically reasonable, the derived table may be inlined to the query * that selects from the resulting table. */
@NotNull @Support Table<R> whereExists(Select<?> select);
Add a WHERE NOT EXISTS clause to the table.

The resulting table acts like a derived table that projects all of this table's columns and filters by the argument Condition. If syntactically reasonable, the derived table may be inlined to the query that selects from the resulting table.

/** * Add a <code>WHERE NOT EXISTS</code> clause to the table. * <p> * The resulting table acts like a derived table that projects all of this * table's columns and filters by the argument {@link Condition}. If * syntactically reasonable, the derived table may be inlined to the query * that selects from the resulting table. */
@NotNull @Support Table<R> whereNotExists(Select<?> select); // ------------------------------------------------------------------------- // XXX: JOIN clauses on tables // -------------------------------------------------------------------------
Join a table to this table using a JoinType

Depending on the JoinType, a subsequent TableOnStep.on(Condition) or TableOnStep.using(Field...) clause is required. If it is required but omitted, a DSL.trueCondition(), i.e. 1 = 1 condition will be rendered

/** * Join a table to this table using a {@link JoinType} * <p> * Depending on the <code>JoinType</code>, a subsequent * {@link TableOnStep#on(Condition)} or * {@link TableOnStep#using(Field...)} clause is required. If it is required * but omitted, a {@link DSL#trueCondition()}, i.e. <code>1 = 1</code> * condition will be rendered */
@NotNull @Support TableOptionalOnStep<Record> join(TableLike<?> table, JoinType type);
INNER JOIN a table to this table.

A synonym for innerJoin(TableLike).

See Also:
/** * <code>INNER JOIN</code> a table to this table. * <p> * A synonym for {@link #innerJoin(TableLike)}. * * @see #innerJoin(TableLike) */
@NotNull @Support TableOnStep<Record> join(TableLike<?> table);
INNER JOIN a table to this table.

A synonym for innerJoin(String).

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>INNER JOIN</code> a table to this table. * <p> * A synonym for {@link #innerJoin(String)}. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(SQL) * @see #innerJoin(SQL) * @see SQL */
@NotNull @Support @PlainSQL TableOnStep<Record> join(SQL sql);
INNER JOIN a table to this table.

A synonym for innerJoin(String).

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>INNER JOIN</code> a table to this table. * <p> * A synonym for {@link #innerJoin(String)}. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String) * @see #innerJoin(String) * @see SQL */
@NotNull @Support @PlainSQL TableOnStep<Record> join(String sql);
INNER JOIN a table to this table.

A synonym for innerJoin(String, Object...).

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>INNER JOIN</code> a table to this table. * <p> * A synonym for {@link #innerJoin(String, Object...)}. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String, Object...) * @see DSL#sql(String, Object...) * @see #innerJoin(String, Object...) * @see SQL */
@NotNull @Support @PlainSQL TableOnStep<Record> join(String sql, Object... bindings);
INNER JOIN a table to this table.

A synonym for innerJoin(String, QueryPart...).

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>INNER JOIN</code> a table to this table. * <p> * A synonym for {@link #innerJoin(String, QueryPart...)}. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String, QueryPart...) * @see DSL#sql(String, QueryPart...) * @see #innerJoin(String, QueryPart...) * @see SQL */
@NotNull @Support @PlainSQL TableOnStep<Record> join(String sql, QueryPart... parts);
INNER JOIN a table to this table.

A synonym for innerJoin(Name).

See Also:
/** * <code>INNER JOIN</code> a table to this table. * <p> * A synonym for {@link #innerJoin(Name)}. * * @see DSL#table(Name) * @see #innerJoin(Name) */
@NotNull @Support @PlainSQL TableOnStep<Record> join(Name name);
INNER JOIN a table to this table.
/** * <code>INNER JOIN</code> a table to this table. */
@NotNull @Support TableOnStep<Record> innerJoin(TableLike<?> table);
INNER JOIN a table to this table.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
  • table.table(SQL)
  • SQL
/** * <code>INNER JOIN</code> a table to this table. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(SQL) * @see SQL */
@NotNull @Support @PlainSQL TableOnStep<Record> innerJoin(SQL sql);
INNER JOIN a table to this table.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
  • table.table(String)
  • SQL
/** * <code>INNER JOIN</code> a table to this table. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String) * @see SQL */
@NotNull @Support @PlainSQL TableOnStep<Record> innerJoin(String sql);
INNER JOIN a table to this table.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>INNER JOIN</code> a table to this table. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String, Object...) * @see DSL#sql(String, Object...) * @see SQL */
@NotNull @Support @PlainSQL TableOnStep<Record> innerJoin(String sql, Object... bindings);
INNER JOIN a table to this table.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>INNER JOIN</code> a table to this table. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String, QueryPart...) * @see DSL#sql(String, QueryPart...) * @see SQL */
@NotNull @Support @PlainSQL TableOnStep<Record> innerJoin(String sql, QueryPart... parts);
INNER JOIN a table to this table.
See Also:
  • table.table(Name)
/** * <code>INNER JOIN</code> a table to this table. * * @see DSL#table(Name) */
@NotNull @Support TableOnStep<Record> innerJoin(Name name);
LEFT OUTER JOIN a table to this table.

A synonym for leftOuterJoin(TableLike).

See Also:
/** * <code>LEFT OUTER JOIN</code> a table to this table. * <p> * A synonym for {@link #leftOuterJoin(TableLike)}. * * @see #leftOuterJoin(TableLike) */
@NotNull @Support TablePartitionByStep<Record> leftJoin(TableLike<?> table);
LEFT OUTER JOIN a table to this table.

A synonym for leftOuterJoin(String).

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>LEFT OUTER JOIN</code> a table to this table. * <p> * A synonym for {@link #leftOuterJoin(String)}. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(SQL) * @see #leftOuterJoin(SQL) * @see SQL */
@NotNull @Support @PlainSQL TablePartitionByStep<Record> leftJoin(SQL sql);
LEFT OUTER JOIN a table to this table.

A synonym for leftOuterJoin(String).

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>LEFT OUTER JOIN</code> a table to this table. * <p> * A synonym for {@link #leftOuterJoin(String)}. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String) * @see #leftOuterJoin(String) * @see SQL */
@NotNull @Support @PlainSQL TablePartitionByStep<Record> leftJoin(String sql);
LEFT OUTER JOIN a table to this table.

A synonym for leftOuterJoin(String, Object...).

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>LEFT OUTER JOIN</code> a table to this table. * <p> * A synonym for {@link #leftOuterJoin(String, Object...)}. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String, Object...) * @see DSL#sql(String, Object...) * @see #leftOuterJoin(String, Object...) * @see SQL */
@NotNull @Support @PlainSQL TablePartitionByStep<Record> leftJoin(String sql, Object... bindings);
LEFT OUTER JOIN a table to this table.

A synonym for leftOuterJoin(String, QueryPart...).

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>LEFT OUTER JOIN</code> a table to this table. * <p> * A synonym for {@link #leftOuterJoin(String, QueryPart...)}. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String, QueryPart...) * @see DSL#sql(String, QueryPart...) * @see #leftOuterJoin(String, QueryPart...) * @see SQL */
@NotNull @Support @PlainSQL TablePartitionByStep<Record> leftJoin(String sql, QueryPart... parts);
LEFT OUTER JOIN a table to this table.

A synonym for leftOuterJoin(Name).

See Also:
/** * <code>LEFT OUTER JOIN</code> a table to this table. * <p> * A synonym for {@link #leftOuterJoin(Name)}. * * @see DSL#table(Name) * @see #leftOuterJoin(Name) */
@NotNull @Support TablePartitionByStep<Record> leftJoin(Name name);
LEFT OUTER JOIN a table to this table.
/** * <code>LEFT OUTER JOIN</code> a table to this table. */
@NotNull @Support TablePartitionByStep<Record> leftOuterJoin(TableLike<?> table);
LEFT OUTER JOIN a table to this table.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
  • table.table(SQL)
  • SQL
/** * <code>LEFT OUTER JOIN</code> a table to this table. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(SQL) * @see SQL */
@NotNull @Support @PlainSQL TablePartitionByStep<Record> leftOuterJoin(SQL sql);
LEFT OUTER JOIN a table to this table.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
  • table.table(String)
  • SQL
/** * <code>LEFT OUTER JOIN</code> a table to this table. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String) * @see SQL */
@NotNull @Support @PlainSQL TablePartitionByStep<Record> leftOuterJoin(String sql);
LEFT OUTER JOIN a table to this table.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>LEFT OUTER JOIN</code> a table to this table. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String, Object...) * @see DSL#sql(String, Object...) * @see SQL */
@NotNull @Support @PlainSQL TablePartitionByStep<Record> leftOuterJoin(String sql, Object... bindings);
LEFT OUTER JOIN a table to this table.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>LEFT OUTER JOIN</code> a table to this table. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String, QueryPart...) * @see DSL#sql(String, QueryPart...) * @see SQL */
@NotNull @Support @PlainSQL TablePartitionByStep<Record> leftOuterJoin(String sql, QueryPart... parts);
LEFT OUTER JOIN a table to this table.
See Also:
  • table.table(Name)
  • SQL
/** * <code>LEFT OUTER JOIN</code> a table to this table. * * @see DSL#table(Name) * @see SQL */
@NotNull @Support TablePartitionByStep<Record> leftOuterJoin(Name name);
RIGHT OUTER JOIN a table to this table.

A synonym for rightOuterJoin(TableLike).

This is only possible where the underlying RDBMS supports it.

See Also:
/** * <code>RIGHT OUTER JOIN</code> a table to this table. * <p> * A synonym for {@link #rightOuterJoin(TableLike)}. * <p> * This is only possible where the underlying RDBMS supports it. * * @see #rightOuterJoin(TableLike) */
@NotNull @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) TablePartitionByStep<Record> rightJoin(TableLike<?> table);
RIGHT OUTER JOIN a table to this table.

A synonym for rightOuterJoin(String).

This is only possible where the underlying RDBMS supports it.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>RIGHT OUTER JOIN</code> a table to this table. * <p> * A synonym for {@link #rightOuterJoin(String)}. * <p> * This is only possible where the underlying RDBMS supports it. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(SQL) * @see #rightOuterJoin(SQL) * @see SQL */
@NotNull @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) @PlainSQL TablePartitionByStep<Record> rightJoin(SQL sql);
RIGHT OUTER JOIN a table to this table.

A synonym for rightOuterJoin(String).

This is only possible where the underlying RDBMS supports it.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>RIGHT OUTER JOIN</code> a table to this table. * <p> * A synonym for {@link #rightOuterJoin(String)}. * <p> * This is only possible where the underlying RDBMS supports it. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String) * @see #rightOuterJoin(String) * @see SQL */
@NotNull @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) @PlainSQL TablePartitionByStep<Record> rightJoin(String sql);
RIGHT OUTER JOIN a table to this table.

A synonym for rightOuterJoin(String, Object...).

This is only possible where the underlying RDBMS supports it.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>RIGHT OUTER JOIN</code> a table to this table. * <p> * A synonym for {@link #rightOuterJoin(String, Object...)}. * <p> * This is only possible where the underlying RDBMS supports it. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String, Object...) * @see DSL#sql(String, Object...) * @see #rightOuterJoin(String, Object...) * @see SQL */
@NotNull @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) @PlainSQL TablePartitionByStep<Record> rightJoin(String sql, Object... bindings);
RIGHT OUTER JOIN a table to this table.

A synonym for rightOuterJoin(String, QueryPart...).

This is only possible where the underlying RDBMS supports it

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>RIGHT OUTER JOIN</code> a table to this table. * <p> * A synonym for {@link #rightOuterJoin(String, QueryPart...)}. * <p> * This is only possible where the underlying RDBMS supports it * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String, QueryPart...) * @see DSL#sql(String, QueryPart...) * @see #rightOuterJoin(String, QueryPart...) * @see SQL */
@NotNull @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) @PlainSQL TablePartitionByStep<Record> rightJoin(String sql, QueryPart... parts);
RIGHT OUTER JOIN a table to this table.

A synonym for rightOuterJoin(Name).

This is only possible where the underlying RDBMS supports it

See Also:
/** * <code>RIGHT OUTER JOIN</code> a table to this table. * <p> * A synonym for {@link #rightOuterJoin(Name)}. * <p> * This is only possible where the underlying RDBMS supports it * * @see DSL#table(Name) * @see #rightOuterJoin(Name) */
@NotNull @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) TablePartitionByStep<Record> rightJoin(Name name);
RIGHT OUTER JOIN a table to this table.

This is only possible where the underlying RDBMS supports it

/** * <code>RIGHT OUTER JOIN</code> a table to this table. * <p> * This is only possible where the underlying RDBMS supports it */
@NotNull @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) TablePartitionByStep<Record> rightOuterJoin(TableLike<?> table);
RIGHT OUTER JOIN a table to this table.

This is only possible where the underlying RDBMS supports it

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
  • table.table(SQL)
  • SQL
/** * <code>RIGHT OUTER JOIN</code> a table to this table. * <p> * This is only possible where the underlying RDBMS supports it * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(SQL) * @see SQL */
@NotNull @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) @PlainSQL TablePartitionByStep<Record> rightOuterJoin(SQL sql);
RIGHT OUTER JOIN a table to this table.

This is only possible where the underlying RDBMS supports it

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
  • table.table(String)
  • SQL
/** * <code>RIGHT OUTER JOIN</code> a table to this table. * <p> * This is only possible where the underlying RDBMS supports it * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String) * @see SQL */
@NotNull @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) @PlainSQL TablePartitionByStep<Record> rightOuterJoin(String sql);
RIGHT OUTER JOIN a table to this table.

This is only possible where the underlying RDBMS supports it

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>RIGHT OUTER JOIN</code> a table to this table. * <p> * This is only possible where the underlying RDBMS supports it * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String, Object...) * @see DSL#sql(String, Object...) * @see SQL */
@NotNull @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) @PlainSQL TablePartitionByStep<Record> rightOuterJoin(String sql, Object... bindings);
RIGHT OUTER JOIN a table to this table.

This is only possible where the underlying RDBMS supports it

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>RIGHT OUTER JOIN</code> a table to this table. * <p> * This is only possible where the underlying RDBMS supports it * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String, QueryPart...) * @see DSL#sql(String, QueryPart...) * @see SQL */
@NotNull @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) @PlainSQL TablePartitionByStep<Record> rightOuterJoin(String sql, QueryPart... parts);
RIGHT OUTER JOIN a table to this table.

This is only possible where the underlying RDBMS supports it

See Also:
  • table.table(Name)
/** * <code>RIGHT OUTER JOIN</code> a table to this table. * <p> * This is only possible where the underlying RDBMS supports it * * @see DSL#table(Name) */
@NotNull @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) TablePartitionByStep<Record> rightOuterJoin(Name name);
FULL OUTER JOIN a table to this table.

A synonym for fullOuterJoin(TableLike).

/** * <code>FULL OUTER JOIN</code> a table to this table. * <p> * A synonym for {@link #fullOuterJoin(TableLike)}. */
@NotNull @Support({ FIREBIRD, HSQLDB, POSTGRES }) TableOnStep<Record> fullJoin(TableLike<?> table);
FULL OUTER JOIN a table to this table.

A synonym for fullOuterJoin(SQL).

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

/** * <code>FULL OUTER JOIN</code> a table to this table. * <p> * A synonym for {@link #fullOuterJoin(SQL)}. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! */
@NotNull @Support({ FIREBIRD, HSQLDB, POSTGRES }) @PlainSQL TableOnStep<Record> fullJoin(SQL sql);
FULL OUTER JOIN a table to this table.

A synonym for fullOuterJoin(String).

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

/** * <code>FULL OUTER JOIN</code> a table to this table. * <p> * A synonym for {@link #fullOuterJoin(String)}. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! */
@NotNull @Support({ FIREBIRD, HSQLDB, POSTGRES }) @PlainSQL TableOnStep<Record> fullJoin(String sql);
FULL OUTER JOIN a table to this table.

A synonym for fullOuterJoin(String, Object...).

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

/** * <code>FULL OUTER JOIN</code> a table to this table. * <p> * A synonym for {@link #fullOuterJoin(String, Object...)}. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! */
@NotNull @Support({ FIREBIRD, HSQLDB, POSTGRES }) @PlainSQL TableOnStep<Record> fullJoin(String sql, Object... bindings);
FULL OUTER JOIN a table to this table.

A synonym for fullOuterJoin(String, QueryPart...).

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

/** * <code>FULL OUTER JOIN</code> a table to this table. * <p> * A synonym for {@link #fullOuterJoin(String, QueryPart...)}. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! */
@NotNull @Support({ FIREBIRD, HSQLDB, POSTGRES }) @PlainSQL TableOnStep<Record> fullJoin(String sql, QueryPart... parts);
FULL OUTER JOIN a table to this table.

A synonym for fullOuterJoin(Name).

/** * <code>FULL OUTER JOIN</code> a table to this table. * <p> * A synonym for {@link #fullOuterJoin(Name)}. */
@NotNull @Support({ FIREBIRD, HSQLDB, POSTGRES }) TableOnStep<Record> fullJoin(Name name);
FULL OUTER JOIN a table to this table.

This is only possible where the underlying RDBMS supports it

/** * <code>FULL OUTER JOIN</code> a table to this table. * <p> * This is only possible where the underlying RDBMS supports it */
@NotNull @Support({ FIREBIRD, HSQLDB, POSTGRES }) TableOnStep<Record> fullOuterJoin(TableLike<?> table);
FULL OUTER JOIN a table to this table.

This is only possible where the underlying RDBMS supports it

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
  • table.table(SQL)
  • SQL
/** * <code>FULL OUTER JOIN</code> a table to this table. * <p> * This is only possible where the underlying RDBMS supports it * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(SQL) * @see SQL */
@NotNull @Support({ FIREBIRD, HSQLDB, POSTGRES }) @PlainSQL TableOnStep<Record> fullOuterJoin(SQL sql);
FULL OUTER JOIN a table to this table.

This is only possible where the underlying RDBMS supports it

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
  • table.table(String)
  • SQL
/** * <code>FULL OUTER JOIN</code> a table to this table. * <p> * This is only possible where the underlying RDBMS supports it * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String) * @see SQL */
@NotNull @Support({ FIREBIRD, HSQLDB, POSTGRES }) @PlainSQL TableOnStep<Record> fullOuterJoin(String sql);
FULL OUTER JOIN a table to this table.

This is only possible where the underlying RDBMS supports it

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>FULL OUTER JOIN</code> a table to this table. * <p> * This is only possible where the underlying RDBMS supports it * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String, Object...) * @see DSL#sql(String, Object...) * @see SQL */
@NotNull @Support({ FIREBIRD, HSQLDB, POSTGRES }) @PlainSQL TableOnStep<Record> fullOuterJoin(String sql, Object... bindings);
FULL OUTER JOIN a table to this table.

This is only possible where the underlying RDBMS supports it

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>FULL OUTER JOIN</code> a table to this table. * <p> * This is only possible where the underlying RDBMS supports it * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String, QueryPart...) * @see DSL#sql(String, QueryPart...) * @see SQL */
@NotNull @Support({ FIREBIRD, HSQLDB, POSTGRES }) @PlainSQL TableOnStep<Record> fullOuterJoin(String sql, QueryPart... parts);
FULL OUTER JOIN a table to this table.

This is only possible where the underlying RDBMS supports it

See Also:
  • table.table(Name)
/** * <code>FULL OUTER JOIN</code> a table to this table. * <p> * This is only possible where the underlying RDBMS supports it * * @see DSL#table(Name) */
@NotNull @Support({ FIREBIRD, HSQLDB, POSTGRES }) TableOnStep<Record> fullOuterJoin(Name name);
CROSS JOIN a table to this table.

If this syntax is unavailable, it is emulated with a regular INNER JOIN. The following two constructs are equivalent:

A cross join B
A join B on 1 = 1
/** * <code>CROSS JOIN</code> a table to this table. * <p> * If this syntax is unavailable, it is emulated with a regular * <code>INNER JOIN</code>. The following two constructs are equivalent: * <code><pre> * A cross join B * A join B on 1 = 1 * </pre></code> */
@NotNull @Support Table<Record> crossJoin(TableLike<?> table);
CROSS JOIN a table to this table.

If this syntax is unavailable, it is emulated with a regular INNER JOIN. The following two constructs are equivalent:

A cross join B
A join B on 1 = 1

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
  • table.table(SQL)
  • SQL
/** * <code>CROSS JOIN</code> a table to this table. * <p> * If this syntax is unavailable, it is emulated with a regular * <code>INNER JOIN</code>. The following two constructs are equivalent: * <code><pre> * A cross join B * A join B on 1 = 1 * </pre></code> * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(SQL) * @see SQL */
@NotNull @Support @PlainSQL Table<Record> crossJoin(SQL sql);
CROSS JOIN a table to this table.

If this syntax is unavailable, it is emulated with a regular INNER JOIN. The following two constructs are equivalent:

A cross join B
A join B on 1 = 1

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
  • table.table(String)
  • SQL
/** * <code>CROSS JOIN</code> a table to this table. * <p> * If this syntax is unavailable, it is emulated with a regular * <code>INNER JOIN</code>. The following two constructs are equivalent: * <code><pre> * A cross join B * A join B on 1 = 1 * </pre></code> * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String) * @see SQL */
@NotNull @Support @PlainSQL Table<Record> crossJoin(String sql);
CROSS JOIN a table to this table.

If this syntax is unavailable, it is emulated with a regular INNER JOIN. The following two constructs are equivalent:

A cross join B
A join B on 1 = 1

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>CROSS JOIN</code> a table to this table. * <p> * If this syntax is unavailable, it is emulated with a regular * <code>INNER JOIN</code>. The following two constructs are equivalent: * <code><pre> * A cross join B * A join B on 1 = 1 * </pre></code> * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String, Object...) * @see DSL#sql(String, Object...) * @see SQL */
@NotNull @Support @PlainSQL Table<Record> crossJoin(String sql, Object... bindings);
CROSS JOIN a table to this table.

If this syntax is unavailable, it is emulated with a regular INNER JOIN. The following two constructs are equivalent:

A cross join B
A join B on 1 = 1

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>CROSS JOIN</code> a table to this table. * <p> * If this syntax is unavailable, it is emulated with a regular * <code>INNER JOIN</code>. The following two constructs are equivalent: * <code><pre> * A cross join B * A join B on 1 = 1 * </pre></code> * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String, QueryPart...) * @see DSL#sql(String, QueryPart...) * @see SQL */
@NotNull @Support @PlainSQL Table<Record> crossJoin(String sql, QueryPart... parts);
CROSS JOIN a table to this table.

If this syntax is unavailable, it is emulated with a regular INNER JOIN. The following two constructs are equivalent:

A cross join B
A join B on 1 = 1
See Also:
  • table.table(Name)
/** * <code>CROSS JOIN</code> a table to this table. * <p> * If this syntax is unavailable, it is emulated with a regular * <code>INNER JOIN</code>. The following two constructs are equivalent: * <code><pre> * A cross join B * A join B on 1 = 1 * </pre></code> * * @see DSL#table(Name) */
@NotNull @Support Table<Record> crossJoin(Name name);
NATURAL JOIN a table to this table.

If this is not supported by your RDBMS, then jOOQ will try to emulate this behaviour using the information provided in this query.

/** * <code>NATURAL JOIN</code> a table to this table. * <p> * If this is not supported by your RDBMS, then jOOQ will try to emulate * this behaviour using the information provided in this query. */
@NotNull @Support Table<Record> naturalJoin(TableLike<?> table);
NATURAL JOIN a table to this table.

If this is not supported by your RDBMS, then jOOQ will try to emulate this behaviour using the information provided in this query.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
  • table.table(SQL)
  • SQL
/** * <code>NATURAL JOIN</code> a table to this table. * <p> * If this is not supported by your RDBMS, then jOOQ will try to emulate * this behaviour using the information provided in this query. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(SQL) * @see SQL */
@NotNull @Support @PlainSQL Table<Record> naturalJoin(SQL sql);
NATURAL JOIN a table to this table.

If this is not supported by your RDBMS, then jOOQ will try to emulate this behaviour using the information provided in this query.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
  • table.table(String)
  • SQL
/** * <code>NATURAL JOIN</code> a table to this table. * <p> * If this is not supported by your RDBMS, then jOOQ will try to emulate * this behaviour using the information provided in this query. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String) * @see SQL */
@NotNull @Support @PlainSQL Table<Record> naturalJoin(String sql);
NATURAL JOIN a table to this table.

If this is not supported by your RDBMS, then jOOQ will try to emulate this behaviour using the information provided in this query.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>NATURAL JOIN</code> a table to this table. * <p> * If this is not supported by your RDBMS, then jOOQ will try to emulate * this behaviour using the information provided in this query. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String, Object...) * @see DSL#sql(String, Object...) * @see SQL */
@NotNull @Support @PlainSQL Table<Record> naturalJoin(String sql, Object... bindings);
NATURAL JOIN a table to this table.

If this is not supported by your RDBMS, then jOOQ will try to emulate this behaviour using the information provided in this query.

See Also:
  • table.table(Name)
/** * <code>NATURAL JOIN</code> a table to this table. * <p> * If this is not supported by your RDBMS, then jOOQ will try to emulate * this behaviour using the information provided in this query. * * @see DSL#table(Name) */
@NotNull @Support Table<Record> naturalJoin(Name name);
NATURAL JOIN a table to this table.

If this is not supported by your RDBMS, then jOOQ will try to emulate this behaviour using the information provided in this query.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>NATURAL JOIN</code> a table to this table. * <p> * If this is not supported by your RDBMS, then jOOQ will try to emulate * this behaviour using the information provided in this query. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String, QueryPart...) * @see DSL#sql(String, QueryPart...) * @see SQL */
@NotNull @Support @PlainSQL Table<Record> naturalJoin(String sql, QueryPart... parts);
NATURAL LEFT OUTER JOIN a table to this table.

If this is not supported by your RDBMS, then jOOQ will try to emulate this behaviour using the information provided in this query.

/** * <code>NATURAL LEFT OUTER JOIN</code> a table to this table. * <p> * If this is not supported by your RDBMS, then jOOQ will try to emulate * this behaviour using the information provided in this query. */
@NotNull @Support Table<Record> naturalLeftOuterJoin(TableLike<?> table);
NATURAL LEFT OUTER JOIN a table to this table.

If this is not supported by your RDBMS, then jOOQ will try to emulate this behaviour using the information provided in this query.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
  • table.table(SQL)
  • SQL
/** * <code>NATURAL LEFT OUTER JOIN</code> a table to this table. * <p> * If this is not supported by your RDBMS, then jOOQ will try to emulate * this behaviour using the information provided in this query. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(SQL) * @see SQL */
@NotNull @Support @PlainSQL Table<Record> naturalLeftOuterJoin(SQL sql);
NATURAL LEFT OUTER JOIN a table to this table.

If this is not supported by your RDBMS, then jOOQ will try to emulate this behaviour using the information provided in this query.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
  • table.table(String)
  • SQL
/** * <code>NATURAL LEFT OUTER JOIN</code> a table to this table. * <p> * If this is not supported by your RDBMS, then jOOQ will try to emulate * this behaviour using the information provided in this query. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String) * @see SQL */
@NotNull @Support @PlainSQL Table<Record> naturalLeftOuterJoin(String sql);
NATURAL LEFT OUTER JOIN a table to this table.

If this is not supported by your RDBMS, then jOOQ will try to emulate this behaviour using the information provided in this query.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>NATURAL LEFT OUTER JOIN</code> a table to this table. * <p> * If this is not supported by your RDBMS, then jOOQ will try to emulate * this behaviour using the information provided in this query. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String, Object...) * @see DSL#sql(String, Object...) * @see SQL */
@NotNull @Support @PlainSQL Table<Record> naturalLeftOuterJoin(String sql, Object... bindings);
NATURAL LEFT OUTER JOIN a table to this table.

If this is not supported by your RDBMS, then jOOQ will try to emulate this behaviour using the information provided in this query.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>NATURAL LEFT OUTER JOIN</code> a table to this table. * <p> * If this is not supported by your RDBMS, then jOOQ will try to emulate * this behaviour using the information provided in this query. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String, QueryPart...) * @see DSL#sql(String, QueryPart...) * @see SQL */
@NotNull @Support @PlainSQL Table<Record> naturalLeftOuterJoin(String sql, QueryPart... parts);
NATURAL LEFT OUTER JOIN a table to this table.

If this is not supported by your RDBMS, then jOOQ will try to emulate this behaviour using the information provided in this query.

See Also:
  • table.table(Name)
/** * <code>NATURAL LEFT OUTER JOIN</code> a table to this table. * <p> * If this is not supported by your RDBMS, then jOOQ will try to emulate * this behaviour using the information provided in this query. * * @see DSL#table(Name) */
@NotNull @Support @PlainSQL Table<Record> naturalLeftOuterJoin(Name name);
NATURAL RIGHT OUTER JOIN a table to this table.

If this is not supported by your RDBMS, then jOOQ will try to emulate this behaviour using the information provided in this query.

/** * <code>NATURAL RIGHT OUTER JOIN</code> a table to this table. * <p> * If this is not supported by your RDBMS, then jOOQ will try to emulate * this behaviour using the information provided in this query. */
@NotNull @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) Table<Record> naturalRightOuterJoin(TableLike<?> table);
NATURAL RIGHT OUTER JOIN a table to this table.

If this is not supported by your RDBMS, then jOOQ will try to emulate this behaviour using the information provided in this query.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
  • table.table(SQL)
  • SQL
/** * <code>NATURAL RIGHT OUTER JOIN</code> a table to this table. * <p> * If this is not supported by your RDBMS, then jOOQ will try to emulate * this behaviour using the information provided in this query. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(SQL) * @see SQL */
@NotNull @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) @PlainSQL Table<Record> naturalRightOuterJoin(SQL sql);
NATURAL RIGHT OUTER JOIN a table to this table.

If this is not supported by your RDBMS, then jOOQ will try to emulate this behaviour using the information provided in this query.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
  • table.table(String)
  • SQL
/** * <code>NATURAL RIGHT OUTER JOIN</code> a table to this table. * <p> * If this is not supported by your RDBMS, then jOOQ will try to emulate * this behaviour using the information provided in this query. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String) * @see SQL */
@NotNull @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) @PlainSQL Table<Record> naturalRightOuterJoin(String sql);
NATURAL RIGHT OUTER JOIN a table to this table.

If this is not supported by your RDBMS, then jOOQ will try to emulate this behaviour using the information provided in this query.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>NATURAL RIGHT OUTER JOIN</code> a table to this table. * <p> * If this is not supported by your RDBMS, then jOOQ will try to emulate * this behaviour using the information provided in this query. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String, Object...) * @see DSL#sql(String, Object...) * @see SQL */
@NotNull @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) @PlainSQL Table<Record> naturalRightOuterJoin(String sql, Object... bindings);
NATURAL RIGHT OUTER JOIN a table to this table.

If this is not supported by your RDBMS, then jOOQ will try to emulate this behaviour using the information provided in this query.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>NATURAL RIGHT OUTER JOIN</code> a table to this table. * <p> * If this is not supported by your RDBMS, then jOOQ will try to emulate * this behaviour using the information provided in this query. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String, QueryPart...) * @see DSL#sql(String, QueryPart...) * @see SQL */
@NotNull @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) @PlainSQL Table<Record> naturalRightOuterJoin(String sql, QueryPart... parts);
NATURAL RIGHT OUTER JOIN a table to this table.

If this is not supported by your RDBMS, then jOOQ will try to emulate this behaviour using the information provided in this query.

See Also:
  • table.table(Name)
/** * <code>NATURAL RIGHT OUTER JOIN</code> a table to this table. * <p> * If this is not supported by your RDBMS, then jOOQ will try to emulate * this behaviour using the information provided in this query. * * @see DSL#table(Name) */
@NotNull @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) Table<Record> naturalRightOuterJoin(Name name);
NATURAL FULL OUTER JOIN a table to this table.

If this is not supported by your RDBMS, then jOOQ will try to emulate this behaviour using the information provided in this query.

/** * <code>NATURAL FULL OUTER JOIN</code> a table to this table. * <p> * If this is not supported by your RDBMS, then jOOQ will try to emulate * this behaviour using the information provided in this query. */
@NotNull @Support({ FIREBIRD, HSQLDB, POSTGRES }) Table<Record> naturalFullOuterJoin(TableLike<?> table);
NATURAL FULL OUTER JOIN a table to this table.

If this is not supported by your RDBMS, then jOOQ will try to emulate this behaviour using the information provided in this query.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
  • table.table(SQL)
  • SQL
/** * <code>NATURAL FULL OUTER JOIN</code> a table to this table. * <p> * If this is not supported by your RDBMS, then jOOQ will try to emulate * this behaviour using the information provided in this query. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(SQL) * @see SQL */
@NotNull @Support({ FIREBIRD, HSQLDB, POSTGRES }) @PlainSQL Table<Record> naturalFullOuterJoin(SQL sql);
NATURAL FULL OUTER JOIN a table to this table.

If this is not supported by your RDBMS, then jOOQ will try to emulate this behaviour using the information provided in this query.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
  • table.table(String)
  • SQL
/** * <code>NATURAL FULL OUTER JOIN</code> a table to this table. * <p> * If this is not supported by your RDBMS, then jOOQ will try to emulate * this behaviour using the information provided in this query. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String) * @see SQL */
@NotNull @Support({ FIREBIRD, HSQLDB, POSTGRES }) @PlainSQL Table<Record> naturalFullOuterJoin(String sql);
NATURAL FULL OUTER JOIN a table to this table.

If this is not supported by your RDBMS, then jOOQ will try to emulate this behaviour using the information provided in this query.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>NATURAL FULL OUTER JOIN</code> a table to this table. * <p> * If this is not supported by your RDBMS, then jOOQ will try to emulate * this behaviour using the information provided in this query. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String, Object...) * @see DSL#sql(String, Object...) * @see SQL */
@NotNull @Support({ FIREBIRD, HSQLDB, POSTGRES }) @PlainSQL Table<Record> naturalFullOuterJoin(String sql, Object... bindings);
NATURAL FULL OUTER JOIN a table to this table.

If this is not supported by your RDBMS, then jOOQ will try to emulate this behaviour using the information provided in this query.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>NATURAL FULL OUTER JOIN</code> a table to this table. * <p> * If this is not supported by your RDBMS, then jOOQ will try to emulate * this behaviour using the information provided in this query. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String, QueryPart...) * @see DSL#sql(String, QueryPart...) * @see SQL */
@NotNull @Support({ FIREBIRD, HSQLDB, POSTGRES }) @PlainSQL Table<Record> naturalFullOuterJoin(String sql, QueryPart... parts);
NATURAL FULL OUTER JOIN a table to this table.

If this is not supported by your RDBMS, then jOOQ will try to emulate this behaviour using the information provided in this query.

See Also:
  • table.table(Name)
/** * <code>NATURAL FULL OUTER JOIN</code> a table to this table. * <p> * If this is not supported by your RDBMS, then jOOQ will try to emulate * this behaviour using the information provided in this query. * * @see DSL#table(Name) */
@NotNull @Support({ FIREBIRD, HSQLDB, POSTGRES }) Table<Record> naturalFullOuterJoin(Name name); // ------------------------------------------------------------------------- // XXX: APPLY clauses on tables // -------------------------------------------------------------------------
CROSS APPLY a table to this table.
/** * <code>CROSS APPLY</code> a table to this table. */
@NotNull @Support({ POSTGRES }) Table<Record> crossApply(TableLike<?> table);
CROSS APPLY a table to this table.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
  • table.table(SQL)
  • SQL
/** * <code>CROSS APPLY</code> a table to this table. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(SQL) * @see SQL */
@NotNull @Support({ POSTGRES }) @PlainSQL Table<Record> crossApply(SQL sql);
CROSS APPLY a table to this table.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
  • table.table(String)
  • SQL
/** * <code>CROSS APPLY</code> a table to this table. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String) * @see SQL */
@NotNull @Support({ POSTGRES }) @PlainSQL Table<Record> crossApply(String sql);
CROSS APPLY a table to this table.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>CROSS APPLY</code> a table to this table. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String, Object...) * @see DSL#sql(String, Object...) * @see SQL */
@NotNull @Support({ POSTGRES }) @PlainSQL Table<Record> crossApply(String sql, Object... bindings);
CROSS APPLY a table to this table.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>CROSS APPLY</code> a table to this table. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String, QueryPart...) * @see DSL#sql(String, QueryPart...) * @see SQL */
@NotNull @Support({ POSTGRES }) @PlainSQL Table<Record> crossApply(String sql, QueryPart... parts);
CROSS APPLY a table to this table.
See Also:
  • table.table(Name)
/** * <code>CROSS APPLY</code> a table to this table. * * @see DSL#table(Name) */
@NotNull @Support({ POSTGRES }) Table<Record> crossApply(Name name);
OUTER APPLY a table to this table.
/** * <code>OUTER APPLY</code> a table to this table. */
@NotNull @Support({ POSTGRES }) Table<Record> outerApply(TableLike<?> table);
OUTER APPLY a table to this table.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
  • table.table(SQL)
  • SQL
/** * <code>OUTER APPLY</code> a table to this table. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(SQL) * @see SQL */
@NotNull @Support({ POSTGRES }) @PlainSQL Table<Record> outerApply(SQL sql);
OUTER APPLY a table to this table.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
  • table.table(String)
  • SQL
/** * <code>OUTER APPLY</code> a table to this table. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String) * @see SQL */
@NotNull @Support({ POSTGRES }) @PlainSQL Table<Record> outerApply(String sql);
OUTER APPLY a table to this table.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>OUTER APPLY</code> a table to this table. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String, Object...) * @see DSL#sql(String, Object...) * @see SQL */
@NotNull @Support({ POSTGRES }) @PlainSQL Table<Record> outerApply(String sql, Object... bindings);
OUTER APPLY a table to this table.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>OUTER APPLY</code> a table to this table. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String, QueryPart...) * @see DSL#sql(String, QueryPart...) * @see SQL */
@NotNull @Support({ POSTGRES }) @PlainSQL Table<Record> outerApply(String sql, QueryPart... parts);
OUTER APPLY a table to this table.
See Also:
  • table.table(Name)
/** * <code>OUTER APPLY</code> a table to this table. * * @see DSL#table(Name) */
@NotNull @Support({ POSTGRES }) Table<Record> outerApply(Name name);
STRAIGHT_JOIN a table to this table.
/** * <code>STRAIGHT_JOIN</code> a table to this table. */
@NotNull @Support({ MARIADB, MYSQL }) TableOnStep<Record> straightJoin(TableLike<?> table);
STRAIGHT_JOIN a table to this table.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
  • table.table(SQL)
  • SQL
/** * <code>STRAIGHT_JOIN</code> a table to this table. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(SQL) * @see SQL */
@NotNull @Support({ MARIADB, MYSQL }) @PlainSQL TableOnStep<Record> straightJoin(SQL sql);
STRAIGHT_JOIN a table to this table.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
  • table.table(String)
  • SQL
/** * <code>STRAIGHT_JOIN</code> a table to this table. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String) * @see SQL */
@NotNull @Support({ MARIADB, MYSQL }) @PlainSQL TableOnStep<Record> straightJoin(String sql);
STRAIGHT_JOIN a table to this table.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>STRAIGHT_JOIN</code> a table to this table. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String, Object...) * @see DSL#sql(String, Object...) * @see SQL */
@NotNull @Support({ MARIADB, MYSQL }) @PlainSQL TableOnStep<Record> straightJoin(String sql, Object... bindings);
STRAIGHT_JOIN a table to this table.

NOTE: When inserting plain SQL into jOOQ objects, you must guarantee syntax integrity. You may also create the possibility of malicious SQL injection. Be sure to properly use bind variables and/or escape literals when concatenated into SQL clauses!

See Also:
/** * <code>STRAIGHT_JOIN</code> a table to this table. * <p> * <b>NOTE</b>: When inserting plain SQL into jOOQ objects, you must * guarantee syntax integrity. You may also create the possibility of * malicious SQL injection. Be sure to properly use bind variables and/or * escape literals when concatenated into SQL clauses! * * @see DSL#table(String, QueryPart...) * @see DSL#sql(String, QueryPart...) * @see SQL */
@NotNull @Support({ MARIADB, MYSQL }) @PlainSQL TableOnStep<Record> straightJoin(String sql, QueryPart... parts);
STRAIGHT_JOIN a table to this table.
See Also:
  • table.table(Name)
/** * <code>STRAIGHT_JOIN</code> a table to this table. * * @see DSL#table(Name) */
@NotNull @Support({ MARIADB, MYSQL }) @PlainSQL TableOnStep<Record> straightJoin(Name name); // ------------------------------------------------------------------------- // XXX: Convenience methods and synthetic methods // -------------------------------------------------------------------------
Create a predicate comparing records from self-joined tables.

This is a convenience method for self-joins, comparing complete records between tables.

For example:

MyTable a = MY_TABLE.as("a");
MyTable b = MY_TABLE.as("b");
DSL.using(configuration)
   .select()
   .from(a)
   .join(b).on(a.eq(b));
See Also:
  • equal(Table)
/** * Create a predicate comparing records from self-joined tables. * <p> * This is a convenience method for self-joins, comparing complete records * between tables. * <p> * For example: <code><pre> * MyTable a = MY_TABLE.as("a"); * MyTable b = MY_TABLE.as("b"); * * DSL.using(configuration) * .select() * .from(a) * .join(b).on(a.eq(b)); * </pre></code> * * @see #equal(Table) */
@NotNull @Support Condition eq(Table<R> table);
Create a predicate comparing records from self-joined tables.

This is a convenience method for self-joins, comparing complete records between tables.

For example:

MyTable a = MY_TABLE.as("a");
MyTable b = MY_TABLE.as("b");
DSL.using(configuration)
   .select()
   .from(a)
   .join(b).on(a.equal(b));
/** * Create a predicate comparing records from self-joined tables. * <p> * This is a convenience method for self-joins, comparing complete records * between tables. * <p> * For example: * <code><pre> * MyTable a = MY_TABLE.as("a"); * MyTable b = MY_TABLE.as("b"); * * DSL.using(configuration) * .select() * .from(a) * .join(b).on(a.equal(b)); * </pre></code> */
@NotNull @Support Condition equal(Table<R> table);
{@inheritDoc}

Watch out! This is Object.equals(Object), not a jOOQ DSL feature!

/** * {@inheritDoc} * <p> * <strong>Watch out! This is {@link Object#equals(Object)}, not a jOOQ DSL * feature!</strong> */
@Override boolean equals(Object other);
Create a predicate comparing records from self-non-equi-joined tables. This is a convenience method for self-joins, comparing complete records between tables.

For example:

MyTable a = MY_TABLE.as("a");
MyTable b = MY_TABLE.as("b");
DSL.using(configuration)
   .select()
   .from(a)
   .join(b).on(a.ne(b));
See Also:
  • notEqual(Table)
/** * Create a predicate comparing records from self-non-equi-joined tables. * This is a convenience method for self-joins, comparing complete records * between tables. * <p> * For example: * <code><pre> * MyTable a = MY_TABLE.as("a"); * MyTable b = MY_TABLE.as("b"); * * DSL.using(configuration) * .select() * .from(a) * .join(b).on(a.ne(b)); * </pre></code> * * @see #notEqual(Table) */
@NotNull @Support Condition ne(Table<R> table);
Create a predicate comparing records from self-non-equi-joined tables.

This is a convenience method for self-joins, comparing complete records between tables.

For example:

MyTable a = MY_TABLE.as("a");
MyTable b = MY_TABLE.as("b");
DSL.using(configuration)
   .select()
   .from(a)
   .join(b).on(a.notEqual(b));
/** * Create a predicate comparing records from self-non-equi-joined tables. * <p> * This is a convenience method for self-joins, comparing complete records * between tables. * <p> * For example: * <code><pre> * MyTable a = MY_TABLE.as("a"); * MyTable b = MY_TABLE.as("b"); * * DSL.using(configuration) * .select() * .from(a) * .join(b).on(a.notEqual(b)); * </pre></code> */
@NotNull @Support Condition notEqual(Table<R> table); // ------------------------------------------------------------------------- // XXX: Exotic and vendor-specific clauses on tables // -------------------------------------------------------------------------
Specify a MySQL style table hint for query optimisation.

Example:

create.select()
      .from(BOOK.as("b").useIndex("MY_INDEX")
      .fetch();
See Also:
/** * Specify a MySQL style table hint for query optimisation. * <p> * Example: * <p> * <code><pre> * create.select() * .from(BOOK.as("b").useIndex("MY_INDEX") * .fetch(); * </pre></code> * * @see <a * href="http://dev.mysql.com/doc/refman/5.7/en/index-hints.html">http://dev.mysql.com/doc/refman/5.7/en/index-hints.html</a> */
@NotNull @Support({ MARIADB, MYSQL }) Table<R> useIndex(String... indexes);
Specify a MySQL style table hint for query optimisation.

Example:

create.select()
      .from(BOOK.as("b").useIndexForJoin("MY_INDEX")
      .fetch();
See Also:
/** * Specify a MySQL style table hint for query optimisation. * <p> * Example: * <p> * <code><pre> * create.select() * .from(BOOK.as("b").useIndexForJoin("MY_INDEX") * .fetch(); * </pre></code> * * @see <a * href="http://dev.mysql.com/doc/refman/5.7/en/index-hints.html">http://dev.mysql.com/doc/refman/5.7/en/index-hints.html</a> */
@NotNull @Support({ MARIADB, MYSQL }) Table<R> useIndexForJoin(String... indexes);
Specify a MySQL style table hint for query optimisation.

Example:

create.select()
      .from(BOOK.as("b").useIndexForOrderBy("MY_INDEX")
      .fetch();
See Also:
/** * Specify a MySQL style table hint for query optimisation. * <p> * Example: * <p> * <code><pre> * create.select() * .from(BOOK.as("b").useIndexForOrderBy("MY_INDEX") * .fetch(); * </pre></code> * * @see <a * href="http://dev.mysql.com/doc/refman/5.7/en/index-hints.html">http://dev.mysql.com/doc/refman/5.7/en/index-hints.html</a> */
@NotNull @Support({ MARIADB, MYSQL }) Table<R> useIndexForOrderBy(String... indexes);
Specify a MySQL style table hint for query optimisation.

Example:

create.select()
      .from(BOOK.as("b").useIndexForGroupBy("MY_INDEX")
      .fetch();
See Also:
/** * Specify a MySQL style table hint for query optimisation. * <p> * Example: * <p> * <code><pre> * create.select() * .from(BOOK.as("b").useIndexForGroupBy("MY_INDEX") * .fetch(); * </pre></code> * * @see <a * href="http://dev.mysql.com/doc/refman/5.7/en/index-hints.html">http://dev.mysql.com/doc/refman/5.7/en/index-hints.html</a> */
@NotNull @Support({ MARIADB, MYSQL }) Table<R> useIndexForGroupBy(String... indexes);
Specify a MySQL style table hint for query optimisation.

Example:

create.select()
      .from(BOOK.as("b").useIndex("MY_INDEX")
      .fetch();
See Also:
/** * Specify a MySQL style table hint for query optimisation. * <p> * Example: * <p> * <code><pre> * create.select() * .from(BOOK.as("b").useIndex("MY_INDEX") * .fetch(); * </pre></code> * * @see <a * href="http://dev.mysql.com/doc/refman/5.7/en/index-hints.html">http://dev.mysql.com/doc/refman/5.7/en/index-hints.html</a> */
@NotNull @Support({ MARIADB, MYSQL }) Table<R> ignoreIndex(String... indexes);
Specify a MySQL style table hint for query optimisation.

Example:

create.select()
      .from(BOOK.as("b").useIndexForJoin("MY_INDEX")
      .fetch();
See Also:
/** * Specify a MySQL style table hint for query optimisation. * <p> * Example: * <p> * <code><pre> * create.select() * .from(BOOK.as("b").useIndexForJoin("MY_INDEX") * .fetch(); * </pre></code> * * @see <a * href="http://dev.mysql.com/doc/refman/5.7/en/index-hints.html">http://dev.mysql.com/doc/refman/5.7/en/index-hints.html</a> */
@NotNull @Support({ MARIADB, MYSQL }) Table<R> ignoreIndexForJoin(String... indexes);
Specify a MySQL style table hint for query optimisation.

Example:

create.select()
      .from(BOOK.as("b").useIndexForOrderBy("MY_INDEX")
      .fetch();
See Also:
/** * Specify a MySQL style table hint for query optimisation. * <p> * Example: * <p> * <code><pre> * create.select() * .from(BOOK.as("b").useIndexForOrderBy("MY_INDEX") * .fetch(); * </pre></code> * * @see <a * href="http://dev.mysql.com/doc/refman/5.7/en/index-hints.html">http://dev.mysql.com/doc/refman/5.7/en/index-hints.html</a> */
@NotNull @Support({ MARIADB, MYSQL }) Table<R> ignoreIndexForOrderBy(String... indexes);
Specify a MySQL style table hint for query optimisation.

Example:

create.select()
      .from(BOOK.as("b").useIndexForGroupBy("MY_INDEX")
      .fetch();
See Also:
/** * Specify a MySQL style table hint for query optimisation. * <p> * Example: * <p> * <code><pre> * create.select() * .from(BOOK.as("b").useIndexForGroupBy("MY_INDEX") * .fetch(); * </pre></code> * * @see <a * href="http://dev.mysql.com/doc/refman/5.7/en/index-hints.html">http://dev.mysql.com/doc/refman/5.7/en/index-hints.html</a> */
@NotNull @Support({ MARIADB, MYSQL }) Table<R> ignoreIndexForGroupBy(String... indexes);
Specify a MySQL style table hint for query optimisation.

Example:

create.select()
      .from(BOOK.as("b").useIndex("MY_INDEX")
      .fetch();
See Also:
/** * Specify a MySQL style table hint for query optimisation. * <p> * Example: * <p> * <code><pre> * create.select() * .from(BOOK.as("b").useIndex("MY_INDEX") * .fetch(); * </pre></code> * * @see <a * href="http://dev.mysql.com/doc/refman/5.7/en/index-hints.html">http://dev.mysql.com/doc/refman/5.7/en/index-hints.html</a> */
@NotNull @Support({ MARIADB, MYSQL }) Table<R> forceIndex(String... indexes);
Specify a MySQL style table hint for query optimisation.

Example:

create.select()
      .from(BOOK.as("b").useIndexForJoin("MY_INDEX")
      .fetch();
See Also:
/** * Specify a MySQL style table hint for query optimisation. * <p> * Example: * <p> * <code><pre> * create.select() * .from(BOOK.as("b").useIndexForJoin("MY_INDEX") * .fetch(); * </pre></code> * * @see <a * href="http://dev.mysql.com/doc/refman/5.7/en/index-hints.html">http://dev.mysql.com/doc/refman/5.7/en/index-hints.html</a> */
@NotNull @Support({ MARIADB, MYSQL }) Table<R> forceIndexForJoin(String... indexes);
Specify a MySQL style table hint for query optimisation.

Example:

create.select()
      .from(BOOK.as("b").useIndexForOrderBy("MY_INDEX")
      .fetch();
See Also:
/** * Specify a MySQL style table hint for query optimisation. * <p> * Example: * <p> * <code><pre> * create.select() * .from(BOOK.as("b").useIndexForOrderBy("MY_INDEX") * .fetch(); * </pre></code> * * @see <a * href="http://dev.mysql.com/doc/refman/5.7/en/index-hints.html">http://dev.mysql.com/doc/refman/5.7/en/index-hints.html</a> */
@NotNull @Support({ MARIADB, MYSQL }) Table<R> forceIndexForOrderBy(String... indexes);
Specify a MySQL style table hint for query optimisation.

Example:

create.select()
      .from(BOOK.as("b").useIndexForGroupBy("MY_INDEX")
      .fetch();
See Also:
/** * Specify a MySQL style table hint for query optimisation. * <p> * Example: * <p> * <code><pre> * create.select() * .from(BOOK.as("b").useIndexForGroupBy("MY_INDEX") * .fetch(); * </pre></code> * * @see <a * href="http://dev.mysql.com/doc/refman/5.7/en/index-hints.html">http://dev.mysql.com/doc/refman/5.7/en/index-hints.html</a> */
@NotNull @Support({ MARIADB, MYSQL }) Table<R> forceIndexForGroupBy(String... indexes);
Create a new TABLE reference from this table, applying relational division.

Relational division is the inverse of a cross join operation. The following is an approximate definition of a relational division:

Assume the following cross join / cartesian product
C = A × B
Then it can be said that
A = C ÷ B
B = C ÷ A

With jOOQ, you can simplify using relational divisions by using the following syntax:

C.divideBy(B).on(C.ID.equal(B.C_ID)).returning(C.TEXT)

The above roughly translates to

SELECT DISTINCT C.TEXT FROM C "c1"
WHERE NOT EXISTS (
  SELECT 1 FROM B
  WHERE NOT EXISTS (
    SELECT 1 FROM C "c2"
    WHERE "c2".TEXT = "c1".TEXT
    AND "c2".ID = B.C_ID
  )
)

Or in plain text: Find those TEXT values in C whose ID's correspond to all ID's in B. Note that from the above SQL statement, it is immediately clear that proper indexing is of the essence. Be sure to have indexes on all columns referenced from the on(...) and returning(...) clauses.

For more information about relational division and some nice, real-life examples, see

This has been observed to work with all dialects

/** * Create a new <code>TABLE</code> reference from this table, applying * relational division. * <p> * Relational division is the inverse of a cross join operation. The * following is an approximate definition of a relational division: * <code><pre> * Assume the following cross join / cartesian product * C = A × B * * Then it can be said that * A = C ÷ B * B = C ÷ A * </pre></code> * <p> * With jOOQ, you can simplify using relational divisions by using the * following syntax: <code><pre> * C.divideBy(B).on(C.ID.equal(B.C_ID)).returning(C.TEXT) * </pre></code> * <p> * The above roughly translates to <code><pre> * SELECT DISTINCT C.TEXT FROM C "c1" * WHERE NOT EXISTS ( * SELECT 1 FROM B * WHERE NOT EXISTS ( * SELECT 1 FROM C "c2" * WHERE "c2".TEXT = "c1".TEXT * AND "c2".ID = B.C_ID * ) * ) * </pre></code> * <p> * Or in plain text: Find those TEXT values in C whose ID's correspond to * all ID's in B. Note that from the above SQL statement, it is immediately * clear that proper indexing is of the essence. Be sure to have indexes on * all columns referenced from the <code>on(...)</code> and * <code>returning(...)</code> clauses. * <p> * For more information about relational division and some nice, real-life * examples, see * <ul> * <li><a * href="http://en.wikipedia.org/wiki/Relational_algebra#Division">http * ://en.wikipedia.org/wiki/Relational_algebra#Division</a></li> * <li><a href= * "http://www.simple-talk.com/sql/t-sql-programming/divided-we-stand-the-sql-of-relational-division/" * >http://www.simple-talk.com/sql/t-sql-programming/divided-we-stand-the- * sql-of-relational-division/</a></li> * </ul> * <p> * This has been observed to work with all dialects */
@NotNull @Support DivideByOnStep divideBy(Table<?> divisor);
A synthetic LEFT SEMI JOIN clause that translates to an equivalent EXISTS predicate.

The following two SQL snippets are semantically equivalent:

-- Using LEFT SEMI JOIN
FROM A
    LEFT SEMI JOIN B
        ON A.ID = B.ID
-- Using WHERE EXISTS
FROM A
WHERE EXISTS (
    SELECT 1 FROM B WHERE A.ID = B.ID
)

Notice that according to Relational algebra's understanding of left semi join, the right hand side of the left semi join operator is not projected, i.e. it cannot be accessed from WHERE or SELECT or any other clause than ON.

/** * A synthetic <code>LEFT SEMI JOIN</code> clause that translates to an * equivalent <code>EXISTS</code> predicate. * <p> * The following two SQL snippets are semantically equivalent: * <code><pre> * -- Using LEFT SEMI JOIN * FROM A * LEFT SEMI JOIN B * ON A.ID = B.ID * * -- Using WHERE EXISTS * FROM A * WHERE EXISTS ( * SELECT 1 FROM B WHERE A.ID = B.ID * ) * </pre></code> * <p> * Notice that according to * <a href="https://en.wikipedia.org/wiki/Relational_algebra">Relational * algebra's</a> understanding of left semi join, the right hand side of the * left semi join operator is not projected, i.e. it cannot be accessed from * <code>WHERE</code> or <code>SELECT</code> or any other clause than * <code>ON</code>. */
@NotNull @Support TableOnStep<R> leftSemiJoin(TableLike<?> table);
A synthetic LEFT ANTI JOIN clause that translates to an equivalent NOT EXISTS predicate.

The following two SQL snippets are semantically equivalent:

-- Using LEFT ANTI JOIN
FROM A
    LEFT ANTI JOIN B
        ON A.ID = B.ID
-- Using WHERE NOT EXISTS
FROM A
WHERE NOT EXISTS (
    SELECT 1 FROM B WHERE A.ID = B.ID
)

Notice that according to Relational algebra's understanding of left anti join, the right hand side of the left anti join operator is not projected, i.e. it cannot be accessed from WHERE or SELECT or any other clause than ON.

/** * A synthetic <code>LEFT ANTI JOIN</code> clause that translates to an * equivalent <code>NOT EXISTS</code> predicate. * <p> * The following two SQL snippets are semantically equivalent: * <code><pre> * -- Using LEFT ANTI JOIN * FROM A * LEFT ANTI JOIN B * ON A.ID = B.ID * * -- Using WHERE NOT EXISTS * FROM A * WHERE NOT EXISTS ( * SELECT 1 FROM B WHERE A.ID = B.ID * ) * </pre></code> * <p> * Notice that according to * <a href="https://en.wikipedia.org/wiki/Relational_algebra">Relational * algebra's</a> understanding of left anti join, the right hand side of the * left anti join operator is not projected, i.e. it cannot be accessed from * <code>WHERE</code> or <code>SELECT</code> or any other clause than * <code>ON</code>. */
@NotNull @Support TableOnStep<R> leftAntiJoin(TableLike<?> table); // ------------------------------------------------------------------------ // [#5518] Record method inversions, e.g. for use as method references // ------------------------------------------------------------------------
The inverse operation of Record.into(Table<Record>).

This method can be used in its method reference form conveniently on a generated table, for instance, when mapping records in a stream:

DSL.using(configuration)
   .fetch("select * from t")
   .stream()
   .map(MY_TABLE::into)
   .forEach(System.out::println);
/** * The inverse operation of {@link Record#into(Table)}. * <p> * This method can be used in its method reference form conveniently on a * generated table, for instance, when mapping records in a stream: * <code><pre> * DSL.using(configuration) * .fetch("select * from t") * .stream() * .map(MY_TABLE::into) * .forEach(System.out::println); * </pre></code> */
@NotNull R from(Record record); }