+ All Categories
Home > Engineering > Chapter 3b SQL

Chapter 3b SQL

Date post: 12-Apr-2017
Category:
Upload: sunita-aher
View: 24 times
Download: 0 times
Share this document with a friend
92
Chapter 3: SQL Mrs. Sunita M Dol (Aher), Assistant Professor, Computer Science and Engineering Department, Walchand Institute of Technology, Solapur, Maharashtra
Transcript
Page 1: Chapter 3b SQL

Chapter 3: SQLMrs. Sunita M Dol (Aher),

Assistant Professor,Computer Science and Engineering Department,

Walchand Institute of Technology, Solapur, Maharashtra

Page 2: Chapter 3b SQL

Chapter 3: SQL• Background• Data Definition• Basic Query Structure• Set Operations• Aggregate Functions• Null Values• Nested Subqueries• Complex Queries • Views• Modification of the Database• Joined Relations

02/05/2023 2Mrs. Sunita M Dol, WIT, Solapur

Page 3: Chapter 3b SQL

Background• 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 (language name became Y2K compliant!)– SQL:2003

• 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 your particular system.

02/05/2023 3Mrs. Sunita M Dol, WIT, Solapur

Page 4: Chapter 3b SQL

Background• The SQL Language has several parts

– DDL: The SQL DDL provides commands for defining relation schemas, deleting relations, and modifying relation schemas.

– Interactive DML: It includes also commands to insert tuples into, delete tuples from, and modify tuples in the database.

– Integrity: The SQL DDL includes commands for specifying integrity constraints that the data stored in the database must satisfy.

– View Definition: The SQL DDL includes commands for defining views.

02/05/2023 4Mrs. Sunita M Dol, WIT, Solapur

Page 5: Chapter 3b SQL

Background• The SQL Language has several parts

– Transaction control: SQL includes commands for specifying the beginning and ending of transactions.

– Embedded SQL and dynamic SQL:Embedded and dynamic SQL define how SQL statements can be embedded within general-purpose programming languages, such as C, C++, Java, PL/I, Cobol, Pascal, and Fortran.

– Authorization: The SQL DDL includes commands for specifying access rights to relations and views.

02/05/2023 5Mrs. Sunita M Dol, WIT, Solapur

Page 6: Chapter 3b SQL

• 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.

Data Definition

02/05/2023 6Mrs. Sunita M Dol, WIT, Solapur

Page 7: Chapter 3b SQL

• Basic Domain Types– 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.

Data Definition

02/05/2023 7Mrs. Sunita M Dol, WIT, Solapur

Page 8: Chapter 3b SQL

• Database Schemabranch (branch_name, branch_city, assets)customer (customer_name, customer_street, customer_city)loan (loan_number, branch_name, amount)borrower (customer_name, loan_number)account (account_number, branch_name, balance)depositor (customer_name, account_number)

Data Definition

02/05/2023 8Mrs. Sunita M Dol, WIT, Solapur

Page 9: Chapter 3b SQL

The customer relation The branch relation..

The account relation..

The loan relation. The borrower relation. The depositor relation

Data Definition

02/05/2023 9Mrs. Sunita M Dol, WIT, Solapur

Page 10: Chapter 3b SQL

• Basic Schema Definition in SQL– CREATE command

• An SQL relation is defined using the create table command: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 branch

(branch_name char(15) not null,branch_city char(30),assets integer)

Data Definition

02/05/2023 10Mrs. Sunita M Dol, WIT, Solapur

Page 11: Chapter 3b SQL

• Integrity Constraints on CREATE command– not null: The not null constraint on an attribute specifies that the null value is not allowed for that

attribute; • Example: Declare branch_name as the primary key for branch

create table branch

(branch_name char(15), branch_city char(30) not null,

assets integer,

primary key (branch_name))

Data Definition

02/05/2023 11Mrs. Sunita M Dol, WIT, Solapur

Page 12: Chapter 3b SQL

• Integrity Constraints on CREATE command– primary key (A1, ..., An ): The primary-key specification says that attributes Aj1 , Aj2, .

. . , Ajm form the primary key for the relation. The primary key attributes are required to

be nonnull and unique• Example: Declare branch_name as the primary key for branch

create table branch

(branch_name char(15), branch_citychar(30),

assets integer, primary key (branch_name))

Data Definition

02/05/2023 12Mrs. Sunita M Dol, WIT, Solapur

Page 13: Chapter 3b SQL

• Integrity Constraints on CREATE command– check(P) constraints : The check clause specifies a predicate P that must be satisfied

by every tuple in the relation.• Example:

create table branch (branch_name char(15),branch_city char(15),assets numeric(16,2),

primary key(branch_name), check(assets>=0));

Data Definition

02/05/2023 13Mrs. Sunita M Dol, WIT, Solapur

Page 14: Chapter 3b SQL

• Integrity Constraints on CREATE command– foreign key (Ak1 , Ak2, . . . , Akn ) references s: The foreign key specification says that

the values of attributes (Ak1 , Ak2, . . . , Akn ) for any tuple in the relation must correspond to values of the primary key attributes of some tuple in relation s.

Data Definition

