Máy tínhLập trình

Trái tham gia (SQL) - một ví dụ, mô tả chi tiết, sử dụng các lỗi

Trong bất kỳ cơ sở dữ liệu quan hệ thực tế, tất cả các thông tin được phân phối trên một bảng riêng biệt. Nhiều người trong số các bảng được quy định trong chương trình giao tiếp với nhau. Tuy nhiên, với sự giúp đỡ của các truy vấn SQL nó là hoàn toàn có thể đặt một mối liên hệ giữa các dữ liệu, không được nhúng trong mạch. Này được thực hiện bằng cách thực hiện một kết nối tham gia, cho phép bạn xây dựng một mối quan hệ giữa bất kỳ số lượng bảng, và thậm chí kết nối thông tin dường như khác nhau.

Bài viết này sẽ nói cụ thể về bên ngoài trái tham gia. Trước khi tiến tới các mô tả về loại hình kết nối, thêm vào một số bảng cơ sở dữ liệu.

Chuẩn bị các bảng cần thiết

Ví dụ, trong cơ sở dữ liệu của chúng tôi, có thông tin về con người và bất động sản của họ. Tóm tắt thông tin dựa trên ba bảng: dân (người), Realty (bất động sản), Realty_peoples (mối quan hệ bảng, những người từ những gì sở hữu thuộc về). Giả sử dữ liệu sau được lưu trữ trong các bảng của người dân:

Nhân dân

id

L_name

F_name

Middle_name

ngày sinh nhật

1

Ivanova

Daria

B.

2000/07/16

2

Pugin

Vladislav

Nikolaevich

1986/01/29

3

Evgenin

Alexander

Federovich

1964/04/30

4

Annina

yêu

P.

1989/12/31

5

Gerasimovsky

hy vọng

P.

1992/03/14

6

Gerasimovsky

Oleg

Albertovich

1985/01/29

7

Sukhanovskaya

ban bồi thẩm

A.

1976/09/25

8

Sukhanovskaya

Julia

Y.

2001/01/10

Bất động sản:

bất động sản

id

địa chỉ

1

Arkhangelsk, ul. Voronin, d. 7, kv.6

2

Arkhangelsk, ul. Severodvinskaya, d. 84, q. 9 BR. 5

3

khu vực Arkhangelsk, Severodvinsk, st. Lenin, d. 134, q. 85

4

khu vực Arkhangelsk, Novodvinsk, ul. Proletarshaya, d. 16, q. 137

5

Arkhangelsk, pl. Terekhina, d. 89, q. 13

Quan hệ người - bất động sản:

Realty_peoples

id_peoples

id_realty

kiểu

7

3

Tổng sở hữu chung

8

3

Tổng sở hữu chung

3

5

bất động sản

7

1

bất động sản

5

4

phần phổ biến

6

4

phần phổ biến

Còn lại tham gia (Sql) - Mô tả

hợp chất còn lại có cú pháp sau:

Table_A LEFT JOIN table_b [{ON vị} | {SỬ DỤNG spisok_ với tolbtsov}]

Và sơ đồ như sau:

Và biểu thức này được dịch là "Select All, không có ngoại lệ, dòng của Bảng A và Bảng B để chỉ hiển thị các hàng kết hợp của vị ngữ. Nếu bảng đã được tìm thấy trong bảng chuỗi cho cặp A, sau đó điền vào các cột kết quả Null - giá trị".

Thông thường, khi kết nối trái được chỉ ON, sử dụng chỉ được sử dụng khi các tên cột, được lên kế hoạch để tạo kết nối đều giống nhau.

Trái tham gia - ví dụ về sử dụng

Với sự kết nối của trái chúng ta có thể thấy, tất cả những người trong danh sách nếu có tài sản nhân dân. Để làm điều này trong trái join dụ truy vấn sql:

CHỌN dân. *, Realty_peoples.id_realty, Realty_peoples.type

TỪ dân LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples;

Với kết quả như sau:

Query1

id

L_name

F_name

Middle_name

ngày sinh nhật

id_realty

kiểu

1

Ivanova

Daria

B.

2000/07/16

2

Pugin

Vladislav

Nikolaevich

1986/01/29

3

Evgenin

Alexander

Federovich

1964/04/30

5

bất động sản

4

Annina

yêu

P.

1989/12/31

5

Gerasimovsky

hy vọng

P.

1992/03/14

4

phần phổ biến

6

Gerasimovsky

Oleg

Albertovich

1985/01/29

4

phần phổ biến

7

