《数据库与信息系统》实验4指导解析_1-3
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Select BookName As 图书名称, Author As 作者, PublishTime As 出版时间, Price As 价格, Discount As 折扣 From Book Where year(PublishTime)=2009 And BookSort='少儿';
或:
Select BookName As 图书名称, Author As 作者,PublishTime As 出版时间, Price As 价格, Discount As 折扣 From Book Where PublishTime>='2009-1-1' And PublishTime<='2009-12-30' And BookSort='少儿';
(6)查询订单(orders)表中前三条订单信息,要求显示 OrderCode、OrderTime 和 OrderStatus, 结果如图 4.6 所示。
图 4.6 订单表中前三条订单信息
解析:可以使用关键字 LIMIT 限制 SELECT 查询返回的记录的总数。
⚫ 格式 1:LIMIT 起始位置,记录数
② 右击数据库 bookstore,选择“运行 SQL 文件…”,在对话框中浏览选择“bookstore.sql”文
件,点击“开始”即可完成数据表定义及添加数据记录。
③ 在左栏连接窗口展开数据库“bookstore”/表,右击“表”选“刷新”菜单,即可看到恢复
的各数据表。 1.使用 SELECT 语句实现简单的数据查询。 解析:SELECT 语句的主要功能是查询数据库表(或视图)中的数据并返回符合用户查询条件
图 4.8 PublisherCode 为 03、21、31 的图书信息(部分结果)
解析:使用 IN 运算可查询某字段值在或不在某集合的数据记录。例如:字段值 IN(值1,值 2),其 等价于“字段值=值 1 OR 字段值=值 2 ”。也可以使用比较查询。 参考语句:
Select BookCode, BookName, Author, PublisherCode From Book Where PublisherCode IN ('03','21', 图书名称、原价、折扣及折后价格的部分记录
解析:SELECT 语句中查询的字段可以是表中字段名,也可以是常量或表达式 (注:需要设置 “查看/在网格中显示备注”) 。 参考语句:
Select BookName As 图书名称, Price As 原价, Discount As 折扣, Price*Discount As 折后价格, '未享用户等级优惠' As 说明
表 4.1 SQL 语句中常量的写法
类型
写法
举例
数值型
直接写
23, 45.6
字符串
用西文单引号或双引号扩起来 '男',“计算机原理”
日期时间型 用西文单引号扩起来
'2008-08-08','2008-0808 20:08:08'
布尔值
直接写
0, 1 或 false,true
(1)查询 customer 表中所有客户的信息,部分结果如图 4.1 所示。
From Book;
(2)进行图书的价格汇总分析,分别显示图书的最高价、最低价、平均价、最高价与最低价的 差值,结果如图 4.11 所示。
图 4.11 图书的价格汇总分析
解析:SELECT 语句中查询的字段可以是表达式,表达式中可以使用内部聚合函数进行统计计 算。 参考语句:
Select Max(Price) As 最高价, Min(Price) As 最低价, Avg(Price) As 平均价, Max(Price)-Min(Price) As 最高价与最低价的差值
或:
Select OrderCode, TotalPrice, OrderTime, OrderStatus From bookstore.`orders` Where TotalPrice>=100 And TotalPrice<=200;
(8)查询 PublisherCode 为 03、21、31 的图书信息,部分结果如图 4.8 所示。
要注意数据表名 Order 与关键字 Order 相同,在查询语句中可以使用完整的数据表名:
3
bookstore.`order`或者将数据库 bookstore 设置为当前数据库,然后在查询语句中使用单引号将 order 括起来。 参考语句: Select OrderCode, OrderTime, OrderStatus From bookstore.`orders` LIMIT 3; 或: USE bookstore; Select OrderCode, OrderTime, OrderStatus From `orders` LIMIT 3; (7)查询 TotalPrice 在 100~200 元之间的订单信息,部分结果如图 4.7 所示。
(2)查询 customer 表中所有客户的信息,要求显示 CustomerCode、Name、Hometown 和 Telephone 字段信息,部分结果如图 4.2 所示。
图 4.2 所有客户的信息(部分结果)
参考语句:
Select CustomerCode, Name, Hometown, Telephone From Customer;
(5)查询 book 表中图书的类别(BookSort),要求每个类别只显示一次,部分结果如图 4.5 所示。
图 4.5 图书的类别(部分结果)
解析:若多条记录具有相同的字段值,可以在字段名前使用 DISTINCT 子句消除查询结果中的重复 记录,只保留一条。 参考语句:
Select Distinct BookSort From Book;
图 4.7 TotalPrice 在 100~200 元之间的订单信息(部分结果)
解析:可以使用“BETWEEN 值 1 AND 值 2”查询字段值在值 1 和值 2 范围内的记录行,并且查 询结果包括值 1 和值 2,其等价于“字段值<=值 2 AND 字段值>=值 1”。 参考语句:
Select OrderCode, TotalPrice, OrderTime, OrderStatus From bookstore.`orders` Where TotalPrice Between 100 And 200;
5
From Book;
(3)查询销售总量,并按总销量降序排序,结果如图 4.12 所示。
图 4.12 按总销量降序排序
解析:利用 GROUP BY 子句把具有相同值的记录合并成一条记录,利用它进行分类汇总。本例
根据图书编号分组统计每种图书的订书量。要注意查询结果显示的字段,或包含在聚合函数中,
或包含在 GROUP BY 子句中,否则不能显示该字段值。本例中 BookCode 在 GROUP BY 子句
配集合中任意单个字符;[^]表示不匹配集合中的任意单个字符。
使用模糊查 询时主要用 LIKE关键 字,不要用=
参考语句:
Select BookCode, BookName, Author, Price, Discount From Book Where BookName Like '%程序%';
2.使用 SELECT 语句实现含有汇总计算或流程控制的数据查询。 (1)显示图书名称、原价、折扣及折后价格,并加上说明“未享用户等级优惠”,部分记录如 图 4.10 所示。
⚫ MySQL 和 Navicat for MySQL ⚫ bookstore 数据库的脚本文件 bookstore.sql
三.实验内容
首先创建一个 bookstore 数据库,执行 bookstore.sql 脚本文件实现表的创建及数据记录的添 加。然后在 bookstore 数据库中完成以下题目(bookstore 数据库设计说明参见 10.1 节)。 ① 在 Navicat for MySQL 中,创建数据库 bookstore。
2
图 4.4 2009 年以后出版的少儿类图书(部分结果)
解析:Where 子句可以使用 year()函数从出版日期(PublishDate)字段中取得年份数据,其值为整型。 如果直接使用日期型的常量做比较,日期型常量要按照'年-月-日'完整结构来写,并且使用单引号括 起来,例如'2009-01-01 '。 参考语句:
中,Amount 在聚合函数 Sum 中。ORDER BY 字段名 [ASC/DESC]按查询结果中的指定字段进
行排序,ASC 为升序排序(默认),DESC 为降序排序。。
参考语句:
注意GROUP BY和ORDER BY的顺序
Select Bookcode As 书号, Sum(Amount) As 总销量 From OrderDetail Group By Bookcode Order By Sum(Amount) Desc;
(9)查询 BookName(图书名称)包含“程序”的图书信息,结果如图 4.9 所示。
图 4.9 BookName 包含“程序”的图书信息
解析:LIKE 用来指定字段的值是否包含在给定的字符串中,其结果是满足字符串匹配的数据记
录。通配符“_”表示任意单个字符;“%”表示包含零个或更多字符的任意字符串,[ ]表示匹
1
图 4.1 所有客户的信息(部分结果)
解析:本题可使用通配符“*”表示表中的所有字段,也可逐一列出字段。 参考语句:
Select * From Customer;
或:
Select CustomerCode,Name,Sex,Hometown,Email,Telephone,LoginDate,PassWord From Customer;
或: PublisherCode是字符串类型, 这里的,03、21、31要加引号 4
Select BookCode, BookName, Author, PublisherCode From Book Where PublisherCode='03' Or PublisherCode='21' Or PublisherCode='31';
外,注意字符串常量要用单引号或双引号括起来。
参考语句:
Select CustomerCode As 客户编号, EvaluateDate As 评价时间
常量不要忘 记单引号。
From CustomerEvaluation
Where VIPClass='A';
(4)查询 2009 年出版的少儿类图书,显示 BookName(图书名称)、Author(作者)、PublishDate (出版时间)、Price(价格)和 Discount(折扣),字段标题用中文显示,部分结果如图 4.4 所 示。
(3)查询 VIPClass(客户等级)为 A 的 CustomerCode 和 EvaluateDate,要求显示标题分别为 “客户编号”和“评价时间”,结果如图 4.3 所示。
图 4.3 客户等级为 A 的信息
解析:在字段表中,可以使用“字段名 AS 字段别名”的方式将原字段名以字段别名显示标题。另
“起始位置”指定从哪一条记录开始;记录数表示显示记录的条数。
⚫ 格式 2:LIMIT 记录数 表示从第一条记录开始显示“记录数”的记录。如果“记录数”小于或者等于查询结果的记录
总数,那么将从第一条记录开始,显示指定条数的记录。如果“记录数”大于查询结果的记录总数, 数据库会直接显示查询出来的所有记录。
的结果数据。在书写 SELECT 语句时,字母大小写任意,即大小写字母的意义完全相同;此外,
语句可以写在若干行上,也可以不换行;语句中的每个单词之间都要有空格,语句结尾有一个
西文的分号“;”。
可以按照自己的需要选择任意多个字段,字段与字段之间用逗号分隔,也可以使用通配符
“*”表示表中的所有字段。
另外,在 SQL 语句中经常会使用常量,注意不同类型常量的写法如表 4.1 所示。
实验四 数据库操作语言 SQL
不要忘记新 建一个空白 的数据库。
一.实验目的
⚫ 了解使用 SQL 中 DDL 语句创建数据库和表的方法 ⚫ 熟练掌握使用 SQL 中 DML 语句对数据库进行查询、插入、修改和删除等操作的方法 ⚫ 掌握可编程对象视图和存储过程的创建与使用方法,了解触发器的创建方法
二.实验环境及素材
或:
Select BookName As 图书名称, Author As 作者,PublishTime As 出版时间, Price As 价格, Discount As 折扣 From Book Where PublishTime>='2009-1-1' And PublishTime<='2009-12-30' And BookSort='少儿';
(6)查询订单(orders)表中前三条订单信息,要求显示 OrderCode、OrderTime 和 OrderStatus, 结果如图 4.6 所示。
图 4.6 订单表中前三条订单信息
解析:可以使用关键字 LIMIT 限制 SELECT 查询返回的记录的总数。
⚫ 格式 1:LIMIT 起始位置,记录数
② 右击数据库 bookstore,选择“运行 SQL 文件…”,在对话框中浏览选择“bookstore.sql”文
件,点击“开始”即可完成数据表定义及添加数据记录。
③ 在左栏连接窗口展开数据库“bookstore”/表,右击“表”选“刷新”菜单,即可看到恢复
的各数据表。 1.使用 SELECT 语句实现简单的数据查询。 解析:SELECT 语句的主要功能是查询数据库表(或视图)中的数据并返回符合用户查询条件
图 4.8 PublisherCode 为 03、21、31 的图书信息(部分结果)
解析:使用 IN 运算可查询某字段值在或不在某集合的数据记录。例如:字段值 IN(值1,值 2),其 等价于“字段值=值 1 OR 字段值=值 2 ”。也可以使用比较查询。 参考语句:
Select BookCode, BookName, Author, PublisherCode From Book Where PublisherCode IN ('03','21', 图书名称、原价、折扣及折后价格的部分记录
解析:SELECT 语句中查询的字段可以是表中字段名,也可以是常量或表达式 (注:需要设置 “查看/在网格中显示备注”) 。 参考语句:
Select BookName As 图书名称, Price As 原价, Discount As 折扣, Price*Discount As 折后价格, '未享用户等级优惠' As 说明
表 4.1 SQL 语句中常量的写法
类型
写法
举例
数值型
直接写
23, 45.6
字符串
用西文单引号或双引号扩起来 '男',“计算机原理”
日期时间型 用西文单引号扩起来
'2008-08-08','2008-0808 20:08:08'
布尔值
直接写
0, 1 或 false,true
(1)查询 customer 表中所有客户的信息,部分结果如图 4.1 所示。
From Book;
(2)进行图书的价格汇总分析,分别显示图书的最高价、最低价、平均价、最高价与最低价的 差值,结果如图 4.11 所示。
图 4.11 图书的价格汇总分析
解析:SELECT 语句中查询的字段可以是表达式,表达式中可以使用内部聚合函数进行统计计 算。 参考语句:
Select Max(Price) As 最高价, Min(Price) As 最低价, Avg(Price) As 平均价, Max(Price)-Min(Price) As 最高价与最低价的差值
或:
Select OrderCode, TotalPrice, OrderTime, OrderStatus From bookstore.`orders` Where TotalPrice>=100 And TotalPrice<=200;
(8)查询 PublisherCode 为 03、21、31 的图书信息,部分结果如图 4.8 所示。
要注意数据表名 Order 与关键字 Order 相同,在查询语句中可以使用完整的数据表名:
3
bookstore.`order`或者将数据库 bookstore 设置为当前数据库,然后在查询语句中使用单引号将 order 括起来。 参考语句: Select OrderCode, OrderTime, OrderStatus From bookstore.`orders` LIMIT 3; 或: USE bookstore; Select OrderCode, OrderTime, OrderStatus From `orders` LIMIT 3; (7)查询 TotalPrice 在 100~200 元之间的订单信息,部分结果如图 4.7 所示。
(2)查询 customer 表中所有客户的信息,要求显示 CustomerCode、Name、Hometown 和 Telephone 字段信息,部分结果如图 4.2 所示。
图 4.2 所有客户的信息(部分结果)
参考语句:
Select CustomerCode, Name, Hometown, Telephone From Customer;
(5)查询 book 表中图书的类别(BookSort),要求每个类别只显示一次,部分结果如图 4.5 所示。
图 4.5 图书的类别(部分结果)
解析:若多条记录具有相同的字段值,可以在字段名前使用 DISTINCT 子句消除查询结果中的重复 记录,只保留一条。 参考语句:
Select Distinct BookSort From Book;
图 4.7 TotalPrice 在 100~200 元之间的订单信息(部分结果)
解析:可以使用“BETWEEN 值 1 AND 值 2”查询字段值在值 1 和值 2 范围内的记录行,并且查 询结果包括值 1 和值 2,其等价于“字段值<=值 2 AND 字段值>=值 1”。 参考语句:
Select OrderCode, TotalPrice, OrderTime, OrderStatus From bookstore.`orders` Where TotalPrice Between 100 And 200;
5
From Book;
(3)查询销售总量,并按总销量降序排序,结果如图 4.12 所示。
图 4.12 按总销量降序排序
解析:利用 GROUP BY 子句把具有相同值的记录合并成一条记录,利用它进行分类汇总。本例
根据图书编号分组统计每种图书的订书量。要注意查询结果显示的字段,或包含在聚合函数中,
或包含在 GROUP BY 子句中,否则不能显示该字段值。本例中 BookCode 在 GROUP BY 子句
配集合中任意单个字符;[^]表示不匹配集合中的任意单个字符。
使用模糊查 询时主要用 LIKE关键 字,不要用=
参考语句:
Select BookCode, BookName, Author, Price, Discount From Book Where BookName Like '%程序%';
2.使用 SELECT 语句实现含有汇总计算或流程控制的数据查询。 (1)显示图书名称、原价、折扣及折后价格,并加上说明“未享用户等级优惠”,部分记录如 图 4.10 所示。
⚫ MySQL 和 Navicat for MySQL ⚫ bookstore 数据库的脚本文件 bookstore.sql
三.实验内容
首先创建一个 bookstore 数据库,执行 bookstore.sql 脚本文件实现表的创建及数据记录的添 加。然后在 bookstore 数据库中完成以下题目(bookstore 数据库设计说明参见 10.1 节)。 ① 在 Navicat for MySQL 中,创建数据库 bookstore。
2
图 4.4 2009 年以后出版的少儿类图书(部分结果)
解析:Where 子句可以使用 year()函数从出版日期(PublishDate)字段中取得年份数据,其值为整型。 如果直接使用日期型的常量做比较,日期型常量要按照'年-月-日'完整结构来写,并且使用单引号括 起来,例如'2009-01-01 '。 参考语句:
中,Amount 在聚合函数 Sum 中。ORDER BY 字段名 [ASC/DESC]按查询结果中的指定字段进
行排序,ASC 为升序排序(默认),DESC 为降序排序。。
参考语句:
注意GROUP BY和ORDER BY的顺序
Select Bookcode As 书号, Sum(Amount) As 总销量 From OrderDetail Group By Bookcode Order By Sum(Amount) Desc;
(9)查询 BookName(图书名称)包含“程序”的图书信息,结果如图 4.9 所示。
图 4.9 BookName 包含“程序”的图书信息
解析:LIKE 用来指定字段的值是否包含在给定的字符串中,其结果是满足字符串匹配的数据记
录。通配符“_”表示任意单个字符;“%”表示包含零个或更多字符的任意字符串,[ ]表示匹
1
图 4.1 所有客户的信息(部分结果)
解析:本题可使用通配符“*”表示表中的所有字段,也可逐一列出字段。 参考语句:
Select * From Customer;
或:
Select CustomerCode,Name,Sex,Hometown,Email,Telephone,LoginDate,PassWord From Customer;
或: PublisherCode是字符串类型, 这里的,03、21、31要加引号 4
Select BookCode, BookName, Author, PublisherCode From Book Where PublisherCode='03' Or PublisherCode='21' Or PublisherCode='31';
外,注意字符串常量要用单引号或双引号括起来。
参考语句:
Select CustomerCode As 客户编号, EvaluateDate As 评价时间
常量不要忘 记单引号。
From CustomerEvaluation
Where VIPClass='A';
(4)查询 2009 年出版的少儿类图书,显示 BookName(图书名称)、Author(作者)、PublishDate (出版时间)、Price(价格)和 Discount(折扣),字段标题用中文显示,部分结果如图 4.4 所 示。
(3)查询 VIPClass(客户等级)为 A 的 CustomerCode 和 EvaluateDate,要求显示标题分别为 “客户编号”和“评价时间”,结果如图 4.3 所示。
图 4.3 客户等级为 A 的信息
解析:在字段表中,可以使用“字段名 AS 字段别名”的方式将原字段名以字段别名显示标题。另
“起始位置”指定从哪一条记录开始;记录数表示显示记录的条数。
⚫ 格式 2:LIMIT 记录数 表示从第一条记录开始显示“记录数”的记录。如果“记录数”小于或者等于查询结果的记录
总数,那么将从第一条记录开始,显示指定条数的记录。如果“记录数”大于查询结果的记录总数, 数据库会直接显示查询出来的所有记录。
的结果数据。在书写 SELECT 语句时,字母大小写任意,即大小写字母的意义完全相同;此外,
语句可以写在若干行上,也可以不换行;语句中的每个单词之间都要有空格,语句结尾有一个
西文的分号“;”。
可以按照自己的需要选择任意多个字段,字段与字段之间用逗号分隔,也可以使用通配符
“*”表示表中的所有字段。
另外,在 SQL 语句中经常会使用常量,注意不同类型常量的写法如表 4.1 所示。
实验四 数据库操作语言 SQL
不要忘记新 建一个空白 的数据库。
一.实验目的
⚫ 了解使用 SQL 中 DDL 语句创建数据库和表的方法 ⚫ 熟练掌握使用 SQL 中 DML 语句对数据库进行查询、插入、修改和删除等操作的方法 ⚫ 掌握可编程对象视图和存储过程的创建与使用方法,了解触发器的创建方法
二.实验环境及素材