sql语言怎么把三个表自然连接在一起?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql语言怎么把三个表自然连接在一起?相关的知识,希望对你有一定的参考价值。

把三个表自然连接在一起的方法如下:

1 有关联

select *

from a left join b on a.id=b.id

left join c on b.id=c.id

2 无关联

select id

from a

union all

select id

from b

union all

select id

from c

其中:

inner join 只显示符合条件的数据行,此为默认的join方式,inner 可以省略;

left join 显示符全条件的数据行及左边数据表中不符合条件的数据行;

right join 显示符全条件的数据行及右边数据表中不符合条件的数据行;

full join 显示符全条件的数据行及左边和右边数据表中不符合条件的数据行;

cross join 直接将一个数据表的每一条数据行和另一个数据表的每一条数据行搭配成新的数据 行,不要on 来设置条件。

参考技术A 1 有关联
select *
from a left join b on a.id=b.id
left join c on b.id=c.id
2 无关联
select id
from a
union all
select id
from b
union all
select id
from c
大概就这样,一个是用join 关联字段,一个是用union
参考技术B 可以用左联接(left outer join) 右连接(right outer join) 或内连接(inner join) 参考技术C 三个表相联系,前提是这三个表的某些列肯定是有联系的。
表一:student:sid sname age 
表二:teacher: tid tname sid
表三:kecheng: kid kname sid
查询学生 小李 的老师 和 小李需要上的课程
select k.name t.tname from teacher t ,kecheng k ,studend swhere s.sid=t.sid and s.sid=k.sid

简单的例子 其中student teacher kecheng 这三个表中 sid是把这三个表联系起来了。希望能帮到你。本回答被提问者采纳

SQL Join 三个表保持不重叠的空值

【中文标题】SQL Join 三个表保持不重叠的空值【英文标题】:SQL Join three tables keep non-overlapping null values 【发布时间】:2017-07-19 02:31:07 【问题描述】:

我基本上在数据库中有 2 个表,还有一个日期表,我认为我需要将它们连接在一起才能达到预期的效果。

美食

date       | foos
------------------
2016-01-01   2
2016-01-02   3
2016-01-03   4

条形

date       | bars
------------------
2016-01-02   9
2016-01-03   8
2016-01-04   7

日期

dates
----------
2016-01-01
2016-01-02
2016-01-03
2016-01-04
...

想要的返回值

date       | bars | foos
-------------------------
2016-01-01   Null   2
2016-01-02   9      3
2016-01-03   8      4
2016-01-04   7      Null

我目前正在做的是选择我的日期表,然后左加入 foos 到日期,然后左加入条到日期。

问题是这给了我以下结果

date       | bars | foos
-------------------------
2016-01-01   Null   2
2016-01-02   9      3
2016-01-03   8      4
2016-01-04   7      Null
2016-01-05   Null   Null
2016-01-06   Null   Null
2016-01-07   Null   Null
...

如果 bar 和 foos 都为空,我不希望返回日期。我可以让它以这种方式呈现,但我不确定这是最有效的选择方式,即:

where (bars is not null or foos is not null)

【问题讨论】:

那么您的实际问题是什么?在我看来,您的最后一行代码就是解决方案。 我想我想问一下这是否是执行此操作的最有效方法 如果你试一下,会不会出现性能问题?通常最好在确实存在问题时修复性能,如果不是,则不必修复它。 你正在做的很好......你也可以使用子查询来达到同样的效果......但是性能总是取决于表和数据的大小...... 【参考方案1】:

left outer join试试这个

select d.dates,b.bars,f.foos from dates d 
left outer join bars b on d.dates = b.date 
left outer join foos f on d.dates = f.date;

+------------+------+------+
| dates      | bars | foos |
+------------+------+------+
| 2016-01-02 |    9 |    3 |
| 2016-01-03 |    8 |    4 |
| 2016-01-04 |    7 | NULL |
| 2016-01-01 | NULL |    2 |
+------------+------+------+

【讨论】:

【参考方案2】:

对于这个查询,使用以下似乎已经足够了。

where (bars is not null or foos is not null)

【讨论】:

以上是关于sql语言怎么把三个表自然连接在一起?的主要内容,如果未能解决你的问题,请参考以下文章

sql 内连接外连接自然连接等各种连接

SQL语句中两个表的连接

sql语句里如何实现给查询记录添加自然序号?

用sql语句进行多表连接查询,怎么不查出重复数据

我需要在 SQL 中使用左连接、自然连接还是简单连接?

SQL怎么连接查询2个表?