practice exercise 2 - tarleton state university · practice exercise 2.6 . database system concepts...

130
©Silberschatz, Korth and Sudarshan 3.1 Database System Concepts - 6 th Edition Practice Exercise 2.6

Upload: lythien

Post on 18-Aug-2018

222 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.1 Database System Concepts - 6th Edition

Practice Exercise 2.6

Page 2: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.2 Database System Concepts - 6th Edition

Practice Exercise 2.7

Employee(person_name, street, city)

Works(person_name, company_name, salary)

Company(company_name, city)

Write relational algebra expressions to:

Page 3: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

Database System Concepts, 6th Ed.

©Silberschatz, Korth and Sudarshan

See www.db-book.com for conditions on re-use

Chapter 3: Introduction to SQL

Page 4: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.4 Database System Concepts - 6th Edition

History

IBM Sequel language developed as part of System R

project at the IBM San Jose Research Laboratory

Renamed Structured Query Language (SQL)

ANSI and ISO standard SQL:

SQL-86, SQL-89, SQL-92

SQL:1999, SQL:2003, SQL:2008

Commercial systems offer most, if not all, SQL-92

features, plus varying feature sets from later standards

and special proprietary features.

Not all examples here may work on our particular

system.

Link to A History and

Evaluation of System R

on our webpage

Page 5: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.5 Database System Concepts - 6th Edition

Data Definition Language (DDL)

The schema for each relation.

The domain of values associated with each

attribute.

Integrity constraints (e.g. NOT NULL)

Other information such as

The set of indices to be maintained for each relations.

Security and authorization information for each relation.

The physical storage structure of each relation on disk.

Allows specification of information about relations:

Page 6: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.6 Database System Concepts - 6th Edition

Domain Types in SQL

char(n). Fixed length character string, with user-specified length n.

varchar(n). Variable length character strings, with user-specified maximum length n.

int. Integer (a finite subset of the integers that is machine-dependent).

smallint. Small integer (a machine-dependent subset of the integer domain type).

numeric(p,d). Fixed point number, with user-specified precision of p digits, with n digits to the right of decimal point.

real, double precision. Floating point and double-precision floating point numbers, with machine-dependent precision.

float(n). Floating point number, with user-specified precision of at least n digits.

More are covered in Ch.4.

Page 7: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.7 Database System Concepts - 6th Edition

Domain Types in SQL

char(n). Fixed length character string, with user-specified length n.

varchar(n). Variable length character strings, with user-specified maximum length n.

How does SQL compare strings of different lengths?

Standard SQL says: Spaces are added to the shorter one until strings have same length.

Not always implemented correctly!

How about Unicode?

nvarchar

But many implementations allow UTF-8 in varchar

Page 8: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.8 Database System Concepts - 6th Edition

P does not include the

sign, nor the decimal

point!

Domain Types in SQL

char(n). Fixed length character string, with user-specified length n.

varchar(n). Variable length character strings, with user-specified maximum length n.

int. Integer (a finite subset of the integers that is machine-dependent).

smallint. Small integer (a machine-dependent subset of the integer domain type).

numeric(p,d). Fixed point number, with user-specified precision of p digits, with n digits to the right of decimal point.

Page 9: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.9 Database System Concepts - 6th Edition

Domain Types in SQL

char(n). Fixed length character string, with user-specified length n.

varchar(n). Variable length character strings, with user-specified maximum length n.

int. Integer (a finite subset of the integers that is machine-dependent).

smallint. Small integer (a machine-dependent subset of the integer domain type).

numeric(p,d). Fixed point number, with user-specified precision of p digits, with n digits to the right of decimal point.

real, double precision. Floating point and double-precision floating point numbers, with machine-dependent precision.

float(n). Floating point number, with user-specified precision of at least n digits.

Each of the above also supports the NULL value

Sometimes NULL is prohibited!

Page 10: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.10 Database System Concepts - 6th Edition

Remember the university DB

Page 11: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.11 Database System Concepts - 6th Edition

CREATE TABLE

Syntax:

CREATE TABLE r (A1 D1, A2 D2, ..., An Dn, (integrity-constraint1), ..., (integrity-constraintk))

r is the name of the relation

each Ai is an attribute name in the schema of relation r

Di is the data type of values in the domain of attribute Ai

Example:

CREATE TABLE instructor ( ID char(5), name varchar(20) not null, dept_name varchar(20), salary numeric(8,2))

insert into instructor values (‘10211’, ’Smith’, ’Biology’, 66000);

insert into instructor values (‘10211’, null, ’Biology’, 66000);

Page 12: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.12 Database System Concepts - 6th Edition

Integrity Constraints in Create Table

not null

primary key (A1, ..., An )

foreign key (Am, ..., An ) references r

Example: Declare dept_name as the primary key for department

. CREATE TABLE instructor (

ID char(5),

name varchar(20) not null,

dept_name varchar(20),

salary numeric(8,2),

primary key (ID),

foreign key (dept_name) references department)

primary key declaration on an attribute automatically ensures not null

Page 13: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.13 Database System Concepts - 6th Edition

QUIZ: Integrity Constraints

Based on this Example, write the CREATE TABLE for advisor

CREATE TABLE instructor (

ID char(5),

name varchar(20) not null,

dept_name varchar(20),

salary numeric(8,2),

primary key (ID),

foreign key (dept_name) references department)

