| 
 SQL-Data Statements  
SQL-Data Statements perform query and modification on database tables and 
columns.
 
 
A D V E R T I S E M E N T 
 This subset of SQL is also called the Data Manipulation Language for 
SQL (SQL DML).
Contents:  
	- SELECT Statement -- 
	query tables and views in the database
	  
	- SQL Modification Statements
		- INSERT Statement 
		-- add rows to tables
		  
		- UPDATE Statement 
		-- modify columns in table rows
		  
		- DELETE Statement 
		-- remove rows from tables
 
	 
	  
 
  
SELECT Statement Basics  
The SQL SELECT statement queries data from tables in the database. The statement 
begins with the SELECT keyword. The basic SELECT statement has 3 clauses:
 
The SELECT clause specifies the table columns that are retrieved. The FROM 
clause specifies the tables accessed. The WHERE clause specifies which table 
rows are used. The WHERE clause is optional; if missing, all table rows are 
used.
 For example,  
	
SELECT name FROM s WHERE city='Rome'
  
 
This query accesses rows from the table - s. It then filters those rows 
where the city column contains Rome. Finally, the query retrieves the 
name column from each filtered row. Using the example s table, this 
query produces:
 
A detailed description of the query actions:
 
	- The FROM clause accesses the s table. Contents:
	
			
				| sno
				 | 
				name
				 | 
				city
				 | 
			 
			
				| S1
				 | 
				Pierre
				 | 
				Paris
				 | 
			 
			
				| S2
				 | 
				John
				 | 
				London
				 | 
			 
			
				| S3
				 | 
				Mario
				 | 
				Rome
				 | 
			 
		 
	 
	  
	- The WHERE clause filters the rows of the FROM table to use those whose
	city column contains Rome. This chooses a single row from s:
	
		
			
				| sno
				 | 
				name
				 | 
				city
				 | 
			 
			
				| S3
				 | 
				Mario
				 | 
				Rome
				 | 
			 
		 
	 
	  
	- The SELECT clause retrieves the name column from the rows 
	filtered by the WHERE clause:
	
	  
 
The remainder of this subsection examines the 3 major clauses of the SELECT 
statement, detailing their syntax and semantics:
 
	- SELECT Clause -- 
	specifies the table columns retrieved 
 
	- FROM Clause -- 
	specifies the tables to be accessed 
 
	- WHERE Clause -- 
	specifies which rows in the FROM tables to use
	
 
 
Extended query capabilities are covered in the
next sub-section.
  
 
 SELECT Clause  
The SELECT clause is mandatory. It specifies a list of columns to be retrieved 
from the tables in the FROM clause. It has the following general format:
 
	
SELECT [ALL|DISTINCT] select-list
  
 
select-list is a list of column names separated by commas. The ALL and 
DISTINCT specifiers are optional. DISTINCT specifies that duplicate rows are 
discarded. A duplicate row is when each corresponding select-list column 
has the same value. The default is ALL, which retains duplicate rows.
 For example,  
	
SELECT descr, color FROM p
  
 
The column names in the select list can be qualified by the appropriate table 
name:
 
	
SELECT p.descr, p.color FROM p
  
 
A column in the select list can be renamed by following the column name with the 
new name. For example:
 
	
SELECT name supplier, city location FROM s
  
 
This produces:
 
	
		
			| supplier
			 | 
			location
			 | 
		 
		
			| Pierre
			 | 
			Paris
			 | 
		 
		
			| John
			 | 
			London
			 | 
		 
		
			| Mario
			 | 
			Rome
			 | 
		 
	 
 
The select list may also contain expressions. See
Expressions.
 A special select list consisting of a single '*' requests all columns in all 
tables in the FROM clause. For example,  
 
	
		
			| sno
			 | 
			pno
			 | 
			qty
			 | 
		 
		
			| S1
			 | 
			P1
			 | 
			NULL
			 | 
		 
		
			| S2
			 | 
			P1
			 | 
			200
			 | 
		 
		
			| S3
			 | 
			P1
			 | 
			1000
			 | 
		 
		
			| S3
			 | 
			P2
			 | 
			200
			 | 
		 
	 
 
The * delimiter will retrieve just the columns of a single table when 
qualified by the table name. For example:
 
This produces the same result as the previous
example.
 An unqualified * cannot be combined with other elements in the select 
