1 reminder we have covered: –creating tables –converting er diagrams to table definitions today...
Post on 19-Dec-2015
218 views
TRANSCRIPT
1
ReminderReminder
• We have covered:
– Creating tables
– Converting ER diagrams to table definitions
• Today we’ll talk about:
– Altering tables
– Inserting and deleting data from tables
– Querying tables
2
Table AlterationTable Alteration
3
Altering TablesAltering Tables
• Table definitions can be altered after their
creation
– Adding columns
– Changing columns’ definition
– Dropping columns
– Adding or dropping constraints
– And more…
• Use the reserved word ALTER
4
Altering Tables (cont.)Altering Tables (cont.)
• Adding a column:ALTER TABLE Employee ADD (
Mname VARCHAR2(20),Birthday DATE
);
• Changing columns’ definition:ALTER TABLE Emplyee Modify (
Mname VARCHAR2(10));
Cannot be NOT NULL unless the
table is empty
5
Altering Tables (cont.)Altering Tables (cont.)
• Dropping columns:
ALTER TABLE Employee DROP COLUMN Mname;
Dropping multiple columns:
ALTER TABLE Employee DROP
(Mname, Birthday);
• Adding constraints:
ALTER TABLE Department ADD(
FOREIGN KEY (ManagerId)
REFERENCES Employee(SSN));
6
Inserting, deleting, and Inserting, deleting, and updating data in a tableupdating data in a table
7
The Employee TableThe Employee Table> Describe Employee
Name Null? Type
-------- -------- ------------
SSN NUMBER
FNAME VARCHAR2(20)
LNAME VARCHAR2(20)
GENDER CHAR(1)
SALARY NOT NULL NUMBER(5)
8
Inserting a RowInserting a Row
• To insert a row into the Employee table:
INSERT INTO
Employee(SSN, Fname, Lname, Salary)
VALUES(121, ‘Sara’, ‘Cohen’,10000);
• The remaining columns get default values (or
NULL)
• When will this fail?
9
Some More Details…Some More Details…
• The fields don’t have to be specified if
values are specified for all columns and
in the order defined by the table
• Example:
INSERT INTO Employee
VALUES(121, ‘Sara’, ‘Cohen’, `F’, 1000);
10
Deleting RowsDeleting Rows• General format:
DELETE FROM Table WHERE Cond;
Deletes all rows satisfying Cond from Table
• For example, to remove the employee with
SSN 121 from the Employee table:
DELETE FROM Employee
WHERE SSN = 121;
11
Deleting Rows (cont.)Deleting Rows (cont.)
• To remove all male employees having
a salary greater than 150,000 shekels:
DELETE FROM Employee
WHERE Salary > 150000;
12
Updating Rows Updating Rows
• We can update rows in a table• General format:
UPDATE Table SET Field1=value1,,,FieldN=valueNWHERE Cond
• Now we can reduce salaries instead of firing employees:
UPDATE Employee SET Salary = 50000 WHERE Salary > 150000;
13
The ORACLE Bulk LoaderThe ORACLE Bulk Loader• A tool that provides easy insertion of large
amounts of rows into tables.• The idea: the values of the inserted rows are
kept in a compact file: the Data file.• We define the structure of the Data file, in
the Control file.
Here we enter the data we want to
insert (employees)
myData.dat
Here we specify the structure of
the data file
myCtrl.ctl
14
The Control FileThe Control File
• For example, we can load 3 employees from the file myEmp.dat that contains the following lines:
Shaquile|Oneil|121Magic|Johnson|134Doron|Sheffer|156
• A simple control file:
LOAD DATA
INFILE <dataFile>
[APPEND] INTO TABLE <tableName>
FIELDS TERMINATED BY '<separator>‘
(<list of all attribute names to load>)
15
The Control File (cont.)The Control File (cont.)
• <dataFile>:
The name of the data file
• <tableName>:
The name of the table into which the data will be loaded (appended if APPEND is specified, or else the table must be empty)
• <separator>:
A string that separates two field values of a row
• The attributes are separated by commas and enclosed in parentheses
16
The Control File (cont.)The Control File (cont.)• Example:
– When the control file is run, this will insert the 3 employees into the employees table
– The attributes that are unspecified will be set to NULL (or default values if they are specified)
LOAD DATA
INFILE myEmployees.dat
INTO TABLE Employees
FIELDS TERMINATED BY '|'
(Fname, Lname, SSN)
Moshe|Cohen|334
Miri|Levi|998
Alon|Hazan|998
myEmployees.dat
myControl.ctl
17
The Data FileThe Data File
• The Bulk Loader considers every single line to
represent one row in the table
– Even an empty line! (which will usually result
in an error)
• Spaces are not ignored in the data file!
– thus the rows sara| cohen|121 and sara|
cohen|121 define different functionalities
• The NULL value is implied by the NULL keyword or the
empty string
18
The Data File (continued)The Data File (continued)• The control and the data files can be combined into
one .ctl file using the following format:
LOAD DATA
INFILE *
INTO TABLE Employees
FIELDS TERMINATED BY '|'
(Fname, Lname, SSN)
BEGINDATA
Sara|Cohen|121
Benny|Kimelfeld|134
Yaron|Kanza|156
19
The Bulk InvocationThe Bulk Invocation
• To invoke the bulk loader, issue the following command directly from the Unix shell:Sqlldr <ctrlFileName>
• Erroneous lines in the data file are ignored and written into <ctrlFileName>.bad, and any other relevant information is written into <ctrlFileName>.log.
• The tables you fill using the Bulk Loader should be created prior to the loader invocation
• Before invoking the Bulk Loader you have to make sure that no SqlPlus sessions are open.
20
SQL QueriesSQL Queries
21
Query ComponentsQuery Components
• A query can contain the following clauses – select
– from
– where
– group by
– having
– order by
• Only select and from are required
• Order of clauses is always as above
22
Very Basic SQL QueryVery Basic SQL QuerySELECT [Distinct] Attributes
FROM relation
•Attributes: A list of attributes onto which the query projects (For example: Eid, Ename).
•Relation: A relation to perform the query on.
•DISTINCT: Optional keyword to delete duplicatesExample:
Select studentID, studentName
From students
23
StudentIDStudentDe
pt.
StudentNa
me
StudentAg
e
1123 Math Moshe 25
2245 Computers Mickey 26
55611 Math Menahem 29
Select studentID, studentName
From students
Result:
StudentIDStudentNa
me
1123 Moshe
2245 Mickey
55611 Menahem
24
Basic SQL QueryBasic SQL Query
SELECT [Distinct] Attributes
FROM relation
WHERE condition
•Attributes: A list of fields onto which the query projects (For example: Eid, Ename).
•relation: A relation to perform the query on
•condition: A Boolean condition (For example: Eid>21, or Ename=‘Yuval’ )
•DISTINCT: Optional keyword to delete duplicates
25
StudentIDStudentDe
pt.
StudentNa
me
StudentAg
e
1123 Math Moshe 25
2245 Computers Mickey 26
55611 Math Menahem 29Select studentID, studentName
From students
Where StudentDept=‘Math’
Result:
StudentIDStudentNa
me
1123 Moshe
55611 Menahem
26
Basic SQL QueryBasic SQL Query
SELECT [Distinct] attributes
FROM relation
WHERE condition;
•Notice! The "SELECT" clause defines the operation of projection from the relational model. Selection is defined by the WHERE clause.
27
SQL and relational algebraSQL and relational algebra
SELECT Distinct A1,…,An
FROM R1,…,Rm
WHERE C;
A1,…,An (C(R1 x…x Rm))
28
Basic SQL QueryBasic SQL Query
SELECT [Distinct] Attributes
FROM relationsList
WHERE condition
•relationsList: A list of relations. The query is performed on the product of these relations (AxBxC…).
29
Basic SQL QueryBasic SQL Query
SELECT [Distinct] attributes
FROM relations
WHERE condition;
Important! The evaluation order is:
1. Compute the cross product of the tables in relations.
2. Delete all rows that do not satisfy condition.3. Delete all columns that do not appear in attributes.4. If Distinct is specified eliminate duplicate rows.
30
Example Tables UsedExample Tables Used
Reserves
sid bid day
22
58
101
103
10/10/96
11/12/96
Sailors
sid sname rating age
22
31
58
Dustin
Lubber
Rusty
7
8
10
45.0
55.5
35.0
Boats
bid bname color
101
103
Nancy
Gloria
red
green
31
What does this compute?What does this compute?
Select sname
from sailors, reserves
Where sailors.sid=reserves.sid
Reserves
sid bid day
22
58
101
103
10/10/96
11/12/96
Sailors
sid sname rating age
22
31
58
Dustin
Lubber
Rusty
7
8
10
45.0
55.5
35.0
32
Sailors Reserves
sid sname rating age sid bid day
22 Dustin 7 45.0 22 101 10/10/96
22 Dustin 7 45.0 58 103 11/12/96
31 Lubber 8 55.5 22 101 10/10/96
31 Lubber 8 55.5 58 103 11/12/96
58 Rusty 10 35.0 22 101 10/10/96
58 Rusty 10 35.0 58 103 11/12/96
Stage 1: Sailors x Reserves
33
Sailors Reserves
sid sname rating age sid bid day
22 Dustin 7 45.0 22 101 10/10/96
22 Dustin 7 45.0 58 103 11/12/96
31 Lubber 8 55.5 22 101 10/10/96
31 Lubber 8 55.5 58 103 11/12/96
58 Rusty 10 35.0 22 101 10/10/96
58 Rusty 10 35.0 58 103 11/12/96
Stage 2: “where sailors.sid=reserves.sid”
34
Sailors Reserves
sid sname rating age sid bid day
22 Dustin 7 45.0 22 101 10/10/96
58 Rusty 10 35.0 58 103 11/12/96
Stage 2: “where sailors.sid=reserves.sid”
35
Sailors Reserves
sid sname rating age sid bid day
22 Dustin 7 45.0 22 101 10/10/96
58 Rusty 10 35.0 58 103 11/12/96
Stage 3: “select sname”
36
Sailors
sname
Dustin
Rusty
Stage 3: “select sname”
Final answer
37
Example QueryExample Query
SELECT DISTINCT sname, age
FROM Sailors
WHERE rating>7;
Q: What does this compute?
A: Distinct names and ages of sailors with rating >7.
Q: Write it in algebra
A: sname, age (rating>7(Sailors))
38
Example QueryExample QuerySELECT DISTINCT sname
FROM Sailors, Reserves
WHERE Sailors.sid = Reserves.sid and
bid = 103;
Q: What does this compute?
A: names of sailors who reserved boat 103
Q: Write it in relational algebra
sname
(Sailors.sid = Reserves.sid bid = 103 (Sailors x Reserves))
39
Sailors Reserves
sid sname rating age sid bid day
22 Dustin 7 45.0 22 101 10/10/96
22 Dustin 7 45.0 58 103 11/12/96
31 Lubber 8 55.5 22 101 10/10/96
31 Lubber 8 55.5 58 103 11/12/96
58 Rusty 10 35.0 22 101 10/10/96
58 Rusty 10 35.0 58 103 11/12/96
Sailors.sid = Reserves.sid bid = 103
40
Sailors Reserves
sid sname rating age sid bid day
22 Dustin 7 45.0 22 101 10/10/96
22 Dustin 7 45.0 58 103 11/12/96
31 Lubber 8 55.5 22 101 10/10/96
31 Lubber 8 55.5 58 103 11/12/96
58 Rusty 10 35.0 22 101 10/10/96
58 Rusty 10 35.0 58 103 11/12/96
Sailors x Reserves
sname
41
Range VariablesRange Variables
SELECT S.sname
FROM Sailors S, Reserves R
WHERE S.sid = R.sid and
R.bid = 103;
• Range variables are good style.
• They are necessary if the same relation appears twice in the FROM clause
• Similar to Renaming in Relational Algebra
42
Example QueryExample Query
SELECT S.sname
FROM Sailors S, Reserves R
WHERE S.sid = R.sid and
R.bid != 103;
Q: What does this return?Q: What does this return?
A: Names of sailors who reserved a boat A: Names of sailors who reserved a boat other than boat 103 other than boat 103
Notice: sailors who reserved both boat 103 Notice: sailors who reserved both boat 103 andand a different boat will appear! a different boat will appear!
43
A Few SELECT OptionsA Few SELECT Options
• Select all columns:SELECT * FROM Sailors;
• Rename selected columns:SELECT S.sname AS Sailors_Name FROM Sailors S;
• Applying functions (e.g., Mathematical manipulations) SELECT (age-5)*2 FROM Sailors S;
44
Select operatorsSelect operators
• The aggregate operators available in SQL are:
– COUNT(*)
– COUNT([DISTINCT] A)
– SUM([DISTINCT] A)
– AVG([DISTINCT] A)
– MAX(A)
– MIN(A)
• NULL values are ignored
45
ExamplesExamples
SELECT Avg(S.age)
FROM Sailors S, Reserves R
WHERE S.sid = R.sid and R.bid=112
SELECT count(distinct S.sid)
FROM Sailors S, Reserves R
WHERE S.sid = R.sid
SELECT Max(S.age)
FROM Sailors S
46
TheThe WHEREWHERE ClauseClause
• Numerical and string comparison:
!=,<>,=, <, >, >=, <=, between(val1 AND val2)
• Logical components: AND, OR
• Null verification: IS NULL, IS NOT NULL
• Checking against a list with IN, NOT IN.
47
ExamplesExamples
SELECT sname
FROM Sailors
WHERE age>=40 AND rating IS NOT NULL ;
SELECT sid, sname
FROM sailors
WHERE sid IN (1223, 2334, 3344) or
sname between(‘George’ and ‘Paul’);
48
User’s Table ListUser’s Table List
• ORACLE holds tables with some general information
about the tables in your database
• Such Tables are:
– Cat, user_objects
• To see the list of all your tables print:
SELECT * FROM Cat;
• To see the list of all your objects print:
SELECT object_name, timestamp,
object_type FROM user_objects;
49
The LIKE OperatorThe LIKE Operator
• A pattern matching operator (regular expression)
• Basic format: colname LIKE pattern– Example:
_ is a single character
% is 0 or more characters
SELECT sid FROM Sailors WHERE sname LIKE ‘R_%y’;
50
SQL querySQL query
SELECT S.sid
FROM Sailors S, Reserves R
WHERE S.sid = R.sid;
When would adding DISTINCT give a different result?
51
Are any of these the same?Are any of these the same?SELECT S.sid
FROM Sailors S, Reserves R
WHERE S.sid = R.sid;
SELECT DISTINCT R.sid
FROM Sailors S, Reserves R
WHERE S.sid = R.sid;
SELECT R.sid
FROM Reserves R
Sailors
sid sname rating age
Reserves
sid bid day
52
Example QueryExample Query
SELECT S.sname
FROM Sailors S, Reserves R1,
Reserves R2.
WHERE S.sid = R1.sid and
R1.sid=R2.sid and R1.bid!=R2.bid;
How would you query sailors who have reserved more than one boat?
53
SQL querySQL querySELECT S.sname
FROM Sailors S, Reserves R, Boats B
WHERE S.sid = R.sid and
R.bid = B.bid and
B.color = 'red'
Q: What does this return?A: Names of sailors who have reserved a
red boat.
54
SQL querySQL query
SELECT distinct B.color
FROM Sailors S, Reserves R, Boats B
WHERE S.sname = ‘Bob’ and
S.sid = R.sid and R.bid = B.bid
Q: How would you query the colors of boats reserved by Bob?
A:
55
Order Of the ResultOrder Of the Result
• The ORDER BY clause can be used to
sort results by one or more columns
• The default sorting is in ascending
order
• Can specify ASC or DESC
56
ExampleExample
SELECT sname, rating, age
FROM Sailors S
WHERE age > 50
ORDER BY rating ASC, age DESC
57
Other Relational Algebra Other Relational Algebra OperatorsOperators
• So far, we have seen selection,
projection and Cartesian product
• How do we do operators UNION and
MINUS?
58
Three SET OperatorsThree SET Operators
• [Query] UNION [Query]
• [Query] MINUS [Query]
• [Query] INTERSECT [QUERY]
• Note: The operators remove duplicates by default!
• How would you express intersect in Relational Algebra?
59
What does this return?What does this return?SELECT DISTINCT S.sname
FROM Sailors S, Reserves R, Boats B
WHERE S.sid = R.sid and
R.bid = B.bid and
(B.color = 'red' or
B.color='green')
What would happen if we replaced or by and ?
Then how can we query sailors who have reserved both a green and a red boat?
60
Sailors who’ve reserved red Sailors who’ve reserved red oror green boatgreen boat
SELECT S.sname
FROM Sailors S, Boats B, Reserves R
WHERE S.sid = R.sid and R.bid = B.bid and B.color = ‘red’
UNION
SELECT S.sname
FROM Sailors S, Boats B, Reserves R
WHERE S.sid = R.sid and R.bid = B.bid and B.color = ‘green’;
Would INTERSECT here give us sailors who reserved both red and
green boats?
61
Sailors who’ve reserved red Sailors who’ve reserved red andand green boatsgreen boats
SELECT S.sname
FROM Sailors S, Reserves R1, Reserves R2
Boats B1, Boats B2
WHERE S.sid = R1.sid and R1.bid = B1.bid and B1.color = ‘red’ and
S.sid = R2.sid and R2.bid = B2.bid and B2.color = ‘green’;
62
Multiset (Bag) OperatorsMultiset (Bag) Operators
• Union without removing duplicates:
UNION ALL
SELECT DISTINCT sname
FROM Sailors S
UNION ALL
SELECT DISTINCT sname
FROM Sailors S
63
Nested QueriesNested Queries
64
Nested queries in WHERENested queries in WHERE
• Equality nested query:
Select R.bid
From Sailors S, Reserves R
Where sid = (select sid from S where
sname=‘George’);
When would this work? When wouldn’t
it?
65
Nested queries in WHERENested queries in WHERE
SELECT S.sname
FROM Sailors S
WHERE S.sid IN (SELECT R.sid
FROM Reserves R
WHERE R.bid = 103);
Subqueries with multiple results:
Names of sailors who’ve reserved boat 103
What would happen if we wrote NOT IN?
66
What does this produce?What does this produce?
SELECT S.sname
FROM Sailors S
WHERE S.sid NOT IN
(SELECT R.sid
FROM Reserves R
WHERE R.bid IN
(SELECT B.bid
FROM Boats B
WHERE B.color='red'))
67
Set-Comparison QueriesSet-Comparison Queries
SELECT *
FROM Sailors S1
WHERE S1.age > ANY (SELECT S2.age
FROM Sailors S2);
Sailors who are not the youngest:
We can also use op ALL (op is >, <, =, >=, <=, or <>).
68
Correlated Nested QueriesCorrelated Nested Queries
SELECT S.sid
FROM Sailors S
WHERE EXISTS (SELECT *
FROM Reserves R
WHERE R.bid = 103 and
S.sid = R.sid);
Names of sailors who’ve reserved boat 103:
What would happen if we wrote NOT EXISTS?
S not in subquery, refers to outer loop
69
Exists and Not ExistsExists and Not Exists
• Differs from In and Not In by not
matching attributes.
• Exists:
For every tuple in the outer loop, the
inner loop is tested. If the inner loop
produces a result, the outer tuple is
added to the result.