Page 14: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.14 Database System Concepts - 6th Edition

QUIZ: Integrity Constraints

Write CREATE TABLEs for student and takes

CREATE TABLE instructor (

ID char(5),

name varchar(20) not null,

dept_name varchar(20),

salary numeric(8,2),

primary key (ID),

foreign key (dept_name) references department)

Page 15: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.15 Database System Concepts - 6th Edition

CREATE TABLE student ( ID varchar(5), name varchar(20) not null, dept_name varchar(20), tot_cred numeric(3,0), primary key (ID), foreign key (dept_name) references department) );

CREATE TABLE takes ( ID varchar(5), course_id varchar(8), sec_id varchar(8), semester varchar(6), year numeric(4,0), grade varchar(2), primary key (ID, course_id, sec_id, semester, year), foreign key (ID) references student, foreign key (course_id, sec_id, semester, year) references section );

Note: sec_id can be dropped from primary key above, to ensure a student cannot be registered for two sections of the same course in the same semester.

Page 16: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.16 Database System Concepts - 6th Edition

QUIZ: Integrity Constraints

Write the CREATE TABLE for course

CREATE TABLE instructor (

ID char(5),

name varchar(20) not null,

dept_name varchar(20),

salary numeric(8,2),

primary key (ID),

foreign key (dept_name) references department

)

Page 17: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.17 Database System Concepts - 6th Edition

CREATE TABLE course (

course_id varchar(8) primary key,

title varchar(50),

dept_name varchar(20),

credits numeric(2,0),

foreign key (dept_name) references department) );

Note: Primary key declaration can be combined with attribute

declaration as shown.

Page 18: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.18 Database System Concepts - 6th Edition

DROP TABLE and ALTER TABLE

drop table student

Deletes the table and its contents

delete from student

Deletes all contents of table, but retains table

alter table

alter table r add A D

where A is the name of the attribute to be added to relation r and D is the domain of A.

All tuples in the relation are assigned null as the value for the new attribute.

alter table r drop A

where A is the name of an attribute of relation r

Dropping of attributes not supported by many databases

Page 19: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.19 Database System Concepts - 6th Edition

3.3 Basic Query Structure

The SQL data-manipulation language (DML) provides the

ability to query information, and insert, delete and update

tuples

A typical SQL query has the form:

select A1, A2, ..., An

from r1, r2, ..., rm

where P

Ai represents an attribute

Ri represents a relation

P is a predicate.

The result of an SQL query is a relation.

Page 20: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.20 Database System Concepts - 6th Edition

The SELECT clause

It lists the attributes desired in the result of a query

corresponds to the projection operation of the

relational algebra

Example: find the names of all instructors:

select name

from instructor

NOTE: SQL names are case insensitive (i.e., you may

use upper- or lower-case letters.)

E.g. Name ≡ NAME ≡ name

Some people use upper case wherever we use bold

font.

Page 21: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.21 Database System Concepts - 6th Edition

The SELECT clause

SQL allows duplicates in relations as well as in query

results.

To force the elimination of duplicates, insert the keyword

distinct after select.

Find the names of all departments with instructor, and

remove duplicates:

SELECT distinct dept_name

FROM instructor

The keyword all specifies that duplicates not be removed

(seldom used, since it’s the default):

SELECT all dept_name

FROM instructor

Page 22: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.22 Database System Concepts - 6th Edition

The SELECT clause

An asterisk in the select clause denotes “all attributes”

SELECT *

FROM instructor

The select clause can contain arithmetic expressions

involving the operation, +, –, , and /, and operating on

constants or attributes of tuples.

The query:

SELECT ID, name, salary/12 FROM instructor

would return a relation that is the same as the instructor

relation, except that the value of the attribute salary is

divided by 12.

Page 23: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.23 Database System Concepts - 6th Edition

The WHERE clause

Specifies conditions that the result must satisfy

Corresponds to the selection predicate of the relational

algebra.

Find all instructors in Comp. Sci. dept with salary > 80000

select name

from instructor

where dept_name = ‘Comp. Sci.' and

salary > 80000

Comparison results can be combined using the logical

connectives and, or, and not.

Comparisons can be applied to results of arithmetic

expressions.

Page 24: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.24 Database System Concepts - 6th Edition

The FROM clause

The from clause lists the relations involved in the query

Corresponds to the Cartesian product operation of the

relational algebra.

Find the Cartesian product instructor X teaches

select

from instructor, teaches

generates every possible instructor – teaches pair, with all

attributes from both relations

Cartesian product not very useful directly, but useful combined

with where-clause condition (selection operation in relational

algebra)

Page 25: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.25 Database System Concepts - 6th Edition

Cartesian Product: instructor X teaches

instructor teaches

Page 26: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.26 Database System Concepts - 6th Edition

Joins

For all instructors who have taught some course, find their names

and the course ID of the courses they taught.

select name, course_id

from instructor, teaches

where instructor.ID = teaches.ID

Find the course ID, semester, year and title of each course offered

by the Comp. Sci. department

select section.course_id, semester, year, title

from section, course

where section.course_id = course.course_id and

dept_name = ‘Comp. Sci.'

Page 27: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.27 Database System Concepts - 6th Edition

