现有“图书馆图书管理系统”数据库。该数据库有图书表、职工表、部门表、出版社表。其结构见表8-3~表8-6。表 8-3 图书表结构-|||-列名 数据类型 允 许 空 默 认 值 标识规范 主键 CHECK约束-|||-图书编号 int 标识增量为1,标识种子为1 主键-|||-书名 char(20)-|||-作者 char(10) √-|||-出版社编号 char(10)-|||-部门编号 char(10) √-|||-表 8-4 职工表结构-|||-列名 数据类型 允 许 空 默 认 值 标识规范 主键 CHECK约束-|||-职工编号 int 标识增量为1,标识种子为1 主键-|||-姓名 char(6) __-|||-性别 char(2) "男"-|||-出生日期 smalldatetime √-|||-部门编号 char(10) √-|||-表 8-5 部门表结构-|||-列名 数据类型 允许空 默认值 标识规范 主键 CHECK约束-|||-部门编号 int 标识增量为1,标识种子为1 主键-|||-部门名称 char(10)-|||-表 8-6 出版社表结构-|||-列名 数据类型 允许空 默认值 标识规范 主键 CHECK约束-|||-出版社编号 int 标识增量为1,标识种子为1 主键-|||-出版社名称 char(20)-|||-地址 char(20) √(1)查询清华大学出版社出版的所有图书信息。(2)查询书名中包含“数据库”3个字的图书的图书编号和名称。(3)查询文科图书室的所有女职工的信息,并按年龄从大到小输出。(4)查询理科图书室管理的所有机械工业出版社出版的图书的编号和名称。(5)统计每个部门的男女职工的人数。(6)统计每个部门管理的图书的数目,将管理图书数目大于1000的部门编号输出。(7)查询在1980年出生的男职工所在部门的名称。(8)查询职工姓名姓“张”的职工所在的部门管理的图书的编号和名称。(9)将图书的作者名和图书馆的职工姓名合并成一个新的查询集合。(10)将图书的书名、作者名和出版社信息存到一个新表中。
现有“图书馆图书管理系统”数据库。该数据库有图书表、职工表、部门表、出版社表。其结构见表8-3~表8-6。

(1)查询清华大学出版社出版的所有图书信息。 (2)查询书名中包含“数据库”3个字的图书的图书编号和名称。
(3)查询文科图书室的所有女职工的信息,并按年龄从大到小输出。 (4)查询理科图书室管理的所有机械工业出版社出版的图书的编号和名称。
(5)统计每个部门的男女职工的人数。
(6)统计每个部门管理的图书的数目,将管理图书数目大于1000的部门编号输出。
(7)查询在1980年出生的男职工所在部门的名称。
(8)查询职工姓名姓“张”的职工所在的部门管理的图书的编号和名称。
(9)将图书的作者名和图书馆的职工姓名合并成一个新的查询集合。
(10)将图书的书名、作者名和出版社信息存到一个新表中。
题目解答
答案
(1)查询清华大学出版社出版的所有图书信息:
SELECT * FROM 图书表 WHERE 出版社编号 IN (SELECT 出版社编号 FROM 出版社表 WHERE 出版社名称 = '清华大学出版社');
(2)查询书名中包含“数据库”3个字的图书的图书编号和名称:
SELECT 图书编号, 书名 FROM 图书表 WHERE 书名 LIKE '%数据库%';
(3)查询文科图书室的所有女职工的信息,并按年龄从大到小输出:
SELECT * FROM 职工表 WHERE 部门编号 IN (SELECT 部门编号 FROM 部门表 WHERE 部门名称 = '文科图书室') AND 性别 = '女' ORDER BY 出生日期 DESC;
(4)查询理科图书室管理的所有机械工业出版社出版的图书的编号和名称:
SELECT 图书编号, 书名 FROM 图书表 WHERE 部门编号 IN (SELECT 部门编号 FROM 部门表 WHERE 部门名称 = '理科图书室') AND 出版社编号 IN (SELECT 出版社编号 FROM 出版社表 WHERE 出版社名称 = '机械工业出版社');
(6)统计每个部门的男女职工的人数:
SELECT 部门编号, 性别, COUNT(*) AS 人数 FROM 职工表 GROUP BY 部门编号, 性别;
(7)统计每个部门管理的图书的数目,将管理图书数目大于1000的部门编号输出:
SELECT 部门编号, COUNT(*) AS 图书数目 FROM 图书表 GROUP BY 部门编号 HAVING COUNT(*) > 1000;
(8)查询在1980年出生的男职工所在部门的名称:
SELECT 职工表.姓名, 部门表.部门名称
FROM 职工表
INNER JOIN 部门表 ON 职工表.部门编号 = 部门表.部门编号
WHERE 职工表.性别 = '男' AND YEAR(职工表.出生日期) = 1980;
(9)查询职工姓名姓“张”的职工所在的部门管理的图书的编号和名称:
SELECT 图书表.图书编号, 图书表.书名
FROM 图书表
INNER JOIN 职工表 ON 图书表.部门编号 = 职工表.部门编号
WHERE 职工表.姓名 LIKE '张%';
(10)将图书的作者名和图书馆的职工姓名合并成一个新的查询集合:
SELECT 作者 AS 姓名 FROM 图书表
UNION
SELECT 姓名 FROM 职工表;
(10)将图书的书名、作者名和出版社信息存到一个新表中:
CREATE TABLE 新表 AS
SELECT 书名, 作者, 出版社编号 FROM 图书表;