MySQL的学习入门六

一、多表查询

1.1 内连接

规则:返回两个表的公共记录。
语法:
1、select * from 表1 inner join 表2 on 表1.公共字段=表2.公共字段 (inner可以省略)
MySQL的学习入门五的测试数据基础上,再添加如下测试数据代码:

create table stuMarks (
  examNo char(7) primary key,
  stuNo varchar(6) not null,
  writtenExam int,
  labExam int
);

insert into stumarks values ('001','01', 80, 60);
insert into stumarks values ('002','05', 90, 55);
insert into stumarks values ('003','08', 88, 89);
insert into stumarks values ('004','09', 90, 92);

在这里插入图片描述
例题:
在这里插入图片描述
2、select * from 表1, 表2 where 表1.公共字段=表2.公共字段;
在这里插入图片描述

1.2 左外连接

规则:以左边的表为准,右边如果没有对应的记录,显示null
语法:select * from 表1 left join 表2 on 表1.公共字段=表2.公共字段;
在这里插入图片描述

1.3 右外连接

规则:以右边的表为准,左边如果没有对应的记录,显示null
语法:select * from 表1 rightjoin 表2 on 表1.公共字段=表2.公共字段;
在这里插入图片描述

1.4 交叉连接

语法:select * from 表1 cross join 表2 on 条件字段;
返回笛卡尔积。
在这里插入图片描述
在这里插入图片描述
小结:
1、交叉连接如果没有连接条件返回笛卡尔积
2、如果有连接条件和内连接是一样的

1.5 自然连接

自动判断条件连接,判断的条件是依据同名字段
1、自然内连接(natural join)
在这里插入图片描述
2、自然左外连接(natural left join)
在这里插入图片描述

3、自然右外连接(natural right join)
在这里插入图片描述

小结:
1、表连接是通过同名字段来连接的
2、如果没有同名字段则返回笛卡尔积
3、同名的连接值显示一个,并且将该字段放在最前面

1.5.1 using

using用来指定连接字段,using也会做公共字段的优化,优化的规则和自然连接的是一样的。
例:
在这里插入图片描述

1.6 练习

1、显示地区及每个地区参加考试(writtenExam(笔试))的人数,并按人数降序排列:
在这里插入图片描述
在这里插入图片描述
2、显示有学生参加考试的地区
在这里插入图片描述

3、显示男生和女生的人数
方法一,分组查询:
在这里插入图片描述
方法二,union:
在这里插入图片描述
方法三,直接写条件:
在这里插入图片描述

4、显示每个地区男生、女生、总人数
在这里插入图片描述

二、子查询

语法:select * from 表1 where (子查询)
外面的查询称为父查询
子查询为父查询提供查询条件

2.1 标量子查询

特点:返回的结果是一个。
例题:查找笔试成绩是88的学生:
在这里插入图片描述

2.2 列子查询

如果标量子查询的结果返回多条记录,不能使用等于,用in 或 not in。
特点:列子查询的返回结果是一列。

1、查找笔试成绩大于80的同学:
在这里插入图片描述

2.3 行子查询

特点:子查询返回的结果是多个字段组成

1、找出语文成绩最高的男生和女生
在这里插入图片描述

2.4 表子查询

特点:将子查询的结果作为表

1、找出语文成绩最高的男生和女生

在这里插入图片描述
注意:from后面跟的是数据源,如果将子查询当成表来看,必须给结果集取别名。

2.5 exists 子查询

1、如果笔试成绩有人超过90分,就显示所有学生信息:
在这里插入图片描述
2、如果笔试成绩没有人超过90分,就显示所有学生信息:
在这里插入图片描述

在学习的MySQL的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。

猜你喜欢

转载自blog.csdn.net/weixin_44103733/article/details/106978716
今日推荐