实验5sql语句练习图书馆数据库答案Word文件下载.docx

上传人:b****6 文档编号:17092892 上传时间:2022-11-28 格式:DOCX 页数:21 大小:66.09KB
下载 相关 举报
实验5sql语句练习图书馆数据库答案Word文件下载.docx_第1页
第1页 / 共21页
实验5sql语句练习图书馆数据库答案Word文件下载.docx_第2页
第2页 / 共21页
实验5sql语句练习图书馆数据库答案Word文件下载.docx_第3页
第3页 / 共21页
实验5sql语句练习图书馆数据库答案Word文件下载.docx_第4页
第4页 / 共21页
实验5sql语句练习图书馆数据库答案Word文件下载.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

实验5sql语句练习图书馆数据库答案Word文件下载.docx

《实验5sql语句练习图书馆数据库答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《实验5sql语句练习图书馆数据库答案Word文件下载.docx(21页珍藏版)》请在冰豆网上搜索。

实验5sql语句练习图书馆数据库答案Word文件下载.docx

姓名

读者姓名

定长字符串,长度为8

非空值

性别

读者性别

定长字符串,长度为2

办公电话

读者办公电话

部门

读者所在部门

借阅表结构

读者的唯一编号

外码,引用读者表的主键

图书的唯一编号

定长字符串,长度为20

外码,引用图书表的主键

借出日期

借出图书的日期

归还日期

归还图书的日期

主键为:

(读者号,图书号)

(1)用Sql语句创建图书馆数据库

CreatedatabaseLab05

(2)用Sql语句创建上述3个表

createtablebook

bookIdchar(10)primarykey,

bookNamevarchar(50),

bookWritervarchar(30),

bookPublishvarchar(30),

bookPricefloat

createtablereader

readerIdchar(10)primarykey,

readerNamevarchar(8)notnull,

readerSexchar

(2)notnull,

readerOfficeTelchar(8),

readerDepartmentvarchar(30)

createtable借阅表

readerIdchar(10),

bookIdchar(10),

checkOutTimechar(8),

checkInTimechar(8),

primarykey(readerId,bookId),

foreignkey(readerId)referencesreader(readerId),

foreignkey(bookId)referencesbook(bookId),

(3)基于图书馆数据库的3个表,用sql语言完成一下操作:

1)为图书表增加一列“ISBN”,数据类型为CHAR(10)

altertablebookaddISBNchar(10)

2)为刚添加的ISBN列增加缺省值约束,约束名为ISBNDEF,缺省值为‘7111085949’

ALTERTABLEbookADDCONSTRAINTISBNDEFDEFAULT('

7111085949'

)FORISBN

3)删除图书表中ISBN列增加的缺省值约束

altertablebookdropISBNDEF

4)删除图书表中新增的ISBN列

ALTERTABLEbookDROPCOLUMNISBN

5)查询全体图书的图书号、书名、作者、出版社和单价

selectbookId,bookName,bookWriter,bookPublish,bookPrice

frombook

6)查询全体图书的信息,其中单价打8折,并设置该列的别名为‘打折价’

selectbookId,bookName,bookWriter,bookPublish,(bookPrice*0.8)as打折价

7)显示所有借阅者的读者号,并去掉重复行

selectdistinctreaderId

from借阅表

8)查询所有单价在20—30元之间的图书信息

selectbookId,bookName,bookWriter,bookPublish,bookPrice,ISBN

wherebookPricebetween20and30

9)查询机械工业出版社、科学出版社、人民邮电出版社的图书信息

wherebookPublishin('

机械工业出版社'

'

科学出版社'

'

人民邮电出版社'

10)查询既不是机械工业出版社、人民邮电出版社、也不是科学出版社出版的图书信息

wherebookPublishnotin('

11)查询姓名的第二个字符是’建’,并且只有2个字的读者的读者号及姓名

selectreaderId,readerName

fromreader

wherereaderNamelike'

_建'

12)查询姓名不是以‘王’、‘张’或‘李’开头的所有读者的读者号及姓名

【方式一】查询出来的结果有问题!

wherereaderNamenotin('

王%'

张%'

李%'

【方式二】

wherereaderNamenotin

selectreaderName

fromreader

wherereaderNamelike'

orreaderNamelike'

13)查询无归还日期的借阅信息

selectbook.bookId,book.bookName,reader.readerId,

reader.readerName,借阅表.checkOutTimeas借书时间,

