数据库作业

 第十天:
drop table km_data
create table km_data 
(
  mid int identity(1,1) primary key, 
  cluster_id int,
  lat numeric(10,7) not null, 
  lng numeric(10,7) not null
);

drop table km_clusters
create table km_clusters 
(
  mid int identity(1,1) primary key,
  lat numeric(10,7) not null, 
  lng numeric(10,7) not null
);

drop table km_clustersc
create table km_clustersc 
(
  mid int identity(1,1) primary key,
  lat numeric(10,7) not null, 
  lng numeric(10,7) not null
);

  INSERT INTO km_data VALUES(0,1.799+2,-1.2023+2)
  INSERT INTO km_data VALUES(0,-1.2624,-1.5465)/*这是第二个数据*/
  INSERT INTO km_data VALUES(0,1.9409+2,1.9863+2)
  INSERT INTO km_data VALUES(0,0.0079083+2,0.48136+2)
  INSERT INTO km_data VALUES(0,1.212+2,1.3274+2)
  INSERT INTO km_data VALUES(0,1.2379+2,1.2341+2)
  INSERT INTO km_data VALUES(0,-0.0077634+2,1.0215+2)
  INSERT INTO km_data VALUES(0,0.25796+2,-0.0039445+2)
  INSERT INTO km_data VALUES(0,2.0823+2,0.052854+2)
  INSERT INTO km_data VALUES(0,0.8685+2,0.62557+2)
  INSERT INTO km_data VALUES(0,1.3899+2,-0.18589+2)
  INSERT INTO km_data VALUES(0,1.088+2,-0.055903+2)
  INSERT INTO km_data VALUES(0,0.36453+2,2.4725+2)
  INSERT INTO km_data VALUES(0,0.44043+2,1.0557+2)
  INSERT INTO km_data VALUES(0,1.4437+2,-0.21732+2)
  INSERT INTO km_data VALUES(0,0.050096+2,0.95877+2)
  INSERT INTO km_data VALUES(0,1.7812+2,-0.12834+2)
  INSERT INTO km_data VALUES(0,1.569+2,-0.34928+2)
  INSERT INTO km_data VALUES(0,0.17829+2,0.7389+2)
  INSERT INTO km_data VALUES(0,0.73439+2,1.9535+2)

  INSERT INTO km_data VALUES(0,-0.87136,-1.3306)
  INSERT INTO km_data VALUES(0,-0.34353,-1.8436)
  INSERT INTO km_data VALUES(0,-2.1678,-0.50223)
  INSERT INTO km_data VALUES(0,-1.4606,0.48849)
  INSERT INTO km_data VALUES(0,-2.2132,-1.8468)
  INSERT INTO km_data VALUES(0,-2.3194,-1.2463)
  INSERT INTO km_data VALUES(0,-0.068782,-0.33698)
  INSERT INTO km_data VALUES(0,-0.98876,-1.8542)
  INSERT INTO km_data VALUES(0,-1.6451,-2.2013)
  INSERT INTO km_data VALUES(0,-0.19427,-1.1199)
  INSERT INTO km_data VALUES(0,-0.76837,-1.0653)
  INSERT INTO km_data VALUES(0,-1.9898,-0.5147)
  INSERT INTO km_data VALUES(0,0.33959,-1.5955)
  INSERT INTO km_data VALUES(0,-0.7105,-1.1497)
  INSERT INTO km_data VALUES(0,0.47892,-1.4348)
  INSERT INTO km_data VALUES(0,0.13803,-1.0793)
  INSERT INTO km_data VALUES(0,-1.6841,0.53515)
  INSERT INTO km_data VALUES(0,-2.2919,-1.6065)
  INSERT INTO km_data VALUES(0,-1.0729,-2.3474)
  drop PROCEDURE kmains

  CREATE PROCEDURE kmains
  @k int  
  AS
    declare @i int
    set @i=0
    declare cc cursor for select * from km_data
    open cc 
    while @i<@k
    begin
         declare @xx numeric(10,7)
         declare @yy numeric(10,7)
         declare @id int
         declare @c_id int
         fetch next from cc into @id,@c_id,@xx,@yy
         INSERT INTO km_clusters (lat, lng) values(@xx,@yy)
         set @i=@i+1
    end
   close cc
   deallocate cc

    declare @basex numeric(10,7)
    declare @basey numeric(10,7)
    declare @cid int
    
    declare @x numeric(10,7)
    declare @y numeric(10,7)
    declare @mid int
    declare @mcid int
    
    declare @mindistance numeric(10,7)
    declare @mi int    
    declare @index int
    set @index=1
