Find all customers who have an account at all branches located in
Brooklyn.
select distinct S.customer_name
from depositor as S
where not exists (
(select branch_name
from branch
where branch_city = 'Brooklyn')
except
(select R.branch_name
from depositor as T, account as R
where 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
                
              
                                            
                                
            
 
            
                
66 trang | 
Chia sẻ: huyhoang44 | Lượt xem: 1277 | Lượt tải: 0
              
            Bạn đang xem trước 20 trang tài liệu Cơ sở dữ liệu - Chapter 3: SQL, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Database System Concepts, 5th Ed.
©Silberschatz, Korth and Sudarshan
See www.dbbook.com for conditions on reuse 
Chapter 3: SQL
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Chapter 3:  SQL
n Data Definition
n Basic Query Structure
n Set Operations
n Aggregate Functions
n Null Values
n Nested Subqueries
n Complex Queries 
n Views
n Modification of the Database
n Joined Relations** 
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
History
n IBM Sequel language developed as part of System R project at the 
IBM San Jose Research Laboratory
n Renamed Structured Query Language (SQL)
n ANSI and ISO standard SQL:
l SQL86
l SQL89
l SQL92 
l SQL:1999 (language name became Y2K compliant!)
l SQL:2003
n Commercial systems offer most, if not all, SQL92 features, plus 
varying feature sets from later standards and special proprietary 
features.  
l Not all examples here may work on your particular system.
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Data Definition Language
n The schema for each relation.
n The domain of values associated with each attribute.
n Integrity constraints
n The set of indices to be maintained for each relations.
n Security and authorization information for each relation.
n The physical storage structure of each relation on disk.
Allows the specification of not only a set of relations but also 
information about each relation, including:
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Domain Types in SQL
n char(n).  Fixed length character string, with userspecified length n.
n varchar(n).  Variable length character strings, with userspecified maximum 
length n.
n int.  Integer (a finite subset of the integers that is machinedependent).
n smallint.  Small integer (a machinedependent subset of the integer 
domain type).
n numeric(p,d).  Fixed point number, with userspecified precision of p digits, 
with n digits to the right of decimal point. 
n real, double precision.  Floating point and doubleprecision floating point 
numbers, with machinedependent precision.
n float(n).  Floating point number, with userspecified precision of at least n 
digits.
n More are covered in Chapter 4.
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Create Table Construct
n An SQL relation is defined using the create table command:
create table r (A1 D1, A2 D2, ..., An Dn,
(integrityconstraint1),
...,
(integrityconstraintk))
l r is the name of the relation
l each Ai is an attribute name in the schema of relation r
l Di is the data type of values in the domain of attribute Ai
n Example:
create table branch
(branch_name char(15) not null,
branch_city char(30),
assets integer)
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Integrity Constraints in Create Table
n not null
n primary key (A1, ..., An )
Example:  Declare branch_name as the primary key for branch
.
create table branch
      (branch_name char(15),
       branch_city char(30),
       assets integer,
       primary key (branch_name))
primary key declaration on an attribute automatically ensures 
not null in SQL92 onwards, needs to be explicitly stated in 
SQL89
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Drop and Alter Table Constructs
n The drop table command deletes all information about the dropped 
relation from the database.
n 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.
l All tuples in the relation are assigned null as the value for the 
new attribute.  
n 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
l Dropping of attributes not supported by many databases
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Basic Query Structure 
n SQL is based on set and relational operations with certain 
modifications and enhancements
n A typical SQL query has the form:
select A1, A2, ..., An
from r1, r2, ..., rm
where P
l Ai represents an attribute
l Ri represents a relation
l P is a predicate.
n This query is equivalent to the relational algebra expression.
n The result of an SQL query is a relation.
))(( 21,,, 21 mPAAA rrrn ×××∏  σ
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
The select Clause
n The select clause list the attributes desired in the result of a query
l corresponds to the projection operation of the relational algebra
n Example: find the names of all branches in the loan relation:
select branch_name
from loan
n In the relational algebra, the query would be: 
∏branch_name (loan)
n NOTE:  SQL names are case insensitive (i.e., you may use upper or 
lowercase letters.)  
l E.g.   Branch_Name   BRANCH_NAME   branch_name
l Some people use upper case wherever we use bold font.
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
The select Clause (Cont.)
n SQL allows duplicates in relations as well as in query results.
n To force the elimination of duplicates, insert the keyword distinct  after 
select.
n Find the names of all branches in the loan relations, and remove 
duplicates
select distinct branch_name
from loan
n The keyword all specifies that duplicates not be removed.
select all branch_name
from loan
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
The select Clause (Cont.)
n An asterisk in the select clause denotes “all attributes”
select *
from loan
n The select clause can contain arithmetic expressions involving the 
operation, +, –, ∗, and /, and operating on constants or attributes of 
tuples.
n 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.
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
The where Clause
n The where clause specifies conditions that the result must satisfy
l Corresponds to the selection predicate of the relational algebra.  
n To find all loan number for loans made at the Perryridge branch with 
loan amounts greater than $1200.
select loan_number
from loan
where branch_name = 'Perryridge'  and amount > 1200
n Comparison results can be combined using the logical connectives and, 
or, and not. 
n Comparisons can be applied to results of arithmetic expressions.
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
The where Clause (Cont.)
n SQL includes a between comparison operator
n Example:  Find the loan number of those loans with loan amounts between 
$90,000 and $100,000 (that is, ≥ $90,000 and ≤ $100,000)
  select loan_number
from loan
where amount between 90000 and 100000
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
The from Clause
n The from clause lists the relations involved in the query
l Corresponds to the Cartesian product operation of the relational algebra.
n Find the Cartesian product borrower X loan
select ∗
from borrower, loan
n   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' 
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
The Rename Operation
n The SQL allows renaming relations and attributes using the as clause:
oldname as newname
n 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, amount
from borrower, loan
where borrower.loan_number = loan.loan_number
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Tuple Variables
n Tuple variables are defined in the from clause via the use of the as 
clause.
n Find the customer names and their loan numbers for all customers 
having a loan at some branch.
n    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' 
nKeyword as is optional and may be omitted
              borrower as T   borrower T
select customer_name, T.loan_number, S.amount
           from borrower as T, loan as S
           where  T.loan_number = S.loan_number
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
String Operations
n SQL includes a stringmatching operator for comparisons on character 
strings.  The operator “like” uses patterns that are described using two 
special characters:
l percent (%).  The % character matches any substring.
l underscore (_).  The _ character matches any character.
n Find the names of all customers whose street includes the substring 
“Main”.
select customer_name
from customer
where customer_street like '% Main%' 
n Match the name “Main%”
like 'Main\%'  escape  '\' 
n SQL supports a variety of string operations such as
l concatenation (using “||”)
l  converting from upper to lower case (and vice versa)
l  finding string length, extracting substrings, etc.
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Ordering the Display of Tuples
n List in alphabetic order the names of all customers having a loan in 
Perryridge branch
select distinct customer_name
from    borrower, loan
where borrower loan_number = loan.loan_number and
            branch_name = 'Perryridge' 
order by customer_name
n We may specify desc for descending order or asc for ascending 
order, for each attribute; ascending order is the default.
l Example:  order by customer_name desc
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Duplicates
n In relations with duplicates, SQL can define how many copies of tuples 
appear in the result.
n 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
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Duplicates (Cont.)
n Example: Suppose multiset relations r1 (A, B) and r2 (C) are as 
follows:
 r1 = {(1, a) (2,a)}     r2 = {(2), (3), (3)}
n 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)}
n 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 rrrn ×××∏  σ
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Set Operations
n The set operations union, intersect, and except operate on relations 
and correspond to the relational algebra operations ∪, ∩, −.
n 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:
l m  + n times in r union all s
l min(m,n) times in r intersect all s
l max(0, m – n) times in r except all s
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Set Operations
n Find all customers who have a loan, an account, or both:
(select customer_name from depositor)
except
(select customer_name from borrower)
(select customer_name from depositor)
intersect
(select customer_name from borrower)
n  Find all customers who have an account but no loan.
(select customer_name from depositor)
union
(select customer_name from borrower)
n  Find all customers who have both a loan and an account.
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Aggregate Functions
n 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
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Aggregate Functions (Cont.)
n Find the average account balance at the Perryridge branch.
n   Find the number of depositors in the bank.
n   Find the number of tuples in the customer relation.
select avg (balance)
from account
where branch_name = 'Perryridge' 
select count (*)
from customer
select count (distinct customer_name)
from depositor
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Aggregate Functions – Group By
n Find the number of depositors for each branch.
Note:  Attributes in select clause outside of aggregate functions must         
           appear in group by list
