一 实验题目:统计查询和组合查询
二 实验目的:加深对统计查询的理解,熟练使用聚簇函数
三 实验内容及要求:
图书(书号,书名,作者编号,价格,出版社编号)
作者(编号,姓名,电话)
出版社(编号,出版社名称,地址)
根据上面基本表的信息完成下列查询。
1 统计各出版社出版图书的数量。
2 列出多人合著的图书书号和价格。
3 列出高教出版社出版的最贵图书信息。
4 列出所有图书都是30元以上的出版社名称。
/*首先在C盘中新建文件夹“数据库实验->数据库实验四”,准备将创建的数据库存入*/
create database Books
on primary
(
name=bookdata,
filename='C:\数据库实验\数据库实验四\Y',
size=10MB,
maxsize=50MB,
filegrowth=25%
)
log on
(
name=booklog,
filename='C:\数据库实验\数据库实验四\X',
size=10MB,
maxsize=50MB,
filegrowth=2MB
)
/*使用已经建立的数据库建表*/
--Authortable
use Books
create table Authortable
(
Anu Char(11)primary key,--nu
Ana Char(32),--na
Atel Char(11)unique--tel
)
--Publishertable
use Books
create table Publishertable
(
Pnu Char(11)primary key,--nu
Pna Char(32)default'空',--na
Pid Char(60)--id
)
--Booktable
use Books
create table Booktable
(
Bnu Char(20),--Bnu
Bna Char(32),--Bna
Anu Char(11)foreign key references Authortable(Anu),
Bpri float check (Bpri>0 and Bpri<=300),
Pnu Char(11)foreign key references Publishertable(Pnu),--Publishertablenu
primary key(Bnu,Anu)
)
/*在建好的表内填入数据*/
insert into Authortable values('ywm153264','严蔚敏','15302305168'),
('ldm0523621','李冬梅','17859642300'),
('wwm032651','吴伟民','13746902305'),
('ykq156234','杨孔庆','17846520203'),
('hmx023102','何孟星','15326490203'),
('zxr659132','朱晓睿','19932650200'),
('hly032615','黄黎原','19965326041'),
('qnbtl0361','乔恩•本特利','05231648456')
insert into Publishertable values('rmyd15632','人民邮电出版社','北京市丰台区成寿寺路11号'),
('gj4582136','高教出版社','北京市西城区德外大街4号')
insert into Booktable values('sjjgC78712','数据结构(C语言版)','ywm153264','35','rmyd15632'),
('sjjgC78712','数据结构(C语言版)','ldm0523621','35','rmyd15632'),
('sjjgC78712','数据结构(C语言版)','wwm032651','35','rmyd15632'),
('gdsxS65235','高等数学(第三版)','ykq156234','27.8','gj4582136'),
('qcdgdzjsyjn00','汽车电工电子技术与技能(第2版)','hmx023102','23.1','gj4582136'),
('bjldsx0365','不焦虑的数学','zxr659132','74.3','rmyd15632'),
('bysdby022','贝叶斯的博弈','hly032615','78.5','rmyd15632'),
('bczj8456312','编程珠玑','qnbtl0361','41.3','rmyd15632')
/*
1 统计各Publishertable出版Booktable的数量。
2 列出多人合著的BooktableBnu和pri。
3 列出高教Publishertable出版的最贵Booktable信息。
4 列出所有Booktable都是30元以上的Publishertablena。
*/
--1?
select Publishertable.Pna,count(*)
from Publishertable,Booktable
where Publishertable.Pnu=Booktable.Pnu
group by Publishertable.Pna
--2
select distinct Bnu,Bpri
from Booktable
where Bnu in
(
select Bnu
from Booktable
group by Bnu
having count(*)>1
)
--3
select Booktable.*
from Booktable
where Bpri=
(
select max(Bpri)
from Booktable,Publishertable
where Booktable.Pnu=Publishertable.Pnu
and Publishertable.Pna='高教出版社'
)
--4?
select *
from Publishertable b
where b.Pnu in
(
select a.Pnu--,count(*),max(a.Booktablepri),min(a.Booktablepri)
from Booktable a
group by a.Pnu
having min(a.Bpri) >30
)