数据库——多表查询


前言

欢迎大家前来阅读


提示:以下是本篇文章正文内容,下面案例可供参考

一、多表查询?

在实际项目开发中,我们不仅仅只是使用一张表,在多数情况下,我们往往需要针对两张甚至更多张数的表进行操作,而在这张多表之间需要使用主键和外键关联起来,然后使用连接查询来查询多张表中满足要求的数据记录。

当相互关联的多张表中存在意义相同的字段时,便可以利用这些相同的字段对多张表进行连接查询。

连接查询分为:交叉连接查询、自然连接查询、内连接查询、外连接查询

笛卡尔乘积 = A表中的数据量 * B表中的数据量 =笛卡尔乘积

多表查询过程:先计算多个表的笛卡尔积,在基于一些条件针对笛卡尔积中的记录进行筛选
注意:多表查询时,要使用两个表相关联的字段作为条件使用:
	例如:SQL语句演示:
				select 字段1,字段2...from 表1,表2...[where条件]

二、等值连接

等值条件直接进行查询,不会去重重复字段,新关系的记录数;两表相同的字段相同值的记录数=∑n * m,n为A表某种与B表相同的值的个数,m为B表与A表相对应值的个数

select user.name,user.product_name,product_company from user,product where user.product_name = product.name

在这里插入图片描述
用上述SQL语句查询出来的结果为:
在这里插入图片描述

三、内连接

内连接查询的两种方式:隐式内连接,显式内连接

 - 内连接查询的是左表跟右表的——交集部分:

!](https://img-blog.csdnimg.cn/cb15b084ec9c4595a3902361a533a0d3.png)
在这里插入图片描述
隐式内连接:

/*语法*/
SELECT 字段名 FROM 左表,右表 WHERE 条件
/*示例*/
-- 查询所有人物和他们的身份
SELECT * FROM op,identity where op.ity_id=identity.id;

显式内连接:

  • 使用【INNER JOIN …ON】语句可以省略 INNER
/*语法*/
SELECT 字段名 FROM 左表 [INNER] JOIN 右表 ON 条件

内连接步骤:

  • 确定查询哪些表
  • 确定表连接条件
  • 确定查询条件
  • 确定查询字段

四、外连接

外连接分为:左外连接和右外连接(俗称左连接和右连接)

1.左外连接
左连接:查询A的所有数据,和满足某一个条件的B的数据
/*语法:*/
select * from person left join dept on person.dept_id = dept.dids

图示模型:
在这里插入图片描述

当B为null时

含义:查询A中的所有数据减去“与B满足同一条件的数据”,然后得到的A剩余数据

select * from person left join dept on person.dept_id = dept.did where dept.did is null

图示模型:
在这里插入图片描述

右连接查询

右连接查询:B的所有数据,和满足某一条件的A的数据

/*语法*/
select * from person right join dept on person.dept_id = dept.did

外连接总结:

  • 左外连接和右外连接其实是一样的道理,一般使用左外连接较多
  • 外连接可以理解为:在内连接的基础上保证左表(或右表)的数据全部显示,右表(或左表)不符合条件的则显示null

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值