01多表查询-连接查询(一)

第1关:自然连接

任务描述

本关任务:使用自然连接求选修了严敏老师的数学分析课程的学生的姓名、课程名称、教师名和成绩。

相关知识

为了完成本关任务,你需要掌握:如何使用自然连接。

自然连接

通过 MySql 自己的判断完成连接过程,不需要指定连接条件。MySql 会使用表内的,相同的字段,作为连接条件。

自然连接分为内外之分,内连接 natural join 和
左外 natural left join、右外 natural right join 连接。

答案

 use teachingdb;
 /****请在此编写代码,操作完毕之后点击评测******/
 
 /**********Begin**********/
    -- 自然连接
    -- ... 表示省略相似, []表示可写可不写
    -- select * from 表1 natural join 表2 natural join ... [where]

  select s.sname,c.cname,t.tname,sc.grade 
  from teach t natural join score sc natural join course c natural join student s 
  where t.tname = '严敏' && c.cname = '数学分析';
  
 /**********End**********/

第2关:等值连接

任务描述

本关任务:使用等值连接求选修了严敏老师的数学分析课程的学生的姓名、课程名称、教师名和成绩。

相关知识

等值连接

  • 当连接运算符为等号时为等值连接

语法如下:

SELECT 查询的列表
FROM 表1 别名1,表2 别名2
WHERE 表1.关键词= 表2.关键词;
【and 筛选条件】
【group by 分组字段】
【having 分组后的筛选】
【order by 排序ASC,DESC】

答案

 use teachingdb;
 /****请在此编写代码,操作完毕之后点击评测******/
 
 /**********Begin**********/
-- select * from student;
--   select s.sname, c.cname, t.tname, sc.grade 
--   from student s, score sc, course c, teach t
--   where t.tname = '严敏' && c.cname = '数学分析'
  



-- 等值连接
-- select * from 表1,表2,... where 表1.字段 = 表2.字段 && ...
-- 本案例中score表刚好可以连接其余表
  select s.sname, c.cname, t.tname, sc.grade
  from student s, score sc, course c, teach t
  where s.sno = sc.sno && sc.tno = t.tno && sc.cno = c.cno && t.tname = '严敏' && c.cname = '数学分析';

 /**********End**********/

第3关:JOIN连接

任务描述

本关任务:使用 JOIN 连接求选修了严敏老师的数学分析课程的学生的姓名、课程名称、教师名和成绩。

相关知识

JOIN 连接(默认为内连接)
取得两个表中存在连接匹配关系的记录。
语法如下:

select * from A inner join B on A.name = B.name;

答案

 use teachingdb;
 /****请在此编写代码,操作完毕之后点击评测******/
 
 /**********Begin**********/
    -- join 连接 (内连接)
    -- select * from 表1 join 表2 on 表1.字段 = 表2.字段

  select sname, cname, tname, grade 
  from score s 
  join student st on s.sno = st.sno
  join course c on s.cno = c.cno
  join teach t on s.tno = t.tno
  where t.tname = '严敏' && c.cname like '数学分析';
 /**********End**********/

第4关:自身连接查询

任务描述

本关任务:使用自身连接查询求年龄大于’刘东明’ 的所有学生的姓名与出生日期。

相关知识

为了完成本关任务,你需要掌握如何使用自连接。

自连接
MySQL 自连接操作,没有特定的关键字,所谓自连接指的是同一个表不同实例之间的 join 操作。

特征:

自连接是同一个表不同实例的连接操作;
自连接必须指定别名(aliasName)区分不同实例。

答案

 use teachingdb;
 /****请在此编写代码,操作完毕之后点击评测******/
 
 /**********Begin**********/
  -- select * from student;
  -- 自身连接
  -- select * from 表 别名, 表 别名, ... , [where];
  select b.sname,b.birthday
  from student a, student b
  where a.sname like '刘东明' && a.birthday > b.birthday


/*select sname, birthday 
from student 
where birthday < 
  (
      select birthday 
      from student 
      where sname = '刘东明'
  );*/
  
 /**********End**********/

第5关:外部连接查询

任务描述

本关任务:使用外部连接查询求未选修任何课程的学生的学号和姓名。

相关知识

为了完成本关任务,你需要掌握:
1.什么是外连接查询;
2.如何使用外连接查询。

外连接查询
以某张表为主,取出里面的所有记录,然后每条与另外一张表进行连接,不管能不能匹配上条件,最终都会保留。能匹配,正确保留;不能匹配,其它表的字段都置空(null),称为外连接。

外连接查询分为左外连接查询和右外连接查询;

关键字:left/right [outer] join … on。

语法:

表1 left/right [outer] join 表2 on 表1.字段=表2.字段
语法解释:

左外连接:在内连接的基础上,还包含表1中所有不符合条件的数据行,并在其中的表2列填写 NULL;
右外连接:在内连接的基础上,还包含表2中所有不符合条件的数据行,并在其中的表1列填写 NULL。

答案

 use teachingdb;
 /****请在此编写代码,操作完毕之后点击评测******/
 
 /**********Begin**********/
  -- select * from 表1 left join 表2 on 表1.字段 = 表2.字段 [where]

    select s.sno,s.sname
    from student s left join score sc on s.sno = sc.sno
    where sc.sno is null;
    
  
    /*select sno, snaem 
    from student 
    where sno not in
    (
      select sno
      from score
    );*/
 /**********End**********/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值