QUIZ: Queries

Find the names of all students who are taking a class this semester in

the SCIENCE building

EoL1

Page 28: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.28 Database System Concepts - 6th Edition

QUIZ

What are the three integrity constraints we have

covered? Give examples of how each is used.

Page 29: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.29 Database System Concepts - 6th Edition

QUIZ

What are the three integrity constraints we have

covered? Give examples of how each is used.

NOT NULL

PRIMARY KEY

FOREIGN KEY

Page 30: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.30 Database System Concepts - 6th Edition

QUIZ

True or false:

By default, in SQL a table may contain duplicate tuples.

Page 31: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.31 Database System Concepts - 6th Edition

QUIZ

True or false:

By default, in SQL a table may contain duplicate tuples.

Page 32: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.32 Database System Concepts - 6th Edition

QUIZ

How can we control duplicates in SQL queries?

Page 33: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.33 Database System Concepts - 6th Edition

QUIZ

How can we control duplicates in SQL queries?

Page 34: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.34 Database System Concepts - 6th Edition

Natural Join

Natural join matches tuples with the same values for all

common attributes, and retains only one copy of each common

column

select *

from instructor natural join teaches;

Page 35: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.35 Database System Concepts - 6th Edition

Page 36: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.36 Database System Concepts - 6th Edition

Natural Join Example

List the names of instructors along with the course ID of

the courses that they taught.

select name, course_id

from instructor, teaches

where instructor.ID = teaches.ID;

select name, course_id

from instructor natural join teaches;

Page 37: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.37 Database System Concepts - 6th Edition

Beware of unrelated attributes with same name which get equated

incorrectly

Example: List the names of instructors along with the the titles of

courses that they teach

Incorrect version (makes course.dept_name = instructor.dept_name)

select name, title

from instructor natural join teaches natural join course;

Correct version

select name, title

from instructor natural join teaches, course

where teaches.course_id = course.course_id;

Another correct version

select name, title

from (instructor natural join teaches)

join course using(course_id);

Page 38: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.38 Database System Concepts - 6th Edition

Page 39: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.39 Database System Concepts - 6th Edition

QUIZ: Natural Join Use the natural join to write queries for the following:

Find the names of customers who have (at least) an account

Find the names of customers who have an account at the “Uptown” branch

Find the names of customers who have a loan at a branch with assets greater

than $1,000,000

Page 40: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.40 Database System Concepts - 6th Edition

The RENAME Operation

SQL allows renaming relations and attributes using the AS clause:

old-name AS new-name

E.g.

SELECTID, name, salary/12 AS monthly_salary

FROM instructor

Find the names of all instructors who have a higher salary than

some instructor in ‘Comp. Sci’.

SELECT DISTINCT T. name

FROM instructor AS T, instructor AS S

WHERE T.salary > S.salary AND S.dept_name = ‘Comp. Sci.’

The keyword AS is optional and may be omitted

instructor as T ≡ instructor T

Page 41: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.41 Database System Concepts - 6th Edition

QUIZ

Use the relational-algebra operations defined to find all the accounts

with a balance smaller than the balance of at least one other account.

Hint: join the table with itself!

Page 42: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.42 Database System Concepts - 6th Edition

String Operations

SQL includes a string-matching operator for comparisons on character

strings. The operator LIKE uses patterns that are described using

two special characters:

percent (%). The % character matches any substring.

underscore (_). The _ character matches any character.

Find the names of all instructors whose name includes the substring

“dar”:

select name

from instructor

where name like '%dar%'

Match the string “100 %”:

like ‘100 \%' escape '\'

Page 43: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.43 Database System Concepts - 6th Edition

String Operations

Patters are case sensitive.

Pattern matching examples:

‘Intro%’ matches any string beginning with “Intro”.

‘%Comp%’ matches any string containing “Comp” as a

substring.

‘_ _ _’ matches any string of exactly three characters.

‘_ _ _ %’ matches any string of at least three characters.

SQL supports a variety of string operations such as

concatenation (using “||”)

converting from upper to lower case (and vice versa)

finding string length, extracting substrings, etc.

Page 44: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.44 Database System Concepts - 6th Edition

QUIZ: String Operations

Find all course names that:

Begin with “Computer”

Have the substring “Computer” anywhere in them

Have the substring “Computer” or “computer” anywhere

in them

Have the substring “Comp” or “comp” anywhere in them

Have the substring “comp%_” anywhere in them

Page 45: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.45 Database System Concepts - 6th Edition

QUIZ: Find the loan number of all loans

made in cities that start with ‘S’ and end in

‘ville’:

Hint: Use join and string operations.

Page 46: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.46 Database System Concepts - 6th Edition

Ordering the Display of Tuples

List in alphabetic order the names of all instructors:

SELECT DISTINCT name

FROM instructor

ORDER BY name

We may specify desc for descending order or asc for

ascending order, for each attribute; ascending order is

the default.

Example: order by name desc

Can sort on multiple attributes

Example: order by dept_name, name

Page 47: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.47 Database System Concepts - 6th Edition

WHERE Clause Predicates

SQL includes a between comparison operator

Example: Find the names of all instructors with

salary between $90,000 and $100,000 (inclusive)

select name

from instructor

where salary between 90000 and 100000

