数据库——多表查询

  • 前言
  • 一、多表查询?
  • 二、等值连接
  • 三、内连接
  • 四、外连接
  • 1.左外连接
  • 右连接查询



前言

欢迎大家前来阅读


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

一、多表查询?

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

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

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

笛卡尔乘积 = 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 server 多个表关联查询表 sql数据库多表关联查询_sql server 多个表关联查询表


用上述SQL语句查询出来的结果为:

sql server 多个表关联查询表 sql数据库多表关联查询_数据库_02

三、内连接

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

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

!]()

sql server 多个表关联查询表 sql数据库多表关联查询_sql_03


隐式内连接:

/*语法*/
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

图示模型:

sql server 多个表关联查询表 sql数据库多表关联查询_数据库_04

当B为null时

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

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

图示模型:

sql server 多个表关联查询表 sql数据库多表关联查询_数据库_05

右连接查询

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

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

外连接总结:

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