目录
第1关:简单查询
1.检索数据表所有的元组
2.检索符合条件的元组
educoder
第2关:多表查询
1.笛卡尔积
2.等值连接
3.自然连接
4.左外连接和右外连接的表示方法及转换为SQL
educode
第3关:集合操作
1.集合并操作
2.集合交操作
3.集合差操作
educode
第1关:简单查询
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),示例元组如下所示:
educoder
编程要求
我们已经为你建好了数据库与数据表,并添加了相应的数据内容。 你只需根据右侧提示,完成以下任务:
-
1.检索表 student 中ssex 为F 的所有学生信息;
-
2.检索表 student中IS系所有学生的学号和姓名 。
-
3.检索表 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操作符
1.笛卡尔积
RXS
可直接转换为SQL语句
2.等值连接
记作
可直接转换为SQL语句
3.自然连接
记作
可转换为SQL语句
4.左外连接和右外连接的表示方法及转换为SQL
注意若多个关系有同名属性,则用 关系名.属性名 指出重名属性
连接也可以与投影,选择等结合使用。
educode
编程要求
- 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
join Student
on (Student.Sno=SC.Sno)
where Sname = 'Liyong';
-- ********** End ********** --
GO
-- ********** Begin ********** --
---------- 第三题----------
select sno
from SC
join Course
on (SC.Cno=Course.Cno)
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
2.集合交操作
可直接转换为SQL
select * from R
intersect
select * from S
若属性名不同可参照并操作的重命名实现交操作。
3.集合差操作
R-S
可转换为
Select * from R
except
Select * from S
educoder
编程要求
我们已经为你建好了数据库与数据表R,S,并添加了相应的数据内容。
-
1.找出所有的导师的姓名和性别
-
2.找出既是本科生导师又是硕士生导师的全部信息,包括id,name,sex
-
3.找出是本科生导师但不是硕士生导师的全部信息,包括id,name,sex
测试说明
测试过程:
-
本关涉及到的测试文件是 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 id , name , sex
from R
intersect
select id , name , sex
from S
-- ********** End ********** --
GO
---------- 第三题 ----------
-- ********** Begin ********** --
select id , name , sex
from R
except
select id , name , sex
from S
-- ********** End ********** --
GO