Tuple comparison

select name, course_id

from instructor AS I, teaches AS T

where (I.ID, dept_name) = (T.ID, ’Biology’)

Page 48: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.48 Database System Concepts - 6th Edition

WHERE Clause Predicates

SQL includes an IN operator

Example: Find the names and salaries of all

instructors named ‘Jones’, ‘James’ or ‘Julian’

SELECT name

FROM instructor

WHERE salary IN (‘Jones’, ‘James’, ‘Julian’)

Page 49: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.49 Database System Concepts - 6th Edition

Quiz: WHERE Clause Predicates

List all the WHERE predicates we learned:

Page 50: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.50 Database System Concepts - 6th Edition

Quiz: WHERE Clause Predicates

List all the WHERE predicates we learned:

BETWEEN

Tuple comparison

IN

EOL2

Page 51: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.51 Database System Concepts - 6th Edition

Quiz: WHERE Clause Predicates

Write a query to return the names of all

students who have exactly 50, 60, 70, or 80

credit hours total

Without a WHERE predicate

With a WHERE predicate

Page 52: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.52 Database System Concepts - 6th Edition

Quiz: WHERE Clause Predicates

Write a query to return the names of all

students who have anywhere between 50

and 80 credit hours total

Without a WHERE predicate

With a WHERE predicate

Page 53: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.53 Database System Concepts - 6th Edition

Quiz: WHERE Clause Predicates

Write a query that uses tuple comparison to

return the names of all students who have

taken a class in 2014.

Use the previous example:

select name, course_id

from instructor AS I, teaches AS T

where (I.ID, dept_name) = (T.ID, ’Biology’)

Page 54: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.54 Database System Concepts - 6th Edition

Quiz: WHERE Clause Predicates

Write a query that uses tuple comparison to

return the names of all students who have

taken a class in 2014.

SELECT S.name

FROM student AS S, takes AS T

WHERE (T.ID, T.year) = (S.ID, 2014)

EOL2

Page 55: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.55 Database System Concepts - 6th Edition

Set Operations

Find courses that ran in Fall 2009 or in Spring 2010

Find courses that ran in Fall 2009 but not in Spring 2010

(select course_id from section where sem = ‘Fall’ and year = 2009)

union

(select course_id from section where sem = ‘Spring’ and year = 2010)

Find courses that ran in Fall 2009 and in Spring 2010

(select course_id from section where sem = ‘Fall’ and year = 2009)

intersect

(select course_id from section where sem = ‘Spring’ and year = 2010)

(select course_id from section where sem = ‘Fall’ and year = 2009)

except

(select course_id from section where sem = ‘Spring’ and year = 2010)

Page 56: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.56 Database System Concepts - 6th Edition

Set Operations

Set operations union, intersect, and except

Each of the above operations automatically

eliminates duplicates

To retain all duplicates use the corresponding

multiset versions union all, intersect all and except

all.

Suppose a tuple occurs m times in r and n times in

s, then, it occurs:

m + n times in r union all s

min(m,n) times in r intersect all s

max(0, m – n) times in r except all s

Page 57: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.57 Database System Concepts - 6th Edition

QUIZ: Set operations

Find the names of customers who have an account at the “Uptown”

branch or a loan from the “Downtown” branch

Page 58: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.58 Database System Concepts - 6th Edition

QUIZ

Find the account with the maximum balance … without using

aggregation functions, i.e. max().

Now we can finally write the complete solution!

Hint: Use EXCEPT

Page 59: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.59 Database System Concepts - 6th Edition

Null Values

It is possible for tuples to have a null value, denoted by null,

for some of their attributes

null signifies an unknown value or that a value does not

exist.

The result of any arithmetic expression involving null is null

Example: 5 + null returns null

The predicate is null can be used to check for null values.

Example: Find all instructors whose salary is null.

select name

from instructor

where salary is null

Page 60: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.60 Database System Concepts - 6th Edition

Null Values and Three Valued Logic

Any comparison with null returns unknown

Example: 5 < null or null <> null or null = null

Three-valued logic using the truth value unknown:

OR: (unknown or true) = true,

(unknown or false) = unknown

(unknown or unknown) = unknown

AND: (true and unknown) = unknown,

(false and unknown) = false,

(unknown and unknown) = unknown

NOT: (not unknown) = unknown

“P is unknown” evaluates to true if predicate P

evaluates to unknown

Page 61: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.61 Database System Concepts - 6th Edition

Null Values and Three Valued Logic

Three-valued logic using the truth value unknown:

OR: (unknown or true) = true,

(unknown or false) = unknown

(unknown or unknown) = unknown

AND: (true and unknown) = unknown,

(false and unknown) = false,

(unknown and unknown) = unknown

NOT: (not unknown) = unknown

Write the truth table for three-valued OR!

Page 62: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.62 Database System Concepts - 6th Edition

Page 63: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.63 Database System Concepts - 6th Edition

Null Values and Three Valued Logic

The result of where clause predicate is treated as false

if it evaluates to unknown

This means that, in SQL, we prefer to err on the side of

caution, retaining only those tuples that surely make the

predicate true.

EOL 3

Page 64: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.64 Database System Concepts - 6th Edition

QUIZ

Write the truth table for three-valued AND!

Page 65: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.65 Database System Concepts - 6th Edition

