栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java笔记——数据库06

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java笔记——数据库06

目录

联合查询

内连接

外连接

自连接 

子查询 

单行子查询: 内部的查询sql返回单条记录的查询​编辑

 多行子查询:内部嵌套的查询sql返回多条记录的查询


联合查询

实际开发中往往数据来自不同的表,所以需要多表联合查询。多表查询是对多张表的数据取笛卡尔积:

注意:关联查询可以对关联表使用别名。

就两步:

a.先试验下笛卡尔积的结果.

b.按照条件一步步筛选
 

举例:

学生表

班级表

查询在 天庭班 里面的所有 同学名称

一个在 班级表中, 一个在 学生表中

在一条SQL语句中同时查出这两个属性,就需要两张表一起查询。

联合查询其实就是在进行两张表的笛卡尔积:本质上就是两个表的排列组合

select stu.name, stu.class_id, class.name, class.id from stu, class ;

遍历第一张表,取出一条记录和第二张表的每一条记录进行组合,得到一个更大的表
多表查询,就是多张表的排列组合 数目是 乘积 关系。
 

多表查询得到的结果是两张表的组合

列数:多表的列数之和   + 相加
行数:多表的行数之积   * 乘积

接下来就是对数据进行筛选

很简单,我们判断一个数据是否合理就是学生表的班级id和班级id一致

stu.class_id = class.id 即可

 现在再进行进一步的筛选,选择是 天庭班 的学生  class.name = '天庭'

 select stu.name, stu.class_id, class.name, class.id from stu, class where stu.class_id = class.id and class.name = '天庭';

如果是只想查询 天庭班 的所有同学名称 ,就把前面改一改

select stu.name from stu,class  where stu.class_id = class.id and class.name = '天庭';

 注释:多表查询和子查询切忌不要想着一步到位,想一次就把正确的sql写出来,往往事倍功半

上面的问题,还有另一种写法,就是 内连接

内连接

内连接:就是多表的笛卡尔积根据关联关系严格筛选结果

内连接的结果两张表的数据都不为空
 

语法:

select 字段 from 表1 别名1 [inner] join 表2 别名2 on 连接条件 and 其他条件;

select 字段 from 表1 别名1,表2 别名2 where 连接条件 and 其他条件;

还是刚刚那个问题:查询在 天庭班 中所有学生的名字

这是之前写的

 用内连接写个同样效果的

 注释: inner join 后面写需要连接的另一个表名称

             on 后面写 内连接的条件,两张表的关联关系

             where 是 具体想要得到的筛选条件

比较推荐第二种用 内连接的方法,比较清晰 。

连接条件和筛选条件分开,逻辑比较清楚。

案例:

 

 内连接一定都是多个表同时都存在关联数据的情况
 不会出现假设表1存在数据,表2没有数据,此时这条记录关联之后就不会显示。

 如果想要显示,那就要用到外连接。

外连接

两张表查询时,若某个表存在空数据,仍然显示出来
 

外连接分为左外连接和右外连接。

如果联合查询,左侧的表完全显示我们就说是左外连接;右侧的表完 全显示我们就说是右外接。

from tb_name1 left join tb_name2 on 条件  

from tb_name1 right join tb_name2 on 条件

 

 
 先用内连接查看

---左外连接,讲左表数据完全显示,右表中不存在的显示为null

select user.* , account.* from user left join account on account.id = user.id;

 ---右外连接,将右表数据完全显示,左表中不存在的显示为null

select user.* , account.* from user right join account on account.id = user.id;

 

自连接 

一般MySQL筛选数据时都是不同行的列之间进行数据的比较,涉及到同一张表中行数据的筛选,用到自连接

 

 

子查询 

子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询

单行子查询: 内部的查询sql返回单条记录的查询

 

 

 多行子查询:内部嵌套的查询sql返回多条记录的查询

举例:查询语文或英文的成绩信息

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/959579.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号