多表连接的种类
根据结果集生成的规则不同,连接可以分为:
- 交叉连接(cross join)—笛卡尔积
- 内连接(inner join)—解决匹配问题
- 外连接(outer join)—解决不匹配问题 ,表的所有记录出现在结果集
交叉连接
- 假设table1表中有m条记录,table2表中有n条记录,交叉连接产生的结果集为
m*n
- 该连接产生的结果集称为笛卡尔积
内连接
- 语法
- 如果有多个条件表达式,on关键字后面跟一个,其余用and条件连接
- 先根据on和and条件对要连接的表进行过滤,将过滤后的结果集进行内连接操作(join,on),再根据select语句的定义生成最终结果集.
内连接原理(一)
t1表和t2表做内连接,连接条件为on t1.c1=t2.c2,假设t1表做驱动表,t2表做匹配表,记录的匹配过程如下
- 从t1表中读取第一条记录r1,若它的c1值为1
- 根据该值到t2表中查找匹配的记录,即需要遍历t2表,从t2表中的第一条记录开始,若该记录(r1)的c2列的值等于1,我们就说这两条记录能够匹配上,那么t1的r1和t2的r1组合起来,作为结果集里的一条记录,否则检测t2表的下一条记录.
select A.REAL_NAME,B.OS_USERNAME
from ACCOUNT a join SERVICE b
on a.ID = b.ACCOUNT_ID
因为a.ID = b.ACCOUNT_ID
所以real_name
和os_username
也就是1对1了