Kompyuterlar, Dasturlash
Misol, batafsil tavsifi, xato foydalanishni - Chap (SQL) ishtirok etish
Har qanday haqiqiy munosabat bazasida barcha ma'lumotlar alohida jadvallarda taqsimlanadi. Jadvallarning aksariyati bir-birlari bilan kontaktlarni o'rnatgan. Biroq, Sql so'rovlaridan foydalanib, diagramma ichida mavjud bo'lmagan ma'lumotlar o'rtasida aloqani o'rnatish mumkin. Bu esa, har qanday sonli jadvallar orasidagi munosabatlarni o'rnatishga va hatto bir-biridan farq qiladigan ma'lumotlarga ulanishga imkon beruvchi qo'shilishni qo'shish jarayoni orqali amalga oshiriladi.
Ushbu maqolada biz chap tashqi aloqa haqida gapiramiz. Biz ulanishning bunday turini tasvirlashni boshlashdan avval ma'lumotlar bazasiga ba'zi jadvallarni qo'shamiz.
Kerakli jadvallarni tayyorlash
Misol uchun, bizning ma'lumotlar bazamizda odamlar va ularning ko'chmas mulklari haqida ma'lumot mavjud. Asosiy ma'lumotlar uchta jadvalga asoslangan: Xalqlar (odamlar), Realty (ko'chmas mulk), Realty_peoples (munosabatlar jadvali, kimlarga ko'chmas mulk qaysi shaxsga tegishli). Masalan, jadvalda odamlar uchun quyidagi ma'lumotlar saqlanadi:
Xalqlar | ||||
Id | L_name | F_name | Middle_name | Tug'ilgan kun |
1 | Ivanova | Dariya | Borisovna | 16.07.2000 |
2 | Pugin | Vladislav | Nikolayevich | 01/29/1986 |
3 | Evgeniy | Aleksandr | Fedorovich | 04/30/1964 |
4 | Annina | Sevgi | Pavlovna | 31.12.1989 |
5 | Gerasimovskaya | Umid qilamanki | Pavlovna | 03/14/1992 |
6-o'rin | Gerasimovskiy | Oleg | Albertovich | 01/29/1985 |
7-chi | Suxanovskiy | Yuriy | Andreevich | 09/25/1976 |
8-chi | Suxanovskaya | Julia | Yuryevna | 10/01/2001 |
Mulk:
Realty | |
Id | Manzil |
1 | Arxangelsk, st. Voronina, 7, 6-may |
2 | Arxangelsk, st. Severodvinskaya, 84, Apt. 9, xona. 5 |
3 | Arxangelsk viloyati, Severodvinsk, ul. Lenina, 134-bet, boshq. 85 |
4 | Arxangelsk viloyati, Novodvinsk, ul. Proletarskaya, 16, Apt. 137 |
5 | Arxangelsk, pl. Terekhin, 89-bet, Apt. 13-chi |
Aloqalar uchun odamlar ko'chmas mulkdir:
Realty_peoples | ||
Id_peoples | Id_realty | Turi |
7-chi | 3 | Umumiy birgalikdagi mulk |
8-chi | 3 | Umumiy birgalikdagi mulk |
3 | 5 | Mulkchilik |
7-chi | 1 | Mulkchilik |
5 | 4 | Birgalikda egalik |
6-o'rin | 4 | Birgalikda egalik |
Chap qo'shilish (Sql) - tavsif
Chap ulanish quyidagi sintaksisga ega:
Table_A LEFT JOIN jadval_B [{O'N predict} | { Ustunlar ro'yxatidan foydalanish}] |
Va shunga o'xshash:
Va bu ibora "jadval A" dan barcha satrlarni istisnosiz tanlang va faqat B tilida keltirilgan predikate mos satrlarni chiqaring. B jadvalida A jadvallari uchun juftlik bo'lmasa, natijada olingan Null ustunlarni qiymatlar bilan to'ldiring ".
Ko'pincha, chap ulanish o'rnatilganda, O'N belgilanadi, USING faqatgina ulanish rejalangan ustun nomlari bir xil bo'lsa ishlatiladi.
Chap qo'shilish - ishlatish misollari
Chap aloqaning yordami bilan, biz odamlar ro'yxatida barcha odamlar ko'chmas mulk mavjudmi yoki yo'qligini bilib olamiz. Buni amalga oshirish uchun quyidagi qo'shimchani chap qo'shma sql-da bajaring:
Xalqlarni tanlang. *, Realty_peoples.id_realty, Realty_peoples.type HALQLARNING BIRLASh TO'G'RISIDA Realty_peoples ON PEoples.id = Realty_peoples.id_peoples; |
Va biz quyidagi natijani qo'lga kiritamiz:
Request1 | ||||||
Id | L_name | F_name | Middle_name | Tug'ilgan kun | Id_realty | Turi |
1 | Ivanova | Dariya | Borisovna | 16.07.2000 | ||
2 | Pugin | Vladislav | Nikolayevich | 01/29/1986 | ||
3 | Evgeniy | Aleksandr | Fedorovich | 04/30/1964 | 5 | Mulkchilik |
4 | Annina | Sevgi | Pavlovna | 31.12.1989 | ||
5 | Gerasimovskaya | Umid qilamanki | Pavlovna | 03/14/1992 | 4 | Birgalikda egalik |
6-o'rin | Gerasimovskiy | Oleg | Albertovich | 01/29/1985 | 4 | Birgalikda egalik |
7-chi | Suxanovskiy | Yuriy | Andreevich | 09/25/1976 | 1 | Mulkchilik |
7-chi | Suxanovskiy | Yuriy | Andreevich | 09/25/1976 | 3 | Umumiy birgalikdagi mulk |
8-chi | Suxanovskaya | Julia | Yuryevna | 10/01/2001 | 3 | Umumiy birgalikdagi mulk |
Ko'rib turganingizdek, Ivanova Darya, Pugin Vladislav va Annina Lyubov ko'chmas mulkka tegishli huquqlarga ega emaslar.
Va ichki qo'shilishni ichki a'zolikdan qanday foydalanamiz? Ma'lumki, bu mos kelmaydigan satrlarni chetlab o'tadi, shuning uchun so'nggi namunamizdagi uch kishi oddiygina tushib ketadi:
Request1 | ||||||
Id | L_name | F_name | Middle_name | Tug'ilgan kun | Id_realty | Turi |
3 | Evgeniy | Aleksandr | Fedorovich | 04/30/1964 | 5 | Mulkchilik |
5 | Gerasimovskaya | Umid qilamanki | Pavlovna | 03/14/1992 | 4 | Birgalikda egalik |
6-o'rin | Gerasimovskiy | Oleg | Albertovich | 01/29/1985 | 4 | Birgalikda egalik |
7-chi | Suxanovskiy | Yuriy | Andreevich | 09/25/1976 | 1 | Mulkchilik |
7-chi | Suxanovskiy | Yuriy | Andreevich | 09/25/1976 | 3 | Umumiy birgalikdagi mulk |
8-chi | Suxanovskaya | Julia | Yuryevna | 10/01/2001 | 3 | Umumiy birgalikdagi mulk |
Ikkinchi variant ham bizning vazifamizning shartlariga javob beradi. Ammo, agar biz ko'proq va ko'p sonli jadvallarni qo'shishni davom ettirsak, natijadan uchtadan ortiq kishi haligacha yo'qolib ketadi. Shuning uchun, amalda, bir nechta jadvalni birlashtirganda, Chap va O'ng yo'nalishlarini ichki qo'shilishga qaraganda ko'proq ishlatiladi.
Biz chap qo'shilish sql bilan misollarni ko'rib chiqishni davom ettiramiz. Bizning ko'chmas mulk manzillari bilan jadvalga qo'shiling:
Xalqlarni tanlash. *, Realty_peoples.id_realty, Realty_peoples.type, Realty.address Xalqlardan Real People_ID_LOGIN_POCIAL_POCIAL_POCIAL_POCIAL_POCIAL_POCIAL_PACIAL_POCIAL_POCIAL_POCIAL_POCIAL_POCIAL_POCIAL_POCIAL_POCIAL_POCIAL_POCIAL_POCIAL_POCIAL_POCIAL_POCIAL_POCIAL_POCIAL_POCIAL_POCIAL_POCIAL_POCIAL_POCIAL_POCIAL_POCIAL_POCIAL_POCIAL Realty.id = Realty_peoples.id_realty haqida REAL JOIN Realty |
Endi biz nafaqat huquqning shaklini, balki ko'chmas mulk manzillarini ham olamiz:
Request1 | |||||||
Id | L_name | F_name | Middle_name | Tug'ilgan kun | Id_realty | Turi | Manzil |
1 | Ivanova | Dariya | Borisovna | 16.07.2000 | |||
2 | Pugin | Vladislav | Nikolayevich | 01/29/1986 | |||
3 | Evgeniy | Aleksandr | Fedorovich | 04/30/1964 | 5 | Mulkchilik | Arxangelsk, pl. Terekhin, 89-bet, Apt. 13-chi |
4 | Annina | Sevgi | Pavlovna | 31.12.1989 | |||
5 | Gerasimovskaya | Umid qilamanki | Pavlovna | 03/14/1992 | 4 | Birgalikda egalik | Arxangelsk viloyati, Novodvinsk, ul. Proletarskaya, 16, Apt. 137 |
6-o'rin | Gerasimovskiy | Oleg | Albertovich | 01/29/1985 | 4 | Birgalikda egalik | Arxangelsk viloyati, Novodvinsk, ul. Proletarskaya, 16, Apt. 137 |
7-chi | Suxanovskiy | Yuriy | Andreevich | 09/25/1976 | 3 | Umumiy birgalikdagi mulk | Arxangelsk viloyati, Severodvinsk, ul. Lenina, 134-bet, boshq. 85 |
7-chi | Suxanovskiy | Yuriy | Andreevich | 09/25/1976 | 1 | Mulkchilik | Arxangelsk, st. Voronina, 7, 6-may |
8-chi | Suxanovskaya | Julia | Yuryevna | 10/01/2001 | 3 | Umumiy birgalikdagi mulk |
Arxangelsk viloyati, Severodvinsk, st. Lenin, d. 134, q. 85 |
Chap qo'shilish - xato, odatda foydalanish: bekor Yordan jadvali
chap tashqi qilingan asosiy xatolar jadvallar, ikki qo'shilish:
- To'g'ri ma'lumot esa adashganni uchun jadvallar tartibini tanlab oldi.
- xatolar bilan so'rog'ini foydalanish paytida qaerda jadvallarni qo'shilishingiz.
birinchi xato o'ylab ko'ring. har qanday muammo qarori oldin aniq, biz oxirida qabul qilish istayman nima ekanligini tushunish kerak. Yuqorida bu misolda biz odamlar, har bir birini oldi, lekin butunlay egasi topilmadi soni 2, ostida ob'ekt haqida ma'lumot yo'qoladi.
Biz ba'zi joylarda bir so'rovlar jadvallarni ko'chib, va bilan boshlash edi "... Realty ... xalqlar qo'shilish Chapdan» har qanday bir mol bo'lsa, biz siz odamlar haqida aytib bo'lmaydi, yo'qotgan emas.
Lekin, chap ulanish qo'rqib bo'lishi yakunlari va tenglashtirish, va taalukli chiziqlar kiritilgan bo'lib, to'liq tashqi o'tish emas.
Axir, namuna hajmi ko'pincha juda katta va qo'shimcha ma'lumotlar aslida befoyda. Asosiy narsa - sen bir natija olish uchun istagan narsani tushunishga: barcha insonlar, ularning mavjud mol-mulkini ro'yxat yoki ularning egalari bilan butun mulk ro'yxati (agar mavjud bo'lsa) bilan.
Chap qo'shilish - xato, odatda foydalanish: talabiga to'g'ri qaerda sharoit o'rnatayotgan
Ikkinchi xato ham ma'lumotlar yo'qotilishi bilan bog'liq bo'lgan, va har doim darhol zohiriy emas bo'ladi.
ulanishlar barcha insonlar va ularning mavjud mol-mulkini uchun ma'lumotlarni qabul orqali biz chap ning so'rovi qaytaylik. chap SQL misol qo'shilish bilan quyidagi eslab:
Xalq LEFT JOIN FROM Realty_peoples ON Peoples.id = Realty_peoples.id_peoples; |
Biz so'rov oydinlik istayman va chiqish ma'lumotlarni, qilsa, deylik qaerda qonun turi - "Mulk". Biz shunchaki qo'shishingiz bo'lsa, SQL, quyidagi holatda misol qo'shilish tark foydalanish:
...
Qayerdan turi <> "Mulk" |
Biz quyidagi null qiymati Null nisbatan emas, chunki, hech xususiyatiga ega odamlar ma'lumotlarni yo'qotadi:
Query1 | ||||||
id | L_name | F_name | Middle_name | tug'ilgan kun | id_realty | shrift |
5 | Gerasimovsky | umid | P. | 14.03.1992 | 4 | Common qismlari |
6 | Gerasimovsky | Oleg | Albertovich | 01/29/1985 | 4 | Common qismlari |
7 | Sukhanovskaya | hakamlar hay'ati | A. | 09/25/1976 | 3 | Jami qo'shma mulk |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 | 3 | Jami qo'shma mulk |
Shuning uchun, xatolar oldini olish uchun, u munosabati ustiga darhol tanlash holatini belgilash uchun eng yaxshi hisoblanadi. Biz SQL misol qo'shilish chap quyidagi o'ylab taklif.
SELECT Xalq. *, Realty_peoples.id_realty, Realty_peoples.type xalqlarning LEFT Realty_peoples JOIN (Peoples.id = Realty_peoples.id_peoples va turi <> "Mulk") |
quyidagicha natija bo'ladi:
Query1 | ||||||
id | L_name | F_name | Middle_name | tug'ilgan kun | id_realty | shrift |
1 | Ivanova | Daria | B. | 07/16/2000 | ||
2 | Pugin | Vladislav | Nikolaevich | 29.01.1986 | ||
3 | Evgenin | Aleksandr | Federovich | 04/30/1964 | ||
4 | Annina | sevgi | P. | 31.12.1989 | ||
5 | Gerasimovsky | umid | P. | 14.03.1992 | 4 | Common qismlari |
6 | Gerasimovsky | Oleg | Albertovich | 01/29/1985 | 4 | Common qismlari |
7 | Sukhanovskaya | hakamlar hay'ati | A. | 09/25/1976 | 3 | Jami qo'shma mulk |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 | 3 | Jami qo'shma mulk |
SQL misol qo'shilish chap oddiy quyidagi Shunday qilib, biz yana harakat, barcha odamlar ro'yxatini qabul, bir xolislik / qo'shma mulk bu xususiyatlari biri.
Xulosa qilib, men yana bir bor bazasi har qanday axborot, bir misol ma'suliyatli olinishi kerak, deb ta'kidlashni istardim. chap bizga oldida ochilgan ko'p isboti SQL oddiy misol qo'shilish, tushuntirish bittasi - siz ham asosiy so'rovlar yozish uchun oldin, siz diqqat bilan biz oxirida qabul qilish istayman nima tushunish kerak. Omad tilaymiz!
Similar articles
Trending Now