⊗pyPmDOFR 126 of 129 menu

Mối quan hệ dữ liệu cha-con trong Python

Giả sử chúng ta có nhiệm vụ lưu trữ thông tin về các ông bố và con trai. Giả định mỗi bố chỉ có thể có một con trai duy nhất, và người con trai đó cũng có thể có một con trai duy nhất.

Chúng ta cần nghĩ cách lưu trữ dữ liệu. Ý tưởng đầu tiên có thể nảy ra là tạo hai bảng: parents cho các ông bố và sons cho các con trai. Sau đó liên kết các bảng này bằng một trường nào đó: son_id hoặc parent_id.

Tuy nhiên, đây không phải là ý tưởng hay - bởi vì một người có thể đồng thời vừa là bố vừa là con trai - và sẽ phải lưu trữ thông tin của người đó trong cả hai bảng, điều này bất tiện, chiếm nhiều dung lượng hơn và dễ dẫn đến lỗi.

Phương án tốt hơn là liên kết bảng với chính nó: hãy tạo bảng users, trong đó lưu trữ tất cả người dùng và mỗi người sẽ có một trường son_id, trong đó sẽ lưu trữ id của con trai từ chính bảng đó:

users
id name son_id
1 user1 2
2 user2 3
3 user3 null

Truy vấn

Bây giờ hãy viết một truy vấn để lấy thông tin người dùng cùng với con trai của họ.

Đầu tiên, hãy đơn giản lấy danh sách người dùng:

SELECT * FROM users

Bây giờ hãy thực hiện LEFT JOIN để kết nối với con trai của họ. Chúng ta sẽ JOIN bảng với chính nó, vì vậy cần đổi tên bảng:

LEFT JOIN users as sons

Bây giờ chúng ta có thể chỉ định mối quan hệ giữa bảng chính và bảng đã đổi tên:

LEFT JOIN users as sons ON sons.id=users.son_id

Bây giờ hãy chỉ định các trường cần lấy:

SELECT users.name as user_name, sons.name as son_name

Tổng hợp tất cả lại, chúng ta có truy vấn hoàn chỉnh sau:

SELECT users.name as user_name, sons.name as son_name FROM users LEFT JOIN users as sons ON sons.id=users.son_id

Bài tập thực hành

Giả sử chúng ta có các danh mục. Mỗi danh mục có thể thuộc về một danh mục cha, danh mục cha đó lại có thể có danh mục cha của nó và tiếp tục như vậy. Hãy mô tả cấu trúc lưu trữ.

Viết một truy vấn để lấy một danh mục cùng với danh mục cha của nó.

Viết một truy vấn để lấy một danh mục cùng với danh mục cha và danh mục ông (cha của cha) của nó.

Viết một truy vấn để lấy một danh mục cùng với danh mục cha, danh mục ông và danh mục cụ (cha của ông) của nó.

Tiếng Việt
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbek
Chúng tôi sử dụng cookie để vận hành trang web, phân tích và cá nhân hóa. Việc xử lý dữ liệu được thực hiện tuân theo Chính sách bảo mật.
chấp nhận tất cả tùy chỉnh từ chối