0% found this document useful (0 votes)
51 views54 pages

Session 6 - SQL

This document provides an overview of basic SQL concepts for defining and manipulating tables in a database. It defines how to create tables using SQL commands, specify data types and integrity constraints. It also describes how to insert, delete and modify data, write queries, and perform aggregation operations on tables. Key topics covered include creating and altering tables, primary keys, joins, aggregation functions, and sorting/filtering query results.

Uploaded by

Hoàng Thái
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
51 views54 pages

Session 6 - SQL

This document provides an overview of basic SQL concepts for defining and manipulating tables in a database. It defines how to create tables using SQL commands, specify data types and integrity constraints. It also describes how to insert, delete and modify data, write queries, and perform aggregation operations on tables. Key topics covered include creating and altering tables, primary keys, joins, aggregation functions, and sorting/filtering query results.

Uploaded by

Hoàng Thái
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 54

BASIC DATABASE

Instructor: Dr.Sasiporn Usanavasin


email: sasiporn.us@gmail.com
An SQL relation is defined using the create table command:
create table r (A
1
D
1
, A
2
D
2
, ..., A
n
D
n
,
(integrity-constraint
1
),
...,
(integrity-constraint
k
))
r is the name of the relation
each A
i
is an attribute name in the schema of relation r
D
i
is the data type of attribute A
i

Example:
create table branch
(branch_name char(15),
branch_city char(30),
assets integer)
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.


INTEGRITY CONSTRAINTS
not null
primary key (A
1
, ..., 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 null
in SQL-92 onwards, needs to be explicitly stated in SQL-89
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


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.
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
A typical SQL query has the form:

select A
1
, A
2
, ..., 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.
)) ( (
2 1 , , ,
2 1
m P A A A
r r r
n
[

o
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.
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_name
from loan

The keyword all specifies that duplicates not be removed.

select all branch_name
from loan
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.
E.g.:
select loan_number, branch_name, amount - 100
from loan

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_number
from loan
where branch_name = 'Perryridge' and amount > 1200
Comparison results can be combined using the logical
connectives and, or, and not.

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 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'

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
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 customers
having a loan at some branch.
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'
Keyword as is optional and may be omitted
borrower as T borrower T
Some database such as Oracle require as to be omitted

select customer_name, T.loan_number, S.amount
from borrower as T, loan as S
where T.loan_number = S.loan_number
SQL includes a string-matching operator for comparisons on character strings.
The operator like uses patterns that are described using two special
characters:
percent (%). The % character matches any substring.
underscore (_). The _ character matches any character.
Find the names of all customers whose street includes the substring Main.
select customer_name
from customer
where 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.
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
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
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 r
1
and r
2
:
1. o
u
(r
1
): If there are c
1
copies of tuple t
1
in r
1
, and t
1
satisfies selections o
u,
, then
there are c
1
copies of t
1
in o
u
(r
1
).
2. H
A
(r ): For each copy of tuple t
1
in r
1
, there is a copy of tuple H
A
(t
1
) in H
A
(r
1
)
where H
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
, there
are c
1
x c
2
copies of the tuple t
1
. t
2
in r
1
x r
2
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 H
B
(r
1
) would be {(a), (a)}, while H
B
(r
1
) x r
2
would be
{(a,2), (a,2), (a,3), (a,3), (a,3), (a,3)}
SQL duplicate semantics:
select A
1
,
,
A
2
, ..., A
n

from r
1
, r
2
, ..., r
m

where P
is equivalent to the multiset version of the expression:


)) ( (
2 1 , , ,
2 1
m P A A A
r r r
n
[

o
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
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.
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
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
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
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
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.
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 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 )
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. 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 )
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 and
S.branch_city = 'Brooklyn'
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')
The unique construct tests whether a subquery has any
duplicate tuples in its result.
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')

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')
Variable from outer level is known as a correlation variable
Delete all account tuples at the Perryridge branch
delete from account
where branch_name = 'Perryridge'

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')

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 )

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
The select from where statement is evaluated fully before any of
its results are inserted into the relation
Increase all accounts with balances over $10,000 by 6%, all
other accounts receive 5%.
Write two update statements:
update account
set balance = balance - 1.06
where balance > 10000

update account
set balance = balance - 1.05
where balance s 10000
The order is important
Can be done better using the case statement (next slide)
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

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
Example of a left outer join (the OUTER keyword is optional), with the additional result row
(compared with the inner join) italicized:
Oracle syntax:
Sybase syntax:
IBM Informix syntax:
Above is an example of a right outer join (the OUTER keyword is optional), with the
additional result row italicized:

Right and left outer joins are functionally equivalent. Neither provides any functionality that
the other does not, so right and left outer joins may replace each other as long as the table
order is switched.
Some database systems do not support the full outer join functionality directly, but they can
emulate it through the use of an inner join and UNION ALL selects of the "single table
rows" from left and right tables respectively.
The same example can appear as follows:
Example: A query to find all pairings of two
employees in the same country is desired.
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:

Consider the CUSTOMERS table having the following records:
Result table:
Query to select records to display from the
created view table
Example:

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy