数据库联表跨表查询

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/junmoxi/article/details/77440076

a表
aid name
1 a1
2 a2
3 a3
4 a4


b表
bid nick
1 a1
3 b3
5 a3
6 b4

1. union  和 union all

将两个表的查询结果合并起来,这个两个不同得是union会将重复的去掉,而union all 无论是否重复都会将查询到的内容全部显示出来。

示例:SELECT name FROM a UNION   SELECT nick FROM b

结果 :a1 a2 a3 a4 b3 b4

SELECT name FROM a UNION ALL  SELECT nick FROM b

结果: a1 a2 a3 a4 a1 b3 a3 b4

============================================================

2. 左联 (left join)

以左表为基准,首先取出左表中的全部数据,再加上与右表相匹配的数据。
示例:select * from a left join b on a.aid = b.bid 
先取出a中的全部数据,再加上b表中与a表aid相等的数据
查询结果:1 a1 a1
  2 a2  null
3  a3  b3
4  a4  null

3. 右联 (right join)

与左联正好相反,它是以右表为基准,再加上与左表相匹配的数据
示例:select * from a right join b on a.aid = b.bid
先取出b中的全部数据,再加上a表中与b表aid相等的数据
查询结果 : 1 a1 a1
   3  b3 a3
   5  a3  null
   6  b4 null

4. 内联 (inner join)

他没有表做基准,只查询出相匹配的数据
示例: select * from a inner join b on a.aid = b.bid
查询结果 : 1   a1   a1
   3    a3   b3

5.子查询(in)

通过一个查询语句查询出来的结果是另一个查询语句的查询内容。
示例 : select * from a where aid in(select bid from b)
查询结果 : 1  a1
   3   a3
当然 还有 not in  正好与 in 相反,查询不在 这些结果集里面的 

展开阅读全文

没有更多推荐了,返回首页