Mysql的join语句使用进阶

8 篇文章 0 订阅
4 篇文章 0 订阅

Mysql

  1. 定义:让java程序访问数据库获取数据的命令语言
  2. 分类:四种
    在这里插入图片描述
  3. 学习目的:写出高效的sql语句
  4. 作用:让java程序访问数据库获取数据。

5. 知识点

5.1. join从句:

一种基于查询的从句部分,使得句子在查询的主谓基本结构外,还多了对操作的限定补充修饰。类似定语从句。

在这里插入图片描述

  1. 内连接:join
  • 作用:把两张表公共部分查询出来。(将a集合和b集合中符合条件(比如说相等)的部分(行)读取想要的属性(列)放到集合c返回。这就是join的实质。)
  • 语句:select a.name,a.age,b.sex from user1 a JOIN user2 b on a.name=b.name
  • 解释:查询a表的name,age和b表的sex属性,将符合条件:a表名字等于b表名字的数据行读取下来,并获得其中的a的name,sex列,b的age列。
  1. 左外连接:left join。和(not in)一样的使用:
  • 作用:读取左表所有数据和右表中符合条件on的数据。(将集合a的所有行和集合b中符合条件的行读取想要的属性(列)放到集合c返回)
  • 语句:select a.name,a.age,b.name from table1a left join table2 b on a.name=b.name where b.sex is (not) man
  1. 右外连接:right join
  • 作用:和左一样,只是以右表为基础。
  • 语句:select a.name,a.age,b.name from table1a right join table2 b on a.name=b.name where b.sex is (not) man
  1. 全连接:full join
  • 作用:读取左表和右表所有的数据,并且增加where语句可以将公共部分去除。
  • 语句:select a.name,b.name from table1 a full join table2 b on a.name=b.name (where b.age is not null )
  • 如图:
    在这里插入图片描述
  • 注意:mysql不支持全连接(和)可以用union all介词达到想要的a和b数据读取的效果。例如:
select ... left join ... on ...union all select ...right join ...on ...

通过左连接和右查询,得到所有结果,再合成一个集合返回  
  1. 交叉连接:cross join(又叫笛卡尔积查询)
  • 作用:将a的列和b的所有列合成一个长列,再将数据添入生成新集合返回。
  • 特点:不需要on这样的连接关键词从句
  • 语法:select a.name b.name from table1 a cross rable2 b
5.2 join的使用技巧(例子中的,a.属性应该加上’'号的)
1. 更新临时表:
  • 语句1:update table1 set name=‘permission’ where table1.name in (select b.name from table1 a inner join table2 b on a.name=b.name)
  • 上述方式因为from出现了table1 a,所以,就不可以直接修改table1.
  • 正确写法可以是:update table1 a join (select b.name from table1 a inner join table2 b on a.name=b.name) b on a.name=b.name set a.name='permission'
  • 实质:就是查出了临时表(),命名为b,然后a表和临时表b表做内联,找出公共部分再修改。
问题:还是不知道第一句为什么不行。
2. 优化子查询
  1. 子查询:再一条查询语句中,通过()里执行另一条查询
  2. 例子:
select a.name,a.age,(select sex from table2 b where a.name=b.name) as sex2(取别名) from table1 a

疑问:加入返回的是一个map怎么办?as的

  1. 优化:通过join获得中间临时集,再在临时集中查找。
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值