目录
第一关任务描述
相关知识
检索数据表中一个字段的内容
检索数据表中多个字段的内容
检索数据表中所有字段的内容
编程要求
测试说明
第一关实验代码:
第二关任务描述
相关知识
带限制条件的查询
表达式查询
编程要求
第二关实验代码
第三关任务描述
相关知识
使用WHERE语句检索单范围数据
使用WHERE语句检索双范围数据
使用WHERE语句检索不匹配某条件的语句
编程要求
测试说明
第三关实验代码
第一关任务描述
本关任务:
-
用 SELECT 语句检索数据表中指定字段的数据;
-
用 SELECT 语句检索数据表中所有字段的数据。
相关知识
为了完成本关任务,你需要掌握:1.如何获取数据表中指定字段的数据,2.如何获取数据表中的所有数据。
若想使用 SELECT 语句来检索数据表中的数据,你至少得弄清楚两个重要的信息:(1) 你想检索的是什么?(2) 你想检索的内容它在什么地方?
检索数据表中一个字段的内容
我们将从最简单的 SELECT 语句开始学习。
语法规则为: SELECT 字段名 FROM 表名
举个例子 我们想从表 Customers 中得到 cust_name 字段所有的内容,即所有人的姓名。表 Customers 的内容如下图所示:
输入:
SELECT cust_name
FROM Customers
输出:
我们成功从表 Customers 中检索到了字段 cust_name 的内容。
检索数据表中多个字段的内容
如果我想检索更多的字段呢?当然可以做到,而且语法结构与检索单个字段的内容类似,只需要你把想要检索的字段,统统放到 SELECT 后面就可以了,记得要加逗号隔开。
语法规则为: SELECT 字段名1, 字段名2, 字段名3 FROM 表名
举个例子 我们想从表 Customers 中得到 cust_id 和 cust_name 字段所有的内容。
输入:
SELECT cust_id, cust_name
FROM Customers
输出:
可以看到,我们成功从表 Customers 中检索到了字段 cust_id 和 cust_name 的内容。
检索数据表中所有字段的内容
如果我想检索一张表内的所有字段呢?是不是需要我把字段一个一个列出来呀?如果我不记得字段都有哪些了怎么办呢?当然有解决办法! 我们可以通过在 SELECT 语句后使用 * 来返回表内所有字段的内容。
语法规则为: SELECT * FROM 表名
举个例子 我们想从表 Customers 中得到所有字段的内容。
输入:
SELECT *
FROM Customers
输出:
我们成功输出了表 Customers 中所有字段的所有内容。很简单对不对?
下面轮到你们来试一试了。
编程要求
我们已经为你建好了数据库与数据表,并添加了相应的数据内容。 你只需根据右侧提示,完成以下任务:
-
补全右侧代码片段中 retrieving multiple column 下 Begin-End 区间的代码,检索表 Products 中字段 prod_name 和 prod_price 的所有内容;
-
补全右侧代码片段中 retrieving all column 下 Begin-End 区间的代码,检索表 Products 中所有字段的内容。
其中表 Products 的结构如下图所示;
测试说明
测试过程:
-
本关涉及到的测试文件是 step1_test.sh ,平台将运行用户补全的 step1.sql 文件,得到数据;
-
将得到的数据与答案比较,判断代码是否正确。
如果操作正确,你将得到如下的结果:
第一关实验代码:
USE Mall
GOSET NOCOUNT ON---------- retrieving multiple column ----------
-- ********** Begin ********** --
select prod_name,prod_price from Products;-- ********** End ********** --GO---------- retrieving all column ----------
-- ********** Begin ********** --
select * from Products;-- ********** End ********** --GO
第二关任务描述
本关任务:
-
查询数据表中的指定字段的数据;
-
查询数据表中指定字段运算后的数据。
相关知识
为了完成本关任务,你需要掌握:1.使用限制关键字查询数据表中的指定字段的内容,2.使用运算符查询数据表中指定字段运算后的内容。
带限制条件的查询
SELECT 语句可以帮你返回所有匹配的内容,甚至整张表的内容。但是如果你仅仅是想要第一行的数据或者前几行的数据怎么办呢?好消息是我们可以通过限制条件来查询,不过限制条件的语法在各个数据库中的语法是不同的。在 SQL Server 中:
语法规则为: SELECT TOP 行数 字段名 FROM 表名
举个例子 我们想从表 Customers 中得到 cust_name 字段的前 3 行内容。表 Customers 的内容如下图所示:
输入:
SELECT TOP 3 cust_name
FROM Customers
输出:
当然,如果你使用的是 MYSQL 或者其他数据库,语法可不一样啊,你得去问 google 咯^-^。
表达式查询
有时候,你并不想知道某个字段的内容,而是想知道经过处理后的内容。这种情况有很多。比如,你想知道这一批的书打6折后都是多少钱?你想知道字段 A 和字段 B 加起来是多少?这是可以做到的,我们可以使用表达式查询来达到此目的。
语法规则为: SELECT 包含字段名的表达式 AS 新字段名 FROM 表名
其中,表达式计算的结果会放在新字段名下面,但是新字段名并没有存储在表中,而是暂时把结果返回给你,供你参考。
举个例子 我们想从把表 Customers 中每位消费者的 cust_id 都 +1 。表 Customers 的内容与上例的相同。
输入:
SELECT cust_id, cust_id+1 as new_cust_id
FROM Customers
输出:
编程要求
我们已经为你建好了数据库与数据表,并添加了相应的数据内容。 你只需:
- 补全右侧代码片段中 retrieving with limited 下 Begin-End 区间的代码,检索表 Products 中字段 prod_name 的前两项内容;
- 补全右侧代码片段中 retrieving with expression 下 Begin-End 区间的代码,检索表 Products 中字段 prod_price 的内容,并检索到字段 prod_price 打8折后的价钱,命名该打折后的价格为 discount_price 。
其中表 Products 的结构如下图所示:
测试说明
测试过程:
-
本关涉及到的测试文件是 step2_test.sh ,平台将运行用户补全的 step2.sql 文件,得到数据;
-
将得到的数据与答案比较,判断代码是否正确。
如果操作正确,你将得到如下的结果:
第二关实验代码
USE Mall
GoSET NOCOUNT ON---------- retrieving with limited ----------
-- ********** Begin ********** --
select top 2 prod_name
from Products;-- ********** End ********** --
GO---------- retrieving with expression ----------
-- ********** Begin ********** --
select prod_price,(prod_price*0.8) as discount_price
from Products-- ********** End ********** --
GO
第三关任务描述
本关任务:使用 WHERE 语句和逻辑表达式,检索数据表中指定字段的符合条件的数据。
相关知识
为了完成本关任务,你需要掌握:如何使用 WHERE 语句和操作符来选择符合条件的数据。
在实际情况中,我们不仅需要对某字段的全部数据进行检索,更多的是需要对符合我们需求的数据进行检索。SQL 语言的发明者当然想到了这些,为我们提供了更多的方法来检索你想要的数据。
WHERE 语句就是这样一种存在,只要把你的需求正确地放在 WHERE 后边,它就能帮你检索到你想要的内容。
下表为与 WHERE 语句搭配的操作符列表:
使用WHERE语句检索单范围数据
如果你想在房屋中介数据库中,寻找小于100万的房子,你应该怎么做?你是不是很自然的就想到了要用操作符 < 的。
让我们举个例子来看看,检索单范围数据是怎么实现的:
我们想从表 Customers 中找到消费大于 1000 的人。表 Customers 的内容如下图所示:
输入:
SELECT cust_name, cost
FROM Customers
WHERE cost > 1000
输出:
不仅是 > ,其他操作符 < , <= , >= , !< , !> 的使用方法也是一样的。
使用WHERE语句检索双范围数据
还有一种情况,就是你心目中有一个理想的区间范围。比如你想买房,不能太便宜,因为便宜的有可能又小又偏僻,也不能太贵,因为。。。呵呵大家懂的。这时候,你就需要划定一个范围,SQL 很贴心的为大家提供了自然语言关键字,用来划定数字的范围。
语法规则为: WHERE 字段名 BETWEEN 数字1 AND 数字2
举个例子 我们想从表 Customers 中找到消费在 1000~3000 之间的人。表 Customers 的内容和上例相同。
输入:
SELECT cust_name, cost
FROM Customers
WHERE cost BETWEEN 1000 AND 3000
输出:
Tips: 注意,使用 BETWEEN...AND... 时一定要记住较小的数在前边,较大的数在后边!
使用WHERE语句检索不匹配某条件的语句
有很多人可能有过这样的感觉,问你想要什么样的男/女朋友,你可能说想要这样的,那样的,好像都不错,看感觉吧。虽然你可能不知道你最想要什么,但是你一定知道你不想要什么。
SQL 语句也一样,它为你提供了选择不想要什么的机会。
举个例子 我们想从表 Customers 中找到消费者不在 New York 的人。表 Customers 的内容和上例相同。
输入:
SELECT cust_name, cust_city
FROM Customers
WHERE cust_city <> 'New York'
Tips: 注意,在 SQL Server 中,不等于只能用 <> 符号,不能使用 != 符号。
编程要求
我们已经为你建好了数据库与数据表,并添加了相应的数据内容。 你只需:
-
补全右侧代码片段中 retrieving with range 下 Begin-End 区间的代码,检索表 Products 中字段 prod_price 价钱介于 3 和 5 的内容,要求显示出商品名称和价钱;
-
补全右侧代码片段中 retrieving with nomatches 下 Begin-End 区间的代码,检索表 Products 中除了 Lion toy 的商品名称和价钱。
其中表 Products 的内容如下图所示:
测试说明
测试过程:
-
本关涉及到的测试文件是 step3_test.sh ,平台将运行用户补全的 step3.sql 文件,得到数据;
-
将得到的数据与答案比较,判断代码是否正确。
如果操作正确,你将得到如下的结果:
第三关实验代码
USE Mall
GoSET NOCOUNT ON---------- retrieving with range ----------
-- ********** Begin ********** --
select prod_name,prod_price
from Products
where prod_price between 3 and 5-- ********** End ********** --GO---------- retrieving with nomatches ----------
-- ********** Begin ********** --
select prod_name,prod_price
from Products
where prod_name <> 'Lion toy'-- ********** End ********** --GO