while @index>0
begin
    declare datac cursor for select * from km_data 
    open datac
    fetch next from datac into @mid,@mcid,@x,@y
    while @@FETCH_STATUS=0
    begin
         declare fin cursor for select * from km_clusters
         open fin
         fetch next from fin into @cid,@basex,@basey
         set @mindistance = ((@x-@basex)*(@x-@basex)+(@y-@basey)*(@y-@basey))
         set @mi=@cid
         WHILE @@FETCH_STATUS=0 
         begin
            if @mindistance < (@x-@basex)*(@x-@basex) + (@y-@basey)*(@y-@basey)
            begin
                 set @mindistance = ((@x-@basex)*(@x-@basex)+(@y-@basey)*(@y-@basey))
                 set @mi = @cid
            end 
	    fetch next from fin into @cid,@basex,@basey
         end 
         close fin
         deallocate fin 
         update km_data set cluster_id=@mi where lat=@x and lng=@y
         fetch next from datac into @mid,@mcid,@x,@y
    end
    
    /*declare @savex1 numeric(10,7)
    declare @savey1 numeric(10,7)
    declare @savex2 numeric(10,7)
    declare @savey2 numeric(10,7)
    declare mycursor cursor for select lat,lng from km_clusters
    open mycursor
    fetch next from mycursor into @savex1,@savey1
    fetch next from mycursor into @savex2,@savey2
    close mycursor
    deallocate mycursor */
    declare @isFinished int
    set @isFinished=1
    declare @save1 numeric(10,7)
    declare @save2 numeric(10,7)
    declare @save0 numeric(10,7)
    declare @now1 numeric(10,7)
    declare @now2 numeric(10,7)
    declare cforsave cursor for select mid,lat,lng from km_clusters
    open cforsave
    fetch next from cforsave into @save0,@save1,@save2
    while @@FETCH_STATUS=0
    begin
         select  @now1=avg(lat) from km_data where cluster_id<>@save0 
         select  @now2=avg(lng) from km_data where cluster_id<>@save0
         print @now1
         print @now2
         print @save1
         print @save2
         print (power(@save1-@now1,2)+power(@save2-@now2,2))
         if(power(@save1-@now1,2)+power(@save2-@now2,2) > 0.1)
            set @isFinished=0
         fetch next from cforsave into @save0,@save1,@save2
    end
    close cforsave
    deallocate cforsave
    if @isFinished=1
    break;
     
    /*insert into km_clustersc (select * from km_clusters)*/
    update km_clusters set lat=(select avg(lat) from km_data where km_clusters.mid = cluster_id)
    update km_clusters set lng=(select avg(lng) from km_data where km_clusters.mid = cluster_id) 
    
    close datac
    deallocate datac
end
  RETURN 
  GO 

  exec kmains 2
  select * from km_data
  select * from km_clusters
第九天:
 作业1:
 使用cursor完成查询1~3,要求将查询结果打印到屏幕
 1.
 declare c cursor for
 select T.Name,T.[Year]
 from Title as T,Author as A 
 where T.CallNumber = A.CallNumber and A.Lname = 'Churchill'

 declare @book_name varchar(200)
 declare @book_year varchar(20)
 open c
 fetch next from c into @book_name,@book_year
 while @@FETCH_STATUS=0
 begin
     print('book name is ' + @book_name + ' book year is ' + @book_year);
     fetch next from c into @book_name,@book_year
 end
 close c
 deallocate c
 2.
 declare c cursor for
 select T.Name 
 from Title as T 
 where T.CallNumber in 
 (select B.CallNumber from Member as M,Book as B where M.Memno = B.BorrowerMemno 
  and (M.Fname = 'John' or M.Fname = 'Susan'))

 declare @book_name varchar(200)
 open c
 fetch next from c into @book_name
 while @@FETCH_STATUS=0
 begin
     print('book name is ' + @book_name);
     fetch next from c into @book_name
 end
 close c
 deallocate c
 3.
declare c cursor for
  select M.Fname,M.Lname,M.MI,M.Memno
from Member as M
where
(
M.Memno
in
(select Book.BorrowerMemno from Book,Title where Book.CallNumber = Title.CallNumber and Title.Name = 'Iliad')
and
M.Memno
in
(select Book.BorrowerMemno from Book,Title where Book.CallNumber = Title.CallNumber and Title.Name = 'Odyssey'))

  declare @first_name varchar(20)
  declare @last_name varchar(20)
  declare @mi varchar(10)
  declare @memo varchar(20)
  open c
  fetch next from c into @first_name,@last_name,@mi,@memo
  while @@FETCH_STATUS=0
  begin
     print('name is ' + @first_name +' ' + @last_name + ' mi is ' + @mi + ' memo is ' + @memo);
     fetch next from c into @first_name,@last_name,@mi,@memo
  end
  close c
  deallocate c

作业2:
1.
  CREATE PROCEDURE get_salary_by_name2
  @person_name varchar(20),
  @salary int OUTPUT  
  AS
  SELECT @salary = salary 
  FROM works 
  WHERE person_name = @person_name 
  RETURN 
  GO 
2.
  CREATE PROCEDURE get_manager_by_employees
  @person_name varchar(20),
  @manager_name varchar(20) OUTPUT  
  AS
  SELECT @manager_name = manager_name 
  FROM managers 
  WHERE person_name = @person_name 
  RETURN 
  GO 
  
  declare @manager_name varchar(20); 
  exec get_manager_by_employees @person_name='Smith',@manager_name=@manager_name
  print @manager_name;
3.
  CREATE PROCEDURE get_employees_by_company_name1
  @company_name varchar(20),
  @mycursor cursor VARYING OUTPUT
  AS
  set @mycursor = CURSOR
  FORWARD_ONLY STATIC FOR
  SELECT person_name 
  FROM works 
  WHERE company_name = @company_name
  open @mycursor
  GO 


  declare @person_name varchar(20)
  declare @c cursor
  exec get_employees_by_company_name1 @company_name='First',@mycursor=@c output
  fetch next from @c into @person_name
  WHILE @@FETCH_STATUS=0
  begin
        print('person is ' + @person_name)
	fetch next from @c into @person_name
  end 
  close @c
  deallocate @c