list; it must be stand alone. However, a qualified * can be combined with 
other elements. For example,  
	
SELECT sp.*, city
FROM sp, s
WHERE sp.sno=s.sno
  
 
 
	
		
			| sno
			 | 
			pno
			 | 
			qty
			 | 
			city
			 | 
		 
		
			| S1
			 | 
			P1
			 | 
			NULL
			 | 
			Paris
			 | 
		 
		
			| S2
			 | 
			P1
			 | 
			200
			 | 
			London
			 | 
		 
		
			| S3
			 | 
			P1
			 | 
			1000
			 | 
			Rome
			 | 
		 
		
			| S3
			 | 
			P2
			 | 
			200
			 | 
			Rome
			 | 
		 
	 
 
Note: this is an example of a query joining 2 tables. See
Joining Tables.
  
 
 FROM Clause  
The FROM clause always follows the SELECT clause. It lists the tables accessed 
by the query. For example,
 
When the From List contains multiple tables, commas separate the table names. 
For example,
 
	
SELECT sp.*, city
FROM sp, s
WHERE sp.sno=s.sno
  
 
When the From List has multiple tables, they must be joined together. See
Joining Tables.
  Correlation Names 
Like columns in the select list, tables in the from list can be renamed by 
following the table name with the new name. For example,
 
	
SELECT supplier.name FROM s supplier
  
 
The new name is known as the correlation (or range) name for the table.
Self joins require 
correlation names.
  
 
 WHERE Clause  
The WHERE clause is optional. When specified, it always follows the FROM clause. 
The WHERE clause filters rows from the FROM clause tables. Omitting the WHERE 
clause specifies that all rows are used.
 Following the WHERE keyword is a logical expression, also known as a 
predicate.  
The predicate evaluates to a SQL logical value -- true, false 
or unknown. The most basic predicate is a comparison:  
This predicate returns:
 
	- true -- if the color column contains the string value -- 'Red', 
	
 
	- false -- if the color column contains another string value (not 
	'Red'), or 
 
	- unknown -- if the color column contains null.
	
 
 
Generally, a comparison expression compares the contents of a table column to a 
literal, as above. A comparison expression may also compare two columns to each 
other. Table joins use this type of comparison. See
Joining Tables.
 The = (equals) comparison operator compares two values for equality. 
Additional comparison operators are:  
	- > -- greater than 
 
	- < -- less than 
 
	- >= -- greater than or equal to 
 
	- <= -- less than or equal to 
 
	- <> -- not equal to
	
 
 
For example,
 
	
SELECT * FROM sp WHERE qty >= 200
  
 
 
	
		
			| sno
			 | 
			pno
			 | 
			qty
			 | 
		 
		
			| S2
			 | 
			P1
			 | 
			200
			 | 
		 
		
			| S3
			 | 
			P1
			 | 
			1000
			 | 
		 
		
			| S3
			 | 
			P2
			 | 
			200
			 | 
		 
	 
 
Note: In the sp table, the qty column for one of the rows contains
null. The comparison - qty >= 200, evaluates to unknown for 
this row. In the final result of a query, rows with a WHERE clause evaluating to
unknown (or false) are eliminated (filtered out).
 Both operands of a comparison should be the same data type, however automatic 
conversions are performed between numeric, datetime and interval types. The CAST 
expression provides explicit type conversions; see
Expressions.  
 Extended Comparisons 
In addition to the basic comparisons described above, SQL supports extended 
comparison operators -- 
BETWEEN, IN,
LIKE and
IS NULL.
 
	- BETWEEN Operator
	
The BETWEEN operator implements a range comparison, that is, it tests 
	whether a value is between two other values. BETWEEN comparisons have 
	the following format:
	 
		
value-1 [NOT] BETWEEN value-2 AND value-3
  
	 
	This comparison tests if value-1 is greater than or equal to 
	value-2 and less than or equal to value-3. It is 
	equivalent to the following predicate:
	 
		
value-1 >= value-2 AND value-1 <= value-3
  
	 
	Or, if NOT is included:
	 
		
NOT (value-1 >= value-2 AND value-1 <= value-3)
  
	 
	For example,
	 
		
