头歌:数据库 || SQL练习——简单查询 (第1关:简单查询 第2关:多表查询 第3关:集合操作 )

 

目录

第1关:简单查询 

第2关:多表查询   

第3关:集合操作 

第1关:简单查询 SELECT */属性 FROM WHERE 条件

在数据库test_wyy_db_guet中,有关系 Student(Sno, Sname, Ssex, Sage, Sdept),示例元组如下所示:

头歌:数据库 || SQL练习——简单查询 (第1关:简单查询 第2关:多表查询 第3关:集合操作 )_第1张图片

 头歌:数据库 || SQL练习——简单查询 (第1关:简单查询 第2关:多表查询 第3关:集合操作 )_第2张图片

头歌:数据库 || SQL练习——简单查询 (第1关:简单查询 第2关:多表查询 第3关:集合操作 )_第3张图片

USE test_wyy_db_guet
GO

SET NOCOUNT ON

---------- retrieving  all columns----------
 
-- ********** Begin ********** --
-- ********** 此处写第一题的SQL语句 ********** --
--检索表 student 中ssex 为F 的所有学生信息--
--select * from R where C
SELECT * --检索 所有 字段的数据
FROM student --表
WHERE ssex = 'F' --条件:属性 从关系R中选出满足条件C的元组(全部属性)
-- ********** End ********** --

GO

---------- retrieving  sno and sname----------
-- ********** Begin ********** --
-- ********** 此处写第二题的SQL语句 ********** --
--检索表 student中IS系所有学生的学号和姓名 --
SELECT sno,sname --检索 指定 字段的数据
FROM student
WHERE Sdept = 'IS'
-- ********** End ********** --

GO

---------- retrieving  sname----------
-- ********** Begin ********** --
-- ********** 此处写第三题的SQL语句 ********** --
--检索表 student中年龄小于20岁且性别是F的学生姓名 --
SELECT sname
FROM student
WHERE Sage<20 and Ssex='F'
-- ********** End ********** --

GO

 

 第2关:多表查询   

笛卡尔积:

等值连接:相等条件 

 

SELECT Student.name, Score.score
FROM Student
INNER JOIN Score
ON Student.sid = Score.sid;

自然连接:相同列名 

SELECT Student.name, Score.score
FROM Student
NATURAL JOIN Score;

左连接:

右连接:

头歌:数据库 || SQL练习——简单查询 (第1关:简单查询 第2关:多表查询 第3关:集合操作 )_第4张图片 

 头歌:数据库 || SQL练习——简单查询 (第1关:简单查询 第2关:多表查询 第3关:集合操作 )_第5张图片

USE test_wyy_db_guet
Go

SET NOCOUNT ON


-- ********** Begin ********** --
---------- 第一题----------
--查询选修了‘2’号课程的学生的学号--
SELECT sno -- SC(Sno, Cno, Grade)
FROM SC
WHERE Cno = '2' 
-- ********** End ********** --
GO

-- ********** Begin ********** --
---------- 第二题----------
--查询Liyong选修的课程成绩--
SELECT SC.grade
FROM SC
INNER JOIN Student ON Student.Sno = SC.Sno--筛选出两个表中都存在的记录,并将它们合并在一起。两个表联接在一起,通过ON子句指定了它们之间的关联条件
WHERE Student.Sname = 'Liyong'
-- ********** End ********** --
GO

-- ********** Begin ********** --
---------- 第三题----------
--查询选修课程名称Math的学生学号--
SELECT SC.sno
FROM SC
INNER JOIN Course ON SC.Cno = Course.Cno
WHERE Cname = 'Math'
-- ********** End ********** --
GO

 

第3关:集合操作 Select *  from R Union Select  * from S

头歌:数据库 || SQL练习——简单查询 (第1关:简单查询 第2关:多表查询 第3关:集合操作 )_第6张图片 

头歌:数据库 || SQL练习——简单查询 (第1关:简单查询 第2关:多表查询 第3关:集合操作 )_第7张图片

头歌:数据库 || SQL练习——简单查询 (第1关:简单查询 第2关:多表查询 第3关:集合操作 )_第8张图片 

USE test_wyy_db_guet
Go

SET NOCOUNT ON

---------- 第一题 ----------
-- ********** Begin ********** --
--找出所有的导师的姓名和性别
SELECT name,sex
FROM R
UNION --注意:如果是UNION ALL,那就会有重复的。我第一遍就错啦。
SELECT name,sex
FROM S
-- ********** End ********** --

GO

---------- 第二题 ----------
-- ********** Begin ********** --
--找出既是本科生导师又是硕士生导师的全部信息,包括id,name,sex
SELECT *
FROM R
WHERE id IN (SELECT id FROM S)--从表S中查询所有的id,并将这些id作为条件筛选表R中的数据,只保留id在表S中也存在的数据。
-- ********** End ********** --

GO

---------- 第三题 ----------
-- ********** Begin ********** --
--找出是本科生导师但不是硕士生导师的全部信息,包括id,name,sex--
SELECT *
FROM R
WHERE id NOT IN (SELECT id FROM S)
-- ********** End ********** --

GO

 

你可能感兴趣的:(数据库系统概论,sql,数据库,mysql)