Sukhanovskaya

ban bồi thẩm

A.

1976/09/25

1

bất động sản

7

Sukhanovskaya

ban bồi thẩm

A.

1976/09/25

3

Tổng sở hữu chung

8

Sukhanovskaya

Julia

Y.

2001/01/10

3

Tổng sở hữu chung

Như chúng ta thấy, Ivanova Darya Pugin Vladislav và Anninoy Lyubovi Không đăng ký quyền bất động sản.

Và điều gì sẽ chúng tôi đã nhận được, sử dụng một bên tham gia Nội tham gia? Như bạn đã biết, nó không bao gồm hàng không phù hợp, vì vậy ba ra khỏi mẫu thức của chúng tôi chỉ đơn giản là sẽ được giảm:

Query1

id

L_name

F_name

Middle_name

ngày sinh nhật

id_realty

kiểu

3

Evgenin

Alexander

Federovich

1964/04/30

5

bất động sản

5

Gerasimovsky

hy vọng

P.

1992/03/14

4

phần phổ biến

6

Gerasimovsky

Oleg

Albertovich

1985/01/29

4

phần phổ biến

7

Sukhanovskaya

ban bồi thẩm

A.

1976/09/25

1

bất động sản

7

Sukhanovskaya

ban bồi thẩm

A.

1976/09/25

3

Tổng sở hữu chung

8

Sukhanovskaya

Julia

Y.

2001/01/10

3

Tổng sở hữu chung

Nó sẽ có vẻ rằng phiên bản thứ hai cũng đáp ứng các điều kiện của vấn đề của chúng tôi. Tuy nhiên, nếu chúng ta bắt đầu để gắn vào nhau, và bảng khác, ba người từ kết quả đã vĩnh viễn biến mất. Vì vậy, trong thực tế, khi kết hợp nhiều bảng nhiều thường xuyên hơn sử dụng trái và phải kết nối hơn Nội tham gia.

Sẽ tiếp tục nhìn sang bên trái tham gia ví dụ sql. Đính kèm một bảng với địa chỉ nhà của chúng tôi:

CHỌN dân. *, Realty_peoples.id_realty, Realty_peoples.type, Realty.address

TỪ dân

LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples

LEFT JOIN Realty ON Realty.id = Realty_peoples.id_realty

Bây giờ chúng ta có được không chỉ là một loại pháp luật, mà còn là địa chỉ của bất động sản:

Query1

id

L_name

F_name

Middle_name

ngày sinh nhật

id_realty

kiểu

địa chỉ

1

Ivanova

Daria

B.

2000/07/16

2

Pugin

Vladislav

Nikolaevich

1986/01/29

3

Evgenin

Alexander

Federovich

1964/04/30

5

bất động sản

Arkhangelsk, pl. Terekhina, d. 89, q. 13

4

Annina

yêu

P.

1989/12/31

5

Gerasimovsky

hy vọng

P.

1992/03/14

4

phần phổ biến

khu vực Arkhangelsk, Novodvinsk, ul. Proletarshaya, d. 16, q. 137

6

Gerasimovsky

Oleg

Albertovich

1985/01/29

4

phần phổ biến

khu vực Arkhangelsk, Novodvinsk, ul. Proletarshaya, d. 16, q. 137

7

Sukhanovskaya

ban bồi thẩm

A.

1976/09/25

3

Tổng sở hữu chung

khu vực Arkhangelsk, Severodvinsk, st. Lenin, d. 134, q. 85

7

Sukhanovskaya

ban bồi thẩm

A.

1976/09/25

1

bất động sản

Arkhangelsk, ul. Voronin, d. 7, kv.6

8

Sukhanovskaya

Julia

Y.

2001/01/10

3

Tổng sở hữu chung

khu vực Arkhangelsk, Severodvinsk, st. Lenin, d. 134, q. 85

Trái tham gia - việc sử dụng điển hình của lỗi: bảng thủ tục không hợp lệ

sai lầm cơ bản thực hiện tại bên ngoài trái tham gia bảng, hai:

  1. Một cách chính xác được lựa chọn theo thứ tự của bảng mà dữ liệu đã mất.
  2. Lỗi khi dùng truy vấn Trong trường hợp bảng sáp nhập.

Xem xét sai lầm đầu tiên. Trước khi quyết định của bất kỳ vấn đề cần được hiểu rõ ràng rằng những gì chúng ta muốn nhận được cuối cùng. Trong ví dụ này ở trên, chúng tôi đã mỗi một đơn của nhân dân, nhưng hoàn toàn bị mất các thông tin về các đối tượng thuộc số 2, mà chủ sở hữu không được tìm thấy.

