session 6 - sql
TRANSCRIPT
![Page 1: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/1.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 1/54
BASIC DATABASE
Instructor: Dr.Sasiporn Usanavasinemail: [email protected]
![Page 2: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/2.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 2/54
![Page 3: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/3.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 3/54
![Page 4: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/4.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 4/54
char(n). Fixed length character string, with user-specified length n.
varchar(n). Variable length character strings, with user-specified maximumlength n.
int. Integer (a finite subset of the integers that is machine-dependent).
smallint. Small integer (a machine-dependent subset of the integer domaintype).
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 pointnumbers, with machine-dependent precision.
float(n). Floating point number, with user-specified precision of at least n digits.
![Page 5: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/5.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 5/54
INTEGRITY CONSTRAINTS
not null
primary key ( A1, ..., A n )
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))
primary key declaration on an attribute automatically ensures not nullin SQL-92 onwards, needs to be explicitly stated in SQL-89
![Page 6: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/6.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 6/54
INSERTION DELETION
Newly created table is empty
Add a new tuple to account
insert into account values ('A-9732', 'Perryridge', 1200)
Insertion fails if any integrity constraint is violated
Delete all tuples from account
delete from account
Note: Will see later how to delete selected tuples
![Page 7: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/7.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 7/54
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 isthe domain of A.
All tuples in the relation are assigned null as the value for the new attribute.
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
![Page 8: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/8.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 8/54
A typical SQL query has the form:
select A1, A2, ..., A n from r 1, r 2, ..., r m where P
A i
represents an attribute
R i 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
mP A A A r r r
n
![Page 9: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/9.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 9/54
The select clause list the attributes desired in the result of a
query 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.
![Page 10: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/10.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 10/54
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 removeduplicates
select distinct branch_name from loan
The keyword all specifies that duplicates not be removed.
select all branch_namefrom loan
![Page 11: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/11.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 11/54
An asterisk (*) in the select clause denotes “all attributes”
select *from loan
The select clause can contain arithmetic expressions involvingthe operation, +, – , , and /, and operating on constants orattributes of tuples.
E.g.:
select loan_number, branch_name, amount 100
from loan
![Page 12: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/12.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 12/54
The where clause specifies conditions that the result must satisfy Corresponds to the selection predicate of the relational algebra.
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 logicalconnectives and, or, and not.
![Page 13: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/13.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 13/54
The from clause lists the relations involved in the query
Corresponds to the Cartesian product operation of the relational algebra.
Find the Cartesian product borrower X loan
select from borrower, loan
Find the name, loan number and loan amount of all customershaving a loan at the Perryridge branch. select customer_name, borrower.loan_number, amount
from borrower, loan
where borrower.loan_number = loan.loan_number andbranch_name = 'Perryridge'
![Page 14: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/14.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 14/54
RENAME
SQL allows renaming relations and attributes using the as clause:
old-name as new-name
E.g. 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
![Page 15: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/15.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 15/54
Tuple variables are defined in the from clause via the use of the as clause.
Find the customer names and their loan numbers and amount for all customershaving a loan at some branch.
Find the names of all branches that have greater assets thansome 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'
Keyword as is optional and may be omittedborrower as T ≡ borrower T
Some database such as Oracle require as to be omitted
select customer_name, T.loan_number, S.amountfrom borrower as T, loan as S
where T.loan_number = S.loan_number
![Page 16: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/16.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 16/54
SQL includes a string-matching operator for comparisons on character strings.
The operator “like” uses patterns that are described using two specialcharacters:
percent (%). The % character matches any substring.
underscore (_). The _ character matches any character.
Find the names of all customers whose street includes the substring “Main”.
select customer_namefrom customerwhere customer_street like '% Main%'
Match the name “Main%”
like 'Main\%' escape '\'
SQL supports a variety of string operations such as concatenation (using “||”)
converting from upper to lower case (and vice versa)
finding string length, extracting substrings, etc.
![Page 17: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/17.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 17/54
List in alphabetic order the names of all customers having a loan inPerryridge branch
select distinct customer_namefrom borrower, loan
where borrower loan_number = loan.loan_number and branch_name = 'Perryridge'
order by customer_name
We may specify desc for descending order or asc for ascendingorder, for each attribute; ascending order is the default.
Example: order by customer_name desc
![Page 18: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/18.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 18/54
In relations with duplicates, SQL can define how many copies of tuplesappear in the result.
Multiset versions of some of the relational algebra operators –
given multiset relations r 1 and r 2:
1. (r 1): If there are c 1 copies of tuple t 1 in r 1, and t 1 satisfies selections ,, then
there are c 1 copies of t 1 in ( r 1).
2. A
(r ): For each copy of tuple t 1 in r 1 , there is a copy of tuple A (t 1 ) in A ( r 1) where A (t 1) denotes the projection of the single tuple t 1.
3. r 1 x r 2 : If there are c 1 copies of tuple t 1 in r 1 and c 2 copies of tuple t 2 in r 2, thereare c 1 x c 2 copies of the tuple t 1. t 2 in r 1 x r 2
![Page 19: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/19.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 19/54
Example: Suppose multiset relations r 1 ( A, B) and r 2 (C ) are as follows: r 1 = {(1, a) (2,a)} r 2 = {(2), (3), (3)}
Then B( r 1) would be {(a), (a)}, while B( r 1) x r 2 would be
{(a,2), (a,2), (a,3), (a,3), (a,3), (a,3)}
SQL duplicate semantics:
select A1,, A2, ..., A n from r 1, r 2, ..., r m where P
is equivalent to the multiset version of the expression:
))((21,,, 21 mP A A A
r r r n
![Page 20: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/20.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 20/54
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 versionsunion all, intersect all and except all.
Suppose a tuple occurs m times in r and n times in s, then, itoccurs:
m + n times in r union all s
min( m,n) times in r intersect all s
max(0, m – n) times in r except all s
![Page 21: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/21.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 21/54
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)
Find all customers who have an account but no loan.
(select customer_name from depositor )union(select customer_name from borrower)
Find all customers who have both a loan and an account.
![Page 22: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/22.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 22/54
These functions operate on the multiset of values of acolumn of a relation, and return a value
avg: average value
min: minimum valuemax: maximum valuesum: sum of valuescount: number of values
![Page 23: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/23.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 23/54
Find the average account balance at the Perryridge branch.
Find the number of depositors in the bank.
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
![Page 24: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/24.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 24/54
Find the number of depositors for each branch.
Note: Attributes in select clause outside of aggregate functions mustappear in group by list
select branch_name, count (distinct customer_name)
from depositor, account
where depositor.account_number = account.account_numbergroup by branch_name
![Page 25: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/25.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 25/54
Find the names of all branches where the average accountbalance 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 accountgroup by branch_name
having avg (balance) > 1200
![Page 26: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/26.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 26/54
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 setmembership, set comparisons, and set cardinality.
![Page 27: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/27.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 27/54
Find all customers who have both an account and a loan at the bank.
Find all customers who have a loan at the bank but do not havean 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 )
![Page 28: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/28.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 28/54
Find all customers who have both an account and a loan at the
Perryridge branch
Note: Above query can be written in a much simpler manner. Theformulation above is simply to illustrate SQL features.
select distinct customer_name
from borrower, loan
where borrower.loan_number = loan.loan_number andbranch_name = 'Perryridge' and(branch_name, customer_name ) in
(select branch_name, customer_name
from depositor, account
where depositor.account_number =
account.account_number )
![Page 29: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/29.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 29/54
Find all branches that have greater assets than some branch
located in Brooklyn.
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 andS.branch_city = 'Brooklyn'
![Page 30: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/30.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 30/54
Find the names of all branches that have greater assets than allbranches located in Brooklyn.
select branch_namefrom branch
where assets > all(select assets
from branch
where branch_city = 'Brooklyn')
![Page 31: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/31.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 31/54
![Page 32: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/32.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 32/54
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 Rwhere T.customer_name = R.customer_name and
R.account_number = account.account_number andaccount.branch_name = 'Perryridge')
Variable from outer level is known as a correlation variable
![Page 33: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/33.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 33/54
Delete all account tuples at the Perryridge branch
delete from accountwhere branch_name = 'Perryridge'
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')
![Page 34: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/34.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 34/54
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')
Add a new tuple to account with balance set to null
insert into account values ('A-777','Perryridge', null )
![Page 35: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/35.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 35/54
![Page 36: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/36.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 36/54
Increase all accounts with balances over $10,000 by 6%, allother 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 (next slide)
![Page 37: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/37.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 37/54
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.05else balance * 1.06
end
![Page 38: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/38.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 38/54
![Page 39: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/39.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 39/54
![Page 40: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/40.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 40/54
![Page 41: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/41.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 41/54
![Page 42: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/42.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 42/54
We can write equi-join as below,
If columns in an equi-join have the same name, SQL provides an optional shorthand
notation for expressing equi-joins, by way of the USING construct
![Page 43: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/43.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 43/54
![Page 44: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/44.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 44/54
Example of a left outer join (the OUTER keyword is optional), with the additional result row(compared with the inner join) italicized:
![Page 45: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/45.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 45/54
Oracle syntax:
Sybase syntax:
IBM Informix syntax:
![Page 46: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/46.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 46/54
• Above is an example of a right outer join (the OUTER keyword is optional), with theadditional result row italicized:
• Right and left outer joins are functionally equivalent. Neither provides any functionality thatthe other does not, so right and left outer joins may replace each other as long as the table
order is switched.
![Page 47: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/47.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 47/54
![Page 48: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/48.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 48/54
• Some database systems do not support the full outer join functionality directly, but they canemulate it through the use of an inner join and UNION ALL selects of the "single tablerows" from left and right tables respectively.
• The same example can appear as follows:
![Page 49: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/49.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 49/54
Example: A query to find all pairings of twoemployees in the same country is desired.
![Page 50: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/50.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 50/54
A view is a virtual table.
Database views are created using the CREATE VIEW statement.
Views can be created from a single table, multiple tables, or another view.
The basic CREATE VIEW syntax is as follows:
![Page 51: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/51.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 51/54
Consider the CUSTOMERS table having the following records:
Result table:
Query to select records to display from thecreated view table
![Page 52: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/52.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 52/54
Example:
![Page 53: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/53.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 53/54
![Page 54: Session 6 - SQL](https://reader031.vdocuments.us/reader031/viewer/2022021313/577cc8781a28aba711a2eba8/html5/thumbnails/54.jpg)
8/12/2019 Session 6 - SQL
http://slidepdf.com/reader/full/session-6-sql 54/54