CS206 --- Electronic Commerce
Download
Report
Transcript CS206 --- Electronic Commerce
Chapter 6
More SQL
Database Modification
Defining a Database Schema
Views
1
More SQL
Database Modification
Defining a Database Schema
Views
2
Database Modifications
A modification command does not return a result
(as a query does), but changes the database in
some way.
Three kinds of modifications:
1. Insert a tuple or tuples.
2. Delete a tuple or tuples.
3. Update the value(s) of an existing tuple or tuples.
3
Insertion
To insert a single tuple:
INSERT INTO <relation>
VALUES ( <list of values> );
Example: add Sydney Greenstreet to the list of stars of The
Maltese Falcon.
INSERT INTO StarsIn
VALUES(‘The Maltese Falcon’, 1942, ’Sydney GreenStreet’ );
4
Specifying Attributes in INSERT
We may add to the relation name a list of
attributes.
Two reasons to do so:
1. We forget the standard order of attributes for the
relation.
2. We don’t have values for all attributes, and we want
the system to fill in missing components with NULL or
a default value.
5
Example: Specifying Attributes
Another way to add Sydney Greenstreet to the list
of stars of The Maltese Falcon.
INSERT INTO StarsIn(movieTitle, movieYear, starName)
VALUES(’The Maltese Falcon’, 1942, ’Sydney GreenStreet’);
6
Inserting Many Tuples
We may insert the entire result of a query into a
relation, using the form:
INSERT INTO <relation>
( <subquery> );
7
Example: Insert a Subquery
Using Studio and Movie, add to the relation Studio
all movie studios that are mentioned in the relation
Movie, but don’t appear in Studio.
8
Solution
INSERT INTO Studio(name)
(SELECT DISTINCT studioName
FROM Movie
WHERE studioName NOT IN
(SELECT name
FROM Studio));
9
Deletion
To delete tuples satisfying a condition from some
relation:
DELETE FROM <relation>
WHERE <condition>;
10
Example: Deletion
Delete from relation StarsIn the fact that Sydney
GreenStreet was a star in The Maltese Falcon:
DELETE FROM StarsIn
WHERE movieTitle = ‘The Maltese Falcon’ AND
movieYear = 1942 AND
starName = ‘Sydney Greenstreet’;
11
Example: Delete all Tuples
Make the relation Likes empty:
DELETE FROM Likes;
Note no WHERE clause needed.
12
Example: Delete Many Tuples
Delete from MovieExec all movie executives whose
net worth is low-less than ten million dollars.
DELETE FROM MovieExec
WHERE netWorth < 10000000;
13
Example: Delete With subqueries
Delete from relation Movie in which Sydney
GreenStreet was a star :
DELETE FROM Movie
WHERE Exists (
SELECT *
FROM StarsIN
WHERE movieTitle title AND
movieYear = year);
14
Updates
To change certain attributes in certain tuples of a
relation:
UPDATE <relation>
SET <list of attribute assignments>
WHERE <condition on tuples>;
15
Example: Update
Modify the relation MovieExec by prepending the title
Pres. In front of every movie executives who is the
president of a studio:
UPDATE MovieExec
SET name = ‘Pres. ’ || name
WHERE cert# IN (
SELECT presC#
FROM Studio);
16
Defining a Database Schema
A database schema comprises declarations for the
relations (“tables”) of the database.
Several other kinds of elements also may appear in
the database schema, including views, indexes, and
triggers, which we’ll introduce later.
17
Creating (Declaring) a Relation
Simplest form is:
CREATE TABLE <name> (
<list of elements>
);
To delete a relation:
DROP TABLE <name>;
18
Elements of Table Declarations
Most basic element: an attribute and its type.
The most common types are:
INT or INTEGER
REAL or FLOAT
CHAR(n )
• fixed-length string of n characters.
VARCHAR(n )
• variable-length string of up to n characters.
19
Example: Create Table
CREATE TABLE MovieStar (
name
CHAR(30),
address
VARCHAR(255),
gender
CHAR(1),
birthdate DATE
);
20
Modifying relation schemas
We can use ALTER to modify a relation schema.
We have several options, the most important of
which are:
ADD followed by a column name and its data type;
DROP followed by a column name;
21
Adding Attributes
We may add a new attribute (“column”) to a
relation schema by:
ALTER TABLE <name> ADD
<attribute declaration>;
Example:
ALTER TABLE MovieStar ADD phone CHAR(16);
22
Deleting Attributes
Remove an attribute from a relation schema by:
ALTER TABLE <name>
DROP <attribute>;
Example: we don’t really need the license
attribute for bars:
ALTER TABLE MovieStar DROP birthdate;
23
Default values
When we create or modify tuples, we sometimes
don’t have values for all components.
To address this problem, SQL provides the NULL
value.
However, there are times when we would prefer to
use default value, the value that is placed in a
component if no other value is known.
24
Example
We might wish to use the character ‘?’ as the default for an
unknown gender, and we might also wish to use the earliest
possible date, DATE ‘0000-00-00’ for an unknown
birthdate.
CREATE TABLE MovieStar (
name
CHAR(30),
address VARCHAR(255),
gender CHAR(1) DEFAULT ‘?’,
birthdate SHORTDATETIME DEFAULT ‘0000-00-00’
);
25
Indexes
An index on an attribute A of a relation is a data
structure that makes it efficient to find those tuples
that have a fixed value for attribute A.
26
Example of Sparse Index Files
27
Example of a B+-tree
B+-tree for account file (n = 3)
28
To create a index
Create an index on attribute year for the relation
Movie
CREATE INDEX YearIndex ON Movie(year);
From Movie, create an index on title and year
CREATE INDEX KeyIndex ON Movie(title, year);
29
To delete a index
If we wish to delete the index, we simply use its
name in a statement like:
DROP INDEX YearIndex;
Selection of indexes requires a trade-off by the
database designer
The existence of an index on an attribute greatly
speeds up queries in which a value for that attribute is
specified.
On the other hand, ervery index built for an attribute
of some relation makes insertions, deletion, and
updates to that relation more complex and timeconsuming.
30
Views
A view is a “virtual table” = a relation defined
in terms of the contents of other tables and
views.
Declare by:
CREATE VIEW <name> AS <query>;
Antonym: a relation whose value is really
stored in the database is called a base table.
31
Example: View Definition
To define a view that is a part of the Movie relation,
specifically, the titles and years of the movies made by
Paramount Studio:
CREATE VIEW ParamountMovie AS
SELECT title, year
FROM Movie
WHERE studioName = ‘Paramount’;
32
Example: Accessing a View
Query a view as if it were a base table.
Also: a limited ability to modify views if it makes
sense as a modification of one underlying base table.
Example query:
SELECT title
FROM ParamountMovie
WHERE year = 1979;
33
What Happens When a View Is Used?
The SQL system will translate the query on the view
ParamountMovie into a query about the base table
Movie that has the same effect as our original query.
SELECT title
FROM Movie
WHERE studioName = ‘Paramount’ AND year = 1979;
34
Define a query based on views and base
tables
Example:
SELECT DISTINCT starName
FROM ParamountMovie, StarsIn
WHERE title = movieTitle AND year = movieYear;
35
Renaming attributes
We can give a view’s attributes names of our own
choosing. For example:
CREATE VIEW MovieProd(movieTitle, prodName) AS
SELECT title, name
FROM Movie, MovieExec
WHERE producerC# = cert#;
36
Delete a view
If a view becomes unuseful, we can delete it. For
instance:
DROP VIEW ParamountMovie;
37
NULL Values
Tuples in SQL relations can have NULL as a
value for one or more components.
Meaning depends on context. Two common
cases:
Missing value : e.g., we know Joe’s Bar has some
address, but we don’t know what it is.
Inapplicable : e.g., the value of attribute spouse for
an unmarried person.
38
Two important rules
When we operate on a NULL and any other value,
including another NULL, using an arithmetic
operator like × or +, the result is NULL.
When we compare a NULL value and any value,
including another NULL, using a comparison
operator like = or >, the result is UNKNOWN. The
value UNKNOWN is another truth-value, like
TRUE and FALSE.
39
To ask if x has the value NULL
x IS NULL, this expression have the value TRUE if
x has the value NULL and it has FALSE otherwise.
x IS NOT NULL, this expression have the value
FALSE if x has the value NULL and it has TRUE
otherwise
40
Comparing NULL’s to Values
The logic of conditions in SQL is really 3-valued
logic: TRUE, FALSE, UNKNOWN.
But a query only produces a tuple in the answer if
its truth value for the WHERE clause is TRUE
(not FALSE or UNKNOWN).
41
Exercises of SQL
Answer the following questions, based on the
database below.
Supplier(SNO, SNAME, STATUS, CITY)
Part(PNO, PNAME, COLOR, WEIGHT)
Project(JNO, JNAME, CITY)
SPJ(SNO, PNO, JNO, QTY)
The schema has four relations. The key attributes
for each relation are shown in red.
42
1.Give suitable declarations for each relation.
2.Write the following queries:
(1)Find the name and city of all the Supplier.
(2)Find the name, color and weight of all the parts.
(3)Find the number of all the projects using the parts that
provided by S1.
(4)Find the name and quantity of all the parts used by J2.
(5)Find the number of all the parts made in ShangHai.
(6)Find the name of all the projects which have used the
parts made in ShangHai.
43
(7)Find the number of all the projects that didn’t used the parts made
in TianJin.
(8)Update all the parts which color is red with blue.
(9)Update the Supplier S5 of the part P6 used by J4 with Supplier
S3.
(10)Delete all the records about S2 from relation Supplier, and delete
corresponding records from relation SPJ.
(11)Insert a new record(S2, J6, P4, 200) into relation Supplier.
(12)Grant the INSERT privilege on table Supplier to user John, and
he includes the grant option with this privilege.
(13)Grant the SELECT privilege on table SPJ and UPDATE privilege
on attribute QTY of SPJ to user Allice.
44
3.Construct a view ThirdProj giving the
Supplier number(Sno), part number(Pno),
supporting quantity(QTY) of all Supplier who
provide parts for “Third Project”. Write each
of the queries using this view.
(1)Find the part number and supporting
quantity of all parts used by “Third
Project”.
(2)Find the supporting relation of S1.
45