Dr. M. Brindha Assistant Professor Department of CSE NIT, Trichy-15
Dr. M. Brindha Assistant Professor Department of CSE NIT, Trichy-15
Dr. M. Brindha
Assistant Professor
Department of CSE
NIT, Trichy-15
SQL
• Basic Structure
• Set Operations
• Aggregate Functions
• Null Values
• Nested Subqueries
• Derived Relations
• Views
• Modification of the Database
• Joined Relations
• Data Definition Language
• Embedded SQL, ODBC and JDBC
Schema Used in Examples
Data Definition Language (DDL)
Allows the specification of not only a set of relations but
also information about each relation, including:
• The schema for each relation.
• The domain of values associated with each
attribute.
• Integrity constraints
• The set of indices to be maintained for each
relations.
• Security and authorization information for each
relation.
• The physical storage structure of each relation
on disk.
Domain Types in SQL
• 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.
• Nullvalues are allowed in all the domain types. Declaring an attribute
to be not null prohibits null values for that attribute.
• create domain construct in SQL-92 creates user-defined domain types
create domain person-name char(20) not null
Date/Time Types in SQL (Cont.)
• date. Dates, containing a (4 digit) year, month and date
• E.g. date ‘2001-7-27’
• time. Time of day, in hours, minutes and seconds.
• E.g. time ’09:00:30’ time ’09:00:30.75’
• timestamp: date plus time of day
• E.g. timestamp ‘2001-7-27 09:00:30.75’
• Example:
create table branch
(branch-name char(15) not null,
branch-citychar(30),
assets integer)
Integrity Constraints in Create Table
• not null
• primary key (A1, ..., An)
• check (P), where P is a predicate
• NOTE: SQL names are case insensitive, i.e. you can use
capital or small letters.
• You may wish to use upper case where-ever we use bold font.
The select Clause (Cont.)
• 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
The select Clause (Cont.)
• An asterisk in the select clause denotes “all
attributes”
select * from loan
• The select clause can contain arithmetic expressions
involving the operation, +, –, , and /, and operating
on constants or attributes of tuples.
• The query:
select loan-number, branch-name, amount 100
from loan
would return a relation which is the same as the loan
relations, except that the attribute amount is
multiplied by 100.
The where Clause
• 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.
• Comparisons can be applied to results of arithmetic
expressions.
The where Clause (Cont.)
select loan-number
from loan
where amount between 90000 and 100000
The from Clause
• The from clause lists the relations involved in the query
• corresponds to the Cartesian product operation of the relational algebra.
update account
set balance = balance 1.05
where balance 10000
• The order is important
• Can be done better using the case statement (next
slide)
Case Statement for Conditional Updates
update account
set balance = case
when balance <= 10000 then balance
*1.05
else balance * 1.06
end
String Operations
• SQL includes a string-matching operator for comparisons on
character strings. Patterns are described using two special
characters:
• percent (%). The % character matches any substring.
• underscore (_). The _ character matches any character.
Find all customers who have a loan at the bank but do not
have an account at the bank
0
(5< some 5 ) = false
0
(5 = some 5 ) = true
0
(5 some 5 ) = true (since 0 5)
(= some) in
However, ( some) not in
Definition of all Clause
• F <comp> all r t r (F <comp> t)
0
(5< all 5 ) = false
6
6
(5< all 10 ) = true
4
(5 = all 5 ) = false
4
(5 all 6 ) = true (since 5 4 and 5 6)
( all) not in
However, (= all) in
Example Query
• 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’)
Test for Empty Relations- Set Cardinality
select cname
from borrower
where exists (select * from depositor
where depositor.cname =
borrower.cname)
Test for Absence of Duplicate Tuples
• 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
whereT.customer-name = R.customer-name and
R.account-number = account.account-number
and
account.branch-name = ‘Perryridge’)
Example Query
• Find all customers who have at least two accounts at the
Perryridge branch.
select distinct T.customer-name
from depositor 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’)
Views
• Provide a mechanism to hide certain data from
the view of certain users. To create a view we
use the command:
create view v as <query expression>
where:
<query expression> is any legal expression
The view name is represented by v
Example Queries
• A view consisting of branches and their customers
select customer-name
from all-customer
where branch-name = ‘Perryridge’
Example Queries
• To specify attribute names explicitly
select customer-name
from all-customer
where branch-name = ‘Perryridge’
Update of a View
• Create a view of all loan data in loan relation, hiding the
amount attribute
create view branch-loan as
select branch-name, loan-number
from loan
• Add a new tuple to branch-loan
insert into branch-loan
values (‘Perryridge’, ‘L-307’)
This insertion must be represented by the insertion of the
tuple
(‘L-307’, ‘Perryridge’, null) into the loan relation
• Updates on more complex views are difficult or impossible to
translate, and hence are disallowed.
• Most SQL implementations allow updates only on simple
views (without aggregates) defined on a single relation
Derived Relations
• Findthe 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
result in the from clause, and the attributes of result
can be used directly in the where clause.
With Clause
• With clause allows views to be defined locally to a
query, rather than globally. Analogous to procedures
in a programming language.
• 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
Complex Query using With Clause
• Find all branches where the total account deposit is
greater than the average of the total account deposits at
all branches.
with branch-total (branch-name, value) as
select branch-name, sum (balance)
from account
group by branch-name
with branch-total-avg(value) as
select avg (value)
from branch-total
select branch-name
from branch-total, branch-total-avg
where branch-total.value >= branch-total-avg.value
Transactions
• A transaction is a sequence of queries and update statements
executed as a single unit
• Transactions are started implicitly and terminated by one of
• commit work: makes all updates of the transaction
permanent in the database
• rollback work: undoes all updates performed by the
transaction.
• Motivating example
• Transfer of money from one account to another involves two
steps:
• deduct from one account and credit to another
• If one steps succeeds and the other fails, database is in an
inconsistent state
• Therefore, either both steps should succeed or neither should
Relation borrower
customer-name loan-number
Jones L-170
Smith L-230
Hayes L-155
Note: borrower information missing for L-260 and loan information
missing for L-155
Joined Relations – Examples
• loan inner join borrower on
loan.loan-number = borrower.loan-number
loan-number branch-name amount customer-name loan-number
select customer-name
from (depositor natural full outer join borrower)
where account-number is null or loan-number is null
Embedded SQL
• The SQL standard defines embeddings of SQL in a variety
of programming languages such as Pascal, PL/I, Fortran,
C, and Cobol.
• A language to which SQL queries are embedded is
referred to as a host language, and the SQL structures
permitted in the host language comprise embedded SQL.
• The basic form of these languages follows that of the
System R embedding of SQL into PL/I.
• EXEC SQL statement is used to identify embedded SQL
request to the preprocessor
EXEC SQL <embedded SQL statement > END-EXEC
Note: this varies by language.
E.g. the Java embedding uses
# SQL { …. } ;
Example Query
From within a host language, find the names and cities of
customers with more than the variable amount dollars in
some account.
• Specify the query in SQL and declare a cursor for it
• cursors where we write a SELECT query to retrieve
multiple rows.
EXEC SQL
declare c cursor for
select customer-name, customer-city
from depositor, customer, account
where depositor.customer-name = customer.customer-
name and depositor account-number = account.account-
number and account.balance > :amount
END-EXEC
Embedded SQL (Cont.)
• The open statement causes the query to be evaluated
EXEC SQL open c END-EXEC
• The fetch statement causes the values of one tuple in the
query result to be placed on host language variables.
EXEC SQL fetch c into :cn, :cc END-EXEC
Repeated calls to fetch get successive tuples in the query
result
• A variable called SQLSTATE in the SQL communication
area (SQLCA) gets set to ‘02000’ to indicate no more data
is available
• The close statement causes the database system to
delete the temporary relation that holds the result of the
query.
EXEC SQL close c END-EXEC
Note: above details vary with language.
Updates Through Cursors
Can update tuples fetched by cursor by declaring that the cursor
is for update
declare c cursor for
select *
from account
where branch-name = ‘Perryridge’
for update
To update tuple at the current location of cursor
update account
set balance = balance + 100
where current of c
SQL Data Definition for Part of the Bank Database
Referential Integrity in SQL
• Primary and candidate keys and foreign keys can be specified
as part of the SQL create table statement:
• The primary key clause lists attributes that comprise the
primary key.
• The unique key clause lists attributes that comprise a
candidate key.
• The foreign key clause lists the attributes that comprise the
foreign key and the name of the relation referenced by the
foreign key.
Referential Integrity in SQL
• By default, a foreign key references the primary key
attributes of the referenced table
foreign key (account-number) references account
• Short form for specifying a single column as foreign key
account-number char (10) references account
• Reference columns in the referenced table can be explicitly
specified
• but must be declared as primary/candidate keys
foreign key (account-number) references account(account-
number)
Primary key in SQL – Example
create table customer
(customer-name char(20),
customer-street char(30),
customer-city char(30),
primary key (customer-name))
create table branch
(branch-name char(15),
branch-city char(30),
assets integer,
primary key (branch-name))
Unique key in SQL – Example
Unique key allows NULL