Cơ sở dữ liệu - Chapter 3: SQL

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

pdf66 trang | Chia sẻ: huyhoang44 | Lượt xem: 836 | Lượt tải: 0download
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.db­book.com for conditions on re­use  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 SQL­86 l SQL­89 l SQL­92  l SQL:1999 (language name became Y2K compliant!) l SQL:2003 n Commercial systems offer most, if not all, SQL­92 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 user­specified length n. n varchar(n).  Variable length character strings, with user­specified maximum  length n. n int.  Integer (a finite subset of the integers that is machine­dependent). n smallint.  Small integer (a machine­dependent subset of the integer  domain type). n numeric(p,d).  Fixed point number, with user­specified precision of p digits,  with n digits to the right of decimal point.  n real, double precision.  Floating point and double­precision floating point  numbers, with machine­dependent precision. n float(n).  Floating point number, with user­specified 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, (integrity­constraint1), ..., (integrity­constraintk)) 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 SQL­92 onwards, needs to be explicitly stated in  SQL­89 ©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  lower­case 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: old­name as new­name 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 string­matching 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 Three­valued 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 non­null 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 select­from­where 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 ('A­9732', 'Perryridge', 1200)     or equivalently    insert into account (branch_name, balance, account_number)   values ('Perryridge',  1200, 'A­9732')  n Add a new tuple to account with balance set to null insert into account values ('A­777','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 ('L­37‘, 'Perryridge‘)  This insertion must be represented by the insertion of the tuple ('L­37', '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  ( 'L­99','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 L­260 and loan  information missing for L­155 ©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.db­book.com for conditions on re­use  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:

  • pdfch3_4896_458.pdf