问答题

【说明】
设有下列关于图书借阅系统的E—R图。图中矩形表示实体,圆表示属性,双圆表示关键字属性,菱形表示实体间的联系。假定已通过下列SQL语言建立了基本表:
CREATE TABLE Readers
(Rao CHAR(6) PRIMARY KEY,
Rname CHAR(20) NOT NULL,
Raddress CHAR(200),
Rphone CHAR(15));
CREATE TABLE Books
(Brio CHAR(6) PRIMARY KEY,
Rname CHAR(50) NOT NULL);
CREATE TABLE Administrators
(Ano CHAR(6) PRIMARY KEY,
Aname CHAR(20) NOT NULL);
CREATE TABLE Borrows
(Rno CHAR(6) NOT NULL,
Bno CHAR(15) NOT NULL,
Ano CHAR(6) NOT NULL,
Bdate DATE,
Rdate DATE,
PRIMARY KEY(Rno,Bno,Ano),
FOREGIN KEY(Rno) REFERENCE Readers(Rno),
FOREGIN KEY(Bno) REFERENCE Book(Bno)
FOREGIN KEY(Ano) REFERENCE Administrators(Ano));
CREATE TABLE Readers
(Rao CHAR(6) PRIMARY KEY,
Rname CHAR(20) NOT NULL,
Raddress CHAR(200),
Rphone CHAR(15));
CREATE TABLE Books
(Brio CHAR(6) PRIMARY KEY,
Rname CHAR(50) NOT NULL);
CREATE TABLE Administrators
(Ano CHAR(6) PRIMARY KEY,
Aname CHAR(20) NOT NULL);
CREATE TABLE Borrows
(Rno CHAR(6) NOT NULL,
Bno CHAR(15) NOT NULL,
Ano CHAR(6) NOT NULL,
Bdate DATE,
Rdate DATE,
PRIMARY KEY(Rno,Bno,Ano),
FOREGIN KEY(Rno) REFERENCE Readers(Rno),
FOREGIN KEY(Bno) REFERENCE Book(Bno)
FOREGIN KEY(Ano) REFERENCE Administrators(Ano));
为了答题的方便,图中的实体和属性同时给出了中英文两种名字,回答问题时只需写出英文名即可。
【系统E-R图】
1. 【问题1】
填写下列SQL程序中的(1)~(6),使它们分别完成相应的功能。
程序1:查没有借阅过编号为111111图书的所有读者名单。


SELECT Rno,Rname,address,phone
FROM Readers
WHERE Rno (1)
(SELECT (2)
FROM Borrow
WHERE Bno=’llllll’);程序2:统计在2005年1月1日借书的读者人数。
SELECT (3)
FROM Borrow
WHERE (4) ;程序3:查借书证号为123456的读者所借过的所有图书。
SELECT Bno,Bname
FROM Books
WHERE (5)
(SELECT *
FROM Borrow
WHERE (6) AND Rno=’123456’;

【参考答案】

NOT IN
(2)Rno
(3)COUNT(DISTINCT Rno)
(4)Bdate......

(↓↓↓ 点击下方‘点击查看答案’看完整答案、解析 ↓↓↓)
热门 试题

问答题
阅读下列函数说明,将应填入 (n) 处的字句写在答卷纸的对应栏内。 【函数1说明】 函数compare(SqList A,SqList B)的功能是:设A=(al,…,am)和B=(b1,…,bn)均为顺序表,“比较”两个顺序表A和B的大小。设A’和B’分别为A和B中除去最大共同前缀后的子表(例如,A=(y,X,X,Z,X,Z),B=(y,x,x,z,y,x,x,2),则两者中最大的共同前缀为(y,x,x,2),在两表中除去最大共同前缀后的子表分别为A’=(X,Z)和B’=(y,x,x,2))。若A’=B’=空表,则 A=B:若A’=空表,而B’≠空表,或者两者均不为空表,且A’的首元小于B,的首元,则A<B;否则A>B。 提示:算法的基本思想为:若相等,则j+1,之后继续比较后继元素:否则即可得山比较结果。显然,j的初值应为0,循环的条件是j不超出其中任何一个表的范围。若在循环内不能得出比较结果,则循环结束时有3种可能出现的情况需要区分。 【函数1】 int compare(SqList A,SqList B) 若A<B,则返回-1;若A=B,则返回o:若A>B,则返回1 j=0; while(j< (1) &&j<B.1ength) if( A.elem[j] < B.elem[j] ) return(-1); else if( A.elem[j] > B.elem[j] ) return(i); else (2) ff (A.length == B.length) return (0); else fi(A.length < B.length ) return(-1); else return(1); compare 函数1的时间复杂度是 (3) 【函数2说明】 函数 exchange_L( SLink &L, int m )的功能是:用尽可能少的辅助空间将单链表中前 m个结点和后 n 个结点的互换。即将单链表(a1,a2,...,am,b1,b2,...,bn) 改变成 (b1,b2,...,bn,a1,a2,…,am)。 【函数2】 void exchange_L( SLink &L, int m ) if( (4) && L->next) 链表不空且 m!=0 p = L->next; k = 1; while( k< m && p ) 查找am所在结点 p = (5) ; ++k; if( (6) &&p->next) n!=0 时才需要修改指针 ha = L->next; 以指针ha记a1 结点的位置 L->next = p->next; 将b1结点链接在头结点之后 p->next = NULL; 设am的后继为空 q: (7) ; 令q 指向b1结点 while(q->next)q= (8) ; 查的bn结点 q->next = (9) ; 将a1 结点链接到bn 结点之后 函数2的时间复杂度是 (10) 。
问答题