数据库表的连接方式
连接方式分为内连接(inner join)、外连接(outer join)、交叉连接(cross join)。
外连接又分为左连接(left join)、右连接(right join)、全连接(full join)。
举例:产品表和订单表
产品表( tbl_product_info)
产品编号 (productNo) | 产品名称(productName) | 产品类型 (productName) |
---|---|---|
A | 产品A | 球类 |
B | 产品B | 健身器材类 |
C | 产品C | 户外运动类 |
订单表( tbl_order_info)
订单编号(orderNo) | 产品编号 (productNo) | 订单金额(orderAmount) |
---|---|---|
Or001 | A | 100000 |
Or002 | B | 650000 |
Or003 | D | 10000 |
内连接
连接关键字 inner join,inner 可以省略
进行关联 on 后跟关联条件。
内连接筛选出两个表关联上的数据记录。
-- 隐示内连接写法
select t.productNo,t.productName
from tbl_product_info p ,tbl_order_info o where p.productNo = o.productNo
-- 显示内连接写法
select t.productNo,t.productName
from tbl_product_info p (inner) join tbl_order_info o on p.productNo = o.productNo
结果:过滤出左右两表关联上的数据出来。
productNo | productName |
---|---|
A | 产品A |
B | 产品B |
左连接
连接关键字:left join ,left 不可以省略
关联条件用on 连接,以左表为基准
筛选出关联上的数据记录和左表未关联上的数据
select t.productNo,t.productName
from tbl_product_info p left join tbl_order_info o on p.productNo = o.productNo
结果:左表(left join 关键字左边的表)的数据都会出现。
productNo | productName |
---|---|
A | 产品A |
B | 产品B |
C | 产品C |
右连接
连接关键字:right join ,right 不可省略
关联条件用on 连接,以右表为基准
筛选出关联上的数据记录和右表未关联上的数据
select o.productNo,t.productName
from tbl_product_info p right join tbl_order_info o on p.productNo = o.productNo
结果:右表(right join 关键字右边的表)的数据都会出现。
productNo | productName |
---|---|
A | 产品A |
B | 产品B |
D |
全连接
连接关键字:full join
关联条件用on 连接,以左右表为基准
筛选出关联上的数据记录和左表未关联上的数据、右表未关联上的数据
select t.productNo leftNo,o.productNo rightNo ,t.productName
from tbl_product_info p full join tbl_order_info o on p.productNo = o.productNo
结果:左右两表的数据都会出现。
leftNo | rightNo | productName |
---|---|---|
A | A | 产品A |
B | B | 产品B |
C | 产品C | |
D | 产品D |
交叉连接
连接关键字:cross join ,cross 不可省略
关联条件 只能用where,不能用on
select o.productNo,t.productName
from tbl_product_info p cross join tbl_order_info o
where p.productNo = o.productNo
结果:左表过滤出来的每一条数据都与右表每一条数据关联。
数据记录= 左表筛选的数据条数*右表筛选的数据条数