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
FROMclause which indicates the table(s) from which data is to be retrieved. TheFROMclause can include optionalJOINsubclauses to specify the rules for joining tables. - The
WHEREclause includes a comparison predicate, which restricts the rows returned by the query. TheWHEREclause eliminates all rows from the result set for which the comparison predicate does not evaluate to True. - The
GROUP BYclause is used to project rows having common values into a smaller set of rows.GROUP BYis often used in conjunction with SQL aggregation functions or to eliminate duplicate rows from a result set. TheWHEREclause is applied before theGROUP BYclause. - The
HAVINGclause includes a predicate used to filter rows resulting from theGROUP BYclause. Because it acts on the results of theGROUP BYclause, aggregation functions can be used in theHAVINGclause predicate. - The
ORDER BYclause 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 BYclause, 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);
UPDATEmodifies a set of existing table rows, e.g.,:
UPDATE My_table SET field1 = 'updated value' WHERE field2 = 'N';
DELETEremoves existing rows from a table, e.g.,:
DELETE FROM My_table WHERE field2 = 'N';
TRUNCATEdeletes all data from a table in a very fast way. It usually implies a subsequent COMMIT operation.MERGEis used to combine the data of multiple tables. It combines theINSERTandUPDATEelements. 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.COMMITcauses all data changes in a transaction to be made permanent.ROLLBACKcauses all data changes since the lastCOMMITorROLLBACKto 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:CREATEcreates an object (a table, for example) in the database.DROPdeletes an object in the database, usually irretrievably.ALTERmodifies 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:GRANTauthorizes one or more users to perform an operation or a set of operations on an object.REVOKEeliminates 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