SELECT *
FROM sp
WHERE qty BETWEEN 50 and 500
  
	 
	 
		
			
				| sno
				 | 
				pno
				 | 
				qty
				 | 
			 
			
				| S2
				 | 
				P1
				 | 
				200
				 | 
			 
			
				| S3
				 | 
				P2
				 | 
				200
				 | 
			 
		 
	 
	    
	- IN Operator
	
The IN operator implements comparison to a list of values, that is, it 
	tests whether a value matches any value in a list of values. IN comparisons 
	have the following general format:
	 
		
value-1 [NOT] IN ( value-2 [, value-3] ... )
  
	 
	This comparison tests if value-1 matches value-2 or matches 
	value-3, and so on. It is equivalent to the following logical predicate:
	 
		
value-1 = value-2 [ OR value-1 = value-3 ] ...
  
	 
	or if NOT is included:
	 
		
NOT (value-1 = value-2 [ OR value-1 = value-3 ] ...)
  
	 
	For example,
	 
		
SELECT name FROM s WHERE city IN ('Rome','Paris')
 
	 
	 
	    
	- LIKE Operator
	
The LIKE operator implements a pattern match comparison, that is, it 
	matches a string value against a pattern string containing wild-card 
	characters.  
	The wild-card characters for LIKE are percent -- '%' and underscore -- 
	'_'. Underscore matches any single character. Percent matches zero or 
	more characters.  
	Examples,  
	  
	
		
			| Match Value
			 | 
			Pattern
			 | 
			Result
			 | 
		 
		
			| 'abc'
			 | 
			'_b_'
			 | 
			True
			 | 
		 
		
			| 'ab'
			 | 
			'_b_'
			 | 
			False
			 | 
		 
		
			| 'abc'
			 | 
			'%b%'
			 | 
			True
			 | 
		 
		
			| 'ab'
			 | 
			'%b%'
			 | 
			True
			 | 
		 
		
			| 'abc'
			 | 
			'a_'
			 | 
			False
			 | 
		 
		
			| 'ab'
			 | 
			'a_'
			 | 
			True
			 | 
		 
		
			| 'abc'
			 | 
			'a%_'
			 | 
			True
			 | 
		 
		
			| 'ab'
			 | 
			'a%_'
			 | 
			True
			 | 
		 
	 
 
	LIKE comparison has the following general format:
	 
		
value-1 [NOT] LIKE value-2 [ESCAPE value-3]
  
	 
	All values must be string (character). This comparison uses value-2 
	as a pattern to match value-1. The optional ESCAPE sub-clause 
	specifies an escape character for the pattern, allowing the pattern to use 
	'%' and '_' (and the escape character) for matching. The ESCAPE value must 
	be a single character string. In the pattern, the ESCAPE character precedes 
	any character to be escaped.
	 For example, to match a string ending with '%', use:
	 
	A more contrived example that escapes the escape character:
	 
		
y LIKE '/%//%' ESCAPE '/'
  
	 
	... matches any string beginning with '%/'.
	 The optional NOT reverses the result so that:
	 
	is equivalent to:
	 
	    
	- IS NULL Operator
	
A database null in a table column has a special meaning -- the 
	value of the column is not currently known (missing), however its value may 
	be known at a later time. A database null may represent any value in 
	the future, but the value is not available at this time. Since two null 
	columns may eventually be assigned different values, one null can't 
	be compared to another in the conventional way. The following syntax is 
	illegal in SQL:
	 
	A special comparison operator -- IS NULL, tests a column for null. It 
	has the following general format:
	 
	This comparison returns true if value-1 contains a null and 
	false otherwise. The optional NOT reverses the result:
	 
	is equivalent to:
	 
	For example,
	 
		
SELECT * FROM sp WHERE qty IS NULL
  
	 
	 
	  
 
  Logical Operators 
The logical operators are AND,
OR,
NOT. They take logical 
expressions as operands and produce a logical result (True, False, Unknown). In 
logical expressions, parentheses are used for grouping.
 
	- AND Operator
	
The AND operator combines two logical operands. The operands are 
	comparisons or logical expressions. It has the following general format:
	 
		