Page 66: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.66 Database System Concepts - 6th Edition

3.7 Aggregate Functions

These functions operate on the multiset of values

of a column of a relation, and return a value

avg: average value

min: minimum value

max: maximum value

sum: sum of values

count: number of values

Page 67: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.67 Database System Concepts - 6th Edition

Aggregate Functions Examples

Find the average salary of instructors in the Computer Science

department

select avg (salary)

from instructor

where dept_name= ’Comp. Sci.’;

Find the total number of instructors who teach a course in the

Spring 2010 semester

select count (distinct ID)

from teaches

where semester = ’Spring’ and year = 2010;

Find the number of tuples in the course relation

select count (*)

from course;

Page 68: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.68 Database System Concepts - 6th Edition

Aggregate Functions – GROUP BY

Find the average salary of instructors in each department

select dept_name, avg (salary)

from instructor

group by dept_name;

Page 69: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.69 Database System Concepts - 6th Edition

Aggregate Functions – GROUP BY

Attributes in select clause outside of aggregate

functions must appear in group by list

select dept_name, avg (salary)

from instructor

group by dept_name;

/* incorrect */

select dept_name, ID, avg (salary)

from instructor

group by dept_name;

Page 70: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.70 Database System Concepts - 6th Edition

QUIZ: Aggregate Functions

Write queries to find the following:

The highest budget of all departments

The lowest number of credit hours of any student

The highest budget of a department in each building

The lowest number of credit hours of any student in

each department

Page 71: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.71 Database System Concepts - 6th Edition

QUIZ: Aggregate Functions

Write a query to find the lowest number of credit hours

of any student in the “CS” department

Page 72: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.72 Database System Concepts - 6th Edition

QUIZ: Aggregate Functions

Write a query to find the the highest budget of any

department.

Page 73: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.73 Database System Concepts - 6th Edition

QUIZ: Aggregate Functions

Write a query to find the name of the department

with the highest budget.

Page 74: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.74 Database System Concepts - 6th Edition

QUIZ: Aggregate Functions

Write a query to find the name of the department

with the highest budget.

Does this work? Why not?

SELECT dept_name, MAX(budget)

FROM department

Page 75: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.75 Database System Concepts - 6th Edition

QUIZ: Aggregate Functions

Write a query to find the name of the department

with the highest budget.

Does this work? Why not?

SELECT dept_name, MAX(budget)

FROM department

Attributes in select

clause outside of

aggregate functions

must appear in

group by list

Page 76: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.76 Database System Concepts - 6th Edition

Aggregate Functions – Having Clause

Find the names and average salaries of all

departments whose average salary is greater than

42000

Note: predicates in the having clause are applied after the

formation of groups whereas predicates in the where

clause are applied before forming groups

select dept_name, avg (salary)

from instructor

group by dept_name

having avg (salary) > 42000;

Page 77: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.77 Database System Concepts - 6th Edition

QUIZ: Aggregate Functions

Write queries to find the following:

The names of the department whose students have

an average total credit of at least 6 credit hours

Page 78: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.78 Database System Concepts - 6th Edition

Null Values and Aggregates

Total all salaries

select sum (salary )

from instructor

Above statement ignores null amounts

Result is null if all amounts are null

All aggregate operations except count(*) ignore

tuples with null values on the aggregated attributes

What if the attribute has only null values?

count returns 0

all other aggregates return null

Page 79: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.79 Database System Concepts - 6th Edition

3.8 Nested Subqueries

SQL provides a mechanism for the nesting of

subqueries.

A subquery is a select-from-where expression that

is nested within another query.

A common use of subqueries is to perform tests for

set membership, set comparisons, and set cardinality.

Page 80: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.80 Database System Concepts - 6th Edition

Nested Example: IN and NOT IN

Find courses offered in Fall 2009 and in Spring 2010

Find courses offered in Fall 2009 but not in Spring 2010

select distinct course_id

from section

where semester = ’Fall’ and year= 2009 and

course_id in (select course_id

from section

where semester = ’Spring’ and year= 2010);

select distinct course_id

from section

where semester = ’Fall’ and year= 2009 and

course_id not in (select course_id

from section

where semester = ’Spring’ and year= 2010);

Page 81: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.81 Database System Concepts - 6th Edition

QUIZ: Now we can solve this!

Write a query to find the name of the department with

the highest budget.

(Hint: Start with the inner query!)

Page 82: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.82 Database System Concepts - 6th Edition

Extra-credit QUIZ

Write a nested query to find the total number of

(distinct) students who have taken course sections

taught by the instructor with ID 10101

Hint: Use the schema diagram of the University_DB (handout).

Page 83: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.83 Database System Concepts - 6th Edition

QUIZ: Nested

Write a nested query to find the total number of (distinct) students

who have taken course sections taught by the instructor with ID

10101

select count (distinct ID)

from takes

where (course_id, sec_id, semester, year) in

(select course_id, sec_id, semester, year

from teaches

where teaches.ID= 10101);

Page 84: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.84 Database System Concepts - 6th Edition

QUIZ: Nested

Write a nested query to find the total number of (distinct) students

who have taken course sections taught by the instructor with ID

10101

Note: Above query can be written in a much simpler manner. The

code above is simply to illustrate SQL features.