借阅表.checkInTimeas还书时间

from借阅表,book,reader

 

and借阅表.checkInTimeisnull

14)查询机械工业出版社图书的平均价格、最高价、最低价

selectavg(bookPrice)as平均价格,max(bookPrice)as最高价,min(bookPrice)as最低价

wherebookPublish='

机械工业出版社图书'

15)查询读者的基本信息及借阅情况

fromreader,借阅表,book

and借阅表.readerId='

1000000007'

16)查询至少借阅过1本机械工业出版社出版的图书的读者的读者号、姓名、书名及借阅本数,并按借阅本书多少降序排列

selectr.Rno,Rname,count(borrow.Bno)借阅册数

fromborrow,b,r

groupbyr.rno,Rname

orderbycount(borrow.Bno)desc

17)查询与‘王小平’的办公电话相同的读者的姓名

/*使用“自连接方式”求解*/

fromreadera,readerb

/*

18)查询所有单价小于平均单价的图书的书号、书名及出版社

selectbookId,bookName,bookPublish,bookPrice

wherebookPrice<

selectavg(bookPrice)asaveragePrice

frombook

19)查询‘科学出版社’的图书单价比‘机械工业出版社’最高单价还高的图书书名及单价

wherebookPublishlike'

andbookPrice>

selectmax(bookPrice)

frombook

wherebookPublish='

20)查询‘科学出版社’的图书中单价比‘机械工业出版社’最低单价高的图书书名及单价

andbookPublishlike'

21)创建机械工业出版社图书的视图

CREATEVIEW机械工业出版社View

AS

SELECTbookId,bookName,bookPrice

FROMbook

WHEREbookPublish='

22)创建一个借阅统计视图,名为CountView,包含读者的读者号和总借阅本数

CREATEVIEWCountView

SELECTreaderIdas读者号,count(*)as总借阅本数

FROM借阅表

GROUPBYreaderId

23)创建一个借阅统计视图,名为CountView10,包含借阅总本数打于2的读者号和总借阅本数

CREATEVIEW借阅统计视图View

HAVINGCOUNT(*)>

2

实验5数组

班级:

学号:

姓名:

日期:

一、实验目的

(1)掌握一维数组和二维数组的定义、赋值和输入输出方法;

(2)掌握字符数组和字符串函数的使用;

(3)掌握与数组有关的算法(特别是排序算法)。

二、实验内容

1.阅读下面程序,写出程序运行结果,并且上机进行验证。

(1)#include"

stdio.h"

voidmain()

{

inti,n[4]={0,0,0,0};

for(i=1;

i<

4;

i++)

if(i==3)break;

n[i]=n[i-1]+1;

}

printf("

n[i-1]=%dn[i]=%d\n"

n[i-1],n[i]);

(2)#include"

charch[]={'

0'

1'

2'

3'

4'

5'

6'

7'

8'

9'

};

inti=0,m=2,r,x=42;

charb[80];

while(x)

r=x%m;

x/=m;

b[i++]=ch[r];

for(--i;

i>

=0;

i--)

%c"

b[i]);

\n"

);

(3)#include"

inta[][3]={9,7,5,3,1,2,4,6,8};

inti,j,s1=0,s2=0;

for(i=0;

3;

for(j=0;

j<

j++)

if(i==j)s1=s1+a[i][j];

if(i+j==2)s2=s2+a[i][j];

s1=%ds2=%d"

s1,s2);

(4)#include"

intr[5]={1,2,3,4,5};

inti,j,a[5][5];

=4;

{for(j=i;

a[i][j]=r[j-i];

i;

a[i][j]=r[i-j];

5;

%2d"

a[i][j]);

2.程序填空(根据题意在空白处填入适当的内容,使程序变得完整。

并上机进行调试验证)

(1)程序说明:

下列程序完成的是插入排序功能:

数组a中存放一个递增数列,输入一个整数x,将它插入到数组中,使之仍为一个有序数列。

#include"

#defineN10

inta[11]={1,10,20,30,40,50,60,70,80,90},x,i,p;

scanf("

%d"

&

x);

for(i=0,p=N;

N;

if(x<

a[i])

p=i;

_break_;

for(i=N-1;

=p;

_i--__)

a[i+1]=a[i];

_a[p]=x___;

x);

=N;

%5d"

a[i]);

(2)程序说明:

下面程序完成的是折半查找。

A数组中存放的是n个由大到小已经排好序的数列,从这n个数中查找x的值是否存在。

其基本思想是:

在查找范围里,将x与处于中间位置上的数比较,如果相等,则查找成功,如果小于该元素,则在较小的一半元素里再进行折半查找;

如果x大于该元素,则在较大的一半元素里再进行折半查找。

变量top,bottom,mid分别指向查找范围的顶部、底部和中间位置。

#definen10

main()

inta[n],find;

intx,i,top,bottom,mid;

inputthesortednumbers:

n;

__&

a[i]___);

inputthenumbertofind:

find=0;

top=0;

bottom=n-1;

=a[0]&

&

top<

=bottom)

while(!

find&

mid=mid=(bottom+top)/2;

if(x==a[mid])

find=1;

x=%dposition=%d\n"

x,mid);

elseif(x>

a[mid])

bottom=mid-1;

else

top=mid+1;

if(find==0)printf("

thenumber%disnotinthetable"

(3)程序说明:

下面程序分别输出方阵中主对角线、副对角线上元素的和suml和sum2(主对角线为从矩阵的左上角至右下角的连线,副对角线为从矩阵的右上角至左下角的连线).

#include"

#defineSIZE5

inta[SIZE][SIZE],m,n,sum1,sum2;

for(m=0;

m<

SIZE;

m++)

for(n=0;

n<

n++)

a[m][n]);

sum1=sum2=__0__;

sum1=sum1+a[m][m];

sum2=sum2+a[m][SIZE-1-m];

sum1=%dsum2=%d\n"

sum1,sum2);

(4)程序说明:

下面程序打印出如下所示的杨辉三角行(打印10行)。

1

11

121

1331

14641

15101051

…….

inti,j,a[10][10]={{1},{1,1}};

for(i=2;

10;

a[i][0]=1;

_a[i][i]=1;

a[i][j]=a[i-1][j]+a[i-1][j-1];

=i;

%4d"

printf("

3.程序设计(根据题意编写程序并上机进行调试)。

(1)编写程序完成如下功能:

输入10个数存入一维数组,然后再按逆序重新存放后输出。

#include<

stdio.h>

inta[10],i,temp;

for(i=0;

scanf("

a[i]);

printf("

{

temp=a[i];

a[i]=a[9-i];

a[9-i]=temp;

}

(2)编写程序完成如下功能:

从键盘输入两个字符串ch2、ch1,然后将字符串ch2连接到字符串ch1的后面,并输出连接后的字符串。

string.h>

charch1[20],ch2[10];

inti,j;

scanf("

%s"

ch1);

ch2);

j=strlen(ch1);

strlen(ch2);

i++,j++)

ch1[j]=ch2[i];

ch1[j]='

\0'

;

%s\n"

(3)编写程序完成如下功能:

现有两个已按升序排好的数组,将它们合并为一个升序排序的数组(归并排序)。

算法:

两个数组合并时,可为每个数组各安排一个指针,从第一个元素开始依次比较两数组对应元素,小的取下来顺序放入新的数组,取下所指元素的指针后移,再比较,依此类推,直到其中一个数组的元素已全部放入新数组,再把另一数组余下的元素全部顺序放入新数组,归并完成。

编程并上机调试运行。

(1)用选择法对10个整数排序。

10个整数用scanf函数输入。

inti,j,min,temp,a[11];

enterdata:

for(i=1;

=10;

a[%d]="

i);

Theorginalnumbers:

=9;

min=i;

for(j=i+1;

if(a[min]>

a[j])min=j;

temp=a[i];

a[i]=a[min];

a[min]=temp;

\nThesortednumbers:

(2)有15个数存放在一个数组中,输入一个数,要求用对半查找法找出该数是数组中第几个元素的值。

如果该数不在数组中,则输入“无此数”。

以15个数用赋初值的方法在程序中给出。

要找的数用scanf函数输入。

inti,number,top,bott,mid,loca,a[15],flag=1,sign;

charc;

a[0]);

i=1;

while(i<

15)

if(a[i]>

=a[i-1])

i++;

else

enterthisdataagain:

15;

while(flag)

inputnumbertolookfor:

"

number);

sign=0;

top=0;

bott=14;

if((number<

a[0])||(number>

a[14]))

loca=-1;

while((!

sign)&

(top<

=bott))

mid=(bott+top)/2;

if(number==a[mid])

loca=mid;

Hasfound%d,itspostionis%d\n"

number

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 其它考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1