Introduction to Databases
Structured Query Language
Prof. Beat Signer
Department of Computer Science
Vrije Universiteit Brussel
http://vub.academia.edu/BeatSigner
2 December 2005
Context of Today's Lecture
Programmers Users DB Admins
Application Database
Queries
Programs Schema
DBMS
DML Query DDL
Preprocessor Compiler Compiler
Program Authorisation Catalogue
Object Code Control Manager
Integrity Command Query
Checker Processor Optimiser
Transaction
Scheduler
Manager
Data
Manager Buffer Recovery
Manager Manager
Database
Manager
Access File
Methods Manager
System Database and
Based on 'Components of a DBMS', Database Systems,
Buffers System Catalog
T. Connolly and C. Begg, Addison-Wesley 2010
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 2
Structured Query Language (SQL)
Declarative query language to create database schemas,
insert, update and query information based on a data
definition and data manipulation language
Data definition language (DDL)
definition of database structure
data access control
Data manipulation language (DML)
query language to read data as well as commands to create,
update and delete tuples (CRUD operations)
Transaction control
Embedded SQL and dynamic SQL
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 3
History of SQL
SEQUEL (70's)
structured english query language
developed by Raymond F. Boyce and Donald D. Chamberlin
- access data stored in IBM's System R relational database
SQL-86
first ANSI standard version
SQL-89 / SQL 1
SQL-92 / SQL 2
we will mainly discuss features of the SQL-92 standard
SQL:1999 / SQL 3
recursive queries, triggers, object-oriented features, ...
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 4
History of SQL ...
SQL:2003
window functions, XML-related features, ...
SQL:2006
XML Query Language (XQuery) support, ...
SQL:2008
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 5
SQL "Standard"
Each specific SQL implementation by a database vendor
is called a dialect
The vendors implement parts of the SQL standard
(e.g. most implement SQL-92) but add their vendor
specific extensions
Most relational database vendors conform to a set of
Core SQL features but portability might still be limited
due to missing or additional features
We will use the Extended Backus–Naur Form (EBNF) to
describe different SQL concepts
http://en.wikipedia.org/wiki/Extended_Backus-Naur_Form
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 6
Data Definition Language (DDL)
The data definition language (DDL) is used to specify the
relation schemas as well as other information about the
relations
relation schemas
attribute domain types
integrity constraints
relation indices
access information
physical storage structure of relations
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 7
Database Creation
The concrete process of creating a new database might
differ for different relational database products
According to the SQL standard, an SQL environment
contains one ore more catalogues
Each catalogue manages various metadata
set of schemas consisting of
- tables
- views
- assertions
- indexes
users and user groups
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 8
Database Creation ...
The creation of catalogues is not covered by the SQL
standard and therefore implementation specific
Schemas can be created and deleted via the CREATE and
DROP statements
createSchema = "CREATE SCHEMA" , name , "AUTHORIZATION" , creator ,
[ ddlStatements ];
dropSchema = "DROP SCHEMA" , name , [ "RESTRICT" | "CASCADE" ];
The default parameter in the DROP SCHEMA statement is
RESTRICT
only empty schema can be deleted
If CASCADE is specified, all objects associated with the
schema will be dropped
March 11, 2010 Beat Signer - Department of Computer Science -
[email protected] 9
Table Definition
createTable = "CREATE TABLE" , table , "(" ,
( columnElement | tableConstraint ) ,
{ "," , ( columnElement | tableConstraint ) } , ")";
columnElement = column , datatype ,
[ "DEFAULT" , ( value | "NULL" ) ] , { columnConstraint };
columnConstraint = "NOT NULL" | "UNIQUE" | "PRIMARY KEY" |
( "REFERENCES" , table , [ "(" , column , ")" ] ,
{ referentialAction } ) |
( "CHECK (" , searchCondition , ")" );
tableConstraint = ( ( "UNIQUE" | "PRIMARY KEY ) , "(" , column ,
{ "," , column } , ")" ) |
( "FOREIGN KEY (" , column , { "," , column } , ")" ,
"REFERENCES" , table , [ "(" , column , { "," , column } , ")" ] ,
{ referentialAction } ) |
( "CHECK (" , searchCondition , ")" );
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 10
Table Definition ...
referentialAction = ( "ON UPDATE" | "ON DELETE" ) ,
( "CASCADE" | "SET DEFAULT" | "SET NULL" | "NO ACTION" );
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 11
Table Constraints
We can have only one PRIMARY KEY constraint but
multiple UNIQUE constraints
if no primary key is defined, duplicates are allowed (bag)
Referential integrity
a foreign key always has to have a matching value in the
referenced table (or it can be null)
different referential actions can be defined for update (ON UPDATE)
and delete (ON DELETE) operations on the referenced candidate
key
- CASCADE: propagate operations to the foreign keys which might lead to further
cascaded operations
- SET DEFAULT: set the foreign keys to their default value
- SET NULL: set the foreign keys to NULL
- NO ACTION: the operation on the candidate key will be rejected (default)
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 12
SQL Datatypes
Boolean
the domain of boolean values consist of the two truth values TRUE
and FALSE
a thrid UNKNOWN truth value is used to represent NULL values
boolean = "BOOLEAN";
Bit data
fixed or varying sequence of binary digits (0 or 1)
bit = fixedBit | varyingBit;
fixedBit = "BIT" , [ "(" , length , ")" ];
varyingBit = "BIT VARYING" , [ "(" , length , ")" ];
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 13
SQL Datatypes ...
Character data
fixed or varying sequence of characters
CHAR always requires the fixed number of characters
char = fixedChar | varyingChar;
fixedChar = "CHAR" , [ "(" , length , ")" ];
varyingChar = "VARCHAR" , [ "(" , length , ")" ];
Large character data or binary data
lob = clob | blob;
clob = "CLOB" , [ "(" , size , ")" ];
blob = "BLOB" , [ "(" , size , ")" ];
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 14
SQL Datatypes ...
Numeric data
numeric = decimal | int | smallInt | float | real | double;
decimal = "DECIMAL" , [ "(" , precision , [ "," , scale ] , ")" ];
int = "INTEGER";
smallInt = "SMALLINT";
float = "FLOAT" , [ "(" , precision , ")" ];
real = "REAL";
double = "DOUBLE PRECISION";
The DECIMAL datatype is sometimes used as synonym for
the NUMERIC datatype
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 15
SQL Datatypes ...
Datetime data
datetime = date | time | timestamp;
date = "DATE";
time = "TIME" , [ "(" , precision , ")" ] ,
[ "WITH TIME ZONE" , timezone ];
timestamp = "TIMESTAMP" , [ "(" , precision , ")" ] ,
[ "WITH TIME ZONE" , timezone ];
Format of the datetime values
date: YYYY-MM-DD
time: hh:mm:ss.p ± hh:mm
timestamp: YYYY-MM-DD hh:mm:ss.p ± hh:mm
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 16
SQL Datatypes ...
For further details about the presented datatypes as well
as information about vendor-specific datatypes one has
to consult the specific database manuals
datatype = boolean | bit | char | numeric | datetime | lob;
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 17
Example Database
customer
customerID name street postcode city
1 Urs Frei Bahnhofstrasse 7 8001 Zurich
2 Pieter de Rover Pleinlaan 25 1050 Brussels
5 Robert Michelin 12 Rue Louise 75008 Paris
53 Beat Meier Bergstrasse 18 8037 Zurich
8 Urs Frei ETH Zentrum 8092 Zurich
cd
cdID name duration price year
93 Falling into Place 2007 17.90 2007
117 Moudi 3156 15.50 1996
3 Chromatic 3012 16.50 1996
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 18
Example Database
order
orderID customerID cdID date amount status
1 53 93 13.02.2010 2 open
2 2 117 15.02.2010 1 delivered
supplier
supplierID name postcode city
5 Urs Frei 8040 Zurich
2 Franz Hohler 5000 Aarau
Customer (customerID, name, street, postcode, city)
CD (cdID, name, duration, price, year)
Order (orderId, customerID, cdID, date, amount, status)
Supplier (supplierID, name, postcode, city)
relational database schema
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 19
Table Definition Example
CREATE TABLE Customer (
customerID INTEGER CHECK (customerID > 0) PRIMARY KEY,
name VARCHAR(30) NOT NULL,
street VARCHAR(30) NOT NULL,
postcode SMALLINT CHECK (postcode > 0),
city VARCHAR(20)
);
CREATE TABLE CD (
cdID INTEGER PRIMARY KEY,
name VARCHAR(30) NOT NULL,
duration TIME,
price NUMERIC(6,2),
year SMALLINT
);
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 20
Table Definition Example ...
CREATE TABLE Supplier (
supplierID INTEGER PRIMARY KEY,
name VARCHAR(30) NOT NULL,
postcode SMALLINT CHECK (postcode > 0),
city VARCHAR(20)
);
CREATE TABLE Order (
orderID INTEGER CHECK (orderID > 0) PRIMARY KEY,
customerID INTEGER,
cdID INTEGER ,
date DATE,
amount INTEGER,
Status VARCHAR(20) NOT NULL DEFAULT 'open',
UNIQUE (customerID, cdID, date),
FOREIGN KEY (customerID) REFERENCES Customer(customerID)
ON UPDATE CASCADE ON DELETE SET NULL,
FOREIGN KEY (cdID) REFERENCES CD(cdID)
ON UPDATE CASCADE
);
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 21
Data Manipulation
After a table has been created, we can use the INSERT
command to add tuples
unspecified attribute values are set to the default value or NULL
insert = "INSERT INTO" , table ,
[ "(" , column , { "," , column } , ")" ] ,
( "VALUES (" , expr , { "," , expr } , ")" ) | ( "(" , query , ")" );
Example
INSERT INTO Customer VALUES(8, 'Urs Frei', 'ETH Zentrum', 8001, 'Zurich');
The DELETE statement can be used to delete tuples
delete = "DELETE FROM" , table [ "WHERE" , searchCondition ];
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 22
Data Manipulation ...
Tuples can be updated via the UPDATE statement
update = "UPDATE" , table , "SET" ,
column , "=" , ( "NULL" | expr | "(" , query , ")" ) ,
{ "," , column , "=" , ("NULL" | expr | "(" , query , ")" ) } ,
[ "WHERE" , searchCondition ];
Example
UPDATE Customer SET name = 'Peter Frei' WHERE customerID = 8;
The DROP TABLE statement can be used to delete a
relation from the database
dropTable = "DROP TABLE" , table;
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 23
Data Manipulation ...
A relation schema can be modified via the ALTER TABLE
command
alterTable = "ALTER TABLE" , table , "ADD" ,
( columnElement | columnConstraint );
Example
ALTER TABLE Customer ADD birthdate DATE;
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 24
Data Manipulation ...
The CREATE INDEX statement can be used to create an
index
an index provides fast access to data without reading the whole
relation
the selection of the best index attributes is very challenging
- tradeoff between the faster access to indexed data and the additional effort to
maintain the indices when updating or inserting new data
createIndex = "CREATE INDEX" , name , "ON" , table, "(" , column ,
{ "," , column} , ")";
Example
CREATE INDEX nameIndex ON Customer (name);
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 25
Expressions
expr = exprElement { ( "+" | "-" | "*" | "/" ) , exprElement };
exprElement = column | value |
"COUNT" , "(" ( "*" | ( [ "ALL" | "DISTINCT" ] , column ) , ")" |
( "MIN" | "MAX" ) , "(" , expr , ")" |
( "SUM" | "AVG" ) , "(" , [ "DISTINCT" ] , expr , ")";
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 26
SELECT Clause
query = select { ("UNION" | "INTERSECT" | "EXCEPT") , [ "ALL" ] , select};
select = "SELECT" [ "ALL" | "DISTINCT" ] ,
("*" | ( expr , [ "AS" , newName ] ,
{ "," , expr , [ "AS" , newName ] } ) ,
"FROM" , table , [ correlationVar ] ,
{ "," , table , [ correlationVar ] } ,
[ "WHERE" , searchCondition ] ,
[ "GROUP BY" , column , { "," , column } ,
[ "HAVING" , searchCondition ] ];
orderedQuery = query , "ORDER BY" , column , [ "ASC" | "DESC" ] ,
{ "," , column , [ "ASC" | "DESC" ] };
The SELECT statement can be used to retrieve
information from one or multiple database tables
can perform the relational algebra's selection, projection and join
operation in a single SELECT command
March 11, 2010 Beat Signer - Department of Computer Science -
[email protected] 27
SELECT Clause ...
searchCondition = [ "NOT" ] , search ,
{ ( "AND" | "OR" ) , [ "NOT" ] , search };
search = ( expr , [ "NOT" ] , "BETWEEN" , expr , "AND" , expr ) |
( expr , [ "NOT" ] , "LIKE" , "'" , ( string | "_" | "%" ) ,
{ string | "_" | "%" } , "'" ) |
( column | ( "(" , expr , ")" ) , "IS" , [ "NOT" ] , "NULL" ) |
( expr , ( "=" | "<>" | ">" | ">=" | "<" | "<=" ) , ( expr |
( [ "SOME" | "ALL" ] , "(" , query , ")" ) ) ) |
( expr , [ "NOT" ] , "IN (" ,
( ( value , { "," , value } ) | query ) , ")" |
( "EXISTS (" , query , ")";
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 28
SELECT Clause ...
The SELECT statement contains the following main
components
SELECT
- specifies the columns to appear in the result (projection in relational algebra)
FROM
- specifies the relations to be used (cartesian product in relational algebra)
WHERE
- filters the tuples (selection in relational algebra)
- join conditions are explicitly specified in the WHERE clause
GROUP BY
- groups rows with the same column values
- the HAVING construct can be used to further filter the groups
ORDER BY
- defines the order of the resulting tuples
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 29
SELECT Clause ...
The order of clauses in the SELECT statement cannot be
changed
Note that the SELECT is equivalent to a relational algebra
projection
SELECT A1, A2,..., An pA1,A2,...,An(sP(r1 r2 ... rm)
FROM r1, r2,..., rm is equivalent to
WHERE P
In contrast to the relational algebra, SQL does not
eliminate duplicates automatically
the automatic elimination of duplicates is time consuming
user has to eliminate duplicates explicitly via DISTINCT keyword
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 30
SELECT Clause ...
SELECT *
FROM Customer;
customerID name street postcode city
1 Urs Frei Bahnhofstrasse 7 8001 Zurich
2 Pieter de Rover Pleinlaan 25 1050 Brussels
5 Robert Michelin 12 Rue Louise 75008 Paris
53 Beat Meier Bergstrasse 18 8037 Zurich
8 Urs Frei ETH Zentrum 8092 Zurich
A '*' can be used in the SELECT clause as a shortcut to
get all tuple attributes
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 31
SELECT Clause ...
SELECT name
FROM Customer;
name
Urs Frei
Pieter de Rover
Robert Michelin
Beat Meier
Urs Frei
Duplicate tuples resulting from a projection to specific
attributes are not eliminated by default
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 32
SELECT Clause ...
SELECT DISTINCT name
FROM Customer;
name
Urs Frei
Pieter de Rover
Robert Michelin
Beat Meier
The DISTINCT keyword can be used to eliminate
duplicates
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 33
Computed Attributes and Rename
SELECT name, price * 1.5 AS newPrice
FROM CD;
name newPrice
Falling into Place 26.85
Moudi 23.20
Chromatic 24.75
Computations can be performed in the SELECT clause
multiple numeric attributes can be used in a computation
The rename operation (AS) is used to rename relations
as well as attributes
computed column has no name by default
also used when multiple relations have the same attribute names
March 11, 2010 Beat Signer - Department of Computer Science -
[email protected] 34
WHERE Clause
In the WHERE clause we can use five basic predicates
(search conditions)
comparison
- compare two expressions
range
- check whether the value is within a specified range of values (BETWEEN)
set membership
- check whether the value is equal to a value of a given set (IN)
pattern matching
- test whether the expression matches a specifies string pattern (LIKE)
check for NULL values
- check whether the expression is a NULL value (IS NULL)
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 35
WHERE Clause ...
SELECT name, postcode
FROM Customer
WHERE city = 'Zurich' AND postcode >= 8040;
name postcode
Urs Frei 8092
SELECT name, price
FROM CD
WHERE price BETWEEN 15.0 AND 17.0;
name price
Moudi 15.50
Chromatic 16.50
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 36
WHERE Clause ...
Check for set membership with the IN construct
SELECT *
FROM Customer
WHERE city IN ('Zurich', 'Brussels');
customerID name street postcode city
1 Urs Frei Bahnhofstrasse 7 8001 Zurich
2 Pieter de Rover Pleinlaan 25 1050 Brussels
53 Beat Meier Bergstrasse 18 8037 Zurich
8 Urs Frei ETH Zentrum 8092 Zurich
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 37
Pattern Matching
Strings are enclosed in single quotes
use a double single quote for escaping
The LIKE operator is used for pattern matching
the underscore (_) is a placeholder for a single character
the percent sign (%) is a placeholder for any substring
e.g. LIKE '_e%'
SELECT DISTINCT name
FROM Customer
WHERE name LIKE '%ei%';
name
Urs Frei
Beat Meier
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 38
Null Values
In SQL missing (unknown) information is represented by
NULL values
three-valued logic (3VL) based on True, False and Unknown
AND OR
True False Unknown True False Unknown
True True False Unknown True True True True
False False False False False True False Unknown
Unknown Unknown False Unknown Unknown True Unknown Unknown
= NOT
True False Unknown True False Unknown
True True False Unknown False True Unknown
False False True Unknown
Unknown Unknown Unknown Unknown
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 39
Null Values ...
The NULL keyword can also be used in predicates to
check for null values
SELECT *
FROM CD
WHERE price IS NOT NULL;
cdID name duration price year
1 Falling into Place 2007 17.90 2007
2 Moudi 3156 15.50 1996
3 Chromatic 3012 16.50 1996
Note that a check for NULL is not the same as a check for
the empty String ''
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 40
FROM Clause
The FROM clause creates a cartesian product of multiple
relations and can be used to specify join operations
In a previous lecture we have seen the following
relational algebra expression
- "list the name and street of customers whose order is still open"
- pname, street(sstatus="open"(order ⋈ customer))
- the same can be achieved in SQL by explicitly specifying the matching attributes
SELECT name, street
FROM Customer, Order
WHERE Order.customerID = Customer.customerID AND status = 'open';
name street
Beat Meier Bergstrasse 18
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 41
Inner and Outer Joins
Note that there exist SQL extensions to perform join
operations between two relations R and S in the FROM
clause
Inner Joins
SELECT * FROM R NATURAL JOIN S;
SELECT * FROM R CROSS JOIN S;
SELECT * FROM R JOIN S ON R.A > S.B;
Outer Joins
SELECT * FROM R LEFT OUTER JOIN S ON R.A = S.B;
SELECT * FROM R RIGHT OUTER JOIN S ON R.A = S.B;
SELECT * FROM R FULL OUTER JOIN S ON R.A = S.B;
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 42
Correlation Variable
A correlation variable can be used as an alias for a table
Example
"Find all pairs of CDs that were produced in the same year"
SELECT c1.name AS name1, c2.name AS name2
FROM CD c1, CD c2
WHERE c1.year = c2.year AND c1.cdID < c2.cdID;
name1 name2
Moudi Chromatic
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 43
Sorting
The ORDER BY clause can be used to arrange the result
tuples in acending (ASC) or descending (DESC) order
multiple sort keys can be specified; highest priority first
tuples with NULL values are either before or after non-NULL tuples
SELECT name, street, city
FROM Customer
ORDER BY city ASC, name DESC;
name street city
Pieter de Rover Pleinlaan 25 Brussels
Robert Michelin 12 Rue Louise Paris
Urs Frei ETH Zentrum Zurich
Urs Frei Bahnhofstrasse 7 Zurich
Beat Meier Bergstrasse 18 Zurich
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 44
Set Operations
The UNION, INTERSECT and EXCEPT operations correspond
to the , and - relational algebra operations
the relations have to be compatible (same attributes)
these operations remove duplicates by default
- the ALL keyword has to be used to retain duplicates
(SELECT name
FROM Customer)
INTERSECT
(SELECT name
FROM Supplier);
name
Urs Frei
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 45
Aggregate Functions and Grouping
In SQL there are five aggregate functions (MIN, MAX, AVG,
SUM and COUNT) that take a set or multiset of values as
input and return a single value
Example
"Find the number of customers in each city"
city number
SELECT city, COUNT(customerID) AS number
Zurich 3
FROM Customer
GROUP BY city; Brussels 1
Paris 1
Aggregate functions (except COUNT(*)) ignore NULL
values in the input set
input set might be empty in which case NULL is returned
March 11, 2010 Beat Signer - Department of Computer Science -
[email protected] 46
Subqueries
A subquery is a SELECT FROM WHERE expression that is
nested within another query
e.g. via check for set membership (IN or NOT IN)
Example
"Find all the suppliers who are no customers"
SELECT DISTINCT name
FROM Supplier
WHERE name NOT IN (SELECT name
FROM Customer);
name
Franz Hohler
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 47
Nested Subqueries ...
Example
"Find all CDs with a price smaller than average"
SELECT *
FROM CD
WHERE price < (SELECT AVG(price)
FROM CD;
cdID name duration price year
2 Moudi 3156 15.50 1996
3 Chromatic 3012 16.50 1996
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 48
Set Comparison
For nested queries with conditions like "greater than at
least one" we can use these set comparison operators
> SOME, >= SOME, < SOME, <= SOME, = SOME, <> SOME as well as the
same combination with ALL
Example
"Find the customers with a postcode greater than all supplier postcodes"
SELECT name ,postcode
FROM Customer
WHERE postcode > ALL (SELECT postcode
FROM Supplier);
name postcode
Robert Michelin 75008
Urs Frei 8092
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 49
Existence Test
The EXISTS operator can be used to check if a tuple
exists in a subquery
Example
SELECT name
FROM Customer
WHERE EXISTS (SELECT *
FROM Supplier
WHERE Supplier.name = Customer.name);
name
Urs Frei
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 50
Derived Relations
As subquery expression can also be used in the FROM
clause
in this case a name has to be given to the relation
Example
"Find the number of customers in the city with the most
customers"
SELECT MAX(noCustomers) AS max
FROM (SELECT city, COUNT(customerID)
FROM Customer
GROUP BY city) AS CityTotal(city,noCustomers);
max
3
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 51
WITH Clause
The WITH clause can be used to improve the readability
by introducing temporary new relations
introduced only in SQL:1999 and not supported by all databases
Example
"Find all customers who bought one of the most expensive CDs"
WITH Expensive(price) AS
SELECT MAX(price)
FROM CD
SELECT Customer.name
FROM Customer, CD, Order
WHERE CD.price = Expensive.price AND CD.cdID = Order.cdID AND
Order.customerID = Customer.customerID;
name
Beat Meier
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 52
Views
New virtual relations (views) can be defined on top of an
existing logical model
simplify queries
provide access to only parts of the logical model (security)
Some DBMS allow views to be stored (materialised
views)
materialised views have to be updated when its relations change
createView = "CREATE VIEW" , table ,
[ "(" , column , { "," , column } , ")" ] ,
"AS" , query;
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 53
Views
Example
CREATE VIEW CustomerCD AS
SELECT Customer.customerID, Customer.name, CD.cdID, CD.name AS cdName
FROM Customer, Order, CD
WHERE Customer.customerID = Order.customerID AND
Order.cdID = CD.cdID;
Note that a view can be used like any other relation
Views are useful for queries but they present a serious
problem for UPDATE, INSERT and DELETE operations
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 54
Transactions
A transaction consists of a sequence of query and/or
update statements
A transaction explicitly starts when an SQL statement is
executed and is ended by
a COMMIT statement
a ROLLBACK statement
In many SQL implementations each SQL statement is a
transaction on its own
this default behaviour can be disabled
SQL:1999 introduced BEGIN ATOMIC ... END blocks
Transactions will be discussed in detail later
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 55
Homework
Study the following chapter of the
Database System Concepts book
chapter 3
- SQL
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 56
Exercise 5
Structured Query Language (SQL)
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 57
References
A. Silberschatz, H. Korth and S. Sudarshan, Database
System Concepts (Fifth Edition), McGraw-Hill, 2005
March 11, 2010 Beat Signer - Department of Computer Science - [email protected] 58
Next Week
Advanced SQL
2 December 2005