程序代写代做 finance database AI Chapter 3: Introduction to SQL

Chapter 3: Introduction to SQL
■ Overview of The SQL Query Language ■ Data Definition
■ Basic Query Structure
■ AdditionalBasicOperations
■ Set Operations
■ Null Values
■ AggregateFunctions
■ Nested Subqueries
■ Modification of the Database
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.1 ©Silberschatz, Korth and Sudarshan

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(languagenamebecameY2Kcompliant!) ● SQL:2003,2006,2008,2011
■ Commercial systems offer most, if not all, SQL-92 features, plus varying feature sets from later standards and special proprietary features.
● Notallexamplesheremayworkonyourparticularsystem.
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.2 ©Silberschatz, Korth and Sudarshan

Data Definition Language
Allows the specification of not only a set of relations but also information about each relation, including:
■ The schema for each relation.
■ The domain of values associated with each attribute.
■ Integrity constraints
■ 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.
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.3 ©Silberschatz, Korth and Sudarshan

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 Chapter 4 (e.g., for time and date)
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.4 ©Silberschatz, Korth and Sudarshan

Create Table Construct
■ An SQL relation is defined using the create table command:
create table r (A1 D1, A2 D2, …, An Dn,
 (integrity-constraint1),

…,
 (integrity-constraintk))
● risthenameoftherelation
● 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);
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.5 ©Silberschatz, Korth and Sudarshan

Integrity Constraints in Create Table
■ not null
■ primary key (A1, …, An )
■ foreign key (Am, …, An ) references r
Example: Declare branch_name as the primary key for branch
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
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.6 ©Silberschatz, Korth and Sudarshan

And a Few More Relation Definitions
■ create table student (

ID
name
dept_name
tot_cred
foreign key (dept_name) references department );
■ create table takes (

ID course_id sec_id semester year
grade primary key
varchar(5),
 varchar(8),
 varchar(8),
 varchar(6),

numeric(4,0),
 varchar(2),

varchar(5) primary key,
 varchar(20) not null,
 varchar(20),
 numeric(3,0),

(ID, course_id, sec_idm semester, year), foreign key (ID) references student,

foreign key (course_id, sec_id, semester, year) references section ); ■ Note: when designing a schema, always identify primary keys, foreign keys,
and not-null attributes.
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.7 ©Silberschatz, Korth and Sudarshan

Drop and Alter Table Constructs
■ drop table
■ alter table
● altertableraddAD
! where A is the name of the attribute to be added to relation
r andDisthedomainofA.
! All tuples in the relation are assigned null as the value for the new attribute.
● altertablerdropA
! where A is the name of an attribute of relation r
! Dropping of attributes not supported by many databases.
■ Note: when working with (most) DBMSs, put your SQL commands into files so you do not have to type them again.
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.8 ©Silberschatz, Korth and Sudarshan

Basic Query Structure
■ SQL is based on set and relational operations with certain modifications and enhancements
■ 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.
■ This query is equivalent to the relational algebra expression.
∏
 (σ (r ×r ×…×r ))
A,A,…,A P 1 2 m 12n
■ The result of an SQL query is a relation.
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.9
©Silberschatz, Korth and Sudarshan

The select Clause
■ The select clause list the attributes desired in the result of a query ● correspondstotheprojectionoperationoftherelationalalgebra
■ Example: find the names of all instructors:
 select name

from instructor
■ In the relational algebra, the query would be:
∏name (instructor)
■ NOTE: SQL names are case insensitive (i.e., you may use upper- or
lower-case letters.)
● E.g., Name ≡ NAME ≡ name
● Somepeopleuseuppercasewhereverweuseboldfont.
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.10 ©Silberschatz, Korth and Sudarshan

The select Clause (Cont.)
■ 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.
 select all dept_name

from instructor
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.11 ©Silberschatz, Korth and Sudarshan

The select Clause (Cont.)
■ Anasteriskintheselectclausedenotes“allattributes” 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.
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.12 ©Silberschatz, Korth and Sudarshan

The where Clause
■ The where clause specifies conditions that the result must satisfy ● Correspondstotheselectionpredicateoftherelationalalgebra.
■ To 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.
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.13 ©Silberschatz, Korth and Sudarshan

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).
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.14 ©Silberschatz, Korth and Sudarshan

