Functionality

The functionality of the current SQL language is listed here, and some ideas how NewSQL should look like. However, nothing is fixed at this time.

Case sensitivity of the language

SQL is not case sensitive

Identifiers (Names)

SQL allows quoted names.

Standard data types

SQL supports a variety of data types, and most vendors have a different set of types.

Advanced data types

This are data types that are not supported by all databases, but are usefull in many cases. In SQL, this feature is largely vendor specific.

Large Objects

Large objects are objects that may not fit into memory. SQL 99 supports CLOB (Character Large OBject) and BLOB (Binary Large OBject).

Autoincrement

There is no standard for autoincrement, but many vendors support it in some way.

Data Definition

CREATE TABLE, DROP TABLE. There is no standard for CREATE INDEX and DROP INDEX, however most database vendors support it. ALTER TABLE ADD COLUMN, and so on.

Check constraints

Referential integrity

Most database administrators are converened about referential integrity. Sometimes this feature makes live much easier (when bugs are found early using this mechanism), sometimes harder (when data has to be moved around).

Default values

Nullable / non-nullable columns

In SQL, columns can be defined NOT NULL.

Data Manipulation

INSERT, UPDATE, DELETE

Data Query Language

SELECT

Subqueries

This is a very popular feature.

Expressions and Formulas

The ANSI standard does define a few operations, but there are big differences in what vendors support. In Oracle, the comparison operators are not allowed everywhere, for example.

String constants

String literals are enclosed with single quoted. There is no standard to escape special characters (newline, tab). Two single quotes are used to write a single quote inside a string constant.

User defined functions

Built-in Functions

There are some built-in functions defined, however every database vendor supports its own set.

Access rights

Syntax rules

SQL has many hundred syntax rules.

Namespaces

SQL does not support namespaces, however JDBC defines 'catalogs' and 'schemas'.

NULL Handling

NULL handling in SQL is 'problematic': NULL is not equal to NULL. NULL values in indices is a separete story.

Joins

SQL supports inner joins, outer joins, and full outer joins.

Union

UNION ALL and UNION DISTINCT are SQL standard, where UNION DISTINCT is the default

Advanced transformations

Some databases support UNION EXCEPT, CROSS JOINS and other seldom used functionality. All this is not standardized.

Distinct

DISTINCT is supported in combination with SELECT and UNION

Mananging databases

SQL does not define a standard way to manage databases.

Logging

Some databases define a way how the transaction log (or other logs) can be read. This is however complety vendor specific.

Procedural language

SQL does not define procedural elements, however the big vendors support their own extensions.

Stored procedures

This is not a standard, but many vendors support it.

Triggers

Triggers are called when a row is inserted, updated or deleted. Triggers are largely vendor specific.

Transactional functionality

COMMIT and ROLLBACK are standard. Some vendors support more functionality, such as nested transactions. There are also many transaction isolation levels possible. Some databases use locking, some versioning, for transaction isolation.

Connection management

There is no SQL standard to connecting to a different database / connecting as a different user

Metadata

There is no SQL standard, however the JDBC API already supports DatabaseMetaData

Error messages / codes

Error codes are largely vendor specific. Some applications have to check for error codes (for example, to re-try after a deadlock).