select branch_name, count (distinct customer_name)
           from depositor, account
           where depositor.account_number = account.account_number
           group by branch_name
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Aggregate Functions – Having Clause
n Find the names of all branches where the average account balance is 
more than $1,200.
       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 branch_name, avg (balance)
           from account
           group by branch_name
           having avg (balance) > 1200
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Null Values
n It is possible for tuples to have a null value, denoted by null, for some 
of their attributes
n null signifies an unknown value or that a value does not exist.
n The predicate  is null can be used to check for null values.
l Example: Find all loan number which appear in the loan relation 
with null values for amount.
select loan_number
from loan
where amount is null
n The result of any arithmetic expression involving null is null
l Example:  5 + null  returns null
n However, aggregate functions simply ignore nulls
l More on next slide
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Null Values and Three Valued Logic
n Any comparison with null returns unknown
l Example: 5  null    or    null = null
n Threevalued logic using the truth value unknown:
l OR: (unknown or true)   = true,
       (unknown or false)  = unknown
       (unknown or unknown) = unknown
l AND: (true and unknown)  = unknown,    
         (false and unknown) = false,
         (unknown and unknown) = unknown
l NOT:  (not unknown) = unknown
l “P is unknown” evaluates to true if predicate P evaluates to 
unknown
n Result of where clause predicate is treated as false if it evaluates to 
unknown
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Null Values and Aggregates
n Total all loan amounts
select sum (amount )
from loan
l Above statement ignores null amounts
l Result is null if there is no nonnull amount
n All aggregate operations except count(*) ignore tuples with null 
values on the aggregated attributes.
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Nested Subqueries
n SQL provides a mechanism for the nesting of subqueries.
n A subquery is a selectfromwhere expression that is nested within 
another query.
n A common use of subqueries is to perform tests for set membership, set 
comparisons, and set cardinality.
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Example Query
n Find all customers who have both an account and a loan at the bank.
n   Find all customers who have a loan at the bank but do not have 
     an account at the bank