select count (distinct ID)

from takes

where (course_id, sec_id, semester, year) in

(select course_id, sec_id, semester, year

from teaches

where teaches.ID= 10101);

EoL3

What would the query return

if we only used course_id

here?

Page 85: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.85 Database System Concepts - 6th Edition

3.8 Review: Nested Subqueries

Are used for:

Determining membership (or lack thereof) in a set:

IN

NOT IN

SELECT COUNT (DISTINCT ID)

FROM takes

WHERE (course_id, sec_id, semester, year) IN

(select course_id, sec_id, semester, year

from teaches

where teaches.ID= 10101);

Outer

query

Inner

query

Page 86: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.86 Database System Concepts - 6th Edition

Nested Subqueries

Are used for:

Determining membership (or lack thereof) in a set:

IN

NOT IN

Comparing tuples against sets:

<comparison> SOME

<comparison> ALL

Page 87: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.87 Database System Concepts - 6th Edition

Set Comparison

Find names of instructors with salary greater than that of some

(at least one) instructor in the Biology department.

Same query using > some clause

select name

from instructor

where salary > SOME(select salary

from instructor

where dept_name = ’Biology’);

select distinct T.name

from instructor as T, instructor as S

where T.salary > S.salary and S.dept_name = ’Biology’;

Page 88: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.88 Database System Concepts - 6th Edition

Formal definition of SOME clause

F <comp> some r t r such that (F <comp> t )

<comp> can be:

0 5

6

(5 < some ) = true

0 5

0

) = false

5

0 5 (5 some ) = true (since 0 5)

(read: 5 < some tuple in the relation)

(5 < some

) = true (5 = some

(= some) in

However, ( some) not in

Page 89: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.89 Database System Concepts - 6th Edition

QUIZ: SOME

Write a nested query to find the departments with

budgets lower than some (at least one) departments

in the Watson building.

Page 90: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.90 Database System Concepts - 6th Edition

Set Comparison: ALL clause

Find the names of all instructors whose salary is

greater than the salary of all instructors in the

Biology department.

select name

from instructor

where salary > ALL (select salary

from instructor

where dept_name = ’Biology’);

Page 91: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.91 Database System Concepts - 6th Edition

Formal definition of ALL clause

F <comp> all r t r (F <comp> t)

0 5

6

(5 < all ) = false

6 10

4

) = true

5

4 6 (5 all ) = true (since 5 4 and 5 6)

