# What is Relational Calculus?

Contrary to Relational Algebra which is a procedural query language to fetch data and which also explains how it is done, Relational Calculus in non-procedural query language and has no description about how the query will work or the data will b fetched. It only focusses on what to do, and not on how to do it.

Relational Calculus exists in two forms:

1. Tuple Relational Calculus (TRC)
2. Domain Relational Calculus (DRC)

## Tuple Relational Calculus (TRC)

In tuple relational calculus, we work on filtering tuples based on the given condition.

Syntax: `{ T | Condition }`

In this form of relational calculus, we define a tuple variable, specify the table(relation) name in which the tuple is to be searched for, along with a condition.

We can also specify column name using a `.` dot operator, with the tuple variable to only get a certain attribute(column) in result.

A lot of informtion, right! Give it some time to sink in.

A tuple variable is nothing but a name, can be anything, generally we use a single alphabet for this, so let's say `T` is a tuple variable.

To specify the name of the relation(table) in which we want to look for data, we do the following:

`Relation(T)`, where `T` is our tuple variable.

For example if our table is Student, we would put it as `Student(T)`

Then comes the condition part, to specify a condition applicable for a particluar attribute(column), we can use the `.` dot variable with the tuple variable to specify it, like in table Student, if we want to get data for students with age greater than 17, then, we can write it as,

`T.age > 17`, where `T` is our tuple variable.

Putting it all together, if we want to use Tuple Relational Calculus to fetch names of students, from table Student, with age greater than 17, then, for `T` being our tuple variable,

`T.name | Student(T) AND T.age > 17`

## Domain Relational Calculus (DRC)

In domain relational calculus, filtering is done based on the domain of the attributes and not based on the tuple values.

Syntax: `{ c1, c2, c3, ..., cn | F(c1, c2, c3, ... ,cn)}`

where, c1, c2... etc represents domain of attributes(columns) and `F` defines the formula including the condition for fetching the data.

For example,

`{< name, age > | ∈ Student ∧ age > 17}`

Again, the above query will return the names and ages of the students in the table Student who are older than 17.