Structured Query Language (SQL) is the most popular computer language used to create, modify and retrieve data from relational database management systems. Despite its original purpose, the language is also extracted to support object-relational database management systems . It is an ANSI/ISO standard.
A seminal paper, "A Relational Model of Data for Large Shared Data Banks", by Dr. Edgar F. Codd, was published in June, 1970 in the Association for Computing Machinery (ACM) journal, Communications of the ACM. Codd's model became widely accepted as the definitive model for relational database management systems (RDBMS).
During the 1970s, a group at IBM's San Jose research center developed a database system "System R" based upon Codd's model. Structured English Query Language ("SEQUEL") was designed to manipulate and retrieve data stored in System R. The acronym SEQUEL was later condensed to SQL due to a trademark dispute (the word 'SEQUEL' was held as a trade mark by the Hawker-Siddeley aircraft company of the UK).
In 1979, Relational Software, Inc. (now Oracle Corporation) introduced the first commercially available implementation of SQL and, soon, many vendors developed dialects of it.
SQL was adopted as a standard by the ANSI (American National Standards Institute) in 1986 and ISO (International Organization for Standardization) in 1987. ANSI has declared that the official pronunciation for SQL is "es queue el", although many English-speaking database professionals still pronounce it as sequel.
The SQL standard has gone through a number of revisions:
First published by ANSI. Ratified by ISO in 1987.
||Added regular expression matching, recursive queries, triggers, non-scalar types and some object-oriented features. (The last two are somewhat controversial and not yet widely supported.)
Introduced XML-related features, window functions, standardized sequences and columns with auto-generated values (including identity-columns).
(See Eisenberg et al.: SQL:2003 Has Been Published.)
The SQL standard is not freely available. SQL:2003 may be purchased from ISO or ANSI. A late draft is available as a zip archive from Whitemarsh Information Systems Corporation. The zip archives contains a number of PDF files that define the parts of the SQL:2003 specification.
Although SQL is defined by both ANSI and ISO, there are many extensions to and variations on the version of the language defined by these standards bodies. Many of these extensions are of a proprietary nature, such as Oracle Corporation's PL/SQL or Sybase and Microsoft's Transact-SQL. It is also not uncommon for commercial implementations to omit support for basic features of the standard, such as the
TIME data types, preferring some variant of their own. As a result, in contrast to ANSI C or ANSI Fortran, which can usually be ported from platform to platform without major structural changes, SQL code can rarely be ported between database systems without major modifications. There are several reasons for this lack of portability between database systems:
- the complexity and size of the SQL standard means that most databases do not implement the entire standard.
- the standard does not specify database behavior in several important areas (e.g. indexes), leaving it up to implementations of the standard to decide how to behave.
- the SQL standard precisely specifies the syntax that a conformant database system must implement. However, the standard's specification of the semantics of language constructs is less well-defined, leading to areas of ambiguity.
- many database vendors have large existing customer bases; where the SQL standard conflicts with the prior behavior of the vendor's database, the vendor may be unwilling to break backward compatibility.
- some believe the lack of compatibility between database systems is intentional in order to ensure vendor lock-in.
As the name implies, SQL is designed for a specific, limited purpose -- querying data contained in a relational database. As such, it is a set-based, declarative computer language rather than an imperative language such as C or BASIC which, being programming languages, are designed to solve a much broader set of problems. Language extensions such as PL/SQL are designed to address this by turning SQL into a full-fledged programming language while maintaining the advantages of SQL. Another approach is to allow programming language code to be embedded in and interact with the database. For example, Oracle and others include Java in the database, while PostgreSQL allows functions to be written in a wide variety of languages, including Perl, Tcl, and C.
One joke about SQL is that "SQL is neither structured, nor is it limited to queries, nor is it a language." This is founded on the notion that pure SQL is not a classic programming language since it is not Turing complete. On the other hand, however, it is a programming language because it has a grammar, syntax, and programmatic purpose and intent. The joke recalls Voltaire's remark that the Holy Roman Empire was "neither holy, nor Roman, nor an empire."
Description of SQL
SQL allows the specification of queries in a high-level, declarative manner. For example, to select rows from a database, the user need only specify the criteria that they want to search by; the details of performing the search operation efficiently is left up to the database system, and is invisible to the user.
Compared to general-purpose programming languages, this structure allows the user/programmer to be less familiar with the technical details of the data and how they are stored, and relatively more familiar with the information contained in the data. This blurs the line between user and programmer, appealing to individuals who fall more into the 'business' or 'research' area and less in the 'information technology' area. The original vision for SQL was to allow non-technical users to write their own database queries. While this has been realized to some extent, the complexity of querying an advanced database system using SQL can still require a significant learning curve.
SQL contrasts with the more powerful database-oriented fourth-generation programming languages such as Focus or SAS, however, in its relative functional simplicity and simpler command set. This greatly reduces the degree of difficulty involved in maintaining the worst SQL source code, but it also makes programming such questions as 'Who had the top ten scores?' more difficult, leading to the development of procedural extensions, discussed above. However, it also makes it possible for SQL source code to be produced (and optimized) by software, leading to the development of a number of natural language database query languages, as well as 'drag and drop' database programming packages with 'object oriented' interfaces. Often these allow the resultant SQL source code to be examined, for educational purposes, further enhancement, or to be used in a different environment.
SQL keywords fall into several groups.
First there are the standard Data Manipulation Language (DML) elements. DML is the subset of the language used to query a database and add, update and delete data.
SELECT is used to retrieve zero or more rows from one or more tables in a database. In most applications,
SELECT is the most commonly used DML command. In specifying a
SELECT query, the user specifies a description of the desired result set, but they do not specify what physical operations must be executed to produce that result set. Translating the query into an optimal query plan is left to the database system, more specifically to the query optimizer.
- Commonly available keywords related to SELECT include:
FROM is used to indicate which tables the data is to be taken from, as well as how the tables join to each other.
WHERE is used to identify which rows to be retrieved, or applied to GROUP BY.
GROUP BY is used to combine rows with related values into elements of a smaller set of rows.
HAVING is used to identify which rows, following a GROUP BY, are to be retrieved.
ORDER BY is used to identify which columns are used to sort the resulting data.
INSERT is used to add zero or more rows (formally tuples) to an existing table.
UPDATE is used to modify the values of a set of existing table rows.
DELETE removes zero or more existing rows from a table.
Three other keywords could be said to fall into DML:
BEGIN WORK (or
START TRANSACTION , depending on SQL dialect) can be used to mark the start of a database transaction, which either completes completely or not at all.
COMMIT causes all data changes in a transaction to be made permanent.
ROLLBACK causes all data changes since the last
ROLLBACK to be discarded, so that the state of the data is "rolled back" to the way it was prior to those changes being requested.
ROLLBACK interact with areas such as transaction control and locking. Strictly, both terminate any open transaction and release any locks held on data. In the absence of a
BEGIN WORK or similar statement, the semantics of SQL are implementation-dependent.
The second group of keywords is the Data Definition Language (DDL). DDL allows the user to define new tables and associated elements. Most commercial SQL databases have proprietary extensions in their DDL, which allow control over proprietary and nonstandard, but usually operationally vital, elements of the specific system.
The most basic items of DDL are the
CREATE causes an object (a table, for example) to be created within the database.
DROP causes an existing object within the database to be deleted, usually irretrievably.
Some database systems also have an
ALTER command, which permits the user to modify an existing object in various ways - for example, adding a column to an existing table.
The third group of SQL keywords is the Data Control Language (DCL). DCL handles the authorisation aspects of data and permits the user to control who has access to see or manipulate data within the database.
Its two main keywords are:
GRANT - authorises a user to perform an operation or a set of operations.
REVOKE - removes or restricts the capability of a user to perform an operation or a set of operations.
Database systems using SQL
Criticisms of SQL
Technically, SQL is a declarative computer language for use with "relational databases". Theorists note that many of the original SQL features were inspired by, but in violation of, tuple calculus. Recent extensions to SQL achieved relational completeness, but have worsened the violations, as documented in The Third Manifesto.
In additional, there are also some criticisms about the practical use of SQL:
- The language syntax is rather complex (sometimes called "COBOL-like").
- It does not provide a standard way to split large commands into multiple smaller ones that reference each other by name (however some implementations allow for set-based functions to grant this functionality). This tends to result in "run-on SQL sentences"
- Implementations are inconsistent and, at times, incompatible between vendors.
- It is at times too difficult a syntax for DBAs (database administrators) to extend.
- Over-reliance on "NULLs", which some consider a flawed or over-used concept.
Alternatives to SQL
Last updated: 10-24-2005 15:13:56