(5 < all

) = false (5 = all

( all) not in

However, (= all) in

Page 92: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.92 Database System Concepts - 6th Edition

QUIZ: ALL

Write a nested query to find the departments with

budgets lower than all departments in the Watson

building

Page 93: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.93 Database System Concepts - 6th Edition

Nested Subqueries

Are used for:

Determining membership (or lack thereof) in a set:

IN

NOT IN

Comparing a tuple against a set:

<comparison> SOME

<comparison> ALL

Testing if a relation (table, set) is empty (or not):

NOT EXISTS

EXISTS

exists returns true iff the argument subquery is nonempty:

exists r r Ø

not exists r r = Ø

Page 94: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.94 Database System Concepts - 6th Edition

Yet another way to write the query

“Find all courses taught in both the Fall 2009 semester and

in the Spring 2010 semester”:

select course_id

from section as S

where semester = ’Fall’ and year= 2009 and

EXISTS (select *

from section as T

where semester = ’Spring’ and

year = 2010 and

S.course_id = T.course_id);

Page 95: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.95 Database System Concepts - 6th Edition

Yet another way to write the query

“Find all courses taught in both the Fall 2009 semester and

in the Spring 2010 semester”:

select course_id

from section as S

where semester = ’Fall’ and year= 2009 and

EXISTS (select *

from section as T

where semester = ’Spring’ and

year = 2010 and

S.course_id = T.course_id);

Correlated subquery

Correlation name or correlation variable

Page 96: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.96 Database System Concepts - 6th Edition

QUIZ: (NOT) EXISTS

Write an SQL expression that is true iff relation

(table) A is contained in relation (table) B

Page 97: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.97 Database System Concepts - 6th Edition

QUIZ: (NOT) EXISTS

Write an SQL expression that is true iff relation

A is contained in relation B

NOT EXISTS (A EXCEPT B)

Page 98: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.98 Database System Concepts - 6th Edition

QUIZ: NOT EXISTS

Find the names of students who have taken all courses

offered in the Biology department.

Hint: There is no course they have not taken!

This table is not

necessary for the query!

Page 99: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.99 Database System Concepts - 6th Edition

NOT EXISTS

Find all students who have taken all courses offered in the Biology

department.

select distinct S.ID, S.name

from student as S

where NOT EXISTS( (select course_id

from course

where dept_name = ’Biology’)

except

(select T.course_id

from takes as T

where S.ID = T.ID)); What does this

inner query

mean?

Page 100: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.100 Database System Concepts - 6th Edition

NOT EXISTS

Find all students who have taken all courses offered in the Biology

department.

select distinct S.ID, S.name

from student as S

where NOT EXISTS( (select course_id

from course

where dept_name = ’Biology’)

except

(select T.course_id

from takes as T

where S.ID = T.ID)); Is the inner query

correlated with the

outer?

Page 101: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.101 Database System Concepts - 6th Edition

NOT EXISTS

Find all students who have taken all courses offered in the Biology

department.

select distinct S.ID, S.name

from student as S

where NOT EXISTS( (select course_id

from course

where dept_name = ’Biology’)

except

(select T.course_id

from takes as T

where S.ID = T.ID)); What would the

query return if the

correlation condition

were missing?

Page 102: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.102 Database System Concepts - 6th Edition

NOT EXISTS

Find all students who have taken all courses offered in the Biology

department.

select distinct S.ID, S.name

from student as S

where NOT EXISTS( (select course_id

from course

where dept_name = ’Biology’)

except

(select T.course_id

from takes as T

where S.ID = T.ID));

Note: Cannot write this query using = all or any of its variants, b/c

it’s not a set-based comparison!

Page 103: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.103 Database System Concepts - 6th Edition

Nested Subqueries

Are used for:

Determining membership (or lack thereof) in a set:

IN

NOT IN

Comparing tuples against sets:

<comparison> SOME

<comparison> ALL

Testing if a relation is empty (or not):

NOT EXISTS

EXISTS

Testing for no duplicate tuples

UNIQUE

Note: UNIQUE of an empty set is true!

Page 104: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.104 Database System Concepts - 6th Edition

Test for Absence of Duplicate Tuples

Find all courses that were offered at most once in 2009:

select T.course_id

from course as T

where unique (select R.course_id

from section as R

where T.course_id= R.course_id

and R.year = 2009);

Page 105: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.105 Database System Concepts - 6th Edition

QUIZ: UNIQUE

Find the names of students who have taken COSC4401

at least once.

Page 106: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.106 Database System Concepts - 6th Edition

QUIZ: UNIQUE

Find the names of students who have taken COSC4401

at least once.

SELECT S.ID, S.name

FROM student AS S

WHERE UNIQUE (

SELECT T.course_id

FROM takes AS T

WHERE S.ID = T.ID AND

T.course_id = ‘COSC4401’

)

Page 107: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.107 Database System Concepts - 6th Edition

QUIZ: UNIQUE

Find the names of students who have taken COSC4401

only once.

EOL 5

SELECT S.ID, S.name

FROM student AS S

WHERE UNIQUE (

SELECT T.course_id

FROM takes AS T

WHERE S.ID = T.ID AND

T.course_id = ‘COSC4401’

)

Page 108: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.108 Database System Concepts - 6th Edition

All subqueries we’ve seen so far are in

the WHERE clause, i.e. they are used to

filter the tuples.

SQL allows subqueries in all clauses of

the SELECT statement:

SELECT

FROM

WHERE

GROUP BY

HAVING

ORDER BY

Page 109: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.109 Database System Concepts - 6th Edition

3.8.5 Subqueries in the FROM clause

Here the subquery is used as a data source for the outer

query.

Find the average instructors’ salaries of those departments

where the average salary is greater than $42,000.

select dept_name, avg_salary

from (select dept_name, avg (salary) as avg_salary

from instructor

group by dept_name

)

where avg_salary > 42000;

Note:we do not need to use the having clause.

Page 110: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.110 Database System Concepts - 6th Edition

Subqueries in the FROM clause

Find the average instructors’ salaries of those departments

where the average salary is greater than $42,000.

Another way to write above query:

select dept_name, avg_salary

from (select dept_name, avg (salary)

from instructor

group by dept_name

)

as dept_avg (dept_name, avg_salary)

where avg_salary > 42000;

Page 111: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.111 Database System Concepts - 6th Edition

Yet another way to write it: lateral clause

select name, salary, avg_salary

from instructor I1,

lateral (select avg(salary) as avg_salary

from instructor I2

where I2.dept_name= I1.dept_name);

Lateral clause permits later part of the from clause (after

the lateral keyword) to access correlation variables from

the earlier part.

Note: lateral is part of the SQL standard, but is not

supported on many DBMSs:

Some, such as SQL Server, offer alternative syntax.

PostgreSQL has it!

Page 112: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.112 Database System Concepts - 6th Edition

WITH clause

Provides a way of defining a temporary view whose

definition is available only to the query in which the with

clause occurs.

Find all departments with the maximum budget:

with max_budget (value) as

(select max(budget)

from department)

select budget

from department, max_budget

where department.budget = max_budget.value;

Page 113: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.113 Database System Concepts - 6th Edition

Complex Queries using WITH clause

WITH clause is very useful for writing complex queries

Supported by most DBMSs, with minor syntax variations

Find all departments where the total salary is greater than the

average of the total salary at all departments

with dept _total (dept_name, value) as

(select dept_name, sum(salary)

from instructor

group by dept_name),

dept_total_avg(value) as

(select avg(value)

from dept_total)

select dept_name

from dept_total, dept_total_avg

where dept_total.value >= dept_total_avg.value;

Page 114: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.114 Database System Concepts - 6th Edition

QUIZ

What does this nested query return?

select dept_name,

(select count(*)

from instructor

where department.dept_name = instructor.dept_name)

as num_instructors

from department;

Page 115: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.115 Database System Concepts - 6th Edition

Scalar Subquery

If a single value is expected, SQL will extract the scalar value from

the relation/table returned by the subquery

Can be used in the SELECT clause:

SELECT dept_name,

(select count(*)

from instructor

where department.dept_name = instructor.dept_name

) AS num_instructors

FROM department;

Page 116: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.116 Database System Concepts - 6th Edition

Scalar Subquery

Can also be used in WHERE or HAVING clauses

select name

from instructor

where salary * 12 >

(select budget from department

where department.dept_name = instructor.dept_name)

Page 117: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.117 Database System Concepts - 6th Edition

Scalar Subquery

Can also be used in WHERE or HAVING clauses

select name

from instructor

where salary * 12 >

(select budget from department

where department.dept_name = instructor.dept_name)

QUIZ: Write a (nested) query that returns the names of instructors

whose salary is less than the average salary in their department.

Page 118: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.118 Database System Concepts - 6th Edition

Scalar Subquery

As seen here, scalar subqueries are not limited to aggregate functions:

select name

from instructor

where salary * 12 >

(select budget from department

where department.dept_name = instructor.dept_name)

QUIZ: Can you imagine a case where the subquery returns more than

one tuple?

Runtime error if subquery returns more than one result tuple.

Page 119: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.119 Database System Concepts - 6th Edition

3.9 Modification of the Database

Deletion of tuples from a given relation

Insertion of new tuples into a given relation

Updating values in some tuples in a given relation

Page 120: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.120 Database System Concepts - 6th Edition

Deletion

Delete all instructors

delete from instructor

Delete all instructors from the Finance department

delete from instructor

where dept_name= ’Finance’;

Delete all tuples in the instructor relation for those instructors

associated with a department located in the Watson building.

delete from instructor

where dept_name in (select dept_name

from department

where building = ’Watson’);

Page 121: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.121 Database System Concepts - 6th Edition

Deletion

Delete all instructors whose salary is less than the average

salary of all instructors

delete from instructor

where salary< (select avg (salary) from instructor);

Problem: as we delete tuples from deposit, the average salary

changes

Solution used in SQL:

1. First, compute avg salary and find all tuples to delete

2. Next, delete all tuples found above (without recomputing avg or

retesting the tuples)

Aggregate functions in subqueries are not correlated!

Page 122: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.122 Database System Concepts - 6th Edition

Insertion

Add a new tuple to course

insert into course

values (’CS-437’, ’Database Systems’, ’Comp. Sci.’, 4);

or equivalently

insert into course (course_id, title, dept_name, credits)

values (’CS-437’, ’Database Systems’, ’Comp. Sci.’, 4);

Add a new tuple to student with tot_creds set to null

insert into student

values (’3003’, ’Green’, ’Finance’, null);

Page 123: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.123 Database System Concepts - 6th Edition

Insertion

Add all instructors to the student relation with tot_creds set to 0

insert into student

select ID, name, dept_name, 0

from instructor

The select from where statement is evaluated fully before any of its

results are inserted into the relation (otherwise queries like

insert into table1 select * from table1

would cause problems, if table1 did not have any primary key

defined.

Page 124: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.124 Database System Concepts - 6th Edition

Updates

Increase salaries of instructors whose salary is over

$100,000 by 3%, and all others receive a 5% raise

Write two update statements:

update instructor

set salary = salary * 1.03

where salary > 100000;

update instructor

set salary = salary * 1.05

where salary <= 100000;

The order is important! (Why?)

Can be done better using the case statement (next

slide)

Page 125: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.125 Database System Concepts - 6th Edition

Case Statement for Conditional Updates

update instructor

set salary = case

when salary <= 100000 then salary * 1.05

else salary * 1.03

end

What does this update accomplish?

Page 126: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.126 Database System Concepts - 6th Edition

Updates with Scalar Subqueries

Recompute and update tot_creds value for all students

update student S

set tot_cred = ( select sum(credits)

from takes natural join course

where S.ID= takes.ID and

takes.grade <> ’F’ and

takes.grade is not null);

Sets tot_creds to null for students who have not taken any course:

instead of sum(credits), use:

case

when sum(credits) is not null then

sum(credits)

else 0

end

Page 127: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.127 Database System Concepts - 6th Edition

Problem 3.10

Employee (employee_name, street, city)

Works(employee_name, company_name, salary)

Company(company_name, city)

Manages(employee_name, manager_name)

Modify the DB so that “Jones” now lives in “Newtown”

Give all managers of “First Bank Corporation” a 10% raise

Give all managers of “First Bank Corporation” a 10% raise, unless the

salary becomes > $100,000; in such cases, give only a 3% raise

Page 128: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

Database System Concepts, 6th Ed.

©Silberschatz, Korth and Sudarshan

See www.db-book.com for conditions on re-use

Homework for Ch.3, due Thu, Feb.19:

--End of chapter Practice Exercise: 3.8

--End of chapter Exercises: 3.11, 12, 16

--Table with all SQL constructs from ch.3, each

used in an example (OK if example is from text)

Page 129: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.129 Database System Concepts - 6th Edition

Schema for University database

Page 130: Practice Exercise 2 - Tarleton State University · Practice Exercise 2.6 . Database System Concepts - 6th Edition 3.2 ©Silberschatz, ... QUIZ True or false: By default, in SQL a

©Silberschatz, Korth and Sudarshan 3.130 Database System Concepts - 6th Edition

Schema for Bank database (fig.3.19)