create table branch (branch_name char(15), branch_city char(15), assets numeric(16,2), primary key(branch_name), check(assets>=0));

create table account (account_number char(10), branch_name char(15), balance numeric(12,2), primary key(account_number), foreign key(branch_name)references branch, check(balance>=0));

02/05/2023 14Mrs. Sunita M Dol, WIT, Solapur

Page 15: Chapter 3b SQL

• Drop and Alter Command– The drop table command deletes all information about the dropped relation from the

database.– The alter table command is used to add attributes to an existing relation:

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.

– The alter table command can also be used to drop attributes of a relation:alter table r drop A

where A is the name of an attribute of relation r– Dropping of attributes not supported by many databases

Data Definition

02/05/2023 15Mrs. Sunita M Dol, WIT, Solapur

Page 16: Chapter 3b SQL

Basic Structure of SQL Queries • 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, ..., rmwhere P

Ai represents an attribute– Ri represents a relation– P is a predicate.

• This query is equivalent to the relational algebra expression.

• The result of an SQL query is a relation.

))(( 21,,, 21 mPAAA rrrn

02/05/2023 16Mrs. Sunita M Dol, WIT, Solapur

Page 17: Chapter 3b SQL

• The Select Clause– The select clause list the attributes desired in the result of a query– This clause corresponds to the projection operation of the relational algebra

• Example: find the names of all branches in the loan relation:select branch_name

from loan– In the relational algebra, the query would be:

branch_name (loan)– NOTE: SQL names are case insensitive (i.e., you may use upper- or lower-case letters.)

• E.g. Branch_Name ≡ BRANCH_NAME ≡ branch_name• Some people use upper case wherever we use bold font.

The loan relation.

Basic Structure of SQL Queries

02/05/2023 17Mrs. Sunita M Dol, WIT, Solapur

Page 18: Chapter 3b SQL

• 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 branches in the loan relations, and remove duplicates

select distinct branch_namefrom loan

– The keyword all specifies that duplicates not be removed.select all branch_namefrom loan

The loan relation.

Basic Structure of SQL Queries

02/05/2023 18Mrs. Sunita M Dol, WIT, Solapur

Page 19: Chapter 3b SQL

• The Select Clause– An asterisk in the select clause denotes “all attributes”

select *from loan

– The select clause can contain arithmetic expressions involving the operation, +, –, *, and /, and operating on constants or attributes of tuples.

– The query: select loan_number, branch_name, amount * 100 from loan would return a relation that is the same as the loan relation, except that the value

of the attribute amount is multiplied by 100.

The loan relation.

Basic Structure of SQL Queries

02/05/2023 19Mrs. Sunita M Dol, WIT, Solapur

Page 20: Chapter 3b SQL

• The Where Clause– The where clause specifies conditions that the result must satisfy– This clause corresponds to the selection predicate of the relational algebra.

• Example: To find all loan number for loans made at the Perryridge branch with loan amounts greater than $1200.select loan_numberfrom loanwhere branch_name = 'Perryridge' and amount > 1200

– Comparison results can be combined using the logical connectives and, or, and not. – Comparisons can be applied to results of arithmetic expressions.

The loan relation.

Basic Structure of SQL Queries

02/05/2023 20Mrs. Sunita M Dol, WIT, Solapur

Page 21: Chapter 3b SQL

• The Where Clause– SQL includes a between comparison operator

• Example: Find the loan number of those loans with loan amounts between $900 and $1000 (that is, <= $900 and >= $1000)select loan_number

from loanwhere amount between 900 and 1000

select loan_numberfrom loanwhere amount <=1000 and amount>=900

The loan relation.

Basic Structure of SQL Queries

02/05/2023 21Mrs. Sunita M Dol, WIT, Solapur

Page 22: Chapter 3b SQL

• The From Clause– The from clause lists the relations involved in the query– This clause Corresponds to the Cartesian product operation of the relational

algebra.• Example: Find the Cartesian product borrower X loan

select *from borrower, loan

• Example: Find the name, loan number and loan amount of all customers having a loan at the Perryridge branch. select customer_name, borrower.loan_number, amount

from borrower, loan where borrower.loan_number = loan.loan_number and branch_name = 'Perryridge'

The loan relation.

The borrower relation.

Basic Structure of SQL Queries

02/05/2023 22Mrs. Sunita M Dol, WIT, Solapur

Page 23: Chapter 3b SQL

• The Rename Operation– The SQL allows renaming relations and attributes using the as clause:

old-name as new-name• Example: Find the name, loan number and loan amount of all customers; rename the column

name loan_number as loan_id.select customer_name, borrower.loan_number as loan_id, amountfrom borrower, loanwhere borrower.loan_number = loan.loan_number

The loan relation.

The borrower relation.

Basic Structure of SQL Queries

02/05/2023 23Mrs. Sunita M Dol, WIT, Solapur

Page 24: Chapter 3b SQL

• Tuple Variables– Tuple variables are defined in the from clause via the use of the as clause.– Keyword as is optional and may be omitted

borrower as T ≡ borrower T• Example 1: Find the customer names, their loan numbers and amount for all customers

having a loan at some branch.select customer_name, T.loan_number, S.amount

from borrower as T, loan as S where T.loan_number = S.loan_number

The loan relation.

The borrower relation.

Basic Structure of SQL Queries

02/05/2023 24Mrs. Sunita M Dol, WIT, Solapur

Page 25: Chapter 3b SQL

• Tuple Variables• Example 2: Find the names of all branches that have greater assets than some branch located in

Brooklyn. select distinct T.branch_name from branch as T, branch as S where T.assets > S.assets and S.branch_city = 'Brooklyn'

The branch relation.

Basic Structure of SQL Queries

02/05/2023 25Mrs. Sunita M Dol, WIT, Solapur

Page 26: Chapter 3b SQL

• 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.

– ’Perry%’ matches any string beginning with “Perry”.– ’%idge%’ matches any string containing “idge” as a substring, for example,– ’Perryridge’, ’Rock Ridge’, ’Mianus Bridge’, and ’Ridgeway’.– ’_ _ _ ’ matches any string of exactly three characters.– ’ %’ matches any string of at least three characters.

Basic Structure of SQL Queries

02/05/2023 26Mrs. Sunita M Dol, WIT, Solapur

Page 27: Chapter 3b SQL

• String Operations• Example: Find the names of all customers whose street includes the substring “Main”.

select customer_namefrom customerwhere customer_street like '% Main%'

– 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. The customer relation.

Basic Structure of SQL Queries

02/05/2023 27Mrs. Sunita M Dol, WIT, Solapur

Page 28: Chapter 3b SQL

• String Operations– SQL allows the specification of an escape character. The escape character is used

immediately before a special pattern character to indicate that the special pattern character is to be treated like a normal character.

– We define the escape character for a like comparison using the escape keyword. – To illustrate, consider the following patterns, which use a backslash (\) as the escape

character:• like ’ab\%cd%’ escape ’\’ matches all strings beginning with “ab%cd”.• like ’ab\\cd%’ escape ’\’ matches all strings beginning with “ab\cd”.

Basic Structure of SQL Queries

02/05/2023 28Mrs. Sunita M Dol, WIT, Solapur

Page 29: Chapter 3b SQL

• Ordering the display of tuples– The order by clause causes the tuples in the result of a query to

appear in sorted order.• Example: List in alphabetic order the names of all customers having a loan in

Perryridge branchselect distinct customer_namefrom borrower, loanwhere borrower loan_number = loan.loan_number and

branch_name = 'Perryridge' order by customer_name

– We may specify desc for descending order or asc for ascending order, for each attribute; ascending order is the default.

• Example: order by customer_name desc

The loan relation.

The borrower relation.

Basic Structure of SQL Queries

02/05/2023 29Mrs. Sunita M Dol, WIT, Solapur

Page 30: Chapter 3b SQL

• 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. (r1): If there are c1 copies of tuple t1 in r1, and t1 satisfies selections ,, then there are c1

copies of t1 in (r1).2. 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.3. r1 x r2 : If there are c1 copies of tuple t1 in r1 and c2 copies of tuple t2 in r2, there are c1 x c2

copies of the tuple t1. t2 in r1 x r2

Basic Structure of SQL Queries

02/05/2023 30Mrs. Sunita M Dol, WIT, Solapur

Page 31: Chapter 3b SQL

• Duplicates• 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:))(( 21,,, 21 mPAAA rrr

n

Basic Structure of SQL Queries

02/05/2023 31Mrs. Sunita M Dol, WIT, Solapur

Page 32: Chapter 3b SQL

Set Operations• The set operations union, intersect, and except operate on relations and correspond

to the relational algebra operations • 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

02/05/2023 32Mrs. Sunita M Dol, WIT, Solapur

Page 33: Chapter 3b SQL

Set Operations• The Union Operation

– The union operation automatically eliminates duplicates– The number of duplicate tuples in the result is equal to the total number of duplicates

that appear in both d and b. Thus, if Jones has three accounts and two loans at the bank, then there will be five tuples with the name Jones in the result.

• Find all customers who have a loan, an account, or both :(select customer_name from depositor)intersect(select customer_name from borrower)

• Find all customers who have a loan, an account, or both :(select customer_name from depositor)intersect all(select customer_name from borrower)

The borrower relation.

The depositor relation.

02/05/2023 33Mrs. Sunita M Dol, WIT, Solapur

Page 34: Chapter 3b SQL

Set Operations• The Intersect Operation

– The intersect operation automatically eliminates duplicates– The number of duplicate tuples that appear in the result is equal to the minimum number

of duplicates in both d and b. Thus, if Jones has three accounts and two loans at the bank, then there will be two tuples with the name Jones in the result.

• Find all customers who have a loan and an account :(select customer_name from depositor)union(select customer_name from borrower)

• Find all customers who have a loan and an account :(select customer_name from depositor)union all(select customer_name from borrower)

The borrower relation.

The depositor relation.

02/05/2023 34Mrs. Sunita M Dol, WIT, Solapur

Page 35: Chapter 3b SQL

Set Operations• The Except Operation

– The except operation automatically eliminates duplicates– The number of duplicate copies of a tuple in the result is equal to the number of duplicate

copies of the tuple in d minus the number of duplicate copies of the tuple in b, provided that the difference is positive. Thus, if Jones has three accounts and one loan at the bank, then there will be two tuples with the name Jones in the result. If, instead, this customer has two accounts and three loans at the bank, there will be no tuple with the name Jones in the result.

• Find all customers who have a loan and an account :(select customer_name from depositor)union(select customer_name from borrower)

• Find all customers who have a loan and an account :(select customer_name from depositor)union all(select customer_name from borrower)

The borrower relation.

The depositor relation.

02/05/2023 35Mrs. Sunita M Dol, WIT, Solapur

Page 36: Chapter 3b SQL

Aggregate Functions• Aggregate functions are functions that take a collection (a set or multiset) of values

as input and return a single value. SQL offers five built-in aggregate functions:avg: average valuemin: minimum valuemax: maximum valuesum: sum of valuescount: number of values

• The input to sum and avg must be a collection of numbers, but the other operators can operate on collections of nonnumeric data types, such as strings, as well.

02/05/2023 36Mrs. Sunita M Dol, WIT, Solapur

Page 37: Chapter 3b SQL

Aggregate Functions – Find the average account balance at the Perryridge branch.

select avg (balance)from accountwhere branch_name = 'Perryridge'

– Find the number of tuples in the customer relation.select count (*)from customer

– Find the number of depositors in the bank.select count (distinct customer_name)from depositor

– Find the average balance for all accounts.select avg (balance)from account

The account relation.

The customer relation.

The depositor relation.

02/05/2023 37Mrs. Sunita M Dol, WIT, Solapur

Page 38: Chapter 3b SQL

Aggregate Functions • Group by clause

– Group by clause is used to specify that the aggregate function not only to a single set of tuples, but also to a group of sets of tuples.

– The attribute or attributes given in the group by clause are used to form groups. – Tuples with the same value on all attributes in the group by clause are placed in one group.

• Example 1: Find the average account balance at each branchselect branch-name, avg (balance)from accountgroup by branch-name

The branch relation.

02/05/2023 38Mrs. Sunita M Dol, WIT, Solapur

Page 39: Chapter 3b SQL

Aggregate Functions• Group by clause

• Example 2: Find the number of depositors for each branch. select branch_name, count (distinct customer_name)

from depositor, account where depositor.account_number = account.account_number group by branch_name– Note: Attributes in select clause outside of aggregate functions must appear in group by

list

The account relation.

The depositor relation.

02/05/2023 39Mrs. Sunita M Dol, WIT, Solapur

Page 40: Chapter 3b SQL

Aggregate Functions • Having clause

– Having clause is used when the condition applies to each group constructed by the group by clause.

• Find the names of all branches where the average account balance is more than $1,200.select branch_name, avg (balance)

from account group by branch_name having avg (balance) > 1200– Note: predicates in the having clause are applied after the formation of groups whereas

predicates in the where clause are applied before forming groups

The account relation.

02/05/2023 40Mrs. Sunita M Dol, WIT, Solapur

Page 41: Chapter 3b SQL

Aggregate Functions• Having clause

• Example: Find the average balance for each customer who lives in Harrison and has at least 3 accounts.

select depositor.customer-name, avg (balance)from depositor, account, customerwhere depositor.account-number = account.account-number and

depositor.customer-name = customer.customer-name andcustomer-city = ’Harrison’

group by depositor.customer-namehaving count (distinct depositor.account-number) >= 3

The account relation.

The customer relation.

The depositor relation.

02/05/2023 41Mrs. Sunita M Dol, WIT, Solapur

Page 42: Chapter 3b SQL

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 predicate is null can be used to check for null values.

– Example: Find all loan number which appear in the loan relation with null values for amount.

select loan_numberfrom loanwhere amount is null

• The result of any arithmetic expression involving null is null– Example: 5 + null returns null

• However, aggregate functions simply ignore nulls

02/05/2023 42Mrs. Sunita M Dol, WIT, Solapur

Page 43: Chapter 3b SQL

Null Values• 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

02/05/2023 43Mrs. Sunita M Dol, WIT, Solapur

Page 44: Chapter 3b SQL

Null Values• Total all loan amounts

select sum (amount )from loan

– Above statement ignores null amounts– Result is null if there is no non-null amount

• All aggregate operations except count(*) ignore tuples with null values on the aggregated attributes.

02/05/2023 44Mrs. Sunita M Dol, WIT, Solapur

Page 45: Chapter 3b SQL

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.

02/05/2023 45Mrs. Sunita M Dol, WIT, Solapur

Page 46: Chapter 3b SQL

• Set Membership– SQL draws on the relational calculus for operations that allow testing tuples for

membership in a relation.– The in connective tests for set membership, where the set is a collection of values

produced by a select clause. – The not in connective tests for the absence of set membership.

• Example :Find all customers who have both an account and a loan at the bank. select distinct customer_name

from borrowerwhere customer_name in (select customer_name

from depositor )

Nested Subqueries

02/05/2023 46Mrs. Sunita M Dol, WIT, Solapur

Page 47: Chapter 3b SQL

• Set Membership• Find all customers who have a loan at the bank but do not have

an account at the bankselect distinct customer_namefrom borrowerwhere customer_name not in (select customer_name

from depositor )

Nested Subqueries

02/05/2023 47Mrs. Sunita M Dol, WIT, Solapur

Page 48: Chapter 3b SQL

• Set Membership• Find all customers who have both an account and a loan at the Perryridge branch

select distinct customer_namefrom borrower, loanwhere borrower.loan_number = loan.loan_number and

branch_name = 'Perryridge' and (branch_name, customer_name ) in (select branch_name, customer_name

from depositor, account where

depositor.account_number = account.account_number )

The account relation. The depositor relation. The loan relation. The borrower relation.

Nested Subqueries

02/05/2023 48Mrs. Sunita M Dol, WIT, Solapur

Page 49: Chapter 3b SQL

• Set Membership• Find all customers who do have a loan at the bank, but do not have an account at the bank,

select distinct customer-namefrom borrowerwhere customer-name not in (select customer-name from depositor)

The depositor relation. The borrower relation.

Nested Subqueries

02/05/2023 49Mrs. Sunita M Dol, WIT, Solapur

Page 50: Chapter 3b SQL

• Set Membership– The in and not in operators can also be used on enumerated sets.

• The following query selects the names of customers who have a loan at the bank, and whose names are neither Smith nor Jones.

select distinct customer-namefrom borrowerwhere customer-name not in (’Smith’, ’Jones’)

The borrower relation.

Nested Subqueries

02/05/2023 50Mrs. Sunita M Dol, WIT, Solapur

Page 51: Chapter 3b SQL

• Set Comparison– The phrase “greater than at least one” is represented in SQL by > some.– SQL also allows < some, <= some, >= some, = some, and<> some comparisons.

• Find all branches that have greater assets than some branch located in Brooklyn.select distinct T.branch_namefrom branch as T, branch as Swhere T.assets > S.assets and S.branch_city = 'Brooklyn'

• Same query using > some clauseselect branch_namefrom branchwhere assets > some (select assets from branch

where branch_city = 'Brooklyn')

The branch relation.

Nested Subqueries

02/05/2023 51Mrs. Sunita M Dol, WIT, Solapur

Page 52: Chapter 3b SQL

• Set Comparison– F <comp> some r t r such that (F <comp> t )

Where <comp> can be: 056

(5 < some ) = true

05

0

) = false

5

05

(5 some ) = true (since 0 5)

(read: 5 < some tuple in the relation)

(5 < some

) = true(5 = some

(= some) inHowever, ( some) not in

Nested Subqueries

02/05/2023 52Mrs. Sunita M Dol, WIT, Solapur

Page 53: Chapter 3b SQL

• Set Comparison• Find the names of all branches that have greater assets than all branches located in Brooklyn.

select branch_namefrom branchwhere assets > all

(select assetsfrom branchwhere branch_city = 'Brooklyn')

The branch relation.

Nested Subqueries

02/05/2023 53Mrs. Sunita M Dol, WIT, Solapur

Page 54: Chapter 3b SQL

• Set Comparison– F <comp> all r t r (F <comp> t)

056

(5 < all ) = false

610

4

) = true

5

46

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

(5 < all

) = false(5 = all

( all) not inHowever, (= all) in

Nested Subqueries

02/05/2023 54Mrs. Sunita M Dol, WIT, Solapur

Page 55: Chapter 3b SQL

• Set Comparison• Find the branch that has the highest average balance.

select branch-namefrom accountgroup by branch-namehaving avg (balance) >= all (select avg (balance) from account group by branch-name)

The account relation.

Nested Subqueries

02/05/2023 55Mrs. Sunita M Dol, WIT, Solapur

Page 56: Chapter 3b SQL

• Test for empty relations– SQL includes the feature for testing whether a subquery has any tuple in its result.– The exists construct returns the value true if the argument subquery is nonempty.– exists r r Ø– not exists r r = Ø

Nested Subqueries

02/05/2023 56Mrs. Sunita M Dol, WIT, Solapur

Page 57: Chapter 3b SQL

• Test for empty relations• Find all customers who have both an account and a loan at the bank.

select customer-namefrom borrowerwhere exists (select *

from depositor where depositor.customer-name = borrower.customer-name)

The depositor relation. The borrower relation.

Nested Subqueries

02/05/2023 57Mrs. Sunita M Dol, WIT, Solapur

Page 58: Chapter 3b SQL

• Test for empty relations• Find all customers who have an account at all branches located in Brooklyn.

select distinct S.customer_namefrom depositor as Swhere not exists (

(select branch_namefrom branchwhere branch_city = 'Brooklyn')

except(select R.branch_namefrom depositor as T, account as Rwhere T.account_number = R.account_number and

S.customer_name = T.customer_name ))– Note that X – Y = Ø X Y– Note: Cannot write this query using = all and its variants

he account relation. The depositor relation.

The branch relation.

Nested Subqueries

02/05/2023 58Mrs. Sunita M Dol, WIT, Solapur

Page 59: Chapter 3b SQL

• Test for the absence of duplicates– The unique construct tests whether a subquery has any duplicate tuples in its result.

• Example: Find all customers who have at most one account at the Perryridge branch. select T.customer_name

from depositor as T where unique (

select R.customer_name from account, depositor as R where T.customer_name = R.customer_name and

R.account_number = account.account_number and account.branch_name = 'Perryridge')

The account relation. The depositor relation.

Nested Subqueries

02/05/2023 59Mrs. Sunita M Dol, WIT, Solapur

Page 60: Chapter 3b SQL

• Test for the absence of duplicates• Find all customers who have at least two accounts at the Perryridge branch.

select distinct T.customer_namefrom depositor as Twhere not unique (

select R.customer_name from account, depositor as R where T.customer_name = R.customer_name and

R.account_number = account.account_number and account.branch_name = 'Perryridge')

– Variable from outer level is known as a correlation variable

The account relation. The depositor relation.

Nested Subqueries

02/05/2023 60Mrs. Sunita M Dol, WIT, Solapur

Page 61: Chapter 3b SQL

Complex Queries• Derived Relations

– SQL allows a subquery expression to be used in the from clause. – If we use such an expression, then we must give the result relation a name, and we can

rename the attributes.• Following subquery generates a relation consisting of the names of all branches and their

corresponding average account balances. The subquery result is named result, with the attributes branch-name and avg-balance.. (select branch_name, avg (balance)

from account group by branch_name )

as branch_avg ( branch_name, avg_balance )

– Note that we do not need to use the having clause, since we compute the temporary (view) relation branch_avg in the from clause, and the attributes of branch_avg can be used directly in the where clause.

The account relation.

02/05/2023 61Mrs. Sunita M Dol, WIT, Solapur

Page 62: Chapter 3b SQL

Complex Queries• Derived Relations

• Example: Find the average account balance of those branches where the average account balance is greater than $1200.select branch_name, avg_balancefrom (select branch_name, avg (balance)

from account group by branch_name )

as branch_avg ( branch_name, avg_balance )where avg_balance > 1200

– Note that we do not need to use the having clause, since we compute the temporary (view) relation branch_avg in the from clause, and the attributes of branch_avg can be used directly in the where clause.

The account relation.

02/05/2023 62Mrs. Sunita M Dol, WIT, Solapur

Page 63: Chapter 3b SQL

Complex Queries• Derived Relations

• Example: find the maximum across all branches of the total balance at each branchselect max(tot-balance)from (select branch-name, sum(balance)from accountgroup by branch-name) as branch-total (branch-name, tot-balance)

The account relation.

02/05/2023 63Mrs. Sunita M Dol, WIT, Solapur

Page 64: Chapter 3b SQL

• 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. • Example: Find all accounts with the maximum balance

with max_balance (value) as select max (balance) from account select account_number from account, max_balance where account.balance = max_balance.value

The account relation.

Complex Queries

02/05/2023 64Mrs. Sunita M Dol, WIT, Solapur

Page 65: Chapter 3b SQL

Complex Queries• With clause

• Find all branches where the total account deposit is greater than the average of the total account deposits at all branches.

with branch_total (branch_name, value) as select branch_name, sum (balance) from account group by branch_name with branch_total_avg (value) as select avg (value) from branch_total select branch_name from branch_total, branch_total_avg where branch_total.value >= branch_total_avg.value

The account relation.

02/05/2023 65Mrs. Sunita M Dol, WIT, Solapur

Page 66: Chapter 3b SQL

Views• In some cases, it is not desirable for all users to see the entire logical model (that is,

all the actual relations stored in the database.)– Consider a person who needs to know a customer’s name, loan number and branch name,

but has no need to see the loan amount. This person should see a relation described, in SQL, by

(select customer_name, borrower.loan_number, branch_name from borrower, loan where borrower.loan_number = loan.loan_number )

• A view provides a mechanism to hide certain data from the view of certain users. • Any relation that is not of the conceptual model but is made visible to a user as a

“virtual relation” is called a view.

02/05/2023 66Mrs. Sunita M Dol, WIT, Solapur

Page 67: Chapter 3b SQL

Views• A view is defined using the create view statement which has the form

create view v as < query expression >

where <query expression> is any legal SQL expression. The view name is represented by v.• Once a view is defined, the view name can be used to refer to the virtual relation that

the view generates.• When a view is created, the query expression is stored in the database; the expression

is substituted into queries using the view.

02/05/2023 67Mrs. Sunita M Dol, WIT, Solapur

Page 68: Chapter 3b SQL

• A view consisting of branches and their customerscreate view all_customer as

(select branch_name, customer_name from depositor, account where depositor.account_number =

account.account_number ) union

(select branch_name, customer_name from borrower, loan where borrower.loan_number = loan.loan_number )

• Find all customers of the Perryridge branchselect customer_namefrom all_customerwhere branch_name = 'Perryridge'

Views

02/05/2023 68Mrs. Sunita M Dol, WIT, Solapur

Page 69: Chapter 3b SQL

Views• One view may be used in the expression defining another view • A view relation v1 is said to depend directly on a view relation v2 if v2 is used in the

expression defining v1

• A view relation v1 is said to depend on view relation v2 if either v1 depends directly to v2 or there is a path of dependencies from v1 to v2

• A view relation v is said to be recursive if it depends on itself.

02/05/2023 69Mrs. Sunita M Dol, WIT, Solapur

Page 70: Chapter 3b SQL

Views• A way to define the meaning of views defined in terms of other views.• Let view v1 be defined by an expression e1 that may itself contain uses of view

relations.• View expansion of an expression repeats the following replacement step:

repeatFind any view relation vi in e1

Replace the view relation vi by the expression defining vi until no more view relations are present in e1

• As long as the view definitions are not recursive, this loop will terminate

02/05/2023 70Mrs. Sunita M Dol, WIT, Solapur

Page 71: Chapter 3b SQL

• A view consisting of branches and their customerscreate view all_customer as

(select branch_name, customer_name from depositor, account where depositor.account_number =

account.account_number ) union

(select branch_name, customer_name from borrower, loan where borrower.loan_number = loan.loan_number )

• The view :Find all customers of the Perryridge branchcreate view perryridge_ customer as

select customer_namefrom all_customerwhere branch_name = 'Perryridge'

Views

02/05/2023 71Mrs. Sunita M Dol, WIT, Solapur

Page 72: Chapter 3b SQL

• Consider the following expressionselect * from perryridge_branchwhere customer_name = ‘John’

• The view :Find all customers of the Perryridge branchselect * from ( select customer_name

from (( select branch_name, customer_namefrom depositor, accountwhere depositor.account_number= account.account_number)union( select branch_name, customer_namefrom borrower, loanwhere borrower.loan_number= loan.loan_number))

where branch_name =‘Perryridge’)where customer_name=‘Jones’

Views

02/05/2023 72Mrs. Sunita M Dol, WIT, Solapur

Page 73: Chapter 3b SQL

Modification of the Database• Delete

– We can delete only whole tuples; we cannot delete values on only particular attributes.– SQL expresses a

deletion bydelete from rwhere P

where P represents a predicate and r represents a relation. The delete statement first finds all tuples t in r for which P(t) is true, and then deletes them from r. The where clause can be omitted, in which case all tuples in r are deleted.

• Example: Delete all account tuples at the Perryridge branchdelete from accountwhere branch_name = 'Perryridge'

02/05/2023 73Mrs. Sunita M Dol, WIT, Solapur

Page 74: Chapter 3b SQL

Modification of the Database• Delete

• Delete all accounts at every branch located in the city ‘Needham’.delete from accountwhere branch_name in (select branch_name

from branch where branch_city = 'Needham')

• Delete the record of all accounts with balances below the average at the bank.delete from account

where balance < (select avg (balance ) from account )– Problem: as we delete tuples from deposit, the average balance changes– Solution used in SQL: 1. First, compute avg balance and find all tuples to delete 2. Next, delete all tuples found above (without recomputing avg or retesting the tuples)

02/05/2023 74Mrs. Sunita M Dol, WIT, Solapur

Page 75: Chapter 3b SQL

Modification of the Database

• Insert– To insert data into a relation, we either specify a tuple to be inserted or write a query

whose result is a set of tuples to be inserted.• Add a new tuple to account

insert into accountvalues ('A-9732', 'Perryridge', 1200)

or equivalentlyinsert into account (branch_name, balance, account_number) values ('Perryridge', 1200, 'A-9732')

• Add a new tuple to account with balance set to nullinsert into account

values ('A-777','Perryridge', null )

02/05/2023 75Mrs. Sunita M Dol, WIT, Solapur

Page 76: Chapter 3b SQL

Modification of the Database• Insert

• Provide as a gift for all loan customers of the Perryridge branch, a $200 savings account. Let the loan number serve as the account number for the new savings account

insert into accountselect loan_number, branch_name, 200from loanwhere branch_name = 'Perryridge'

insert into depositorselect customer_name, loan_numberfrom loan, borrowerwhere branch_name = 'Perryridge'

and loan.account_number = borrower.account_number

02/05/2023 76Mrs. Sunita M Dol, WIT, Solapur

Page 77: Chapter 3b SQL

Modification of the Database• Insert

– 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 table1would cause problems)

02/05/2023 77Mrs. Sunita M Dol, WIT, Solapur

Page 78: Chapter 3b SQL

Modification of the Database• Updates

– In certain situations, we may wish to change a value in a tuple without changing all values in the tuple. For this purpose, the update statement can be used.

• Increase all accounts with balances over $10,000 by 6%, all other accounts receive 5%.– Write two update statements:

update accountset balance = balance 1.06where balance > 10000

update accountset balance = balance 1.05where balance 10000

– The order is important– Can be done better using the case statement

02/05/2023 78Mrs. Sunita M Dol, WIT, Solapur

Page 79: Chapter 3b SQL

• Updates– Case Statement for conditional updates

• Same query as before: Increase all accounts with balances over $10,000 by 6%, all other accounts receive 5%. update account set balance = case when balance <= 10000 then balance *1.05 else balance * 1.06 end

Modification of the Database

02/05/2023 79Mrs. Sunita M Dol, WIT, Solapur

Page 80: Chapter 3b SQL

• Update of a views– Create a view of all loan data in the loan relation, hiding the amount attribute

create view loan_branch asselect loan_number, branch_namefrom loan

– Add a new tuple to branch_loaninsert into branch_loan

values ('L-37‘, 'Perryridge‘) This insertion must be represented by the insertion of the tuple

('L-37', 'Perryridge', null )into the loan relation

Modification of the Database

02/05/2023 80Mrs. Sunita M Dol, WIT, Solapur

Page 81: Chapter 3b SQL

• Update of a view– Others cannot be translated uniquely

create view all_customer as (select branch_name, customer_name from depositor, account where depositor.account_number =

account.account_number ) union

(select branch_name, customer_name from borrower, loan where borrower.loan_number = loan.loan_number )

– insert into all_customer values ('Perryridge', 'John') • Have to choose loan or account, and create a new loan/account number!

– Most SQL implementations allow updates only on simple views (without aggregates) defined on a single relation

Modification of the Database

02/05/2023 81Mrs. Sunita M Dol, WIT, Solapur

Page 82: Chapter 3b SQL

• Update of a view– Some updates through views are impossible to translate into updates on the database

relationscreate view v as

select loan_number, branch_name, amount from loan where branch_name = ‘Perryridge’

insert into v values ( 'L-99','Downtown', '23')

Modification of the Database

02/05/2023 82Mrs. Sunita M Dol, WIT, Solapur

Page 83: Chapter 3b SQL

• Update of a view– An SOL view is said to be updatable, if the following condition are all satisfied

• The from clause has only one database relation• The select clause contains only attribute names of the relation and does not have any

expression, aggregates or distinct specification• Any attributes not listed in the select clause can be set null• The query does not have a group by or having clause

Example:create view downtown_account asselect account_number, branch_name, balancefrom accountwhere branch_name= ‘Downtown’

Modification of the Database

02/05/2023 83Mrs. Sunita M Dol, WIT, Solapur

Page 84: Chapter 3b SQL

Joined Relations• Join operations take two relations and return as a result another relation.• These additional operations are typically used as subquery expressions in the from

clause• Join condition – defines which tuples in the two relations match, and what

attributes are present in the result of the join.• Join type – defines how tuples in each relation that do not match any tuple in the

other relation (based on the join condition) are treated.

02/05/2023 84Mrs. Sunita M Dol, WIT, Solapur

Page 85: Chapter 3b SQL

Joined Relations• Right Outer Join:

– Tuples from the right-hand side relation that do not match any tuple in the left-hand-side relation are padded with nulls and are added to the result of the right outer join.

• Left Outer Join: – Tuples from the left-hand side relation that do not match any tuple in the right-hand-side

relation are padded with nulls and are added to the result of the left outer join.

• Full Outer Join: – The full outer join is a combination of the left and right outer-join types. After the

operation computes the result of the inner join, it extends with nulls tuples from the left-hand-side relation that did not match with any from the right-hand-side, and adds them to the result. Similarly, it extends with nulls tuples from the right-hand side relation that did not match with any tuples from the left-hand-side relation and adds them to the result.02/05/2023 85Mrs. Sunita M Dol, WIT, Solapur

Page 86: Chapter 3b SQL

Joined Relations

• Relation loan• Relation borrower

• Note: borrower information missing for L-260 and loan information missing for L-155

02/05/2023 86Mrs. Sunita M Dol, WIT, Solapur

Page 87: Chapter 3b SQL

Joined Relations – Examples • loan inner join borrower on

loan.loan_number = borrower.loan_number

02/05/2023 87Mrs. Sunita M Dol, WIT, Solapur

Page 88: Chapter 3b SQL

Joined Relations • loan left outer join borrower on

loan.loan_number = borrower.loan_number

02/05/2023 88Mrs. Sunita M Dol, WIT, Solapur

Page 89: Chapter 3b SQL

Joined Relations• loan natural inner join borrower

02/05/2023 89Mrs. Sunita M Dol, WIT, Solapur

Page 90: Chapter 3b SQL

Joined Relations• loan natural right outer join borrower

02/05/2023 90Mrs. Sunita M Dol, WIT, Solapur

Page 91: Chapter 3b SQL

Joined Relations• loan full outer join borrower using (loan_number)

– Find all customers who have either an account or a loan (but not both) at the bank.select customer_namefrom (depositor natural full outer join borrower )where account_number is null or loan_number is null

02/05/2023 91Mrs. Sunita M Dol, WIT, Solapur

Page 92: Chapter 3b SQL

References

• Database system concepts by Abraham Silberschatz, Henry F. Korth, S. Sudarshan(McGraw Hill International Edition) sixth edition.

• 2. Database system concepts by Abraham Silberschatz, Henry F. Korth, S. Sudarshan(McGraw Hill International Edition) fifth edition.

• http://codex.cs.yale.edu/avi/db-book/db4/slide-dir/ • http://codex.cs.yale.edu/avi/db-book/db5/slide-dir/• http://codex.cs.yale.edu/avi/db-book/db6/slide-dir/

02/05/2023 Mrs. Sunita M Dol, WIT, Solapur 92


Recommended