## SQL Syntax Differences: Standard SQL vs. T-SQL

SQL, which stands for Structured Query Language, is a programming language used to manage and manipulate relational databases. There are several varieties of SQL, including Standard SQL and T-SQL, each with its own syntax and features.

In this article, we will explore the syntax differences between Standard SQL and T-SQL, focusing on the names of database objects, returning values, limiting records in a result set, automatically generating values, math and aggregate functions, retrieving parts of dates and times, operating on strings, and differences in DML syntax.

## 1. Names of Database Objects

The syntax for naming database objects differs between Standard SQL and T-SQL. In Standard SQL, database objects are typically enclosed in quotation marks.

In T-SQL, square brackets are used instead. For example, to create a table in Standard SQL, one might use the following syntax:

```
CREATE TABLE "Employee" (
"ID" INT NOT NULL,
"Name" VARCHAR(50) NOT NULL,
"Age" INT NOT NULL,
PRIMARY KEY ("ID")
);
```

On the other hand, the syntax for creating the same table in T-SQL would look like this:

```
CREATE TABLE [Employee] (
[ID] INT NOT NULL,
[Name] VARCHAR(50) NOT NULL,
[Age] INT NOT NULL,
PRIMARY KEY ([ID])
);
```

## 2. Returning Values

In both Standard SQL and T-SQL, the SELECT statement is used to return data from a table. However, the syntax for returning values may differ slightly.

In Standard SQL, an expression can be used to return a specific value or to perform a calculation on a column. For example:

`SELECT Name, Salary*1.1 AS "NewSalary" FROM Employee;`

This expression returns the employee’s name and a new salary, which is computed by multiplying the current salary by 1.1. In T-SQL, the syntax is similar, but the AS clause is optional:

`SELECT Name, Salary*1.1 "NewSalary" FROM Employee;`

## 3. Limiting Records in a Result Set

When working with large databases, it is often necessary to limit the number of records returned in a result set. Standard SQL and T-SQL both offer several methods for doing this.

### 3.1 Standard SQL

In Standard SQL, the FETCH FIRST clause is used to limit the number of records returned:

`SELECT * FROM Employee FETCH FIRST 10 ROWS ONLY;`

This expression returns the first 10 rows from the Employee table.

### 3.2 T-SQL

T-SQL offers similar functionality, but uses the TOP clause instead:

`SELECT TOP 10 * FROM Employee;`

In addition, T-SQL also allows the use of the OFFSET clause, which can be used to skip a certain number of rows before returning results:

`SELECT * FROM Employee ORDER BY Salary OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY;`

This expression skips the first 10 rows and returns the next 5, sorted by salary.

## 4. Automatically Generating Values

When creating a table, it is often necessary to automatically generate values for certain columns. Standard SQL uses the GENERATED ALWAYS AS IDENTITY clause to accomplish this:

```
CREATE TABLE Employee (
ID INT GENERATED ALWAYS AS IDENTITY,
Name VARCHAR(50) NOT NULL,
Salary DECIMAL(7, 2) NOT NULL,
PRIMARY KEY (ID)
);
```

In T-SQL, the IDENTITY clause is used instead:

```
CREATE TABLE Employee (
ID INT IDENTITY(1,1),
Name VARCHAR(50) NOT NULL,
Salary DECIMAL(7, 2) NOT NULL,
PRIMARY KEY (ID)
);
```

## 5. Math and Aggregate Functions

Both Standard SQL and T-SQL offer a variety of math and aggregate functions for working with data. Some of the most commonly used functions include:

- CEIL: rounds a number up to the nearest integer
- SIGN: returns the sign of a number (-1, 0, or 1)
- ROUND: rounds a number to a specified number of decimal places
- TRUNC: truncates a number to a specified number of decimal places
- LOG: returns the natural logarithm of a number
- RANDOM: returns a random number
- MAX: returns the highest value in a set of values
- MIN: returns the lowest value in a set of values
- GREATEST: returns the greatest value in a set of values
- LEAST: returns the least value in a set of values

Aggregate functions are used to perform calculations on groups of rows, rather than individual rows.

### 5.1 Commonly Used Aggregate Functions

- COUNT: returns the number of rows in a group
- SUM: returns the sum of the values in a group
- AVG: returns the average value in a group
- DISTINCT: returns only the unique values in a group
- COVAR_POP: returns the population covariance of two sets of values

## 6. Retrieving Parts of Dates and Times

When working with dates and times, it is often necessary to retrieve specific parts of the date or time, such as the year, month, day, hour, or minute. In Standard SQL, the EXTRACT function can be used to retrieve specific parts of a date or time:

`SELECT EXTRACT(YEAR FROM HireDate) FROM Employee;`

This expression returns the year in which each employee was hired.

In T-SQL, the DATEPART function is used instead:

`SELECT DATEPART(YEAR, HireDate) FROM Employee;`

## 7. Operating on Strings

Both Standard SQL and T-SQL offer a variety of string functions for working with text data. Some of the most commonly used functions include:

- TRIM: removes leading and trailing spaces from a string
- LTRIM: removes leading spaces from a string
- RTRIM: removes trailing spaces from a string
- SUBSTRING: retrieves a portion of a string
- || operator: concatenates two strings
- CONCAT: concatenates two or more strings
- REPEAT: repeats a string a specified number of times
- !=: denotes inequality between two strings

## 8. Inequality Operator

In Standard SQL, the <> operator is used to denote inequality between two values. For example:

`SELECT * FROM Employee WHERE Salary <> 50000;`

This expression selects all employees whose salary is not equal to 50,000.

In T-SQL, the != operator can also be used:

`SELECT * FROM Employee WHERE Salary != 50000;`

## 9. ISNULL Function

In both Standard SQL and T-SQL, the ISNULL function can be used to check if a value is NULL. For example:

`SELECT ISNULL(ManagerID, 0) FROM Employee;`

This expression returns the ManagerID column, but replaces NULL values with 0.

In T-SQL, the syntax is the same:

`SELECT ISNULL(ManagerID, 0) FROM Employee;`

## Conclusion

In conclusion, while Standard SQL and T-SQL share many similarities, there are notable differences in their syntax and functionality. Understanding these differences is essential for anyone working with SQL databases, as it can affect the accuracy and efficiency of their work.

By using the appropriate syntax and functions for each language, developers can ensure that their code is clean and effective. In this article, we explored the syntax differences between Standard SQL and T-SQL, focusing on critical areas such as returning values, limiting records, automatically generating values, math and aggregate functions, retrieving parts of dates and times, operating on strings, and differences in DML syntax.

Standard SQL and T-SQL are similar, yet each has its own unique syntax and methods. Understanding the differences is crucial for developers working with SQL databases, as it can affect the accuracy and efficiency of their work.

By using the appropriate syntax and functions for each language, developers can ensure that their code is clean and effective.