Sunteți pe pagina 1din 61

Introduction to Databases

Structured Query Language

Prof. Beat Signer

Department of Computer Science


Vrije Universiteit Brussel

http://www.beatsigner.com

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 Catalogue
T. Connolly and C. Begg, Addison-Wesley 2010

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 2


Structured Query Language (SQL)
 Declarative query language to create database schemas,
insert, update, delete and query information based on a
data definition and data manipulation language
 Data definition language (DDL)
 definition of database structure (relation schemas)
 data access control
 Data manipulation language (DML)
 query language to create, read, update and delete tuples
(CRUD operations)

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 3


Structured Query Language (SQL) ...
 The SQL language further deals with the following issues
 transaction control
 integrity constraints (DDL)
 auhorisation (DDL)
 views (DDL)
 embedded SQL and dynamic SQL

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 4


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 Donald D. Chamberlin Raymond F. Boyce
 first ANSI standard version
 SQL-89 / SQL 1
 SQL-92 / SQL 2
 we will mainly discuss features of the SQL-92 standard

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 5


History of SQL ...
 SQL:1999 / SQL 3
 recursive queries, triggers, object-oriented features, ...
 SQL:2003
 window functions, XML-related features, ...
 SQL:2006
 XML Query Language (XQuery) support, ...
 SQL:2008
 SQL:2011
 improved support for temporal databases

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 6


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

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 7


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 indexes
 access information
 physical storage structure of relations

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 8


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 or more catalogues
 Each catalogue manages various metadata
 set of schemas consisting of
environment
- relations/tables
catalogue catalogue
- views
schema schema
- assertions
- indexes schema

 SET SCHEMA name can be used to


set the current schema
 users and user groups
March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 9
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 of 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 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 10
Extended Backus-Naur Form (EBNF)
 Notation to describe computer program-
ming languages (context-free grammars)
 developed by Niklaus Wirth
Notation Meaning
= Definition
, Sequence
; Termination Niklaus Wirth
| Choice
[...] Option
 We use the EBNF
{...} Repetition
(...)
to describe different
Grouping
"..." Terminal String
SQL concepts
http://en.wikipedia.org/wiki/Extended_Backus-Naur_Form

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 11


Relational Database Example
customer
customerID name street postcode city
1 Max Frisch Bahnhofstrasse 7 8001 Zurich
2 Eddy Merckx Pleinlaan 25 1050 Brussels
5 Claude Debussy 12 Rue Louise 75008 Paris
53 Albert Einstein Bergstrasse 18 8037 Zurich
8 Max Frisch ETH Zentrum 8092 Zurich

cd
cdID name duration price year
1 Falling into Place 2007 17.90 2007
2 Carcassonne 3156 15.50 1993
3 Chromatic 3012 16.50 1993

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 12


Relational Database Example ...
order
orderID customerID cdID date amount status
1 53 2 13.02.2010 2 open
2 2 1 15.02.2010 1 delivered

supplier
supplierID name postcode city
5 Max Frisch 8037 Zurich
2 Mario Botta 6901 Lugano

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 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 13


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 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 14


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 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 15


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 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 16


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 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 17


Table Definition ...
referentialAction = ( "ON UPDATE" | "ON DELETE" ) ,
( "CASCADE" | "SET DEFAULT" | "SET NULL" | "NO ACTION" );

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 18


SQL Datatypes
 Character data
 fixed-length or variable-length sequence of characters
 optional multibyte character sets (e.g. for Japanese etc.)
char = fixedChar | varyingChar [charSet];
fixedChar = "CHAR" , [ "(" , length , ")" ];
varyingChar = "VARCHAR" , [ "(" , maxLength , ")" ];
charSet = "CHARACTER SET" charSetName;

 Large character data or binary data


 often a so-called locator is returned to access a large object in
pieces instead of loading the entire object into memory
lob = clob | blob;
clob = "CLOB" , [ "(" , size , ")" ];
blob = "BLOB" , [ "(" , size , ")" ];

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 19


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 a synonym


for the NUMERIC datatype

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 20


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 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 21


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
 introduced in SQL:1999
boolean = "BOOLEAN";

 Bit data
 fixed or varying sequence of binary digits (0 or 1)
bit = fixedBit | varyingBit;
fixedBit = "BIT" , [ "(" , length , ")" ];
varyingBit = "BIT VARYING" , [ "(" , maxLength , ")" ];

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 22


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 = char | lob | numeric | datetime | boolean | bit;

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 23


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
 attribute order can be changed via optional column names
 "bulk loader" utilities to insert large amounts of tuples
insert = "INSERT INTO" , table ,
[ "(" , column , { "," , column } , ")" ] ,
( "VALUES (" , expr , { "," , expr } , ")" ) | ( "(" , query , ")" );

 Example
INSERT INTO Customer VALUES(8,'Max Frisch','ETH Zentrum', 8001, 'Zurich');

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 24


Expressions
expr = exprElement { ( "+" | "-" | "*" | "/" ) , exprElement };

exprElement = column | value |