instructor
Cartesian Product
teaches
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.15 ©Silberschatz, Korth and Sudarshan

Joins
■ For all instructors who have taught courses, 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.’
■ Note: you almost always want a join, not a Cartesian product.
Also, joins are usually done along foreign keys.
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.16 ©Silberschatz, Korth and Sudarshan

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;
■ Note: in general, join can be specified explicitly or in where clause.
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.17 ©Silberschatz, Korth and Sudarshan

Natural Join (Cont.)
■ Danger in natural join: beware of unrelated attributes with same name which get equated incorrectly
■ List the names of instructors along with the the titles of courses that they teach
■ Incorrect version (equates course.dept_name with instructor.dept_name) ● selectname,title

from instructor natural join teaches natural join course;
■ Correct version
● selectname,title

from instructor natural join teaches, course
 where teaches.course_id= course.course_id;
■ Another correct version ● selectname,title

from (instructor natural join teaches) join course using(course_id);
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.18 ©Silberschatz, Korth and Sudarshan

The Rename Operation
■ The SQL allows renaming relations and attributes using the as clause: old-name as new-name
■ E.g.,
● selectID,name,salary/12asmonthly_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.’
■ Keyword as is optional and may be omitted
 instructor as T ≡ instructor T
■ Note: some systems require as to be omitted in from clause.
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.19 ©Silberschatz, Korth and Sudarshan

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 ‘\’
■ 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.
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.20 ©Silberschatz, Korth and Sudarshan

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
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.21 ©Silberschatz, Korth and Sudarshan

Where Clause Predicates
■ SQL includes a between comparison operator
■ Example: Find the names of all instructors with salary between
$90,000 and $100,000 (that is, ≥ $90,000 and ≤ $100,000)
● select name

from instructor

where salary between 90000 and 100000
■ Tuple comparison
● select name, course_id

from instructor, teaches

where (instructor.ID, dept_name) = (teaches.ID, ’Biology’);
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.22 ©Silberschatz, Korth and Sudarshan

Duplicates
■ In relations with duplicates, SQL can define how many copies of tuples appear in the result.
■ Multiset versions of some of the relational algebra operators – given multiset relations r1 and r2:
1.
2.
3.
σθ (r1): If there are c1 copies of tuple t1 in r1, and t1 satisfies selections σθ,, then there are c1 copies of t1 in σθ (r1).
ΠA (r ): For each copy of tuple t1 in r1, there is a copy of tuple
ΠA (t1) in ΠA (r1) where ΠA (t1) denotes the projection of the single tuple t1.
r1 x r2: If there are c1 copies of tuple t1 in r1 and c2 copies of tuple t2 inr2,therearec1 xc2 copiesofthetuplet1.t2 inr1 xr2
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.23 ©Silberschatz, Korth and Sudarshan

Duplicates (Cont.)
■ Example: Suppose multiset relations r1 (A, B) and r2 (C) are as follows:
r1 = {(1, a) (2,a)} r2 = {(2), (3), (3)}
■ Then ΠB(r1) would be {(a), (a)}, while ΠB(r1) x r2 would be
{(a,2), (a,2), (a,3), (a,3), (a,3), (a,3)}
■ SQL duplicate semantics:
select A1,, A2, …, An
 from r1, r2, …, rm
 where P
is equivalent to the multiset version of the expression:
∏ (σ (r ×r ×…×r )) A,A,…,A P 1 2 m
12n
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.24 ©Silberschatz, Korth and Sudarshan

Set Operations
■ Find courses that ran in Fall 2009 or 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) ■ Find courses that ran in Fall 2009 but not in Spring 2010
(select course_id from section where sem = ‘Fall’ and year = 2009)
 except

(select course_id from section where sem = ‘Spring’ and year = 2010)
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.25 ©Silberschatz, Korth and Sudarshan

Set Operations
■ Set operations union, intersect, and except
● Each of the above operations automatically eliminates duplicates
n Toretainallduplicatesusethecorrespondingmultisetversions union all, intersect all and except all.

