Queries
The most common operation in SQL is the query, which is performed with the declarativeSELECT
statement. SELECT
retrieves data from one or more tables, or expressions. Standard SQL statements have no persistent effects on the database. Some non-standard implementations of SELECT
can have persistent effects, such as the SELECT INTO
syntax that exists in some databases.[10]Queries allow the user to describe desired data, leaving the database management system (DBMS) responsible for planning, optimizing, and performing the physical operations necessary to produce that result as it chooses.
A query includes a list of columns to be included in the final result immediately following the
SELECT
keyword. An asterisk ("*
") can also be used to specify that the query should return all columns of the queried tables. SELECT
is the most complex statement in SQL, with optional keywords and clauses that include:- The
FROM
clause which indicates the table(s) from which data is to be retrieved. TheFROM
clause can include optionalJOIN
subclauses to specify the rules for joining tables. - The
WHERE
clause includes a comparison predicate, which restricts the rows returned by the query. TheWHERE
clause eliminates all rows from the result set for which the comparison predicate does not evaluate to True. - The
GROUP BY
clause is used to project rows having common values into a smaller set of rows.GROUP BY
is often used in conjunction with SQL aggregation functions or to eliminate duplicate rows from a result set. TheWHERE
clause is applied before theGROUP BY
clause. - The
HAVING
clause includes a predicate used to filter rows resulting from theGROUP BY
clause. Because it acts on the results of theGROUP BY
clause, aggregation functions can be used in theHAVING
clause predicate. - The
ORDER BY
clause identifies which columns are used to sort the resulting data, and in which direction they should be sorted (options are ascending or descending). Without anORDER BY
clause, the order of rows returned by an SQL query is undefined.
SELECT
query that 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.SELECT * FROM Book WHERE price > 100.00 ORDER BY title;
SELECT Book.title, count(*) AS Authors FROM Book JOIN Book_author ON Book.isbn = Book_author.isbn GROUP BY Book.title;
Title Authors ---------------------- ------- SQL Examples and Guide 3 The Joy of SQL 1 An Introduction to SQL 2 Pitfalls of SQL 1Under the precondition that isbn is the only common column name of the two tables and that a column named title only exists in the Books table, the above query could be rewritten in the following form:
SELECT title, count(*) AS Authors FROM Book NATURAL JOIN Book_author GROUP BY title;
SQL includes operators and functions for calculating values on stored values. SQL allows the use of expressions in the select list to project data, as in the following example which returns a list of books that cost more than 100.00 with an additional sales_tax column containing a sales tax figure calculated at 6% of the price.
SELECT isbn, title, price, price * 0.06 AS sales_tax FROM Book WHERE price > 100.00 ORDER BY title;
Null and Three-Valued Logic (3VL)
The idea of Null was introduced into SQL to handle missing information in the relational model. The introduction of Null (or Unknown) along with True and False is the foundation of Three-Valued Logic. 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. Therefore comparisons with Null can never result in either True or False but always in the third logical result, Unknown.[11]SQL uses Null to handle missing information it supports three-valued logic (3VL) and the rules governing SQL three-valued logic (3VL) are shown below (p and q represent logical states).[12] The word NULL is also a reserved keyword in SQL, used to identify the Null special marker.
Additionally, since SQL operators return Unknown when comparing anything with Null, SQL provides two Null-specific comparison predicates: The
IS NULL
and IS NOT NULL
test whether data is or is not Null.[13]Note that SQL returns only results for which the WHERE clause returns a value of True. I.e., it excludes results with values of False, but also those whose value is Unknown.
|
|
|
|
SQL also provides the spaceship operator,
<=>
, to mean NULL-safe equality. That is,p <=> q | p | |||
---|---|---|---|---|
True | False | Unknown | ||
q | True | True | False | False |
False | False | True | False | |
Unknown | False | False | True |
[edit] Data manipulation
The Data Manipulation Language (DML) is the subset of SQL used to add, update and delete data:INSERT INTO My_table (field1, field2, field3) VALUES ('test', 'N', NULL);
UPDATE
modifies a set of existing table rows, e.g.,:
UPDATE My_table SET field1 = 'updated value' WHERE field2 = 'N';
DELETE
removes existing rows from a table, e.g.,:
DELETE FROM My_table WHERE field2 = 'N';
TRUNCATE
deletes all data from a table in a very fast way. It usually implies a subsequent COMMIT operation.MERGE
is used to combine the data of multiple tables. It combines theINSERT
andUPDATE
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:START TRANSACTION
(orBEGIN WORK
, orBEGIN TRANSACTION
, depending on SQL dialect) mark the start of a database transaction, which either completes entirely or not at all.COMMIT
causes all data changes in a transaction to be made permanent.ROLLBACK
causes all data changes since the lastCOMMIT
orROLLBACK
to be discarded, leaving the state of the data as it was prior to those changes.
COMMIT
statement completes, the transaction's changes cannot be rolled back.COMMIT
and ROLLBACK
terminate the current transaction and release data locks. In the absence of a START TRANSACTION
or similar statement, the semantics of SQL are implementation-dependent. Example: A classic bank transfer of funds transaction.START TRANSACTION; UPDATE Account SET amount=amount-200 WHERE account_number=1234; UPDATE Account SET amount=amount+200 WHERE account_number=2345; IF ERRORS=0 COMMIT; IF ERRORS<>0 ROLLBACK;
Data definition
The Data Definition Language (DDL) manages table and index structure. The most basic items of DDL are theCREATE
, ALTER
, RENAME
, DROP
and TRUNCATE
statements:CREATE
creates an object (a table, for example) in the database.DROP
deletes an object in the database, usually irretrievably.ALTER
modifies the structure an existing object in various ways—for example, adding a column to an existing table.
CREATE TABLE My_table ( my_field1 INT, my_field2 VARCHAR(50), my_field3 DATE NOT NULL, PRIMARY KEY (my_field1, my_field2) );
Data control
The Data Control Language (DCL) authorizes users and groups of users to access and manipulate data. Its two main statements are:GRANT
authorizes one or more users to perform an operation or a set of operations on an object.REVOKE
eliminates a grant, which may be the default grant.
GRANT SELECT, UPDATE ON My_table TO some_user, another_user; REVOKE SELECT, UPDATE ON My_table FROM some_user, another_user;
Procedural extensions
SQL is designed for a specific purpose: to query data contained in a relational database. SQL is a set-based, declarative query language, not an imperative language such as C or BASIC. However, there are extensions to Standard SQL which add procedural programming language functionality, such as control-of-flow constructs. These are:Source | Common Name | Full Name |
---|---|---|
ANSI/ISO Standard | SQL/PSM | SQL/Persistent Stored Modules |
Interbase/ Firebird | PSQL | Procedural SQL |
IBM | SQL PL | SQL Procedural Language (implements SQL/PSM) |
Microsoft/ Sybase | T-SQL | Transact-SQL |
MySQL | SQL/PSM | SQL/Persistent Stored Module (implements SQL/PSM) |
Oracle | PL/SQL | Procedural Language/SQL (based on Ada) |
PostgreSQL | PL/pgSQL | Procedural Language/PostgreSQL Structured Query Language (based on Oracle PL/SQL) |
PostgreSQL | PL/PSM | Procedural Language/Persistent Stored Modules (implements SQL/PSM) |
No comments:
Post a Comment