sql 数据库习题谢谢

sql 数据库习题谢谢,第1张

1. select '类别为:'+tushuleibie 图书分类 from T_Book

2. select shuming 书名,zuozhe 作者,jiage*0.7 价格 from T_Book where chubanshe ='机械工业出版社'

3. select shuming 书名,zuozhe 作者,jiage 价格, chubanshe 出版社 from T_Book where jiage between 30 and 60

4. select top 3 shuming 书名,zuozhe 作者,chubanshe 出版社, jiage 价格 from T_Book order by jiage desc

6.select chubanshe 出版社,AVG(jaige) 平均价,MAX(jiage) 最高价 ,MIN(jaige) 最低价 from T_Book group by chubanshe order by SUM(jiage) desc

10.select top 1 chubanshe 出版社, count(*) 出版图书个数 from T_Book group by chubanshe order by COUNT(*) desc

book表的做好了 reader的自己做吧 字段名我用拼音做代替的 你自己替换成你表中的字段

--1.1创建新表 score

create table score

(

[学号] varchar(10)

,[课程号] varchar(10)

,[成绩] float

)

--1.2插入新表的值

insert into score values(103,'3-245',86)

insert into score values(105,'3-245',75)

insert into score values(109,'3-245',68)

insert into score values(103,'3-105',92)

insert into score values(105,'3-105',88)

insert into score values(109,'3-105',76)

insert into score values(101,'3-105',64)

insert into score values(101,'3-105',64)

insert into score values(101,'6-166',85)

insert into score values(107,'6-166',79)

insert into score values(108,'6-166',81)

--1.3 按排列顺序查看创建的表的内容

select* from score order by [课程号] asc,[成绩] desc --这样查看不舒服,可以修改下,如下面这句:

select [课程号],[成绩],[学号] from score order by [课程号] asc,[成绩] desc

--1.4

select y=sum([成绩]) --查找3-105 的分数之和,问题6-166的总分也是这个道理

, x=count([课程号]) from score where [课程号]='3-105'--查找3-105的课程个数

--计算平均分

select [3-105平均分]=y/x from(select y=sum([成绩])

, x=count([课程号]) from score where [课程号]='3-105')t

--1.5 查询成绩为定值的记录

select * from score where [成绩]='85' or [成绩]='86' or [成绩]='88'

--这里用and 的话没法查出内容,

--1.6 成绩在多少到多少的记录

select * from score where [成绩] between 60 and 79 order by [成绩] desc

--1.7查询每个学生的最高分

select * from score where [成绩] in(select max([成绩]) from score group by [学号])

--1.8课程最高分

select * from score where [成绩] in(select max([成绩]) from score group by [课程号])

--各门课程最高分大于90的就是在上面的内容上增加一个where 条件,自己尝试下

select * from(select * from score where [成绩] in(select max([成绩]) from score group by [课程号]))t

where [成绩]>=90

--注意数据库别名的用法't'

--1.9弟九个问题跳过,扯蛋的问题

--2.0课程次数及排序

select [课程号],[课程次数]=count([课程号]) from score group by [课程号] order by 课程次数 desc

--注意数据库自定义字段的使用

--升序 asc ,降序 desc

--2.1最后一个问题你自己考虑考虑,方法基本都在前面几个问题里面可以找到。

安装一个数据库服务器,建立一个库。

然后先做这些练习吧,语句都加了注释了

/*

建立一个由3个文件组成的数据库,数据库名称为test。

主数据文件逻辑名称为test_data,物理文件名c:\test_data.mdf;

辅助数据文件逻辑名称为test_data2,物理文件名c:\test_data2.ndf

日至文件逻辑名称为test_log,物理文件名c:\test_log.ldf

所有文件初始尺寸为3mb,可以自动增长,最大尺寸为15mb。

*/

create database test on

primary

(

name=test_data,

filename='c:\test_data.mdf',

size=3mb,

maxsize=15mb,

filegrowth=1mb

),

(

name=test_data2,

filename='c:\test_data2.ndf',

size=3mb,

maxsize=15mb,

filegrowth=1mb

)

log on

(

name=test_log,

filename='c:\test_log.ldf',

size=3mb,

maxsize=15mb,

filegrowth=1mb

)

/*

创建一个名为employees的表,该表由5个字段组成:emp_id(员工编号)、ename(员工名称)、

age(年龄)、title(职务)、salary(薪水)。其中emp_id为该表的主键。该表存放在主文件组。

*/

use test

go

CREATE TABLE employees(

emp_id char (4) primary key,

ename nvarchar (10) NOT NULL,

age tinyint NOT NULL,

title nvarchar (10) NULL,

salary money NULL,

) ON [PRIMARY]

--向employees表插入部分数据

insert into employees values('0001','杨建新','22','经理','3000')

insert into employees values('0002','杨建新','23','职员','4000')

insert into employees values('0003','杨建新','24','总经理','5000')

insert into employees values('0004','杨建新','26','职员','2000')

--创建备份设备test_bak,其位置为c:\backup\test_bak.bak

sp_addumpdevice 'disk','test_bak','c:\backup\test_bak.bak'

--建立数据库test的完整备份到备份设备test_bak,并命名为test_full_bak1

backup database test to test_bak with name='test_full_bak1'

--向employees表插入新数据

insert into employees values('0005','王建新','24','总经理','1000')

insert into employees values('0006','刘建新','26','职员','2000')

--执行test数据库的事务日志备份,该备份追加到备份设备test_bak,命名为test_log_bak1

backup log test to test_bak with name='test_log_bak1'

--截断employees表,清空内容(记录此时的时间)

truncate table employees

--备份数据库的尾部日志

use master

go

backup log test to test_bak with name='test_log_recovery',norecovery

--恢复数据库的完整备份,并且不要执行还原进程(norecovery)

restore database test from test_bak with file=1,norecovery

--恢复第一个日志备份,如果此时执行recovery,将得到所有数据

restore log test from test_bak with file=2,recovery

--如果执行上述语句时,使用norecovery选项,则可以继续恢复第二个日志备份,即尾部日志

restore log test from test_bak with file=2,norecovery

restore log test from test_bak with file=3,recovery

--如果按照上述 *** 作,则恢复完成后employees表中没有任何数据,因为尾部日志中包含清空表的 *** 作

--若要恢复所有数据,也可以恢复到时间点到清空时间之前

restore log test from test_bak with file=3,stopat='2008-11-16 11:25:00'

--添加一个名为mike,密码为123456的login账户,该账户的默认数据库为northwind

sp_addlogin 'mike','123456','northwind'

--切换到northwind数据库

use northwind

go

--将登录账户mike映射为当前数据库中的用户

sp_grantdbaccess 'mike','mike' --或:sp_adduser 'mike','mike'

--建立数据库角色accessdata

sp_addrole tablecreate

--为数据库角色tablecreate赋予创建表的权限

grant create table to tablecreate

--将用户mike加入到角色tablecreate中

sp_addrolemember 'tablecreate','mike'

--赋予用户mike对products表的插入数据权限

grant insert on products to mike

--撤销用户mike对products表的权限

revoke insert on products from mike

--察看角色信息

sp_helprole tablecreate

--察看角色包括的成员

sp_helprolemember tablecreate

--在角色tablecreate中删除成员mike

sp_droprolemember 'tablecreate','mike'

--删除角色tablecreate

sp_droprole tablecreate

--删除数据库用户账户

sp_revokedbaccess 'mike'

--删除登录帐号

sp_droplogin 'mike'


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9925444.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存