n Supposeatupleoccursmtimesinrandntimesins,then,itoccurs: ● m +ntimesinrunionalls
● min(m,n) times in r intersect all s
● max(0, m – n) times in r except all s
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.26 ©Silberschatz, Korth and Sudarshan

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
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.27 ©Silberschatz, Korth and Sudarshan

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
■ Result of where clause predicate is treated as false if it evaluates to unknown
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.28 ©Silberschatz, Korth and Sudarshan

Aggregate Functions
■ These functions operate on the multiset of (numerical) 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
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.29 ©Silberschatz, Korth and Sudarshan

Aggregate Functions (Cont.)
■ 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;
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.30 ©Silberschatz, Korth and Sudarshan

Aggregate Functions – Group By
■ Find the average salary of instructors in each department
● selectdept_name,avg(salary)
 from instructor

group by dept_name;
avg_salary
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.31 ©Silberschatz, Korth and Sudarshan

Aggregation (Cont.)
■ Attributes in select clause outside of aggregate functions must appear in group by list
● /*erroneousquery*/

select dept_name, ID, avg (salary)
 from instructor

group by dept_name;
■ Note: a very common mistake. But note that having ID in here also does not make sense if you think about it.
■ But how about which instructor has highest salary in each department?
select dept_name, ID, max (salary)
 from instructor

group by dept_name;
! Still not allowed!
! And there could be several instructors making the maximum
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.32 ©Silberschatz, Korth and Sudarshan

Aggregation (Cont.)
■ Andneverneverdothis!
● /* erroneous query */
 select ID

from instructor having max(salary)
■ Does this output instructor making the maximum? ■ No, completely nonsensical
■ max(salary) is a number, say 20000.
■ What does “having 20000” mean?
■ having-expression has to evaluate to true of false
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.33 ©Silberschatz, Korth and Sudarshan

Aggregate Functions – Having Clause
■ Find the names and average salaries of all departments whose average salary is greater than 42000
select dept_name, avg (salary) from instructor
group by dept_name
having avg (salary) > 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
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.34 ©Silberschatz, Korth and Sudarshan

Aggregate Functions – Having Clause
■ Full version of aggregation queries:
■ select … from … where … group by … having … ■ E.g.,
select dept_name, avg (salary) from instructor join department where budget > 100000
group by dept_name
having avg (salary) > 42000; Note: this is equivalent to RA expression
∏dept_name, avs ( σ avs > 42000 (dept_name avg(salary) as avs
(σbudget > 100000 (instructor department ) ) ) )
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.35 ©Silberschatz, Korth and Sudarshan

Null Values and Aggregates
■ Total all salaries
select sum (salary )

from instructor
● Above statement ignores null amounts
● Result is null if there is no non-null amount
■ Allaggregateoperationsexceptcount(*)ignoretupleswithnull
values on the aggregated attributes
■ What if collection has only null values?
● count returns 0
● all other aggregates return null
■ Note: sum/count is not always same as avg, due to null values
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.36 ©Silberschatz, Korth and Sudarshan

Nested Subqueries
■ SQL provides a mechanism for the nesting of subqueries.
■ Asubqueryisaselect-from-whereexpressionthatisnested
within another query.
■ Acommonuseofsubqueriesistoperformtestsforset membership, set comparisons, and set cardinality.
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.37 ©Silberschatz, Korth and Sudarshan


Example Query
Find courses offered in Fall 2009 and 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); 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 not in (select course_id from section
where semester = ’Spring’ and year= 2010);

Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.38 ©Silberschatz, Korth and Sudarshan

Example Query
■ 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);
■ Note: Above query can be written in a much simpler manner. The 
 formulation above is simply to illustrate SQL features.
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.39 ©Silberschatz, Korth and Sudarshan

Usually should not do this:
■ Output the names of all instructors who are in departments with budget > 100000
select name
from instructor
where dept_name in (select dept_name
from department
where budget > 100000);
■ This is correct syntax, but a very complicated way to do a simple join ■ Instead just do a join:
select name
from instructor join department where budget > 100000);
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.40 ©Silberschatz, Korth and Sudarshan

Set Comparison
■ Find names of instructors with salary greater than that of some (at least one) instructor in the Biology department.
select distinct T.name
from instructor as T, instructor as S
where T.salary > S.salary and S.dept name = ’Biology’;
■ Same query using > some clause
select name
from instructor
where salary > some (select salary from instructor
where dept name = ’Biology’);
■ Note: could also use min here (greater than the minimum)
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.41 ©Silberschatz, Korth and Sudarshan