predicate-1 AND predicate-2
  
	 
	AND returns:
	   
		- True -- if both operands evaluate to true 
 
		- False -- if either operand evaluates to false 
 
		- Unknown -- otherwise (one operand is true and the other is unknown 
		or both are unknown)
		
 
	 
	 Truth tables for AND:  
	  
	
		
			
			
				
					| AND
					 | 
					 T 
					 | 
					 F 
					 | 
					 U 
					 | 
				 
				
					|  T 
					 | 
					 T 
					 | 
					 F 
					 | 
					 U 
					 | 
				 
				
					|  F 
					 | 
					 F 
					 | 
					 F 
					 | 
					 F 
					 | 
				 
				
					|  U 
					 | 
					 U 
					 | 
					 F 
					 | 
					 U 
					 | 
				 
			 
			 | 
			
			
				
					| Input 1 | 
					Input 2 | 
					AND Result | 
				 
				
					| True | 
					True | 
					True | 
				 
				
					| True | 
					False | 
					False | 
				 
				
					| False | 
					False | 
					False | 
				 
				
					| False | 
					True | 
					False | 
				 
				
					| Unknown | 
					Unknown | 
					Unknown | 
				 
				
					| Unknown | 
					True | 
					Unknown | 
				 
				
					| Unknown | 
					False | 
					False | 
				 
				
					| True | 
					Unknown | 
					Unknown | 
				 
				
					| False | 
					Unknown | 
					False | 
				 
			 
			 | 
		 
	 
 
	For example,
	 
		
SELECT *
FROM sp
WHERE sno='S3' AND qty < 500
  
	 
	 
	    
	- OR Operator
	
The OR operator combines two logical operands. The operands are 
	comparisons or logical expressions. It has the following general format:
	 
		
predicate-1 OR predicate-2
  
	 
	OR returns:
	   
		- True -- if either operand evaluates to true 
 
		- False -- if both operands evaluate to false 
 
		- Unknown -- otherwise (one operand is false and the other is unknown 
		or both are unknown)
		
 
	 
	 Truth tables for OR:  
	  
	
		
			
			
				
					| OR
					 | 
					 T 
					 | 
					 F 
					 | 
					 U 
					 | 
				 
				
					|  T 
					 | 
					 T 
					 | 
					 T 
					 | 
					 T 
					 | 
				 
				
					|  F 
					 | 
					 T 
					 | 
					 F 
					 | 
					 U 
					 | 
				 
				
					|  U 
					 | 
					 T 
					 | 
					 U 
					 | 
					 U 
					 | 
				 
			 
			 | 
			
			
				
					| Input 1 | 
					Input 2 | 
					OR Result | 
				 
				
					| True | 
					True | 
					True | 
				 
				
					| True | 
					False | 
					True | 
				 
				
					| False | 
					False | 
					False | 
				 
				
					| False | 
					True | 
					True | 
				 
				
					| Unknown | 
					Unknown | 
					Unknown | 
				 
				
					| Unknown | 
					True | 
					True | 
				 
				
					| Unknown | 
					False | 
					Unknown | 
				 
				
					| True | 
					Unknown | 
					True | 
				 
				
					| False | 
					Unknown | 
					Unknown | 
				 
			 
			 | 
		 
	 
 
	For example,
	 
		
SELECT *
FROM s
WHERE sno='S3' OR city = 'London'
  
	 
	 
		
			
				| sno
				 | 
				name
				 | 
				city
				 | 
			 
			
				| S2
				 | 
				John
				 | 
				London
				 | 
			 
			
				| S3
				 | 
				Mario
				 | 
				Rome
				 | 
			 
		 
	 
	 AND has a higher precedence than OR, so the following expression:
	 
	is equivalent to:
	 
	  
	- NOT Operator
	
The NOT operator inverts the result of a comparison expression or a 
	logical expression. It has the following general format:
	 
	 Truth tables for NOT:  
	  
	
		
			| 
			
			 | 
			
			
				
					| Input | 
					NOT Result | 
				 
				
					| True | 
					False | 
				 
				
					| False | 
					True | 
				 
				
					| Unknown | 
					Unknown | 
				 
			 
			 | 
		 
	 
 
	Example query:
	 
		
SELECT *
FROM sp
WHERE NOT sno = 'S3'
  
	 
	 
		
			
				| sno
				 | 
				pno
				 | 
				qty
				 | 
			 
			
				| S1
				 | 
				P1
				 | 
				NULL
				 | 
			 
			
				| S2
				 | 
				P1
				 | 
				200 | 
			 
		 
	 
	  
 
  |