作业三:

1.
         create   trigger  reorder_trigger
         on   inventory  for  update
         as
         if update(levels)
         begin
          declare  @item      varchar(20)
          declare  @level_new int 
          declare  @level_old int
          select  @item=item   from  deleted
          select @level_old=levels   from   deleted
          select  @level_new=levels   from   inserted

         if @level_new<=(select  levels
                                        from  minlevel  where minlevel.item=@item)
             and   @level_old>(select  levels
                                        from  minlevel  where minlevel.item=@item  )
             insert into  orders
               select item,amount
               from reorder    
               where   reorder.item=@item
         end 

2.
CREATE TABLE Person(
SSN char(11) PRIMARY KEY,
Name nvarchar(100),
Address nvarchar(100),
Birthdate datetime)

CREATE TABLE EmployeeTable( 
EmployeeID int PRIMARY KEY,   
SSN char(11) UNIQUE,   
Department nvarchar(10),   
Salary money, 
CONSTRAINT FKEmpPer FOREIGN KEY (SSN) REFERENCES Person (SSN))

CREATE VIEW Employee 
AS 
SELECT P.SSN as SSN, Name, Address, Birthdate,EmployeeID, Department,Salary 
FROM Person P, EmployeeTable E 
WHERE P.SSN = E.SSN 

CREATE TABLE PersonDuplicates( 
SSN char(11), 
Name nvarchar(100),  
Address nvarchar(100),  
Birthdate datetime,
InsertSNAME nchar(100),
WhenInserted datetime) 


CREATE TRIGGER Employee_TRIGGER ON Employee
INSTEAD OF INSERT
AS
BEGIN
IF (NOT EXISTS (SELECT P.SSN
      FROM Person P, inserted I
      WHERE P.SSN = I.SSN))
   INSERT INTO Person
      SELECT SSN,Name,Address,Birthdate
      FROM inserted
ELSE
   INSERT INTO PersonDuplicates
      SELECT SSN,Name,Address,Birthdate,SUSER_SNAME(),GETDATE()
      FROM inserted
IF (NOT EXISTS (SELECT E.SSN
      FROM EmployeeTable E, inserted
      WHERE E.SSN = inserted.SSN))
   INSERT INTO EmployeeTable
      SELECT EmployeeID,SSN, Department, Salary
      FROM inserted
ELSE
   UPDATE EmployeeTable
      SET EmployeeID = I.EmployeeID,
          Department = I.Department,
          Salary = I.Salary
   FROM EmployeeTable E, inserted I
   WHERE E.SSN = I.SSN
END
第五天:
DROP TABLE author4 ;
DROP TABLE hold4 ;
DROP TABLE TITLE4 ;
DROP TABLE MEMBER4 ;
DROP TABLE BOOK4;

CREATE TABLE TITLE4
 (callnumber  char(8) NOT NULL,
  isbn        char(8),
  year        datetime,
  name        char(14),
  authorfname char(14),
  authorlname char(14),
  PRIMARY KEY (callnumber)
);

CREATE TABLE MEMBER4
 (libid       char(6) NOT NULL,
  fname       char(14),
  lname       char(14),
  address     char(20),
  phonenumber char(10),
  PRIMARY KEY (libid)
);

CREATE TABLE BOOK4
 (book_id       char(8) NOT NULL,
  edition       char(10),
  status        char(5),
  borrowerid    char(6),
  borrowduedate datetime,
  callnumber    char(8),
  PRIMARY KEY (book_id)
);

INSERT INTO TITLE4 VALUES  ('AB123456', '12345687', '1997/01/01', 'Discrete Maths', 'Shadow', 'Jones');
INSERT INTO TITLE4 VALUES  ('CD456756', '45454598', '1996/01/01', 'Intro to CS', 'Kelvin', 'Smith');
INSERT INTO TITLE4 VALUES  ('EF121221', 'A4245678', '1998/01/01', 'Intro to CE', 'Stella', 'Potter');


INSERT INTO MEMBER4 VALUES  ('123423', 'Jessy', 'Owens', '35 Side Pgh 15255', '4126874534');
INSERT INTO MEMBER4 VALUES  ('A34565', 'Diana', 'Emily', '25 Side Pgh 15245', '4123456452');

INSERT INTO BOOK4 VALUES  ('Q76.98.1', 'first', 'good', 'A34565', '1997-10-10', 'AB123456');
INSERT INTO BOOK4 VALUES  ('Q76.95.6', 'third', 'ok', '123423', '1998-06-06', 'EF121221');

作业答案:
1INSERT INTO TITLE VALUES  ('AB123456', '12345687', '1997/01/01', 'Discrete Maths', 'Shadow', 'Jones');
INSERT INTO TITLE VALUES  ('CD456756', '45454598', '1996/01/01', 'Intro to CS', 'Kelvin', 'Smith');
INSERT INTO TITLE VALUES  ('EF121221', 'A4245678', '1998/01/01', 'Intro to CE', 'Stella', 'Potter');

INSERT INTO MEMBER VALUES  ('123423', 'Jessy', 'Owens', '35 Side Pgh 15255', '4126874534');
INSERT INTO MEMBER VALUES  ('A34565', 'Diana', 'Emily', '25 Side Pgh 15245', '4123456452');