select distinct customer_name
from borrower
where customer_name not in (select customer_name
                                                                 from depositor )
select distinct customer_name
from borrower
where customer_name in (select customer_name
                                                       from depositor )
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Example Query
n Find all customers who have both an account and a loan at the 
Perryridge branch
n  Note: Above query can be written in a much simpler manner.  The 
               formulation above is simply to illustrate SQL features.
select distinct customer_name
from borrower, loan
where 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 )
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Set Comparison
n Find all branches that have greater assets than some branch located 
in Brooklyn.
n  Same query using > some clause
select branch_name
from branch
where assets > some
  (select assets
   from branch
 where branch_city = 'Brooklyn') 
select distinct  T.branch_name
from branch as T, branch as S
where  T.assets > S.assets and
             S.branch_city = 'Brooklyn' 
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Definition of  Some Clause
n F  some r ⇔ ∃ t ∈ r  such that (F  t )
Where  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
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Example Query
n Find the names of all branches that have greater assets than all 
branches located in Brooklyn.
select branch_name
from branch
where assets > all
(select assets
from branch
where branch_city = 'Brooklyn') 
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Definition of all Clause
n F  all r ⇔ ∀ t ∈ r  (F  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
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Test for Empty Relations
n The exists construct returns the value true if the argument subquery is 
nonempty.
n exists  r ⇔  r ≠ Ø
n not exists r ⇔  r = Ø
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Example Query
n Find all customers who have an account at all branches located in 
Brooklyn.
select distinct S.customer_name
from depositor as S
where not exists (
(select branch_name
from branch
where branch_city = 'Brooklyn') 
            except
(select R.branch_name
from depositor as T, account as R
where T.account_number = R.account_number and
S.customer_name = T.customer_name ))
n   Note that X – Y = Ø   ⇔   X ⊆ Y
n   Note: Cannot write this query using = all and its variants
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Test for Absence of Duplicate Tuples
n The unique construct tests whether a subquery has any duplicate 
tuples in its result.
n 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') 
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Example Query
n Find all customers who have at least two accounts at the Perryridge 
branch. 
select distinct T.customer_name
from depositor  as T
where 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') 
n Variable from outer level is known as a correlation variable 
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Derived Relations
n SQL allows a subquery expression to be used in the from clause
n Find the average account balance of those branches where the average 
account balance is greater than $1200.
select branch_name, avg_balance
from (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.
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
With Clause
n 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. 
n 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
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Complex Queries using With Clause
n 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
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Views
n 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.)
n 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 )
n A view provides a mechanism to hide certain data from the view of 
certain users. 
n Any relation that is not of the conceptual model but is made visible to a 
user as a “virtual relation” is called a view.
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
View Definition
n A view is defined using the create view statement which has the 
form
create view v as 
where  is any legal SQL expression.  The view 
name is represented by v.
n Once a view is defined, the view name can be used to refer to the 
virtual relation that the view generates.
n When a view is created, the query expression is stored in  the 
database; the expression is substituted into queries using the view.
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Example Queries
n A view consisting of branches and their customers
n   Find all customers of the Perryridge branch
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 )
select customer_name
from all_customer
where branch_name = 'Perryridge' 
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Views Defined Using Other Views
n One view may be used in the expression defining another view 
n A view relation v1 is said to depend directly on a view relation v2  if v2 is 
used in the expression defining v1
n 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 
n A view relation v is said to be recursive  if it depends on itself.
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
View Expansion
n A way to define the meaning of views defined in terms of other views.
n Let view v1 be defined by an expression e1 that may itself contain uses 
of view relations.
n View expansion of an expression repeats the following replacement 
step:
repeat
Find 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
n As long as the view definitions are not recursive, this loop will 
terminate
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Modification of the Database – Deletion
n Delete all account tuples at the Perryridge branch
delete from account
where branch_name = 'Perryridge' 
n Delete all accounts at every branch located in the city ‘Needham’.
delete from account
where branch_name in (select branch_name
       from branch
       where branch_city = 'Needham') 
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Example Query
n Delete the record of all accounts with balances below the average at 
the bank.
      delete from account
                 where balance < (select avg (balance )
                                  from account )
