- · Someone doing “real work” with the computer, using it as a means rather than an end-User
- · Consists of a collection of DML statements that form a logical unit of work.-transaction
- · Fully and clearly expressed; leaving nothing implied-explicit
- · Adds a new row to a table-INSERT INTO
I should execute DESC tablename before doing INSERT to view the data types
for each column. VARCHAR2 data-type entries need single quotation marks in the
VALUES statement.
1. Give two examples
of why it is important to be able to alter the data in a database.
·
I am on a
flight booking site. It shows available flights, say I try to book a ticket and
still my transaction is not commenced anywhere, I will be in big trouble.
·
I am
trying to create a login on a site, it takes my details and say never store my
information in registration request table, I will keep on waiting for approval
which will never happen.
2. DJs on Demand just purchased four new CDs. Use an explicit INSERT statement to add each
CD to the copy_d_cds table. After completing the entries, execute a SELECT *
statement to verify your work.
CD_Number
|
Title
|
Producer
|
Year
|
97
|
Celebrate the Day
|
R & B Inc.
|
2003
|
98
|
Holiday Tunes for All
Ages
|
Tunes are Us
|
2004
|
99
|
Party Music
|
Old Town Records
|
2004
|
100
|
Best of Rock and Roll
|
Old Town Records
|
2004
|
Create copy of main table to play around:
CREATE TABLE copy_d_cds
AS ( SELECT * FROM d_cds);
see if copy worked well:
DESCRIBE copy_d_cds;
DESCRIBE d_cds;
(clone table lost its primary key constraint and cd_number
became nullable.)
see how the copied content looks like.
SELECT * FROM copy_d_cds ;
I see that cd_number 98 will be repeated with my insert
statements, but it won't give error, since primary key constrain is lost in
copy.
The Explicit insert statements without even missing nullable
columns:
INSERT INTO copy_d_cds(cd_number,title,producer,year)
VALUES(97,'Celebrate the Day','R & B Inc.','2003');
INSERT INTO copy_d_cds(cd_number,title,producer,year)
VALUES(98,'Holiday Tunes for All Ages','Tunes are Us','2004');
INSERT INTO copy_d_cds(cd_number,title,producer,year)
VALUES(99,'Party Music','Old Town Records','2004');
INSERT INTO copy_d_cds(cd_number,title,producer,year)
VALUES(100,'Best of Rock and Roll','Old Town Records','2004');
SELECT * FROM copy_d_cds ;
3. DJs on Demand has two new events coming up.
One event is a fall football party and the other event is a sixties theme
party. The DJs on Demand clients requested the songs shown in the table for
their events. Add these songs to the copy_d_songs table using an implicit INSERT statement.
ID
|
Title
|
Duration
|
Type_Code
|
52
|
Surfing Summer
|
Not known
|
12
|
53
|
Victory Victory
|
5 min
|
12
|
Create copy of main table to play
around:
CREATE TABLE copy_d_songs
AS ( SELECT * FROM d_songs);
see if copy worked well:
DESCRIBE copy_d_songs;
DESCRIBE d_songs;
(Also, I see that duration &
artist is nullable in source table. I could skip these column names in insert
into / if I decide to include these columns, I will specify it as NULL in
VALUES. I will prefer the later option to be symmetric and avoid missing
something by mistake. One more thing the clone table lost its primary key
constraint and id became nullable.)
The Explicit insert statements
without even missing nullable columns:
INSERT INTO copy_d_songs
(id,title,duration,artist,type_code)
VALUES(52,'Surfing
Summer',NULL,NULL,12);
INSERT INTO copy_d_songs
(id,title,duration,artist,type_code)
VALUES(53,'Victory Victory','5
min',NULL,12);
But, problem specifically says to use implicit insert statement:
INSERT INTO copy_d_songs
VALUES(52,'Surfing Summer',NULL,NULL,12);
INSERT INTO copy_d_songs
VALUES(53,'Victory Victory','5 min',NULL,12);
SELECT * FROM copy_d_songs ;
4. Add the two new clients to the copy_d_clients
table.
Use either an implicit or an explicit INSERT.
Client_Number
|
First_Name
|
Last_Name
|
Phone
|
Email
|
6655
|
Ayako
|
Dahish
|
3608859030
|
dahisha@harbor.net
|
6689
|
Nick
|
Neuville
|
9048953049
|
nnicky@charter.net
|
a) Create copy of main table to play around:
CREATE TABLE copy_d_clients
AS ( SELECT * FROM d_clients);
b) see if copy worked well:
DESCRIBE copy_d_clients ;
DESCRIBE d_clients;
(clone table lost its primary key
constraint and client_number became nullable.)
SELECT * FROM d_clients ;
SELECT * FROM copy_d_clients ;
c) The Explicit insert statements without even missing
nullable columns:
INSERT INTO copy_d_clients(client_number,first_name,last_name,phone,email)
VALUES(6655,'Ayako','Dahish',3608859030,'dahisha@harbor.net');
INSERT INTO copy_d_clients(client_number,first_name,last_name,phone,email)
VALUES(6689,'Nick','Neuville',3608859030,'nnicky@charter.net');
d) verify data:
SELECT * FROM copy_d_clients ;
5. Add the new client’s events to the
copy_d_events table. The cost of each event has not been determined at this
date.
ID
|
Name
|
Event_ Date
|
Description
|
Cost
|
Venue_ID
|
Package_ Code
|
Theme_ Code
|
Client_ Number
|
110
|
Ayako Anniversary
|
07-Jul-2004
|
Party for 50, sixties dress, decorations
|
|
245
|
79
|
240
|
6655
|
115
|
Neuville Sports Banquet
|
09-Sep-2004
|
Barbecue at residence, college alumni, 100 people
|
|
315
|
87
|
340
|
6689
|
a) Create copy of main table to
play around:
CREATE TABLE copy_d_events
AS ( SELECT * FROM d_events);
b) see if copy worked well:
DESCRIBE copy_d_events ;
DESCRIBE d_events;
(
All the
constraints are lost
in this copy.e.g.:
·
clone table lost its primary key constraint and
id became nullable.
·
245 and 315 venue_id are not there in d_venues,
but it insert will still work. [This loss of foreign key constraint is not
mentioned by DESCRIBE]
one more thing:
·
cost is not nullable and it needs to be a
number. I could either make it nullable, or give some value like 0 to cost. I
go with second choice - give value as zero.
)
SELECT * FROM d_events ;
SELECT * FROM copy_d_events ;
c) The Explicit insert statements:
INSERT INTO copy_d_events(id,name,event_date,description,cost,venue_id,package_code,theme_code,client_number)
VALUES(110,'Ayako
Anniversary',TO_DATE('07-Jul-2004','dd-Mon-yyyy'),'Party for 50, sixties dress,
decorations',0,245,79,240,6655);
INSERT INTO copy_d_events(id,name,event_date,description,cost,venue_id,package_code,theme_code,client_number)
VALUES(115,'Neuville Sports
Banquet',TO_DATE('09-Sep-2004','dd-Mon-yyyy'),'Barbecue at residence, college
alumni, 100 people',0,315,87,340,6689);
d)verify data:
SELECT * FROM copy_d_events ;
6. Create a table called rep_email using the following
statement:
CREATE TABLE rep_email (
id NUMBER(2) CONSTRAINT rel_id_pk
PRIMARY KEY,
first_name VARCHAR2(10),
last_name VARCHAR2(10),
email_address VARCHAR2(10))
Populate this table by running a query on the employees table that
includes only those employees who are REP’s.
Those employees could be Marketing Representative, or Sales
Representative. There JOB_ID ends with '_REP'
DESCRIBE rep_email ;
DESCRIBE employees;
Please note, employee_id has precision 6 and scale 0. But id
in problem statement has 2, 0
Similarly other fields also have differences.
Expected to see errors like ORA-01438: value larger than
specified precision allowed for this column
Luckily, rest of the mismatches still work because data is
ok, but for id, I will have alter it:
ALTER TABLE rep_email DROP column id;
ALTER TABLE rep_email ADD id NUMBER(6,0) CONSTRAINT rel_id_pk PRIMARY
KEY;
DESCRIBE rep_email ;
SELECT employee_id, first_name, last_name, email
FROM employees
WHERE job_id LIKE '%\_REP' ESCAPE '\';
INSERT INTO rep_email(id, first_name, last_name, email_address)
SELECT employee_id, first_name, last_name, email
FROM employees
WHERE job_id LIKE '%\_REP' ESCAPE '\';
SELECT * FROM rep_email;
No comments:
Post a Comment