mysql ( 3 ) :多表查询

一、多表查询

笛卡尔积
需求:查询两张表中关于水果的信息,要显示水果名称和水果价格。
多表查询语法:select * from a,b;
结果:
在这里插入图片描述
问题分析:
1.查询到的结果冗余了,变成了排列组合。
2.a表中的每一条记录,都和b表中的每一条进行匹配连接。所得到的最终结果是,a表中的条目数乘以b表中的数据的条目数。
解决方案:
在查询两张表的同时添加条件进行过滤,比如a表的id和必须和b表的id相同.

内连接查询
内连接 : 通过两张表查找其对应的记录.
隐式内连接查询:
select * from a,b where a.列名 = b.列名
显式内连接查询:
在这里插入图片描述
在这里插入图片描述

外连接
需求:列出所有的水果的信息和价格。
左外连接
在这里插入图片描述
select * from a left outer join b on a.id = b.id。(outer可以省略)
结果:
在这里插入图片描述

右外连接
在这里插入图片描述
select * from a right outer join b on a.id = b.id (outer可以省略)
总结:
1.左外连接以关键字左侧数据为主。不管右侧的数据是否有对应,都把左侧的数据显示出来
2.右外连接以关键字右侧数据为主,不管左侧有没有数据对应。都把右侧的数据进行显示。

全外连接
1.就是左外连接和右外连接之和,将左右两表中的数据全部显示出来
2.mysql 不支持。
在这里插入图片描述
但mysql可以使用union来达到全外连接的查询效果。
在这里插入图片描述

union :
可以将左外连接查询和右外连接查询两条sql语句使用union合并起来进行查询,去掉重复的数据。
union all :
不去掉重复进行合并,相当于查询一次左外连接,然后再查询一次右外连接,然后将两次的查询结果合并。

多表查询总结
在这里插入图片描述

二、关联子查询
关联子查询:将一个查询作为另一个查询的一部分。
需求:查询年龄最大的学生的信息.
步骤分析:
1.查询出最大的年龄是多少.
在这里插入图片描述
2.根据最大的年龄,去查询出具体的人员信息
在这里插入图片描述
3.组合成一条语句.
在这里插入图片描述

in的用法
in (20,30):表示条件是20或者30,类似于添加条件select * from student where age = 20 or age = 30;
需求:查询分数不及格的所有的学生信息
在这里插入图片描述

all的用法
all:表示所有,和union一起使用。
左连接和右连接查询结果的合集。
union all :不去掉重复进行合并,相当于查询一次左外连接,然后再查询一次右外连接,然后将两次的查询结果合并。
在这里插入图片描述
在这里插入图片描述

as的用法 (重点)
as:不仅可以用来做列的别名,还可以将查询结果通过as作为一张表来使用。
需求 : 查询不及格的学生信息和不及格分数
在这里插入图片描述
limit的用法
作用 : 限制查询结果返回的数量.
语法:select * from 表名 LIMIT [offset], row_count;

mysql自带函数:(知道即可)
msyql数据库中自带了一些函数。在我们使用sql语句操作mysql数据库的时候,可以直接使用这些函数。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
日期函数
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值