Კომპიუტერები, Პროგრამირების
Მარცხენა შეუერთდეს (SQL) - მაგალითად, დეტალური აღწერა, გამოყენების შეცდომა
ნებისმიერ რეალური რელატიური მონაცემთა ბაზა, ყველა ინფორმაცია ნაწილდება ცალკე მაგიდასთან. ბევრი მაგიდები დადგენილი კომუნიკაციის სქემა ერთმანეთს. თუმცა, დახმარებით SQL შეკითხვებს ის არის გამორიცხული, რომ დააყენა ბმული მონაცემებს შორის, არ არის ჩართული ჩართვა. ეს კეთდება მიერ ასრულებენ შეუერთდეს კავშირი, რომელიც საშუალებას გაძლევთ აშენება ურთიერთობას ნებისმიერი რაოდენობის მაგიდები, და კიდევ აკავშირებს ერთი შეხედვით განსხვავებული ინფორმაცია.
ეს სტატია გაიგო კონკრეტულად მარცხენა გარე შეუერთდება. გაგრძელებამდე აღწერა ამ ტიპის კავშირი, დაამატოთ ზოგიერთი მონაცემთა ბაზის ცხრილები.
მომზადება აუცილებელი მაგიდები
მაგალითად, ჩვენს მონაცემთა ბაზაში არ არის ინფორმაცია ადამიანები და მათი ქონების. რეზიუმე საფუძველზე სამი მაგიდები: ხალხი (ადამიანი), Realty (უძრავი ქონების), Realty_peoples (მაგიდის ურთიერთობების, ადამიანები, რომლებიც რა ქონება ეკუთვნის). ვივარაუდოთ შემდეგი მონაცემები ინახება მაგიდები ხალხს:
ხალხი | ||||
id | L_name | F_name | Middle_name | დაბადების დღე |
1 | Ivanova | Daria |
ბ | 07/16/2000 |
2 | Pugin | ვლადისლავ | ნიკოლოზის | 29.01.1986 |
3 | Evgenin | ალექსანდრე | Federovich | 04/30/1964 |
4 | Annina | მიყვარს | P. | 31.12.1989 |
5 | Gerasimovsky | იმედი მაქვს, | P. | 14.03.1992 |
6 | Gerasimovsky | oleg | Albertovich | 01/29/1985 |
7 | Sukhanovskaya | ჟიურის | ა | 09/25/1976 |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 |
უძრავი ქონების:
Realty | |
id | მისამართი |
1 | არხანგელსკში, ul. ვორონინი, დ. 7, kv.6 |
2 | არხანგელსკში, ul. Severodvinskaya, დ. 84, ქ. 9 BR. 5 |
3 | არხანგელსკში რეგიონში, Severodvinsk, ქ. ლენინის, დ. 134, ქ. 85 |
4 | არხანგელსკში რეგიონში, Novodvinsk, ul. Proletarshaya, დ. 16 ქ. 137 |
5 | არხანგელსკის, pl. Terekhina, დ. 89, ქ. 13 |
ურთიერთობა ადამიანი - ქონება:
Realty_peoples | ||
id_peoples | id_realty | ტიპი |
7 | 3 | სულ თანამფლობელობა |
8 | 3 | სულ თანამფლობელობა |
3 | 5 | ქონება |
7 | 1 | ქონება |
5 | 4 | საერთო ნაწილები |
6 | 4 | საერთო ნაწილები |
მარცხენა შეუერთდეს (SQL) - აღწერა
მარცხენა რთული აქვს შემდეგი სინტაქსი:
Table_A LEFT JOIN table_B [{ON პრედიკატული} | {გამოყენებით spisok_ ერთად tolbtsov}] |
და სქემატურად შემდეგი რედაქციით:
და ეს გამოხატვის ითარგმნება, როგორც "აირჩიეთ ყველა, გამონაკლისის გარეშე, ხაზი მაგიდა და მაგიდის B არიან მხოლოდ შესაბამისი რიგები, ძირითადი. თუ მაგიდა იპოვეს string მაგიდა წყვილი A, მაშინ შეავსოთ შედეგად სვეტები Null - ღირებულებები ".
ყველაზე ხშირად, როდესაც მარცხენა დაკავშირებით მითითებულია გამოყენებით, გამოიყენება მხოლოდ მაშინ, როცა მწკრივები, რომელიც დაგეგმილია რათა კავშირი იგივეა.
მარცხენა შეუერთდება - მაგალითები გამოყენების
კავშირი მარცხენა ვხედავთ, ყველა სიიდან, თუ არსებობს ხალხი ქონება. ამისათვის მარცხენა შეუერთდეს sql შეკითხვის მაგალითად:
SELECT ხალხი. *, Realty_peoples.id_realty, Realty_peoples.type ხალხებმა LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples; |
შემდეგი შედეგები:
Query1 | ||||||
id | L_name | F_name | Middle_name | დაბადების დღე | id_realty | ტიპი |
1 | Ivanova | Daria | ბ | 07/16/2000 | ||
2 | Pugin | ვლადისლავ | ნიკოლოზის | 29.01.1986 | ||
3 | Evgenin | ალექსანდრე | Federovich | 04/30/1964 | 5 | ქონება |
4 | Annina | მიყვარს | P. | 31.12.1989 | ||
5 | Gerasimovsky | იმედი მაქვს, | P. | 14.03.1992 | 4 | საერთო ნაწილები |
6 | Gerasimovsky | oleg | Albertovich | 01/29/1985 | 4 | საერთო ნაწილები |
7 | Sukhanovskaya | ჟიურის | ა | 09/25/1976 | 1 | ქონება |
7 | Sukhanovskaya | ჟიურის | ა | 09/25/1976 | 3 | სულ თანამფლობელობა |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 | 3 | სულ თანამფლობელობა |
როგორც ვხედავთ, Ivanova დარია Pugin ვლადისლავ და Anninoy Lyubovi არ არის რეგისტრირებული უძრავი ქონების უფლებები.
და რა მივიღეთ, გამოყენებით შიდა შეუერთდეს Inner გავწევრიანდე როგორც მოგეხსენებათ, იგი გამორიცხავს არასამთავრობო შესაბამისი რიგები, ასე სამი ჩვენი საბოლოო ნიმუში უბრალოდ უნდა დაეცა:
Query1 | ||||||
id | L_name | F_name | Middle_name | დაბადების დღე | id_realty | ტიპი |
3 | Evgenin | ალექსანდრე | Federovich | 04/30/1964 | 5 | ქონება |
5 | Gerasimovsky | იმედი მაქვს, | P. | 14.03.1992 | 4 | საერთო ნაწილები |
6 | Gerasimovsky | oleg | Albertovich | 01/29/1985 | 4 | საერთო ნაწილები |
7 | Sukhanovskaya | ჟიურის | ა | 09/25/1976 | 1 | ქონება |
7 | Sukhanovskaya | ჟიურის | ა | 09/25/1976 | 3 | სულ თანამფლობელობა |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 | 3 | სულ თანამფლობელობა |
როგორც ჩანს, რომ მეორე ვერსია ასევე აკმაყოფილებს პირობებს ჩვენი პრობლემა. თუმცა, თუ ჩვენ ვიწყებთ ანიჭებენ სხვა და სხვა მაგიდასთან, სამი ადამიანი შედეგი უკვე irretrievably წავიდა. აქედან გამომდინარე, პრაქტიკაში, როდესაც აერთიანებს სხვადასხვა მაგიდები უფრო ხშირად გამოიყენება მარცხენა და მარჯვენა კავშირი, ვიდრე შიდა შეუერთდება.
გავაგრძელებთ მარცხნივ შეუერთდეს sql მაგალითები. მიმაგრება მაგიდასთან მისამართები ჩვენი სახლები:
SELECT ხალხი. *, Realty_peoples.id_realty, Realty_peoples.type, Realty.address ხალხებმა LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples LEFT JOIN Realty ON Realty.id = Realty_peoples.id_realty |
ახლა ჩვენ არა მხოლოდ სახის კანონი, არამედ მისამართი უძრავი ქონება:
Query1 | |||||||
id | L_name | F_name | Middle_name | დაბადების დღე | id_realty | ტიპი | მისამართი |
1 | Ivanova | Daria | ბ | 07/16/2000 | |||
2 | Pugin | ვლადისლავ | ნიკოლოზის | 29.01.1986 | |||
3 | Evgenin | ალექსანდრე | Federovich | 04/30/1964 | 5 | ქონება | არხანგელსკის, pl. Terekhina, დ. 89, ქ. 13 |
4 | Annina | მიყვარს | P. | 31.12.1989 | |||
5 | Gerasimovsky | იმედი მაქვს, | P. | 14.03.1992 | 4 | საერთო ნაწილები | არხანგელსკში რეგიონში, Novodvinsk, ul. Proletarshaya, დ. 16 ქ. 137 |
6 | Gerasimovsky | oleg | Albertovich | 01/29/1985 | 4 | საერთო ნაწილები | არხანგელსკში რეგიონში, Novodvinsk, ul. Proletarshaya, დ. 16 ქ. 137 |
7 | Sukhanovskaya | ჟიურის | ა | 09/25/1976 | 3 | სულ თანამფლობელობა | არხანგელსკში რეგიონში, Severodvinsk, ქ. ლენინის, დ. 134, ქ. 85 |
7 | Sukhanovskaya | ჟიურის | ა | 09/25/1976 | 1 | ქონება | არხანგელსკში, ul. ვორონინი, დ. 7, kv.6 |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 | 3 | სულ თანამფლობელობა |
არხანგელსკის რეგიონი, სევეროდვივსკი, ul. ლენინა, დ. 134, გვ. 85 |
მარცხნივ შეუერთდება - ტიპიური გამოყენების შეცდომები: არასწორი წესრიგი მაგიდები
ძირითადი შეცდომები, რომლებიც დაშვებულია მაგიდის მარცხენა მხარესთან, არის ორი:
- არასწორად შერჩეული ცხრილების შეკვეთა, რის შედეგადაც მონაცემები დაიკარგა.
- შეცდომები როდესაც იყენებთ შეკითხვაზე შერწყმული მაგიდები.
განვიხილოთ პირველი შეცდომა. პრობლემის მოგვარებამდე აუცილებელია ნათლად გავიგოთ, რის შედეგადაც ჩვენ გვსურს. ზემოთ მოყვანილ მაგალითში გამოვიყვანეთ ყველა ადამიანი, მაგრამ აბსოლუტურად დაკარგა ინფორმაცია ობიექტის შესახებ 2-ის ფარგლებში, საიდანაც მფლობელი არ იყო ნაპოვნი.
თუ მაგიდები გადავედით შეკითხვების ადგილებზე და დავიწყეთ "... რეალითიდან გაწევრიანდნენ სახალხო ..." მაშინ არ დავკარგავთ ერთ ქონებას, რომელიც ვერ იტყვის ხალხის შესახებ.
თუმცა, არ უნდა იყოს შეშინებული მარცხენა კავშირი, წასვლა სრული გარე, რომელიც მოიცავს შედეგად, და ემთხვევა, და არ ემთხვევა ხაზი.
ყოველივე ამის შემდეგ, თანხის ნიმუშები ხშირად ძალიან დიდია, და დამატებითი მონაცემები ნამდვილად არ სჭირდება არაფერი. მთავარი ისაა, რომ გავიგოთ, რის შედეგადაც გსურთ მიიღოთ მონაწილეობა: ყველა ადამიანები, რომლებიც ხელმისაწვდომია უძრავი ქონების სიაში, ან უძრავი ქონების ჩამონათვალი მათი მფლობელებით (ასეთის არსებობის შემთხვევაში).
მარცხნივ შეუერთდება - ტიპიური გამოყენების შეცდომები: შეკითხვის სისწორე როდესაც პირობების შექმნისას სად
მეორე შეცდომა ასევე უკავშირდება მონაცემების დაკარგვას და ყოველთვის არ არის ნათელი.
მოდით დავუბრუნდეთ შეკითხვას, როდესაც ჩვენ ვიყენებთ მარცხენა კავშირი მიიღო მონაცემები ყველა ადამიანს და მათ არსებულ უძრავი ქონებაზე. გაითვალისწინეთ შემდეგი მარცხნივ:
სახალხო ფრონტიდან შემოსვლა Realty_peoples Peoples.id = Realty_peoples.id_appeoples; |
დავუშვათ, რომ გვინდა დახვეწოს შეკითხვა და არა გამომავალი მონაცემები, სადაც კანონის ტიპია "საკუთრება". თუ ჩვენ უბრალოდ დავამატებთ, მივყავართ მარცხენა შემოგვიერთდით sql- ს, მაგალითად შემდეგი პირობით:
...
სადაც ტიპი <> "საკუთრება" |
ჩვენ დავკარგავთ მონაცემებს იმ ადამიანებზე, რომლებსაც არ აქვთ უძრავი ქონება, რადგან Null- ის ცარიელი ღირებულება არ შეესაბამება ამ გზას:
მოთხოვნა 1 | ||||||
Id | L_name | F_name | შუა სახელი | დაბადების დღე | Id_realty | ტიპი |
5 | გერასიმოვსკაია | იმედი მაქვს | პავლოვნა | 03/14/1992 | 4 | საერთო საკუთრება |
მე -6 | გერასიმოვსკი | ოლეგ | ალბერტოვიჩი | 01/29/1985 | 4 | საერთო საკუთრება |
მე -7 | სუხანოვსკი | იური | ანდრივიჩი | 09/25/1976 | 3 | საერთო ერთობლივი საკუთრება |
მე -8 | სუკანოვსკაია | იულია | იურიევნა | 10/01/2001 | 3 | საერთო ერთობლივი საკუთრება |
ამ მიზეზით შეცდომების თავიდან აცილების მიზნით, საუკეთესოა შერჩევის პირობების დაზუსტება კავშირი. ჩვენ ვთვლით, რომ გაითვალისწინოთ შემდეგი მაგალითი:
აირჩიეთ ხალხები *, Realty_peoples.id_realty, Realty_peoples.type ხალხიდან LEFT JOIN Realty_peoples ON (Peoples.id = Realty_peoples.id_appeaches და ტიპის <> "ქონების") |
შედეგი ასეთია:
მოთხოვნა 1 | ||||||
Id | L_name | F_name | შუა სახელი | დაბადების დღე | Id_realty | ტიპი |
1 | ივანოვა | დარია | ბორისოვნა | 16.07.2000 | ||
2 | პეგინი | ვლადისლავ | ნიკოლაევიჩი | 01/29/1986 | ||
3 | ევგენიინი | ალექსანდრე | Fedorovich | 04/30/1964 | ||
4 | ანინა | სიყვარული | პავლოვნა | 12/31/1989 | ||
5 | გერასიმოვსკაია | იმედი მაქვს | პავლოვნა | 03/14/1992 | 4 | საერთო საკუთრება |
მე -6 | გერასიმოვსკი | ოლეგ | ალბერტოვიჩი | 01/29/1985 | 4 | საერთო საკუთრება |
მე -7 | სუხანოვსკი | იური | ანდრივიჩი | 09/25/1976 | 3 | საერთო ერთობლივი საკუთრება |
მე -8 | სუკანოვსკაია | იულია | იურიევნა | 10/01/2001 | 3 | საერთო ერთობლივი საკუთრება |
ამრიგად, უბრალო მაგალითის გაკეთებით, მარცხნივ შემოგვიერთდით, ჩვენ ყველა ადამიანთა სიას მივიღეთ, დამატებით ჩამოყალიბება, რომელთაგან ერთეულია უძრავი ქონება საერთო / საერთო საკუთრებაში.
როგორც დასკვნა მინდა კიდევ ერთხელ ხაზგასმით აღვნიშნო, რომ აუცილებელია მონაცემთა ბაზის ნებისმიერი ინფორმაციის შერჩევაში პასუხისმგებლობა. ბევრი ნიუანსი გაიხსნა ჩვენთან ერთად მარცხენა შემოგვიერთდით SQL მარტივი მაგალითის გამოყენებით, რომლის განმარტებაც ერთია - სანამ დაიწყება ელემენტარული შეკითხვაც კი, ჩვენ უნდა გვესმოდეს, რა ზუსტად უნდა გვინდა. გისურვებთ წარმატებას!
Similar articles
Trending Now