一、通过select子句进行多表查询
准备两张表:一张users用户表,一张user_addr用户地址表,它们有共同的user_id
select 字段名 from 表1,表2... where 表1.字段=表2.字段 add其他查询条件
select addr_id,city,username,password
from users,user_addr
where users.user_id=user_addr.user_id;
二、通过内连接inner join进行查询
select 字段名 from 表1 inner join 表2 on 表1.字段=表2.字段
select addr_id,city,username,password
from users
inner join user_addr
on users.user_id=user_addr.user_id;
三、通过外连接left join,left outer join,right join,right outer jion,union进行查询
-
left join
语法:
select 字段名 from 表1 left join 表2 on 表1.字段=表2.字段
select addr_id,city,username,password from users left join user_addr on users.user_id=user_addr.user_id
-
left outer join(相当于left join+[where表2.字段 is null])
语法:
select 字段名 from 表1 left join 表2 on 表1.字段=表2.字段 where 表2.字段is null
select addr_id,city,username,password from users left join user_addr on users.user_id=user_addr.user_id where user_addr is null
-
right join
语法:
select 字段名 from 表1 right join 表2 on 表1.字段=表2.字段
select addr_id,city,username,password from users right join user_addr on users.user_id=user_addr.user_id
-
right outer join(相当于right join+[where 表1.字段 is null])
语法:
select 字段名 from 表1 right join 表2 on 表1.字段=表2.字段 where 表1.字段is null
select addr_id,city,username,password from users right join user_addr on users.user_id=user_addr.user_id where users.user_id is null
-
left join union right join
语法:
select 字段名 from 表1 left join 表2 on 表1.字段=表2.字段 union select 字段名 from 表1 right join 表2 on 表1.字段=表2.字段
select addr_id,city,username,password from users left join user_addr on users.user_id=user_addr.user_id union select addr_id,city,username,password from users right join user_addr on users.user_id=user_addr.user_id
四、结果展示
两张备用表
select子句多表查询及内连接
左连接
右连接
union
两表数据查询
准备表a、b
添加测试数据
b表
a表
b表和a表的不同的数据:
b表特有
a表特有
案例1:查询表b有表a没有的数据
SELECT * FROM b WHERE NOT EXISTS (SELECT 1 FROM a WHERE b.name = a.name)
案例2:查询表a有表b没有的数据
SELECT * FROM a WHERE NOT EXISTS (SELECT 1 FROM b WHERE b.name = a.name)