基于创建的数据库(包含读者、图书、借阅三张表),试用SQL的查询语句表达下列查询:

1.查询图书表中售价介于50元到70元之间的图书的全部信息

2.查询图书表中全部图书的最高售价、最低售价和平均售价。。

3.查询图书的条形码,书名,出版社和出版日期,要求结果按出版社升序排列,出版社相同的数据按出版日期降序排列

4.在图书表中插入一条记录,内容是:条形码“TP211.3”,书名“狼图腾”,作者“姜戎”,售价 44.5元

5.通过图书表,读者表和借阅表,查询读者的借阅情况,要求结果中包含以下字段:账号,姓名,条形码,书名,借书日期和还书日期。

6.在读者表中查询所有等级为“白银”的读者的余额之和

7.通过读者和借阅表,查询读者信息,包括以下字段:账号,姓名,性别,条形码,借书日期和还书日期

8.查询图书表中有哪些出版社,要求结果没有重复值。

9.将图书表中条形码为TP204.2的图书信息删除。

10.在读者表中,查询男女性读者各多少人。

11.在读者表中查询不同等级各自的人数,结果按人数降序排列

12.查询图书表中条形码左边开始三个字符是“TP3”的图书的全部信息

13.将图书表中科学出版社出版的图书价格上涨5%

14.查询图书表中科学出版社出版的价格在50元以上的图书的信息,要求结果中包括书名,作者,出版社和售价4列。(不包括50元)

15.使用IN子句查询所有‘科学出版社’和‘高教出版社’的书名,作者,售价。

16.在读者表中查询余额最高的读者的全部信息。

提示:请使用嵌套查询作答,不能用top

17.根据读者表和借阅表,查询没有借书记录的读者的账号和姓名。提示:使用“带有NOT IN的嵌套查询”

18.通过图书表和借阅表,查询哪本书没有被借阅过,显示它的条形码,书名和作者信息 提示:使用“带IN的嵌套查询”

实验步骤原始记录(数据、图表、计算等)

(此处放T-SQL代码及更新结果截图)

1.select*

from dbo.Book

where Price>= 50 and Price<=70

2.select

MAX(Price) 最高售价,MIN(Price) 最低售价, AVG(Price)平均售价

from dbo.Book

3.select Barcode,Aname,Publisher,Pubdate

from Book

ORDER BY Publisher ASC,Pubdate DESC

4.Insert into Book(Barcode,Aname,Author,Price)

values ('TP211.3','狼图腾','姜戎',44.5)

5.SELECT Borrow.Account,Name,Book.Barcode,Aname,BorrowTime,ReturnTime

FROM Book INNER JOIN(Borrow INNER JOIN Reader ON Borrow.Account=Reader.Account)

ON Borrow.Barcode=Book.Barcode

6.SELECT SUM(Balance) 白银读者余额之和

FROM Reader

WHERE Grade = '白银'

7.select Reader.Account,Name,Sex,Barcode,BorrowTime,ReturnTime

from Reader inner join Borrow

on Borrow.Account=Reader.Account

8.SELECT DISTINCT Publisher

FROM Book

9.delete

from Book

where Barcode = 'TP204.2'

10.select Sex,count(Sex) 人数

from Reader

group by Sex

11.select Grade,count(*)as 人数

from Reader

group by Grade

order by 人数 desc

12.select *

from Book

where Barcode like 'TP3%'

13.UPDATE Book

SET Price = Price * 1.05

WHERE Publisher = '科学出版社'

14.SELECT Aname,Author,Publisher,Price

FROM Book

WHERE Book.Price > 50 and Publisher = '科学出版社'

15.SELECT Aname,Author,Price

FROM Book

WHERE Publisher in ( '科学出版社','高教出版社')

16.select *

from Reader

where Balance >=all(select max(Balance)from Reader)

17.select Account, Name

from Reader

where Account not in (select Account from Borrow where Borrow.Account=Reader.Account)

18.select Barcode,Aname,Author

from Book

where Barcode not in (select Barcode from Borrow where Borrow.Barcode=Book.Barcode)

sql查询学习小结

1.查询记录

select*from 表名 [where 条件];

eg:select*from students;//查询 students 表中所有记录,所有字段的值都显示出来select field1,field2,...fieldn... from 表名 [where 条件];

eg:select id,name,age from students;//查询 students 表中所有记录, 只显示出 id,name,age三个字段的值

(注:1.“*”表示将所有的字段都显示出来2.用逗号分割,列出需要显示的字段)

2.查询不重复记录

select distinct 字段 from 表名;eg: select distinct name from students;//查询名字不相同的学生;  

select distinct name,age from students;//查询名字和年龄同时不同的学生

(1)distinct必须放在最开头  

(2)distinct只能使用需要去重的字段进行操作。  ----也就是说我sidtinct了name,age两个字段,我后面想根据id进行排序,是不可以的,因为只能name,age两个字段进行操作.  (3)distinct去重多个字段时,含义是:几个字段 同时重复 时才会被 过滤。

3.条件查询

select 字段 from 表名 where 条件;

eg:select * from student where sex='男' and age>20; //查询性别是男,并且年龄大于20岁的人。

where后面的条件可以用>、<、>=、<=、!=等多种比较运算符,多个条件之间可以用or、and等逻辑运算符4.排序和限制

select * from 表名 [where 条件] [ order by  field1 [desc/asc],field2 [desc/asc]... ];

eg:select *from student order by age desc;//查询学生表并按年龄降序排列。

1.desc 降序排列,asc 升序排列

2.order by 后面可以跟多个不同的排序字段,每个排序字段都可以有不同的排序顺序。

3.如果排序字段的值一样,则相同的字段按照第二个排序字段进行排序。

4.如果只有一个排序字段,则字段相同的记录将会无序排列。

5.聚合

select 字段 fun_name from 表名 [where 条件] [group by field1,field2...] [with rollup] [having 条件];

1.fun_name 表示要做的聚合操作,也就是说聚合函数,常用的有 : sum(求和)、count(*)(记录数)、max(最大值)、min(最小值)。

2.group by关键字 表示要进行分类聚合的字段。比如要按照部门分类统计员工数量,部门就应该写在group by 后面。

3.with rollup 是可选语法,表明是否对分类聚合后的结果进行再汇总4.having 关键字表示对分类后的结果再进行条件过滤。

6.表连接

内连接(仅选出两张表中互相匹配的记录)

select staff.name,deptname from staff,deptno where staff.name=deptno.name;

外连接(左连接,包含所有左边表中的记录,甚至是右边表中没有和他匹配的记录):

select staff.name,deptname from staff left join deptno on staff.name=deptno.name;