INSERT INTO BOOK VALUES  ('Q76.98.1', 'first', 'good', 'A34565', '1997-10-10', 'AB123456');
INSERT INTO BOOK VALUES  ('Q76.95.6', 'third', 'ok', '123423', '1998-06-06', 'EF121221');

INSERT INTO READ_BY VALUES ('AB123456','123423',3)
INSERT INTO READ_BY VALUES ('AB123456','123423',5)
INSERT INTO READ_BY VALUES ('CD456756','A34565',1)

INSERT INTO SUPPLIER VALUES ('001','WANGWENHAN','NEIMENGGU')
INSERT INTO SUPPLIER VALUES ('002','LIQIAN','TIANJINSHI')
INSERT INTO SUPPLIER VALUES ('003','LIZIWEI','SHANGHAISHI')
SELECT * FROM PURCHASE_ORDER
INSERT INTO PURCHASE_ORDER VALUES ('P001',3,'1995-01-16','1995-01-28','1995-02-24')
INSERT INTO PURCHASE_ORDER VALUES ('P002',6,'2008-08-08','2009-08-08','2009-09-09') 

INSERT INTO ORDER4 VALUES ('AB123456','P001','001')
INSERT INTO ORDER4 VALUES ('CD456756','P001','002')
INSERT INTO ORDER4 VALUES ('CD456756','P002','002')
INSERT INTO ORDER4 VALUES ('CD456756','P002','001')
INSERT INTO ORDER4 VALUES ('AB123456','P002','001')
INSERT INTO ORDER4 VALUES ('AB123456','P001','002')

2
delete from title4
delete from member4
delete from book4
3.1
CREATE TABLE TITLE
 (callnumber  char(8) NOT NULL,
  isbn        char(8),
  year        datetime,
  name        char(14),
  authorfname char(14),
  authorlname char(14),
  PRIMARY KEY (callnumber)
);

CREATE TABLE MEMBER
 (libid       char(6) NOT NULL,
  fname       char(14),
  lname       char(14),
  address     char(20),
  phonenumber char(10),
  PRIMARY KEY (libid)
);

CREATE TABLE BOOK
 (book_id       char(8) NOT NULL,
  edition       char(10),
  status        char(5),
  borrowerid    char(6),
  borrowduedate datetime,
  callnumber    char(8),
  PRIMARY KEY (book_id),
  foreign key(callnumber) references title,
  foreign key(borrowerid) references member 
);

CREATE TABLE read_by(
	callnumber	char(8),
	lib_id		char(6),
	timesread	int,
	PRIMARY KEY	(callnumber, lib_id),
	FOREIGN KEY  (lib_id) REFERENCES member(libid),
	FOREIGN KEY  (callnumber) REFERENCES title(callnumber)
);

CREATE TABLE purchase_order(
	ponum	char(6),
	qty	int,
	orderdate	datetime,
	duedate		datetime,
	receiveddate	datetime,
	PRIMARY KEY (ponum)
);

CREATE TABLE supplier(
	supplier_id	char(6),
	name		char(20),
	address		char(20),
	PRIMARY KEY (supplier_id)
);
CREATE TABLE order4(
	callnumber	char(8),
	ponum		char(6),
	supplier_id	char(6)
	PRIMARY KEY (callnumber, ponum, supplier_id),
	FOREIGN KEY	(ponum) REFERENCES purchase_order(ponum),
	FOREIGN KEY	(supplier_id) REFERENCES supplier(supplier_id),
        FOREIGN KEY  (callnumber) references title(callnumber)
);
3.2
ALTER TABLE title4 ADD CONSTRAINT ak unique(isbn,name)
ALTER TABLE title4 ADD CONSTRAINT ak2 check(isbn is not null)
ALTER TABLE title4 ADD CONSTRAINT ak3 check(name is not null)
3.3
alter table book4 add CONSTRAINT fk foreign key(callnumber) references title4
alter table readby4 add constraint fk1 foreign key(libid) 
references member4
alter table ordered4 add constraint fk2 foreign key(callnumber) references title4
alter table ordered4 add constraint fk2 foreign key(ponum) references purchase_order4
alter table ordered4 add constraint fk2 foreign key(supplier_id) references supplier4
3.4
alter table member4 add Gender varchar(20)
alter table member4 add Join_date varchar(20)
3.5
alter table read_by4 add check(TimesRead >= 0)
5
5.1 Display the ID, first name, and joining date of each member whose ID begins with the letters "A%B" or "A&B"
and who joined the library no later than Nov. 30, 1997.

