61
2 December 2005 Introduction to Databases Structured Query Language Prof. Beat Signer Prof. Beat Signer Department of Computer Science Vrije Universiteit Brussel http://www.beatsigner.com

Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Embed Size (px)

DESCRIPTION

This lecture is part of an Introduction to Databases course given at the Vrije Universiteit Brussel.

Citation preview

Page 1: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

2 December 2005

Introduction to Databases Structured Query Language

Prof. Beat Signer Prof. Beat Signer

Department of Computer Science

Vrije Universiteit Brussel

http://www.beatsigner.com

Page 2: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

2 March 14, 2014

Context of Today's Lecture

Access

Methods

System

Buffers

Authorisation

Control

Integrity

Checker

Command

Processor

Program

Object Code

DDL

Compiler

File

Manager

Buffer

Manager

Recovery

Manager

Scheduler

Query

Optimiser

Transaction

Manager

Query

Compiler

Queries

Catalogue

Manager

DML

Preprocessor

Database

Schema

Application

Programs

Database and

System Catalogue

Database

Manager

Data

Manager

DBMS

Programmers Users DB Admins

Based on 'Components of a DBMS', Database Systems,

T. Connolly and C. Begg, Addison-Wesley 2010

Page 3: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

3 March 14, 2014

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)

Page 4: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

4 March 14, 2014

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

Page 5: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

5 March 14, 2014

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

History of SQL

Donald D. Chamberlin Raymond F. Boyce

Page 6: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

6 March 14, 2014

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

Page 7: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

7 March 14, 2014

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

Page 8: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

8 March 14, 2014

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

Page 9: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

9 March 14, 2014

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

- relations/tables

- views

- assertions

- indexes

users and user groups

environment

catalogue catalogue

schema

schema schema

Page 10: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

10 March 14, 2014

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

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

createSchema = "CREATE SCHEMA" , name , "AUTHORIZATION" , creator , [ ddlStatements ]; dropSchema = "DROP SCHEMA" , name , [ "RESTRICT" | "CASCADE" ];

Page 11: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

11 March 14, 2014

Extended Backus-Naur Form (EBNF)

Notation to describe computer program-

ming languages (context-free grammars) developed by Niklaus Wirth

Notation Meaning

= Definition

, Sequence

; Termination

| Choice

[...] Option

{...} Repetition

(...) Grouping

"..." Terminal String

Niklaus Wirth

We use the EBNF

to describe different

SQL concepts

http://en.wikipedia.org/wiki/Extended_Backus-Naur_Form

Page 12: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

12 March 14, 2014

Relational Database Example

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

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

customer

cd

Page 13: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

13 March 14, 2014

Relational Database Example ...

orderID customerID cdID date amount status

1 53 2 13.02.2010 2 open

2 2 1 15.02.2010 1 delivered

order

supplierID name city

5 Max Frisch Zurich

2 Mario Botta Lugano

supplier

Customer (customerID, name, street, postcode, city) CD (cdID, name, duration, price, year) Order (orderId, customerID, cdID, date, amount, status) Supplier (supplierID, name, city)

relational database schema

Page 14: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

14 March 14, 2014

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 );

Page 15: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

15 March 14, 2014

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 );

Page 16: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

16 March 14, 2014

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)

Page 17: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

17 March 14, 2014

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 , ")" );

Page 18: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

18 March 14, 2014

Table Definition ...

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

Page 19: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

19 March 14, 2014

SQL Datatypes

Character data fixed-length or variable-length sequence of characters

optional multibyte character sets (e.g. for Japanese etc.)

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

char = fixedChar | varyingChar [charSet]; fixedChar = "CHAR" , [ "(" , length , ")" ]; varyingChar = "VARCHAR" , [ "(" , maxLength , ")" ]; charSet = "CHARACTER SET" charSetName;

lob = clob | blob; clob = "CLOB" , [ "(" , size , ")" ]; blob = "BLOB" , [ "(" , size , ")" ];

Page 20: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

20 March 14, 2014

SQL Datatypes ...

Numeric data

The DECIMAL datatype is sometimes used as a synonym

for the NUMERIC datatype

numeric = decimal | int | smallInt | float | real | double; decimal = "DECIMAL" , [ "(" , precision , [ "," , scale ] , ")" ]; int = "INTEGER"; smallInt = "SMALLINT"; float = "FLOAT" , [ "(" , precision , ")" ]; real = "REAL"; double = "DOUBLE PRECISION";

Page 21: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

21 March 14, 2014

SQL Datatypes ...

Datetime data

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

datetime = date | time | timestamp; date = "DATE"; time = "TIME" , [ "(" , precision , ")" ] , [ "WITH TIME ZONE" , timezone ]; timestamp = "TIMESTAMP" , [ "(" , precision , ")" ] , [ "WITH TIME ZONE" , timezone ];

Page 22: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

22 March 14, 2014

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

Bit data fixed or varying sequence of binary digits (0 or 1)

boolean = "BOOLEAN";

bit = fixedBit | varyingBit; fixedBit = "BIT" , [ "(" , length , ")" ]; varyingBit = "BIT VARYING" , [ "(" , maxLength , ")" ];

Page 23: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

23 March 14, 2014

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;

Page 24: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

24 March 14, 2014

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

Example

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

