計算機程序設計

左連接(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 zhtw.delachieve.com. Theme powered by WordPress.