SELECT * FROM MEMBER
select libid,fname,join_date
from member
where (libid like 'A\%B%' escape '\' or libid like 'A&B%')
      and join_date<='1997-10-30'
5.2 List the name, ISBN, and call number of each title, provided it has been ordered from more than one supplier and the total quantity ordered is more than 10. The list should be arranged in non-increasing order of the total quantity ordered.
select t.name,t.isbn,t.callnumber,sum(p.qty) as totalOrder
from title as t,order4 as o,purchase_order as p
where t.callnumber=o.callnumber
and o.ponum = p.ponum
and (select count(distinct supplier_id) from order4 where callnumber = t.callnumber) > 1
group by t.name,t.isbn,t.callnumber
having sum(qty) > 10
order by sum(qty) desc
3.List the IDs and first names of all the members who have read less than 5% of the total number
of books read from the library, in non-decreasing order of the number of books read by each.

select m.libid,m.fname,sum(timesread)as numbersOfReading
from member as m,title as t,read_by as r
where m.libid=r.lib_id and t.callnumber=r.callnumber
group by m.libid,m.fname
having sum(timesread) < (select sum(timesread)*0.05 from read_by)

5.4List in alphabetical order the first names and IDs of all female members of the library
who have read at least one title more than once.

select * from read_by4
select distinct m.libid,m.fname 
from member4 as m,read_by4 as r 
where m.libid=r.libid
and m.gender='famale'
and r.timesread > 0 
order by m.fname
5.List the names of the suppliers and their respective average quantities of title orders received,
 whose average quantities of title orders received is more than the average quantity of an 
order in the system.

select s.name
from supplier as s,order4 as o,purchase_order as p
where o.supplier_id=s.supplier_id and p.ponum=o.ponum
group by o.supplier_id,s.name
having(avg(qty))>(select avg(qty) from purchase_order);
5.6 
select m.fname,m.libid
from member4 as m,read_by4 as r,book4 as b
where m.libid=b.borrowerid and r.lib_id=m.libid
and m.gender='male' and m.join_date<'1995-11-10'
and (select count(book_id) from book4 where borrowerid=m.libid) <= 5
and 2 >= all(select timesread from read_by4 where libid=m.libid)
order by m.fname
 第三天:
1. List the titles of all books written by "Churchill," along with their Year of Publication.
select T.Name,T.[Year],A.Lname from Title as T,Author as A where T.CallNumber = A.CallNumber and A.Lname = 'Churchill';
2. Retrieve the titles of all books borrowed by members whose first name is "John" or "Susan".
select distinct T.Name from Title as T where T.CallNumber in 
(select B.CallNumber from Member as M,Book as B where M.Memno = B.BorrowerMemno 
and (M.Fname = 'John' or M.Fname = 'Susan'))
3.3.List the names and IDs of all members who have borrowed the "Iliad" and the "Odyssey"—both books.
select M.Fname,M.Lname,M.MI,M.Memno
from Member as M
where
(
M.Memno
in
(select Book.BorrowerMemno from Book,Title where Book.CallNumber = Title.CallNumber and Title.Name = 'Iliad')
and
M.Memno
in
(select Book.BorrowerMemno from Book,Title where Book.CallNumber = Title.CallNumber and Title.Name = 'Odyssey'))
4.
List the names and IDs of all the members who have borrowed all titles written by "Collins". 
Assume that a member may have borrowed multiple copies of the same title.

select M.Fname,M.Lname,M.MI from Member as M 
where 
(select count(*) from Title,Author where Title.CallNumber = Author.CallNumber and Author.Lname = 'Collins')
 = (select  count(distinct Book.CallNumber) from Book,Author where Book.CallNumber = Author.CallNumber 
and Book.BorrowerMemno = M.Memno and Author.Lname = 'Collins')

5.Find the phone numbers of all members who have borrowed a book 
written by an author whose last name is "Tanenbaum."

select M.PhoneNumber from Member as M,Book as B,Title as T,Author as A
where A.CallNumber = T.CallNumber and B.CallNumber=T.CallNumber and B.BorrowerMemno = M.Memno 
and A.Lname='Tanenbaum'

6.Find those members who have borrowed more than three books
and list their names, IDs, and the number of books they borrowed.
Sort the results in descending order based on the number of books borrowed.

select M.Fname,M.Lname,M.MI,count(Book.BOOK_ID) from Member as M,Book 
where M.Memno = Book.BorrowerMemno 
group by M.MI,M.Fname,M.Lname having count(BOOK.BOOK_ID) > 3 
order by count(BOOK.BOOK_ID);

7.List all members who have not borrowed any book.

select distinct
member.memno 
from member where member.memno not in (select member.memno from member,book where member.memno = 
book.borrowermemno)

8.select M.memno from Member as M
where 
M.memno in
(
select M.memno from Member as M where m.phonenumber like '412%')
and
M.memno
not in
(select M1.memno from Member as M1,Book,Title where M1.memno = 
Book.borrowerMemno and Title.CallNumber = Book.CallNumber and Title.Name='Pitt Roads')

8.List in alphabetical order the first names of all the members 
who are residents of Pittsburgh (Phone numbers starting with "412")
and who have not borrowed the book titled "Pitt Roads."

select M.memno,M.Fname from Member as M
where 
M.memno in
(
select M.memno from Member as M where m.phonenumber like '412%')
and
M.memno
not in
(select M.memno from Member as M,Book,Title where M.memno = 
Book.borrowerMemno and Title.CallNumber = Book.CallNumber and Title.Name='Pitt Roads')
order by M.Fname
第二天:
create database MySecondDatabaseHomeWork
drop table manages
drop table works
drop table employees
drop table company

create table employees(
   person_name varchar(40),
   street      varchar(40),
   city        varchar(40)
  primary key(person_name)
);

create table company(
   company_name varchar(40),
   city         varchar(40)
   primary key(company_name)
);

create table manages(
   person_name varchar(40),
   manager_name varchar(40)
   primary key(person_name),
   foreign key(person_name) references employees,
   foreign key(person_name) references employees 
);

create table works(
   person_name varchar(40),
   company_name varchar(40),
   salary int
   primary key(person_name),
   foreign key(person_name) references employees,
   foreign key(company_name) references company
);
insert into employees values('Jones','First street','A');
insert into employees values('Mike','Second street','Newton');
insert into employees values('Sunny','First street','Beijing');
insert into employees values('Jane','Third street','Tianjin');
insert into employees values('Maria','Fifth street','NewYork');
insert into employees values('Tom','First street','A');
insert into employees values('Sara','Second street','Newton');
insert into employees values('Jacky','Fifth street','Shanghai');
insert into employees values('Micky','Second street','Tokyo');
insert into employees values('Hero','First street','Tokyo');
insert into employees values('Joyce','First street','Beijing');
insert into company  values('First Bank Corporation','Tianjin');
insert into company  values('Second Bank Corporation','NewYork');
insert into company  values('Third Bank Corporation','Beijing');
insert into company  values('Big Bank Corporation','Tokyo');
insert into company  values('Small Bank Corporation','Newton');
insert into works  values('Jones','First Bank Corporation','10000');
insert into works  values('Mike','Second Bank Corporation','15000');
insert into works  values('Sunny','Small Bank Corporation','5000');
insert into works  values('Jane','First Bank Corporation','20000');
insert into works  values('Maria','Third Bank Corporation','11000');
insert into works  values('Tom','Small Bank Corporation','9000');
insert into works  values('Sara' ,'Big Bank Corporation','20000');
insert into works  values('Jacky','First Bank Corporation','7000');
insert into works  values('Micky','Big Bank Corporation','16000');
insert into works  values('Hero','Big Bank Corporation','19000');
insert into manages  values('Jones','Max');
insert into manages values('Mike','Un');
insert into manages   values('Micky','Uie');
insert into manages  values('Sunny','Joyce');
insert into manages   values('Jane','Hero');
insert into manages   values('Maria','Jacky');
insert into manages   values('Tom','Hero');
1.找出First Bank Corporation的所有员工的姓名
  select person_name
  from works where company_name='First Bank Corporation'
2.找出First Bank Corporation的所有员工的姓名和居住的城市
   select e.person_name,e.city
   from works w,employees e
   where w.company_name = 'First Bank Corporation'
   and e.person_name=w. person_name
3.找出First Bank Corporation所有年收入在10 000美元以上的员工的姓名和居住的街道城市
   select e.person_name,e.street,e.city
   from employees as e,works as w
   where e.person_name = w.person_name 
   and w.salary>10000
   and w.company_name = 'First Bank Corporation'
4.找出所有居住地与工作的公司在同一城市的员工的姓名
  select e.person_name
  from employees as e,works as w,company as c
  where e.person_name=w.person_name and w.company_name=c.company_name
  and e.city = c.city and w.company_name=c.company_name
5.找出与其经理居住在同一城市同一街道的所有员工的姓名
  select Y.person_name  
  from employees Y,employees J,manages M 
  where Y.person_name = M.person_name 
  and M.manager_name = J.person_name 
  and Y.street = J.street 
  and Y.city = J.city
6.找出此数据库中不在First Bank Corporation工作的所有员工的姓名(not in)
  select eo.person_name
   from employees as eo
   where eo.person_name not in
   (select e.person_name 
   from works w,employees e
   where w.company_name = 'First Bank Corporation'
   and e.person_name=w. person_name)
7.找出比Small Bank Corporation的所有员工收入都高的所有员工的姓名
   select w.person_name
   from works as w
   where w.salary>all(
   select salary from works where company_name = 'Small Bank Corporation'
   )
8.修改数据库,使Jones现在居住在Newtown
  update employees set city='Newtown' where person_name='Jones'
9.为First Bank Corporation的所有员工都提高工资10%
  update works set salary = salary*1.1
10.为数据库中所有经理都提高工资10%
  update works set salary = salary*1.1 where person_name in (select manager_name from managers)
11.为数据库中所有工资不高于100000美元的经理提高工资10%,而高于100000美元的经理提高工资3%
 update works 
  set salary = 
    case 
        when person_name in (select manager_name from manages) and salary <=10000 then salary*1.1
        when person_name in (select manager_name from manages) and salary >10000 then salary*1.3
        else salary 
    end 
12.删除works关系中Small Bank Corporation的员工的所有信息
   delete from works where company_name='Small Bank Corporation'
13.找出员工最多的公司
   select company_name from works group by company_name having   
  (count(person_name))>=all(select count(person_name) from works group by company_name)
14.找出工资最少的员工所在公司
   select person_name from works where salary <=all(select salary from works) 
15.找出人均工资比First Bank Corporation人均工资高的公司
   select company_name from works group by company_name having avg(salary)>(select avg(salary) from works where company_name = 'First Bank Corporation')
第二个作业:
create table person(
  driver_id   int,
  person_name varchar(20),
  address     varchar(20)
  primary key(driver_id)
)

create table car(
  license varchar(20),
  model varchar(20),
  car_year varchar(20),
  primary key(license)
)

create table accident(
   report_number int, 
   a_date        varchar(20), 
   location      varchar(20)
   primary key(report_number)
);
create table owns(
  driver_id int,
  license varchar(20)
  primary key(driver_id,license),
  foreign key(driver_id) references person,
  foreign key(license) references car
);

create table participated(
  driver_id int,
  license varchar(20),
  report_number int,
  damage_amount int
  primary key(driver_id,license,report_number),
  foreign key(driver_id) references person,
  foreign key(license) references car,
  foreign key(report_number) references accident 
); 

insert into person values(1,'wangwenhan','neimenggu')
insert into person values(2,'zhangqian','tianjin')
insert into person values(3,'zhuminjie','henan')
insert into person values(4,'zhouzhimei','henshui')
insert into person values(5,'John Smith','sichuan')

insert into car values('001','Mazda','1989')
insert into car values('002','bengchi','1999')
insert into car values('003','baoma','1898')
insert into car values('004','aodi','1995')
insert into car values('005','xiandai','2008')

insert into owns values(5,'001')
insert into owns values(1,'002')
insert into owns values(2,'003')
insert into owns values(3,'004')
insert into owns values(5,'005')

insert into accident values(1,'1989','shandong')
insert into accident values(2,'1989','fujian')
insert into accident values(3,'1989','shanghai')
insert into accident values(4,'2008','beijing')

insert into participated values(5,'001',1,6)
insert into participated values(5,'005',2,4)
insert into participated values(3,'004',2,1)
insert into participated values(2,'003',3,6)
 
 1.找出所有在1989年其车辆出过车祸的人员总数
   select sum(p.damage_amount)
   from accident as a,participated as p
   where a.report_number = p.report_number
   and a.a_date='1989'
 2.找出和John Smith的车有关的车祸数量
   select count(p.report_number) 
   from participated as p,person as pe where pe.driver_id=p.driver_id and 
   pe.person_name='John Smith' 
 3.为数据库添加一个新的车祸
   insert into participated values(1,'001',7,5)
   insert into accident values (7,'2014','tianjin')
 4.删除John Smith的车马自达(Mazda)
   delete from car where license in(select c.license from car as c,person as p,owns as o where c.license=o.license and p.driver_id = o.driver_id
   and p.person_name='John Smith' and c.model = 'Mazda') and model='Mazda'
    delete from owns where driver_id in (select driver_id from person where person_name='John Smith')
                          and license in (select license from car where model='Mazda') 
第一天:
create database myFisrtDatabaseHomework;

create table customer(
  customer_name varchar(20) not null,
  customer_street varchar(20),
  customer_city varchar(20),
  primary key(customer_name)
);

create table branch(
  branch_name varchar(20),
  branch_city varchar(20),
  assets      numeric(16,2),
  primary key(branch_name)
);

create table account(
  account_number varchar(20),
  branch_name varchar(20),
  balance numeric(12,2)
  primary key(account_number),
  foreign key (branch_name) references branch
);

create table depositor(
  customer_name varchar(20),
  account_number varchar(20),
  primary key(customer_name,account_number),
  foreign key (customer_name) references customer,
  foreign key (account_number) references account   
);

create table loan(
  loan_number varchar(20),
  branch_name varchar(20),
  amount int
  primary key (loan_number),
  foreign key (branch_name) references branch
);

create table borrower(
  customer_name varchar(20),
  loan_number varchar(20)
  primary key (customer_name,loan_number),
  foreign key (loan_number) references loan,
  foreign key (customer_name) references customer
);

insert into customer values ('name1','street1','city1');
insert into branch values('yinhang1','city1',1111111111.11);
insert into account values('a_number1','yinhang1',1111111111.11);
insert into depositor values('name1','a_number1');
insert into loan values('loan_number1','yinhang1',1400);
insert into borrower values('name1','loan_number1');

insert into customer values ('wangwenhan','weijinlu','neimenggu');
insert into branch values('zhongguyinhang','neimenggu',1111111111.11);
insert into account values('A001','zhongguyinhang',1111111111.11);
insert into depositor values('wangwenhan','A001');
insert into loan values('001','zhongguyinhang',1000);
insert into borrower values('wangwenhan','001');

insert into customer values ('huangyi','nanjing','sichuan');
insert into branch values('zhaoshangyinhang','sichuan',2111111111.11);
insert into account values('A002','zhaoshangyinhang',2111111111.11);
insert into depositor values('huangyi','A002');
insert into loan values('002','zhaoshangyinhang',1200);
insert into borrower values('huangyi','002');

insert into customer values ('zhangqian','wuqing','tianjin');
insert into branch values('jiansheyinhang','tianjin',3111111111.11);
insert into account values('A003','jiansheyinhang',3111111111.11);
insert into depositor values('zhangqian','A003');
insert into loan values('003','jiansheyinhang',1300);
insert into borrower values('zhangqian','003');

insert into customer values ('liuyumei','langfang','hebei');
insert into branch values('gongshangyinhang','hebei',4111111111.11);
insert into account values('A004','gongshangyinhang',4111111111.11);
insert into depositor values('liuyumei','A004');
insert into loan values('004','gongshangyinhang',1400);
insert into borrower values('liuyumei','004');

insert into customer values ('lvhuangbing','baidi','hubei');
insert into branch values('nongyeyinhang','hubei',5111111111.11);
insert into account values('A005','nongyeyinhang',5111111111.11);
insert into depositor values('lvhuangbing','A005');
insert into loan values('005','nongyeyinhang',1500);
insert into borrower values('lvhuangbing','005');

insert into customer values ('guoning','binjiang','tianjin');
insert into branch values('feiyinhang','tianjin',6111111111.11);
insert into account values('A006','feiyinhang',6111111111.11);
insert into depositor values('guoning','A006');
insert into loan values('006','feiyinhang',1600);
insert into borrower values('guoning','006');

insert into customer values ('chengrui','nankai','tianjin');
insert into branch values('beijingyinhang','tianjin',6111111111.11);
insert into account values('A007','beijingyinhang',6111111111.11);
insert into depositor values('chengrui','A007');
insert into loan values('007','beijingyinhang',1600);
insert into borrower values('chengrui','007');

insert into customer values ('chengyuanxu','nankai','tianjin');
insert into branch values('tianjinyinhang','tianjin',6111111111.11);
insert into account values('A008','tianjinyinhang',6111111111.11);
insert into depositor values('chengyuanxu','A008');
insert into loan values('008','tianjinyinhang',1600);
insert into borrower values('chengyuanxu','008');

insert into customer values ('wwh','nankai','tianjin');
insert into branch values('zongyinhang','tianjin',9111111111.11);
insert into account values('A009','zongyinhang',9111111111.11);
insert into depositor values('wwh','A009');
insert into loan values('009','zongyinhang',1900);
insert into borrower values('wwh','009');

select * from customer;
select * from branch;
select * from account;
select * from depositor;
select * from loan;
select * from borrower;

程 序 实 践 (四) 总结报告 专 业 班 级 学 号 姓 名 日 期 东北大学软件学院 一 课程基本信息 1 二 教学目的和基本要求 1 三 课程设计的内容和安排 1 四 课程设计的题目 1 五 考核的方法和成绩的评定 2 六 时间的安排 2 七 课程设计结果的提交 3 八 课程设计报告的格式(见附页) 4 九 课程设计题目说明 4 附页 1 一 课程基本信息 1.课程设计名称:程序实践(四) 2.课程设计编号: 3.课程设计学分:2学分 4.课程设计周数(学时):3周(32学时) 5.课程设计授课单位:软件工程研究所 6.指导方式:集体辅导和个别辅导相结合 7.适用专业:软件工程(高起本、1+3) 8.课程设计教材及主要参考资料: [1]《数据库设计、应用开发与管理》,Michael V. Mannino等著,电子工业出版社,2005.1 [2] http://www.icarnegie.com/ 二 教学目的和基本要求 1.加深对数据库系统、程序设计语言的理论知识的理解和应用水平。 2.通过完成具有实际意义的Web数据库练习,进一步熟悉数据库管理系统的操作技术,提高动手能力,提高分析问题和解决问题的能力。 3.提高综合运用所学的理论知识和方法,独立分析和解决问题的能力。 三 课程设计的内容和安排 1.安装并运行数据库; 2.完成关于关系数据库基础知识的题目1; 3.运行给定的SQL语句,生成图书馆管理系统的数据库,编写相应的SQL语句,完成题目2中要求的内容; 4.运行给定的SQL语句,生成图书馆管理系统的数据库,编写高级的SQL语句,完成题目3中要求的内容; 5.完成Web 数据库程序设计题目4(选做) 6.阅读附录中的电子商务系统,给出该电子商务系统的E-R模型; 7.完成关于规范化内容的题目6; 8.对于第6步中自己设计的E-R模型,将其转换为关系数据模型; 9.完成关于事务编程方面的题目8,9; 10.完成索引建立和查询优化方面的题目10; 11.完成整个的电子商务项目;(选做) 12.完成网上书店项目;(选做) 13.撰写课程设计报告:总结和提升上述过程和步骤,写出结构严谨、表述清楚、符合设计规范的报告。 四 课程设计的题目 本课程实践要求完成一个电子商务项目(Web DB应用),其中包括10个具有实际意义的数据库练习,包括了数据库系统应用中的各个方面的知识。此外附件A、B还包括一个实际的图书馆项目,可根据实际情况选做。 五 考核的方法和成绩的评定 考核成绩分为两个部分: 1.验收部分:占60%。 按照以下几个指标进行验收 验收时是否能够快速完成老师指定的练习题目 回答问题的思路是否清晰 内容设计的是否规范、合理 内容设计的创新性 2.实验报告(40%) 实验报告结构是否清晰,问题叙述是否具有逻辑性 Web数据库应用程序设计的正确性 六 时间的安排 共3周(见教学办安排)。每个同学可以根据自身实际情况掌握进度,做完整个项目即可验收,最晚到实践课的最后一天。 七 课程设计结果的提交 1.课程设计报告(一份、A4纸打印,同时包括一份电子文档) 2.答辩报告(制作PPT报告,电子方式提交),要求重点突出,思路清晰,同时就此报告准备答辩。 所有电子方式提交的文件全部存放在一个目录中,并对其进行压缩,压缩后的文件按规定格式进行命名,命名格式为:班级号+学号+姓名。 八 课程设计报告的格式(见附页) 1.按各个题目的要求书写相关文档; 2.参考文献。 九 课程设计题目说明 见文件夹--------“程序实践四资料” 此文件夹内共有十个练习文件夹(练习1----练习10内均为超文本文件,索引文件为 “练习N.html”) 另有附件A、B、C,其中附件C为前十个练习的参考项目资料,附件A和B为可选做项目的参考资料。 9.1 关系数据库 设计以下两个表: BOOK: Primary Author Title ISBN PublisherID Edition Date of Publication Price Book Description PUBLISHER: PublisherID Name Address 第一部分: 1.指出你所设计表的各种键值,在选择时不要考虑性能问题。 1)指出每张表是否存
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值