Definition of Some Clause
■ Fsomer⇔∃t∈r suchthat(Ft)
 Where can be: <, ≤, >, =, ≠
0
5
6
(5 < some (5 < some (5 = some (5 ≠ some (= some) ≡ in ) = true ) = false ) = true (read: 5 < some tuple in the relation) 0 5 0 5 0 5 ) = true (since 0 ≠ 5) However, (≠ some) ≡ not in Database System Concepts - 6th Edition Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.42 ©Silberschatz, Korth and Sudarshan Example Query ■ 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’);
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.43 ©Silberschatz, Korth and Sudarshan

Definition of all Clause
■ Fallr⇔∀t∈r (Ft)
0
5
6
(5 < all (5 < all (5 = all ) = true (since 5 ≠ 4 and 5 ≠ 6) However, (= all) ≡ in Database System Concepts - 6th Edition Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.44 ©Silberschatz, Korth and Sudarshan ) = false ) = true ) = false 6 10 4 5 4 6 (5 ≠ all (≠ all) ≡ not in Test for Empty Relations ■ The exists construct returns the value true if the argument subquery is nonempty. ■ exists r⇔ r≠Ø ■ notexistsr⇔ r=Ø Database System Concepts - 6th Edition Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.45 ©Silberschatz, Korth and Sudarshan Correlation Variables ■ Yet another way of specifying 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 ■ Note: correlation can severely impact efficiency Database System Concepts - 6th Edition Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.46 ©Silberschatz, Korth and Sudarshan ■ 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)); ■ NotethatX–Y=Ø ⇔ X⊆Y ■ Note: Cannot write this query using = all and its variants Database System Concepts - 6th Edition Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.47 ©Silberschatz, Korth and Sudarshan Test for Absence of Duplicate Tuples ■ The unique construct tests whether a subquery has any duplicate tuples in its result. ■ 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); Database System Concepts - 6th Edition Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.48 ©Silberschatz, Korth and Sudarshan Derived Relations ■ SQL allows a subquery expression to be used in the from clause ■ 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 that we do not need to use the having clause
■ 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;
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.49 ©Silberschatz, Korth and Sudarshan

With Clause
■ The 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;
■ Note: often easy to output max, but hard to output who has the max
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.50 ©Silberschatz, Korth and Sudarshan

Complex Queries using With Clause
■ 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;
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.51 ©Silberschatz, Korth and Sudarshan

Scalar Subquery
select dept_name, 
 (select count(*) 

from instructor 

where department.dept_name = instructor.dept_name)

as num_instructors
 from department;
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.52 ©Silberschatz, Korth and Sudarshan

Modification of the Database – 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’);
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.53 ©Silberschatz, Korth and Sudarshan

Example Query
■ Delete all instructors whose salary is less than the average salary of instructors
delete from instructor
where salary< (select avg (salary) from instructor); l Problem: as we delete tuples from deposit, the average salary changes --> what would happen?
l 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)
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.54 ©Silberschatz, Korth and Sudarshan

Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.55 ©Silberschatz, Korth and Sudarshan

Modification of the Database – 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);
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.56 ©Silberschatz, Korth and Sudarshan

Modification of the Database – Insertion
■ Addallinstructorstothestudentrelationwithtot_credssetto0
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)
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.57 ©Silberschatz, Korth and Sudarshan


Modification of the Database – Updates
Increase salaries of instructors whose salary is over $100,000 by 3%, and all others receive a 5% raise
● Writetwoupdatestatements:
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?) ● Canbedonebetterusingthecasestatement(nextslide) Database System Concepts - 6th Edition Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.58 ©Silberschatz, Korth and Sudarshan Case Statement for Conditional Updates ■ Same query as before but with case statement update instructor
 set salary = case
 when salary <= 100000 then salary * 1.05
 else salary * 1.03
 end Database System Concepts - 6th Edition Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.59 ©Silberschatz, Korth and Sudarshan 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
Database System Concepts – 6th Edition
Modified by T. Suel for CS6083, NYU School of Engineering , Spring 2020 3.60 ©Silberschatz, Korth and Sudarshan