"COUNT" , "(" ( "*" | ( [ "ALL" | "DISTINCT" ] , column ) , ")" |
( "MIN" | "MAX" ) , "(" , expr , ")" |
( "SUM" | "AVG" ) , "(" , [ "DISTINCT" ] , expr , ")";

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 25


Data Manipulation ...
 The DELETE statement can be used to delete tuples
delete = "DELETE FROM" , table [ "WHERE" , searchCondition ];

 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 = 'Walter Faber' WHERE customerID = 8;

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 26


Data Manipulation ...
 The DROP TABLE statement can be used to delete a
relation from the database
dropTable = "DROP TABLE" , table;

 A relation schema can be modified via the ALTER TABLE


command
 existing tuples are assigned a NULL value for the new attribute
alterTable = "ALTER TABLE" , table , "ADD" ,
( columnElement | columnConstraint );

 Example
ALTER TABLE Customer ADD birthdate DATE;

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 27


Basic SQL Query Structure
 A basic SQL query consists of a SELECT, a FROM and a
WHERE clause
 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 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 28


Basic SQL Query Structure ...
 In general, the SELECT FROM WHERE parts are evaluated as
follows
1. generate a cartesian product of the relations listed in the FROM
clause
2. apply the predicates specified in the WHERE clause on the result
of the first step
3. for each tuple in the result of the second step output the attri-
butes (or results of expressions) specified in the SELECT clause
 The evaluation is normally optimised by a query optimiser

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 29


Basic SQL Query Structure ...
 The order of clauses in an SQL query 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 would be time consuming
 user has to eliminate duplicates explicitly via DISTINCT keyword

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 30


SELECT Clause
SELECT *
FROM Customer;

customerID name street postcode city


1 Max Frisch Bahnhofstrasse 7 8001 Zurich
2 Eddy Merckx Pleinlaan 25 1050 Brussels
5 Claude Debussy 12 Rue Louise 75008 Paris
53 Albert Einstein Bergstrasse 18 8037 Zurich
8 Max Frisch ETH Zentrum 8092 Zurich

 A '*' can be used in the SELECT clause as a shortcut to


get all tuple attributes

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 31


SELECT Clause ...
SELECT name
FROM Customer;

name
Max Frisch
Eddy Merckx
Claude Debussy
Albert Einstein
Max Frisch

 Duplicate tuples resulting from a projection to specific


attributes are not eliminated by default

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 32


SELECT Clause ...
SELECT DISTINCT name
FROM Customer;

name
Max Frisch
Eddy Merckx
Claude Debussy
Albert Einstein

 The DISTINCT keyword can be used to eliminate


duplicates

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 33


Computed Attributes and Rename
SELECT name, price * 1.5 AS newPrice
FROM CD;

name newPrice
Falling into Place 26.85
Carcassonne 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 columns have no name by default
 also used when multiple relations have the same attribute names
March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 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 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 35


WHERE Clause ...
SELECT name, postcode
FROM Customer
WHERE city = 'Zurich' AND postcode >= 8040;

name postcode
Max Frisch 8092

SELECT name, price


FROM CD
WHERE price BETWEEN 15.0 AND 17.0;

name price
Carcassonne 15.50
Chromatic 16.50

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 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 Max Frisch Bahnhofstrasse 7 8001 Zurich
2 Eddy Merckx Pleinlaan 25 1050 Brussels
53 Albert Einstein Bergstrasse 18 8037 Zurich
8 Max Frisch ETH Zentrum 8092 Zurich

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 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 '%Ein%';

name
Albert Einstein

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 38


Null Values
 Missing (unknown) info is represented by NULL values
 result of any comparison involving a NULL value is Unknown
 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 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 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 Carcassonne 3156 15.50 1993
3 Chromatic 3012 16.50 1993

 Note that a check for NULL is not the same as a check for
the empty String ''

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 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
Albert Einstein Bergstrasse 18

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 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 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 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
Carcassonne Chromatic

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 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


Eddy Merckx Pleinlaan 25 Brussels
Claude Debussy 12 Rue Louise Paris
Max Frisch ETH Zentrum Zurich
Max Frisch Bahnhofstrasse 7 Zurich
Albert Einstein Bergstrasse 18 Zurich

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 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
Max Frisch

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 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 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 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
Mario Botta

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 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 Carcassonne 3156 15.50 1993
3 Chromatic 3012 16.50 1993

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 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
Claude Debussy 75008
Max Frisch 8092

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 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
Max Frisch

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 50


Derived Relations
 A 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 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 51


Basic SQL Query Structure
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 query 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 FROM WHERE command
March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 52
Basic SQL Query Structure ...
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 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 53


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
Albert Einstein

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 54


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)
 computed by executing the query whenever the view is used
 Some DBMS allow views to be stored (materialised
views)
 materialised views have to be updated when its relations change
(view maintenance)
createView = "CREATE VIEW" , table ,
[ "(" , column , { "," , column } , ")" ] ,
"AS" , query;

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 55


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
 modifications are difficult to be propagated to the actual relations
 modifications on views are therefore generally not permitted

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 56


Transactions
 A transaction consists of a sequence of query and/or
update statements
 atomic set of 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 (automatic commit)
 this default behaviour can be disabled
 SQL:1999 introduced BEGIN ATOMIC ... END blocks
 Transactions will be discussed in detail later
March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 57
Homework
 Study the following chapters of the
Database System Concepts book
 chapter 3
- sections 3.1-3.10
- Introduction to SQL
 chapter 4
- sections 4.1-4.5 and section 4.7
- Intermediate SQL

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 58


Exercise 5
 Structured Query Language (SQL)

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 59


References
 A. Silberschatz, H. Korth and S. Sudarshan,
Database System Concepts (Sixth Edition),
McGraw-Hill, 2010
 Donald D. Chamberlin and Raymond F. Boyce,
SEQUEL: A Structured English Query Language,
Proceedings of the 1974 ACM SIGFIDET Workshop on
Data Description, Access and Control (SIGFIDET 1974),
Michigan, USA, May 1974

March 17, 2017 Beat Signer - Department of Computer Science - bsigner@vub.ac.be 60


Next Lecture
Advanced SQL

2 December 2005

S-ar putea să vă placă și