Language elements
, width=500, caption=A chart showing several of the SQL language elements that compose a single statement. This adds one to the population of the USA in the country table. The SQL language is subdivided into several language elements, including: * ''Keywords'' are words that are defined in the SQL language. They are either reserved (e.g. , and ), or non-reserved (e.g. , and ). List of SQL reserved words. * ''Identifiers'' are names on database objects, like tables, columns and schemas. An identifier may not be equal to a reserved keyword, unless it is a delimited identifier. Delimited identifiers means identifiers enclosed in double quotation marks. They can contain characters normally not supported in SQL identifiers, and they can be identical to a reserved word, e.g. a column named is specified as . * ''Clauses'', which are constituent components of statements and queries. (In some cases, these are optional.)ANSI/ISO/IEC International Standard (IS). Database Language SQL—Part 2: Foundation (SQL/Foundation). 1999. * ''Expressions'', which can produce either scalar values, or tables consisting of columns and rows of data * ''Predicates'', which specify conditions that can be evaluated to SQL three-valued logic (3VL) (true/false/unknown) orOperators
Other operators have at times been suggested or implemented, such as the skyline operator (for finding only those rows that are not 'worse' than any others). SQL has the expression, which was introduced in SQL-92. In its most general form, which is called a "searched case" in the SQL standard:Comments
Standard SQL allows two formats forQueries
The most common operation in SQL, the query, makes use of the declarative SELECT
statement. retrieves data from one or more tables, or expressions. Standard statements have no persistent effects on the database. Some non-standard implementations of can have persistent effects, such as the syntax provided in some databases.
Queries allow the user to describe desired data, leaving the database management system (DBMS) to carry out *
") can be used to specify that the query should return all columns of the queried tables. is the most complex statement in SQL, with optional keywords and clauses that include:
* The FROM
clause, which indicates the table(s) to retrieve data from. The clause can include optional JOIN
subclauses to specify the rules for joining tables.
* The WHERE
clause includes a comparison predicate, which restricts the rows returned by the query. The clause eliminates all rows from the result set where the comparison predicate does not evaluate to True.
* The GROUP BY A GROUP BY statement in SQL specifies that a SQL SELECT statement partitions result rows into groups, based on their values in one or several columns. Typically, grouping is used to apply some sort of aggregate function for each group.
The result ...
clause projects rows having common values into a smaller set of rows. is often used in conjunction with SQL aggregation functions or to eliminate duplicate rows from a result set. The clause is applied before the clause.
* The HAVING
clause includes a predicate used to filter rows resulting from the clause. Because it acts on the results of the clause, aggregation functions can be used in the clause predicate.
* The ORDER BY
clause identifies which column to use to sort the resulting data, and in which direction to sort them (ascending or descending). Without an clause, the order of rows returned by an SQL query is undefined.
* The DISTINCT
keyword eliminates duplicate data.
* The clause specifies the number of rows to skip before starting to return data.
*The clause specifies the number of rows to return. Some SQL databases instead have non-standard alternatives, e.g. , or .
The clauses of a query have a particular order of execution, which is denoted by the number on the right hand side. It is as follows:
The following example of a query returns a list of expensive books. The query retrieves all rows from the ''Book'' table in which the ''price'' column contains a value greater than 100.00. The result is sorted in ascending order by ''title''. The asterisk (*) in the ''select list'' indicates that all columns of the ''Book'' table should be included in the result set.
Subqueries
Queries can be nested so that the results of one query can be used in another query via a relational operator or aggregation function. A nested query is also known as a ''subquery''. While joins and other table operations provide computationally superior (i.e. faster) alternatives in many cases, the use of subqueries introduces a hierarchy in execution that can be useful or necessary. In the following example, the aggregation function receives as input the result of a subquery:Derived table
A ''derived table'' is the use of referencing an SQL subquery in a FROM clause. Essentially, the derived table is a subquery that can be selected from or joined to. The derived table functionality allows the user to reference the subquery as a table. The inline view is also referred to as an ''inline view '' or a ''subselect''. In the following example, the SQL statement involves a join from the initial "Book" table to the derived table "sales". This derived table captures associated book sales information using the ISBN to join to the "Book" table. As a result, the derived table provides the result set with additional columns (the number of items sold and the company that sold the books):Null or three-valued logic (3VL)
The concept of Null allows SQL to deal with missing information in the relational model. The word is a reserved keyword in SQL, used to identify the Null special marker. Comparisons with Null, for instance equality (=) in WHERE clauses, results in an Unknown truth value. In SELECT statements SQL returns only results for which the WHERE clause returns a value of True; i.e., it excludes results with values of False and also excludes those whose value is Unknown. Along with True and False, the Unknown resulting from direct comparisons with Null thus brings a fragment of three-valued logic to SQL. The truth tables SQL uses for AND, OR, and NOT correspond to a common fragment of the Kleene and Lukasiewicz three-valued logic (which differ in their definition of implication, however SQL defines no such operation). There are however disputes about the semantic interpretation of Nulls in SQL because of its treatment outside direct comparisons. As seen in the table above, direct equality comparisons between two NULLs in SQL (e.g. ) return a truth value of Unknown. This is in line with the interpretation that Null does not have a value (and is not a member of any data domain) but is rather a placeholder or "mark" for missing information. However, the principle that two Nulls aren't equal to each other is effectively violated in the SQL specification for the and operators, which do identify nulls with each other.Ron van der Meyden, "Logical approaches to incomplete information: a survey" in Chomicki, Jan; Saake, Gunter (Eds.) ''Logics for Databases and Information Systems'', Kluwer Academic PublishersData manipulation
The Data Manipulation Language (DML) is the subset of SQL used to add, update and delete data: * INSERT
adds rows (formally tuples) to an existing table, e.g.:
UPDATE
modifies a set of existing table rows, e.g.:
DELETE
removes existing rows from a table, e.g.:
MERGE
is used to combine the data of multiple tables. It combines the and elements. It is defined in the SQL:2003 standard; prior to that, some databases provided similar functionality via different syntax, sometimes called " upsert".
Transaction controls
Transactions, if available, wrap DML operations: * (or , or , depending on SQL dialect) marks the start of a database transaction, which either completes entirely or not at all. * (or ) saves the state of the database at the current point in transaction COMMIT
makes all data changes in a transaction permanent.
* ROLLBACK
discards all data changes since the last or , leaving the data as it was prior to those changes. Once the statement completes, the transaction's changes cannot be rolled back.
and terminate the current transaction and release data locks. In the absence of a or similar statement, the semantics of SQL are implementation-dependent.
The following example shows a classic transfer of funds transaction, where money is removed from one account and added to another. If either the removal or the addition fails, the entire transaction is rolled back.
Data definition
The Data Definition Language (DDL) manages table and index structure. The most basic items of DDL are the , , , and statements: *CREATE
To create is to make a new person, place, thing, or phenomenon. The term and its variants may also refer to:
* Creativity, phenomenon whereby something new and valuable is created
Art, entertainment, and media
* Create (TV network), an America ...
creates an object (a table, for example) in the database, e.g.:
ALTER
Alter may refer to:
* Alter (name), people named Alter
* Alter (automobile)
* Alter (crater), a lunar crater
* Alter Channel, a Greek TV channel
* Archbishop Alter High School, a Roman Catholic high school in Kettering, Ohio
* ALTER, a comman ...
modifies the structure of an existing object in various ways, for example, adding a column to an existing table or a constraint, e.g.:
TRUNCATE
deletes all data from a table in a very fast way, deleting the data inside the table and not the table itself. It usually implies a subsequent COMMIT operation, i.e., it cannot be rolled back (data is not written to the logs for rollback later, unlike DELETE).
DROP
Drop, DROP, drops or DROPS may refer to:
* Drop (liquid) or droplet, a small volume of liquid
** Eye drops, saline (sometimes mydriatic) drops used as medication for the eyes
* Drop (unit), a unit of measure of volume
* Falling (physics), allowi ...
deletes an object in the database, usually irretrievably, i.e., it cannot be rolled back, e.g.:
Data types
Each column in an SQL table declares the type(s) that column may contain. ANSI SQL includes the following data types. ; Character strings and national character strings *CHARACTER(n)
(or CHAR(n)
): fixed-width n-character string, padded with spaces as needed
* CHARACTER VARYING(n)
(or VARCHAR(n)
): variable-width string with a maximum size of n characters
* CHARACTER LARGE OBJECT(n M , G , T
(or CLOB(n M , G , T
): character large object with a maximum size of n M , G , T /var> characters
* NATIONAL CHARACTER(n)
(or NCHAR(n)
): fixed width string supporting an international character set
* NATIONAL CHARACTER VARYING(n)
(or NVARCHAR(n)
): variable-width NCHAR
string
* NATIONAL CHARACTER LARGE OBJECT(n M , G , T
(or NCLOB(n M , G , T
): national character large object with a maximum size of n M , G , T /var> characters
For the and data types, the multipliers (1 024), (1 048 576), (1 073 741 824) and (1 099 511 627 776) can be optionally used when specifying the length.
; Binary
* BINARY(n)
: Fixed length binary string, maximum length n.
* BINARY VARYING(n)
(or VARBINARY(n)
): Variable length binary string, maximum length n.
* BINARY LARGE OBJECT(n M , G , T
(or BLOB(n M , G , T
): binary large object with a maximum length n M , G , T /var>.
For the data type, the multipliers (1 024), (1 048 576), (1 073 741 824) and (1 099 511 627 776) can be optionally used when specifying the length.
; Boolean
*
The data type can store the values and .
; Numerical
* (or ), and
* , and
* NUMERIC(precision, scale)
or DECIMAL(precision, scale)
* DECFLOAT(precision
)
For example, the number 123.45 has a precision of 5 and a scale of 2. The precision is a positive integer that determines the number of significant digits in a particular radix (binary or decimal). The scale is a non-negative integer. A scale of 0 indicates that the number is an integer. For a decimal number with scale S, the exact numeric value is the integer value of the significant digits divided by 10S.
SQL provides the functions and to round numerical values. (Popular vendor specific functions are (Informix, DB2, PostgreSQL, Oracle and MySQL) and (Informix, SQLite, Sybase, Oracle, PostgreSQL, Microsoft SQL Server and Mimer SQL.))
; Temporal (datetime)
* : for date values (e.g. ).
* : for time values (e.g. ).
* : the same as , but including details about the time zone in question.
* : This is a and a put together in one variable (e.g. ).
* : the same as , but including details about the time zone in question.
The SQL function can be used for extracting a single field (seconds, for instance) of a datetime or interval value. The current system date / time of the database server can be called by using functions like , , , or . (Popular vendor specific functions are , , , , , , , , , , and .)
; Interval (datetime)
* YEAR(precision)
: a number of years
* YEAR(precision) TO MONTH
: a number of years and months
* MONTH(precision)
: a number of months
* DAY(precision)
: a number of days
* DAY(precision) TO HOUR
: a number of days and hours
* DAY(precision) TO MINUTE
: a number of days, hours and minutes
* DAY(precision) TO SECOND(scale)
: a number of days, hours, minutes and seconds
* HOUR(precision)
: a number of hours
* HOUR(precision) TO MINUTE
: a number of hours and minutes
* HOUR(precision) TO SECOND(scale)
: a number of hours, minutes and seconds
* MINUTE(precision)
: a number of minutes
* MINUTE(precision) TO SECOND(scale)
: a number of minutes and seconds
Data control
The Data Control Language (DCL) authorizes users to access and manipulate data. Its two main statements are: * authorizes one or more users to perform an operation or a set of operations on an object. * eliminates a grant, which may be the default grant. Example:Notes