Nếu chúng ta di chuyển các bảng trong một truy vấn ở một số nơi, và sẽ bắt đầu với «... Từ Realty trái tham gia dân ...» bất kỳ một thuộc tính, chúng ta sẽ không bị mất, bạn sẽ không nói về người.

Nhưng đừng sợ hãi của kết nối trái, chuyển sang đầy đủ bên ngoài, được bao gồm trong các kết quả và phù hợp, và không phải là dòng phù hợp.

Sau khi tất cả, khối lượng mẫu thường là rất lớn, và thêm dữ liệu thực sự là vô dụng. Điều quan trọng - để tìm ra những gì bạn muốn nhận được một kết quả: của tất cả mọi người với một danh mục tài sản có sẵn hoặc toàn bộ danh sách bất động sản với chủ sở hữu của họ (nếu có).

Trái tham gia - việc sử dụng điển hình của lỗi: Yêu cầu là đúng khi đặt điều kiện trong trường hợp

Lỗi thứ hai cũng liên quan đến mất dữ liệu, và không phải lúc nào ngay lập tức rõ ràng.

Chúng ta hãy quay trở lại truy vấn khi chúng tôi rời thông qua kết nối nhận dữ liệu cho tất cả mọi người và tài sản hiện có của họ. Hãy nhớ rằng các sau đây với trái tham gia dụ sql:

TỪ dân LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples;

Giả sử chúng ta muốn làm rõ yêu cầu và không xuất dữ liệu, nơi mà các loại của pháp luật - "tài sản". Nếu chúng ta chỉ đơn giản là thêm, bằng cách sử dụng trái tham gia sql, một ví dụ về các điều kiện sau đây:

...

Trong đó type <> "Tài sản"

chúng ta sẽ mất dữ liệu trên những người không có tài sản, bởi vì giá trị null Null không so sánh như sau:

Query1

id

L_name

F_name

Middle_name

ngày sinh nhật

id_realty

kiểu

5

Gerasimovsky

hy vọng

P.

1992/03/14

4

phần phổ biến

6

Gerasimovsky

Oleg

Albertovich

1985/01/29

4

phần phổ biến

7

Sukhanovskaya

ban bồi thẩm

A.

1976/09/25

3

Tổng sở hữu chung

8

Sukhanovskaya

Julia

Y.

2001/01/10

3

Tổng sở hữu chung

Để ngăn chặn các lỗi xảy ra vì lý do này, cách tốt nhất là đặt điều kiện lựa chọn ngay khi kết nối. Chúng tôi đề nghị để xem xét những điều sau với trái join dụ sql.

CHỌN dân. *, Realty_peoples.id_realty, Realty_peoples.type

TỪ dân

LEFT JOIN Realty_peoples ON (Peoples.id = Realty_peoples.id_peoples VÀ loại <> "tài sản")

Kết quả sẽ là như sau:

Query1

id

L_name

F_name

Middle_name

ngày sinh nhật

id_realty

kiểu

1

Ivanova

Daria

B.

2000/07/16

2

Pugin

Vladislav

Nikolaevich

1986/01/29

3

Evgenin

Alexander

Federovich

1964/04/30

4

Annina

yêu

P.

1989/12/31

5

Gerasimovsky

hy vọng

P.

1992/03/14

4

phần phổ biến

6

Gerasimovsky

Oleg

Albertovich

1985/01/29

4

phần phổ biến

7

Sukhanovskaya

ban bồi thẩm

A.

1976/09/25

3

Tổng sở hữu chung

8

Sukhanovskaya

Julia

Y.

2001/01/10

3

Tổng sở hữu chung

Như vậy, bằng cách làm theo các đơn giản để trái join dụ sql, chúng tôi nhận được một danh sách tất cả những người, di chuyển xa hơn, một trong những tài sản trong vốn chủ sở hữu / quyền sở hữu chung.

Như một kết luận tôi muốn nhấn mạnh một lần nữa rằng một mẫu của bất kỳ thông tin từ cơ sở dữ liệu cần phải được thực hiện có trách nhiệm. Nhiều sắc thái mở trước mặt chúng tôi với trái tham gia ví dụ đơn giản sql, giải thích trong đó một - trước khi bạn bắt đầu viết thậm chí truy vấn cơ bản, bạn phải cẩn thận để hiểu những gì chúng tôi muốn nhận được cuối cùng. Chúc may mắn!

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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