计算机, 程序设计
左连接(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 - 典型用途错误:无效的过程表
在左外发基本错误连接表二:
- 正确地选择用于该数据丢失的表的顺序。
- 当使用与查询时的错误连接的表。
考虑的第一个错误。 任何问题的决定之前应该清楚地知道,我们到底想要得到的。 在上面这个例子中,我们采取了人的每一个,但完全失去了对下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