计算机程序设计

左连接(SQL) - 示例,详细描述,使用错误

在任何实际的关系数据库中,所有信息都分布在一个单独的表。 很多表都是在互相通信方案阐述。 然而,随着帮助SQL查询很可能把数据,而不是嵌入电路之间的连接。 这是通过执行一个加入的连接,它允许你建立任意数量的表之间的关系,甚至连看似不相干的信息来完成。

关于左外连接本文将具体谈。 在继续这种类型的连接的描述中,加入一些数据库表。

准备必要的表

例如,在我们的数据库中,有关于人民和他们的房产信息。 摘要基于三个表:人民(人),不动产(房地产),Realty_peoples(表之间的关系,人谁从什么属性属于)。 假设存储在人的表中的以下数据:

人民

ID

L_name

F_name

Middle_name

生日

1

伊万诺娃

达里娅

B.

2000年7月16日

2

普金

弗拉季斯拉夫·

尼古拉耶维奇

1986年1月29日

3

Evgenin

亚历山大

Federovich

1964年4月30日

4

安妮娜

P.

1989年12月31日

Gerasimovsky

希望

P.

1992年3月14日

6

Gerasimovsky

奥列格

Albertovich

1985年1月29日

7

Sukhanovskaya

陪审团

A.

1976年9月25日

8

Sukhanovskaya

朱莉娅

Y.

二零零一年十月一日

房地产:

物业

ID

地址

1

阿尔汉格尔斯克,UL认证。 沃罗宁,D 7,kv.6

2

阿尔汉格尔斯克,UL认证。 Severodvinskaya,D。84,Q。 9 BR。 五

3

阿尔汉格尔斯克地区,北德文斯克,ST。 列宁,D,134,Q。 85

4

阿尔汉格尔斯克地区,新德文斯克,UL认证。 Proletarshaya,D。16,Q。 137

阿尔汉格尔斯克,PL。 Terekhina,D。89,Q。 13

关系人 - 财产:

Realty_peoples

id_peoples

id_realty

类型

7

3

总共同所有权

8

3

总共同所有权

3

属性

7

1

属性

4

通用零件

6

4

通用零件

LEFT JOIN(SQL) - 说明

左化合物具有的语法如下:

表-A LEFT JOIN表-B [{ 谓词} | {USING spisok_ tolbtsov}]

并且示意如下:

并且该表达被翻译为“全选,无一例外表A和表B的线,以便只显示谓词的匹配的行。 如果字符串表被发现的对的表,然后填写所产生的列空 - 值”。

大多数情况下,当左连接指示ON,用的就是只有当列名,这是计划建立连接都是一样的使用。

LEFT JOIN - 使用实例

随着左边的连接,我们可以看到,所有的人从名单中是否有人民财产。 在左这样做连接SQL查询示例:

SELECT人民。*,Realty_peoples.id_realty,Realty_peoples.type

FROM人民LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples;

结果如下:

查询1

ID

L_name

F_name

Middle_name

生日

id_realty

类型

1

伊万诺娃

达里娅

B.

2000年7月16日

2

普金

弗拉季斯拉夫·

尼古拉耶维奇

1986年1月29日

3

Evgenin

亚历山大

Federovich

1964年4月30日

属性

4

安妮娜

P.

1989年12月31日

Gerasimovsky

希望

P.

1992年3月14日

4

通用零件

6

Gerasimovsky

奥列格

Albertovich

1985年1月29日

4

通用零件

7

Sukhanovskaya

陪审团

A.

1976年9月25日

1

属性

7

Sukhanovskaya

陪审团

A.

1976年9月25日

3

总共同所有权

8

Sukhanovskaya

朱莉娅

Y.

二零零一年十月一日

3

总共同所有权

正如我们看到的, 伊万诺娃达亚·普金 弗拉季和Anninoy Lyubovi没有注册房地产权利。

什么将我们已经收到,使用内部联接内部联接? 如你所知,它排除了不匹配的行,所以三我们的最终样品的只会被丢弃:

查询1

ID

L_name

F_name

Middle_name

生日

id_realty

类型

3

Evgenin

亚历山大

Federovich

1964年4月30日

属性

Gerasimovsky

希望

P.

1992年3月14日

4

通用零件

6

Gerasimovsky

奥列格

Albertovich

1985年1月29日

4

通用零件

7

Sukhanovskaya

陪审团

A.

1976年9月25日

1

属性

7

Sukhanovskaya

陪审团

A.

1976年9月25日

3

总共同所有权

8

Sukhanovskaya

朱莉娅

Y.

二零零一年十月一日

3

总共同所有权

这似乎是第二个版本也符合我们的问题的条件。 但是,如果我们开始在另一个附加和另一个表,从结果三个人已经无可挽回地消失了。 因此,在实践中,结合多个表时,更经常使用左,右连接比内连接。

将继续寻找到左连接SQL实例。 附上我们的房子的地址表:

SELECT人民。*,Realty_peoples.id_realty,Realty_peoples.type,Realty.address

从人民

LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples

