目录
第1关:简单查询
任务描述
本关任务:
1、用 SELECT 语句检索数据表中指定字段的数据;
2、用 SELECT 语句检索数据表中所有字段的数据。
相关知识
为了完成本关任务,你需要掌握:
1、如何获取数据表中指定字段的数据;
2、如何获取数据表中的所有数据。
检索数据表的内容
1、若检索某个数据表所有的元组,则使用不带where条件的select语句 select * from R
2、检索符合条件的元组使用关系代数操作符(读作sigma):
从关系R中选出满足条件C的元组(全部属性)的关系代数表达式:
可转换为SQL语句:
SELECT *
FROM R
WHERE C
3、结合投影可选出满足条件C的指定属性集(L),关系代数表达式为:
可转换为SQL语句:
SELECT L
FROM R
WHERE C
在数据库test_wyy_db_guet中,有关系 Student(Sno, Sname, Ssex, Sage, Sdept),示例元组如下所示:
下面轮到你们来试一试了。
编程要求
我们已经为你建好了数据库与数据表,并添加了相应的数据内容。 你只需根据右侧提示,完成以下任务:
1、补全右侧代码片段中 retrieving all column 下 Begin-End 区间的代码,检索表 student 中ssex 为F 的所有学生信息;
2、补全右侧代码片段中 retrieving sno and sname 下 Begin-End 区间的代码,检索表 student中IS系所有学生的学号和姓名 ;
3、补全右侧代码片段中 retrieving sname 下 Begin-End 区间的代码,检索表 student中年龄小于20岁且性别是F的学生姓名 。
测试说明
测试过程:
-
本关涉及到的测试文件是 step1_test.sh ,平台将运行用户补全的 step1.sql 文件,得到数据;
-
将得到的数据与答案比较,判断代码是否正确。
开始你的任务吧,祝你成功!
解题代码
USE test_wyy_db_guet
GO
SET NOCOUNT ON
---------- retrieving all columns----------
-- ********** Begin ********** --
-- ********** 此处写第一题的SQL语句 ********** --
SELECT *
FROM student
WHERE ssex = 'F'
-- ********** End ********** --
GO
---------- retrieving sno and sname----------
-- ********** Begin ********** --
-- ********** 此处写第二题的SQL语句 ********** --
SELECT sno,sname
FROM student
WHERE sdept = 'IS'
-- ********** End ********** --
GO
---------- retrieving sname----------
-- ********** Begin ********** --
-- ********** 此处写第三题的SQL语句 ********** --
SELECT sname
FROM student
WHERE sage<'20' AND ssex = 'F'
-- ********** End ********** --
GO
第2关: 多表查询
任务描述
本关任务:
使用join操作符实现多表查询。
join操作符
1、笛卡尔积,RXS
可直接转换为SQL语句
2、等值连接,记作
可直接转换为SQL语句
3、自然连接,记作
可转换为SQL语句
4、左外连接和右外连接的表示方法及转换为SQL
注意若多个关系有同名属性,则用 关系名.属性名 指出重名属性
连接也可以与投影,选择等结合使用。
编程要求
1、补全右侧代码片段中 第一题 下 Begin-End 区间的代码,查询选修了‘2’号课程的学生的学号;
2、补全右侧代码片段中 第二题 下 Begin-End 区间的代码,查询Liyong选修的课程成绩;
题目分析:
3、补全右侧代码片段中 第三题 下 Begin-End 区间的代码,查询选修课程名称Math的学生学号。
题目分析:
使用的表结构: Student(Sno, Sname, Ssex, Sage, Sdept) Course(Cno, Cname,Ccredit) SC(Sno, Cno, Grade)
测试说明
测试过程:
-
本关涉及到的测试文件是 step2_test.sh ,平台将运行用户补全的 step2.sql 文件,得到数据;
-
将得到的数据与答案比较,判断代码是否正确。
开始你的任务吧,祝你成功!
解题代码
USE test_wyy_db_guet
Go
SET NOCOUNT ON
-- ********** Begin ********** --
---------- 第一题----------
SELECT sno
FROM SC
WHERE Cno = '2'
-- ********** End ********** --
GO
-- ********** Begin ********** --
---------- 第二题----------
SELECT grade
FROM SC
WHERE Sno IN(
SELECT Sno
FROM Student
WHERE Sname = 'Liyong'
)
-- ********** End ********** --
GO
-- ********** Begin ********** --
---------- 第三题----------
SELECT sno
FROM SC
WHERE Cno IN(
SELECT Cno
FROM Course
WHERE Cname = 'Math'
)
-- ********** End ********** --
GO
第3关:集合操作
任务描述
本关任务:使用集合操作解决实际问题
相关知识
1、集合并操作符
可转换为SQL语句:
若R,S的属性名不同,可使用重命名使相应列名一致后进行并操作
例如:
R(A,B,C) S(D,E,F)
SELECT A,B
FROM R
UNION--并--
SELECT D AS A, E AS B FROM S
将S中的D重命名为A,E重命名为B
2、集合交操作
可直接转换为SQL语句:
SELECT *
FROM R
INTERSECT --intersect(并)--
SELECT *
FROM S
若属性名不同可参照并操作的重命名实现交操作。
3、集合差操作 R-S 可转换为SQL语句:
SELECT *
FROM R
EXCEPT --except(差)--
SELECT *
FROM S
编程要求
我们已经为你建好了数据库与数据表R,S,并添加了相应的数据内容。
-
1、补全右侧代码片段中 第一题 下 Begin-End 区间的代码,找出所有的导师的姓名和性别
题目分析:考察并运算(UNION)
-
2、补全右侧代码片段中 第二题 下 Begin-End 区间的代码,找出既是本科生导师又是硕士生导师的全部信息,包括id,name,sex
题目分析:考察交运算(INTERSECT)
-
3、补全右侧代码片段中 第三题 下 Begin-End 区间的代码,找出是本科生导师但不是硕士生导师的全部信息,包括id,name,sex
题目分析:考察差运算(EXCEPT)
测试说明
测试过程:
-
本关涉及到的测试文件是 step3_test.sh ,平台将运行用户补全的 step3.sql 文件,得到数据;
-
将得到的数据与答案比较,判断代码是否正确。
开始你的任务吧,祝你成功!
解题代码
USE test_wyy_db_guet
Go
SET NOCOUNT ON
---------- 第一题 ----------
-- ********** Begin ********** --
SELECT name,sex
FROM R
UNION
SELECT name,sex
FROM S
-- ********** End ********** --
GO
---------- 第二题 ----------
-- ********** Begin ********** --
SELECT *
FROM R
INTERSECT
SELECT *
FROM S
-- ********** End ********** --
GO
---------- 第三题 ----------
-- ********** Begin ********** --
SELECT *
FROM R
EXCEPT
SELECT *
FROM S
-- ********** End ********** --
GO