l Problem:  as we delete tuples from deposit, the average balance 
changes
l 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)
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Modification of the Database – Insertion
n Add a new tuple to account
insert into account
values ('A9732', 'Perryridge', 1200)
    or equivalently
   insert into account (branch_name, balance, account_number)
  values ('Perryridge',  1200, 'A9732') 
n Add a new tuple to account with balance set to null
insert into account
values ('A777','Perryridge',  null )
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Modification of the Database – Insertion
n 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 account
select loan_number, branch_name,  200
from loan
where branch_name = 'Perryridge' 
    insert into depositor
select customer_name, loan_number
from loan, borrower
where branch_name = 'Perryridge' 
          and loan.account_number = borrower.account_number
n 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)
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Modification of the Database – Updates
n Increase all accounts with balances over $10,000 by 6%, all other 
accounts receive 5%.
l Write two update statements:
update account
set balance = balance ∗ 1.06
where balance > 10000
update account
set balance = balance ∗ 1.05
where balance ≤ 10000
l The order is important
l Can be done better using the case statement (next slide)
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Case Statement for Conditional Updates
n 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
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Update of a View
n Create a view of all loan data in the loan relation, hiding the amount 
attribute
create view loan_branch as
select loan_number, branch_name
from loan
n Add a new tuple to branch_loan
insert into branch_loan
values ('L37‘, 'Perryridge‘) 
This insertion must be represented by the insertion of the tuple
('L37', 'Perryridge',  null )
into the loan relation
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Updates Through Views (Cont.)
n Some updates through views are impossible to translate into 
updates on the database relations
l create view v as
select loan_number, branch_name, amount
                 from loan
                 where branch_name = ‘Perryridge’
           insert into v values  ( 'L99','Downtown', '23') 
n Others cannot be translated uniquely
l insert into all_customer values ('Perryridge', 'John') 
 Have to choose loan or account, and 
create a new loan/account number!
n Most SQL implementations allow updates only on simple views 
(without aggregates) defined on a single relation
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Joined Relations**
n Join operations take two relations and return as a result another 
relation.
n These additional operations are typically used as subquery 
expressions in the from clause
n Join condition – defines which tuples in the two relations match, and 
what attributes are present in the result of the join.
n 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.
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Joined Relations – Datasets for Examples
n Relation loan
n Relation borrower
n Note: borrower information missing for L260 and loan 
information missing for L155
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Joined Relations – Examples 
n loan inner join borrower on
loan.loan_number = borrower.loan_number
n loan left outer join borrower on
loan.loan_number = borrower.loan_number
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Joined Relations – Examples
n loan natural inner join borrower
n loan natural right outer join borrower
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Joined Relations – Examples
n loan full outer join borrower using (loan_number)
n Find all customers who have either an account or a loan (but not both) 
at the bank.
select customer_name
from (depositor natural full outer join borrower )
where account_number is null or loan_number is null
Database System Concepts, 5th Ed.
©Silberschatz, Korth and Sudarshan
See www.dbbook.com for conditions on reuse 
End of Chapter 3
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Figure 3.1: Database Schema
branch (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)
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Figure 3.3: Tuples inserted into loan and 
borrower
©Silberschatz, Korth and Sudarshan3.Database System Concepts, 5th Ed.,  June  2006
Figure 3.4:
The loan and borrower relations
            Các file đính kèm theo tài liệu này:
ch3_4896_458.pdf