insert = "INSERT INTO" , table , [ "(" , column , { "," , column } , ")" ] , ( "VALUES (" , expr , { "," , expr } , ")" ) | ( "(" , query , ")" );

Page 25: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

25 March 14, 2014

Expressions

expr = exprElement { ( "+" | "-" | "*" | "/" ) , exprElement }; exprElement = column | value | "COUNT" , "(" ( "*" | ( [ "ALL" | "DISTINCT" ] , column ) , ")" | ( "MIN" | "MAX" ) , "(" , expr , ")" | ( "SUM" | "AVG" ) , "(" , [ "DISTINCT" ] , expr , ")";

Page 26: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

26 March 14, 2014

Data Manipulation ...

The DELETE statement can be used to delete tuples

Tuples can be updated via the UPDATE statement

Example

UPDATE Customer SET name = 'Walter Faber' WHERE customerID = 8;

update = "UPDATE" , table , "SET" , column , "=" , ( "NULL" | expr | "(" , query , ")" ) , { "," , column , "=" , ("NULL" | expr | "(" , query , ")" ) } , [ "WHERE" , searchCondition ];

delete = "DELETE FROM" , table [ "WHERE" , searchCondition ];

Page 27: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

27 March 14, 2014

Data Manipulation ...

The DROP TABLE statement can be used to delete a

relation from the database

A relation schema can be modified via the ALTER TABLE

command existing tuples are assigned a NULL value for the new attribute

Example

alterTable = "ALTER TABLE" , table , "ADD" , ( columnElement | columnConstraint );

ALTER TABLE Customer ADD birthdate DATE;

dropTable = "DROP TABLE" , table;

Page 28: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

28 March 14, 2014

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

Page 29: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

29 March 14, 2014

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

Page 30: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

30 March 14, 2014

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

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

SELECT A1, A2,..., An FROM r1, r2,..., rm WHERE P

pA1,A2,...,An(sP(r1 r2 ... rm) is equivalent to

Page 31: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

31 March 14, 2014

SELECT Clause

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

get all tuple attributes

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

Page 32: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

32 March 14, 2014

SELECT Clause ...

Duplicate tuples resulting from a projection to specific

attributes are not eliminated by default

SELECT name FROM Customer;

name

Max Frisch

Eddy Merckx

Claude Debussy

Albert Einstein

Max Frisch

Page 33: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

33 March 14, 2014

SELECT Clause ...

The DISTINCT keyword can be used to eliminate

duplicates

SELECT DISTINCT name FROM Customer;

name

Max Frisch

Eddy Merckx

Claude Debussy

Albert Einstein

Page 34: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

34 March 14, 2014

Computed Attributes and Rename

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

SELECT name, price * 1.5 AS newPrice FROM CD;

name newPrice

Falling into Place 26.85

Carcassonne 23.20

Chromatic 24.75

Page 35: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

35 March 14, 2014

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)

Page 36: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

36 March 14, 2014

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

Page 37: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

37 March 14, 2014

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

Page 38: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

38 March 14, 2014

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%'

name

Albert Einstein

SELECT DISTINCT name FROM Customer WHERE name LIKE '%Ein%';

Page 39: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

39 March 14, 2014

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

True False Unknown

True True False Unknown

False False False False

Unknown Unknown False Unknown

AND

True False Unknown

True True True True

False True False Unknown

Unknown True Unknown Unknown

OR

=

True False Unknown

True True False Unknown

False False True Unknown

Unknown Unknown Unknown Unknown

NOT

True False Unknown

False True Unknown

Page 40: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

40 March 14, 2014

Null Values ...

The NULL keyword can also be used in predicates to

check for null values

Note that a check for NULL is not the same as a check for

the empty String ''

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

Page 41: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

41 March 14, 2014

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

Page 42: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

42 March 14, 2014

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

Outer Joins

SELECT * FROM R NATURAL JOIN S; SELECT * FROM R CROSS JOIN S; SELECT * FROM R JOIN S ON R.A > S.B;

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;

Page 43: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

43 March 14, 2014

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

Page 44: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

44 March 14, 2014

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

Page 45: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

45 March 14, 2014

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

Page 46: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

46 March 14, 2014

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"

Aggregate functions (except COUNT(*)) ignore NULL

values in the input set input set might be empty in which case NULL is returned

SELECT city, COUNT(customerID) AS number FROM Customer GROUP BY city;

city number

Zurich 3

Brussels 1

Paris 1

Page 47: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

47 March 14, 2014

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

Page 48: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

48 March 14, 2014

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

Page 49: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

49 March 14, 2014

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

Page 50: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

50 March 14, 2014

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

Page 51: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

51 March 14, 2014

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

Page 52: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

52 March 14, 2014

Basic SQL Query Structure

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

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" ] };

Page 53: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

53 March 14, 2014

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 , ")";

Page 54: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

54 March 14, 2014

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

Page 55: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

55 March 14, 2014

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;

Page 56: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

56 March 14, 2014

Views

Example

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

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;

Page 57: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

57 March 14, 2014

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

Page 58: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

58 March 14, 2014

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

Page 59: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

59 March 14, 2014

Exercise 5

Structured Query Language (SQL)

Page 60: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

Beat Signer - Department of Computer Science - [email protected]

60 March 14, 2014

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 '74),

Michigan, USA, May 1974

Page 61: Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007156ANR)

2 December 2005

Next Lecture Advanced SQL