# QBTableClause

## Overview

The `QBTableClause` class is a fundamental component for building queries within the Servoy environment. It manages properties related to the table, such as \`dataSource\` and \`tableAlias\`, and provides functionality to retrieve or create columns for the query.

The class offers methods for managing the columns associated with a data source, such as `getColumn()` to retrieve specific columns by name, and `columns()` to get all available columns.

It allows for complex query construction by supporting joins, accessible via the `joins()` method, which handles relationships between tables. The `getTable()` method provides access to the underlying table associated with the data source, while `getColumnNames()` retrieves all the column names in the table.

Additionally, the \`QBTableClause\` class provides a way to find other \`QBTableClause\` objects through table aliases, using the `findQueryBuilderTableClause()` method.

The class also facilitates the dynamic creation of columns when needed, and it ensures that the correct `QBColumn` objects are available for query building. By supporting query table retrieval, column management, and joins, `QBTableClause` is integral to structuring and executing complex database queries in the Servoy environment.

## Properties Summarized

| Type                                                                                                 | Name                | Summary                                                                                        |
| ---------------------------------------------------------------------------------------------------- | ------------------- | ---------------------------------------------------------------------------------------------- |
| [QBColumns](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbcolumns)         | [columns](#columns) | Get all the columns of the datasource that can be used for this query (select or where clause) |
| [QBJoins](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbjoins)             | [joins](#joins)     | Get the joins clause of this table based clause.                                               |
| [QBTableClause](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbtableclause) | [parent](#parent)   | Get query builder parent table clause, this may be a query or a join clause.                   |
| [QBSelect](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbselect)           | [root](#root)       | Get query builder parent.                                                                      |

## Methods Summarized

| Type                                                                                       | Name                                                                  | Summary                                       |
| ------------------------------------------------------------------------------------------ | --------------------------------------------------------------------- | --------------------------------------------- |
| [QBColumn](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbcolumn) | [getColumn(name)](#getcolumn-name)                                    | Get a column from the table.                  |
| [QBColumn](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbcolumn) | [getColumn(columnTableAlias, name)](#getcolumn-columntablealias-name) | Get a column from the table with given alias. |
| [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string)               | [getDataSource()](#getdatasource)                                     | Returns the datasource for this.              |
| [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string)               | [getTableAlias()](#gettablealias)                                     | Returns the table alias for this.             |

## Properties Detailed

### columns

Get all the columns of the datasource that can be used for this query (select or where clause)

**Type**\
[QBColumns](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbcolumns)

**Sample**

```js
var query = foundset.getQuery();
query.result.add(query.columns.name, "name");
query.where.add(query.columns.orderdate.isNull)
```

### joins

Get the joins clause of this table based clause.\
Joins added to this clause will be based on this table clauses table.

**Type**\
[QBJoins](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbjoins)

**Sample**

```js
foundset.getQuery().joins
```

### parent

Get query builder parent table clause, this may be a query or a join clause.

**Type**\
[QBTableClause](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbtableclause)

**Sample**

```js
var query = datasources.db.example_data.person.createSelect();
	query.where.add(query.joins.person_to_parent.joins.person_to_parent.columns.name.eq('john'))
	foundset.loadRecords(query)
```

### root

Get query builder parent.

**Type**\
[QBSelect](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbselect)

**Sample**

```js
var subquery = datasources.db.example_data.order_details.createSelect();

	var query = datasources.db.example_data.orders.createSelect();
	query.where.add(query
		.or
			.add(query.columns.order_id.not.isin([1, 2, 3]))

			.add(query.exists(
					subquery.where.add(subquery.columns.orderid.eq(query.columns.order_id)).root
			))
		)

	foundset.loadRecords(query)
```

## Methods Detailed

### getColumn(name)

Get a column from the table.

**Parameters**

* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **name** the name of column to get

**Returns:** [QBColumn](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbcolumn) the QBColumn representing the specified column name.

**Sample**

```js
foundset.getQuery().getColumn('orderid')
```

### getColumn(columnTableAlias, name)

Get a column from the table with given alias.\
The alias may be of the main table or any level deep joined table.

**Parameters**

* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **columnTableAlias** the alias for the table
* [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) **name** the name of column to get

**Returns:** [QBColumn](https://docs.servoy.com/reference/servoycore/dev-api/database-manager/qbcolumn) the QBColumn representing the specified column from the table with the given alias.

**Sample**

```js
foundset.getQuery().getColumn('orderid', 'opk')
```

### getDataSource()

Returns the datasource for this.

**Returns:** [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) the dataSource

### getTableAlias()

Returns the table alias for this.

**Returns:** [String](https://docs.servoy.com/reference/servoycore/dev-api/js-lib/string) the tableAlias

***