LEFT JOIN地产ON Realty.id = Realty_peoples.id_realty

现在我们得到的不仅是一种规律,也是房地产的地址:

查询1

ID

L_name

F_name

Middle_name

生日

id_realty

类型

地址

1

伊万诺娃

达里娅

B.

2000年7月16日

2

普金

弗拉季斯拉夫·

尼古拉耶维奇

1986年1月29日

3

Evgenin

亚历山大

Federovich

1964年4月30日

属性

阿尔汉格尔斯克,PL。 Terekhina,D。89,Q。 13

4

安妮娜

P.

1989年12月31日

Gerasimovsky

希望

P.

1992年3月14日

4

通用零件

阿尔汉格尔斯克地区,新德文斯克,UL认证。 Proletarshaya,D。16,Q。 137

6

Gerasimovsky

奥列格

Albertovich

1985年1月29日

4

通用零件

阿尔汉格尔斯克地区,新德文斯克,UL认证。 Proletarshaya,D。16,Q。 137

7

Sukhanovskaya

陪审团

A.

1976年9月25日

3

总共同所有权

阿尔汉格尔斯克地区,北德文斯克,ST。 列宁,D,134,Q。 85

7

Sukhanovskaya

陪审团

A.

1976年9月25日

1

属性

阿尔汉格尔斯克,UL认证。 沃罗宁,D 7,kv.6

8

Sukhanovskaya

朱莉娅

Y.

二零零一年十月一日

3

总共同所有权

阿尔汉格尔斯克地区,北德文斯克,ST。 列宁,D,134,Q。 85

LEFT JOIN - 典型用途错误:无效的过程表

在左外发基本错误连接表二:

  1. 正确地选择用于该数据丢失的表的顺序。
  2. 当使用与查询时的错误连接的表。

考虑的第一个错误。 任何问题的决定之前应该清楚地知道,我们到底想要得到的。 在上面这个例子中,我们采取了人的每一个,但完全失去了对下2号,其主人未找到对象的信息。

如果我们在一些地方查询移动的桌子,和将与开始«...从房产左加入人民...»任何一个属性,我们就不至于丢了,你会不会跟人有关。

但是,不要害怕左连接,切换到全屏外部,其中包括在结果和匹配,而不是匹配的行。

毕竟, 样品的体积 往往非常大,和额外的数据实际上是无用的。 主要的事情 - 弄清楚你想要得到的结果是什么:所有的人与他们的现有财产清单或与它们的主人全属性列表(如果有的话)。

LEFT JOIN - 典型使用错误的:在哪里设置的条件时请求是正确的

第二误差还与数据的损失相关联,并且并不总是立即显而易见。

让我们回到查询,当我们离开通过连接接收所有的人都和他们的现有属性数据。 请记住以下与左连接SQL示例:

FROM人民LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples;

假设我们要澄清的请求,不输出数据,其中法的类型 - “属性”。 如果我们简单地添加,使用左连接SQL,以下条件的一个例子:

...

当键入<>“属性”

我们将失去谁没有财产,因为空值null是不是比较如下人口数据:

查询1

ID

L_name

F_name

Middle_name

生日

id_realty

类型

Gerasimovsky

希望

P.

1992年3月14日

4

通用零件

6

Gerasimovsky

奥列格

Albertovich

1985年1月29日

4

通用零件

7

Sukhanovskaya

陪审团

A.

1976年9月25日

3

总共同所有权

8

Sukhanovskaya

朱莉娅

Y.

二零零一年十月一日

3

总共同所有权

为了防止这个原因发生的错误,最好是在连接时立即设置选择条件。 我们建议考虑与左下面的连接SQL实例。

SELECT人民。*,Realty_peoples.id_realty,Realty_peoples.type

从人民

LEFT JOIN Realty_peoples ON(Peoples.id = Realty_peoples.id_peoples AND型<> “属性”)

其结果将是如下:

查询1

ID

L_name

F_name

Middle_name

生日

id_realty

类型

1

伊万诺娃

达里娅

B.

2000年7月16日

2

普金

弗拉季斯拉夫·

尼古拉耶维奇

1986年1月29日

3

Evgenin

亚历山大

Federovich

1964年4月30日

4

安妮娜

P.

1989年12月31日

Gerasimovsky

希望

P.

1992年3月14日

4

通用零件

6

Gerasimovsky

奥列格

Albertovich

1985年1月29日

4

通用零件

7

Sukhanovskaya

陪审团

A.

1976年9月25日

3

总共同所有权

8

Sukhanovskaya

朱莉娅

Y.

二零零一年十月一日

3

总共同所有权

因此,通过以下简单到左连接SQL例子中,我们收到的所有的人的名单,进一步移动,在股权/共同拥有这些特性之一。

作为结论,我想再次从数据库中的任何信息的样本必须负责任地采取突出。 在左前面我们开设了许多细微之处连接SQL简单的例子,解释其中之一 - 你开始写,甚至基本的查询之前,您必须仔细了解我们到底想要得到的。 祝你好运!

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 zhcn.delachieve.com. Theme powered by WordPress.