sql连接查询(inner join、full join、left join、 right join)
一、内连接(inner join)
首先我这有两张表
1、顾客信息表customer
2、消费订单表orders
注意:顾客与订单之间是一对多关系
需求:查询哪个顾客(customer_name)在哪一天(create_time)消费了多少钱(money)
sql语句:
select c.customer_name, o.create_time, o.money from customer c, orders o where c.id = o.customer_id
sql语句也可以这样写:
select c.customer_name, o.create_time, o.money from customer c inner join orders o on c.id = o.customer_id
结果:
内连接的过程:
将符合条件的记录组合起来,放在一张新表里面
二、左连接(left join)
需求:查询哪个顾客(customer_name)在哪一天(create_time)消费了多少钱(money)
sql语句:
select c.customer_name, o.create_time, o.money from customer c left join orders o on c.id = o.customer_id
结果:
从结果可以很清楚的明白左连接的含义:
将左边表的所有记录拿出来,不管右边表有没有对应的记录
三、右连接(right join)
需求:查询哪个顾客(customer_name)在哪一天(create_time)消费了多少钱(money)
sql语句:
select c.customer_name, o.create_time, o.money from customer c right join orders o on c.id = o.customer_id
结果:
从结果可以很清楚的明白右连接的含义:
将右边表的所有记录拿出来,不管右边表有没有对应的记录
四、全连接(full join)
这里要注意的是mysql本身并不支持全连接查询,但是我们可以使用UNION关键字实现
sql语句:
select c.customer_name, o.create_time, o.money from customer c left join orders o on c.id = o.customer_id UNION select c.customer_name, o.create_time, o.money from customer c right join orders o on c.id = o.customer_id
结果:
从sql语句中可以清楚的看到:
使用UNION关键字将左连接和右连接,联合起来