表联结,自联结

#表联结

1.概念:
表联结是一种查询的机制,在一个select中关联多个表进行查询,成为联结。
用人话来说意思就是如果你要查两个数据,但是两个数据在不同的表中,你就把两个表联起来查。

给定一个需求。

A表包含  x y z三个字段

B表包含 x w e三个字段

如何通过x字段查询到两个表中的 y z w e的值并打印呢

#普通方法
select y,z,w,e			需要查询的数据字段	

from A,B				  查询的表

where A.x = B.x			  主外键一致,需指定x(完全限定列名)


#join方法
select y,z,w,e					要显示的信息

from A							表1

inner join B 					表2

on A.x = B.x;					主外键

2.关于join

在使用 join方法时,一定要记住把表与表之间的关系写清楚,
也就是 join后的语句,可能有多个语句同时存在,
那么就要写不止一条 join语句,
最重要的是再 where中一定要表明查询的条件。

#自联结

1.概念:自己联结自己查询表中的其他字段的信息。

2.原理:

当自联结比较时,假设表A进行自联结比较。
那么A1的每个元素会和A2的每个元素相比较。
设表A中有元素 a b c ,那么比较时会进行
a a , a b ,a c ,b a, b b ,b c ,c a, c b, c a
九次比较。
使用on条件语句对比较结果进行筛选

不用人话来说就是笛卡尔积。

3.假设场景

需求:你只知道王总这个人,但是你想要跟王总同一个公司的李总联系。
我们将它抽象成一张表,名字叫联系人。

公司名 			 员工名 

阿里巴巴			王总

阿里巴巴			李总

4.实现思路:

  1. 这时我们要做的就是先查询王总是哪个公司的,然后通过公司名查询到李总。
  2. 因为有两个步骤,我们只需要将这张表复制一份来进行就可以了。
  3. 那么我们将原表命名为a ,复制出来的表命名为b
  4. 那么我们的第一步操作就是先通过王总查询到阿里巴巴,
  5. 第二步是通过阿里巴巴查询到所有员工。

5.代码实现

#join方法
select  a.公司名,b.员工名   

from 联系人 as a

join 联系人 as b on a.公司名 = b.公司名;

where b.员工名 = 王总;

#where方法
select a.公司名, b.员工名

from 联系人 as a , 联系人 as b

where a.公司名 = b.公司名 and b.员工名 = 王总;
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页