JavaRush /Java Blog /Random-TK /Maglumatlar bazalaryny we SQL dilini seljerýäris. (5-nji ...

Maglumatlar bazalaryny we SQL dilini seljerýäris. (5-nji bölüm - birikmeler we birleşmeler) - "A-dan Z-a çenli Java taslamasy"

Toparda çap edildi
Java taslamasyny döretmek baradaky seriýadan bir makala (beýleki materiallara baglanyşyk ahyrynda). Maksady esasy tehnologiýalary seljermek, netijesi telegramma bot ýazmak. Hemmelere salam, programma üpjünçiliginiň geljekki uly ýaşlylary we Senioritas. Öňki bölümde aýdyşym ýaly ( öý işini barlamak ), şu gün täze material bolar. Aýratynam höwes edýänler üçin hemme zady bilýänler we bilmeýän, ýöne google-a girmek isleýänler başarnyklaryny synap görmekleri üçin gyzykly öý işi tabşyrdym. "Java-dan A-dan Z" taslamasy: maglumat bazalaryny we SQL dilini seljerýäris.  5-nji bölüm - birikmeler we birleşmeler - 1Bu gün baglanyşyklaryň we birleşmeleriň görnüşleri barada gürleşeris.

Maglumat bazasyndaky gatnaşyklaryň görnüşleri

"Java-dan A-dan Z" taslamasy: maglumat bazalaryny we SQL dilini seljerýäris.  5-nji bölüm - birikmeler we birleşmeler - 2Gatnaşyklaryň nämedigine düşünmek üçin daşary ýurt açarynyň nämedigini ýadyňyzdan çykarmaly dälsiňiz. Forgetatdan çykaranlar üçin serialyň başyna hoş geldiňiz .

Bir-köp

Countriesurtlar we şäherler bilen mysalymyzy ýada salalyň. Şäheriň bir ýurduň bolmalydygy düşnüklidir. Bir ýurdy şäher bilen nädip baglanyşdyrmaly? Her bir şähere özüne degişli ýurduň özboluşly kesgitleýjisini (ID) dakmaly: muny eýýäm etdik. Muňa baglanyşyk görnüşleriniň biri diýilýär - biri köp (iňlis dilindäki wersiýasyny bilmek hem gowy bolardy - birden köp). Gysgaça aýdanymyzda, birnäçe şäher bir ýurda degişli bolup biler. Ine, muny ýadyňyzdan çykarmaly dälsiňiz: ýeke-täk gatnaşyk. Häzirlikçe düşnükli, şeýlemi? Notok bolsa, "Java-dan A-dan Z" taslamasy: maglumat bazalaryny we SQL dilini seljerýäris.  5-nji bölüm - birikmeler we birleşmeler - 3internetden ilkinji surat: Müşderileriň we sargytlaryň bardygyny görkezýär. Bir müşderiniň birden köp sargyt alyp biljekdiginiň manysy bar. Toeke-täk köp :) Ora-da başga bir mysal: "Java-dan A-dan Z" taslamasy: maglumat bazalaryny we SQL dilini seljerýäris.  5-nji bölüm - birikmeler we birleşmeler - 4Üç ​​tablisa bar: neşir ediji, ýazyjy we kitap. Bankrot bolmak islemeýän we üstünlik gazanmak isleýän her bir neşirçiniň birden köp awtory bar, şeýlemi? Öz gezeginde, her bir ýazyjynyň birden köp kitaby bolup biler - bu barada-da şübhe bolup bilmez. Bu, ýene-de bir awtoryň köp kitap bilen, bir neşirçiniň köp ýazyjy bilen baglanyşygyny aňladýar . Berilip bilinjek başga-da köp mysal bar. Ilki bilen duýmagyň kynlygy diňe abstrakt pikirlenmegi öwrenmekde bolup biler: daşardan stollara seretmek we olaryň täsiri.

Birden birine (ýeke-ýekeden)

Muny ýeke-täk aragatnaşygyň aýratyn mysaly diýip bileris. Bir tablisadaky bir ýazgy başga bir tablisadaky diňe bir ýazgy bilen baglanyşykly ýagdaý. Durmuşdan nähili mysallar bolup biler? Köp aýallylygy aýyrmasak, är-aýalyň arasynda ýeke-täk gatnaşyklaryň bardygyny aýdyp bileris. Köp aýallylyga ýol berilýär diýsek-de, her aýalyň diňe bir adamsy bolup biler. Ene-atalar hakda-da aýdyp bolar. Her bir adamyň diňe bir biologiki atasy we diňe bir biologiki enesi bolup biler. Aç-açan gatnaşyk. Muny ýazyp otyrkam, bir pikir döräp başlady: näme üçin bir-birine gatnaşygy bar bolsa, dürli tablisalarda iki ýazga bölmek? Bu soraga özüm jogap berdim. Bu ýazgylar beýleki ýazgylar bilen beýleki usullar bilen hem baglanyşyp biler. Men näme hakda gürleşýärin? Toeke-täk baglanyşyklaryň ýene bir mysaly ýurt bilen prezidentiň arasynda. Prezident baradaky ähli maglumatlary “ýurt” tablisasyna ýazyp bolarmy? Hawa, edip bilersiňiz, SQL bir söz aýtmaz. Presidentöne prezidentiň hem adamdygyny pikir edýän bolsaňyz ... Şeýle hem, onuň aýaly (başga biri bilen gatnaşyk) we çagalary (başga-da köp gatnaşyk) bolup biler, soň bolsa şeýle bolar ýurdy prezidentiň aýaly we çagalary bilen baglanyşdyrmak üçin zerur ... Däli ýaly görünýär, şeýlemi? : D Bu baglanyşyk üçin başga-da köp mysal bolup biler. Mundan başga-da, şeýle ýagdaýda bir-birden köp gatnaşykdan tapawutlylykda iki tablisa hem daşary ýurt açary goşup bilersiňiz.

Köp-köp

Eýýäm adyna esaslanyp, näme hakda gürleşjekdigimizi çaklap bilersiňiz. Durmuşda köplenç we durmuşymyzy meýilleşdirýäris, ýokardaky baglanyşyklaryň zerur zatlary suratlandyrmak üçin ýeterlik bolmadyk ýagdaýlary bolýar. Neşirýatçylar, kitaplar we awtorlar hakda eýýäm gürleşdik. Bu ýerde gaty köp baglanyşyk bar ... Her neşirde birnäçe ýazyjy bolup biler - bir-birden köp baglanyşyk. Şol bir wagtyň özünde, her bir ýazyjynyň birnäçe neşirçisi bolup biler (näme üçin beýle däl, ýazyjy bir ýerde çap edildi, pul ugrunda göreşdi, mysal üçin başga bir neşirýata gitdi). Bu ýene-de köp adamly gatnaşyk. Ora-da bu: her bir ýazyjynyň birnäçe kitaby bolup biler, ýöne her bir kitabyň birnäçe awtory bolup biler. Againene-de ýazyjy bilen kitap, kitap we ýazyjynyň arasynda köp-köp gatnaşyk. Bu mysaldan has resmi netijä gelip bileris:

A we B iki tablisamyz bar bolsa.

A B bilen köpler bilen baglanyşyp biler.

Böne B köpler bilen baglanyşykly bolşy ýaly A bilen hem baglanyşyp biler.

Bu olaryň köp-köp gatnaşyklarynyň bardygyny aňladýar.

Öňki baglanyşyk görnüşlerini SQL-de nädip sazlamalydygy düşnükli: biz diňe şol şahsyýetnamany köp bolan ýazgylara geçirýäris, şeýlemi? Bir ýurt köp şäherlere daşary ýurt açary hökmünde şahsyýetnamasyny berýär. Köp-köp gatnaşyklar bilen näme etmeli ? Bu usul amatly däl. Iki tablisany birleşdirjek başga bir tablisa goşmaly. Mysal üçin, MySQL-a geçeliň, köp sanly täze maglumat bazasyny döredeliň, diňe atlary we şahsyýetnamalaryny öz içine alýan iki tablisa, awtor we kitap döredeliň: DATABASE manytomany dörediň; Köp adamy ulanyň; Jetwel awtoryny dörediň (ID INT AUTO_INCREMENT, ady VARCHAR (100), PRIMARY KEY (id)); Jetwel kitabyny dörediň (id INT AUTO_INCREMENT, ady VARCHAR (100), PRIMARY KEY (id)); "Java-dan A-dan Z" taslamasy: maglumat bazalaryny we SQL dilini seljerýäris.  5-nji bölüm - birikmeler we birleşmeler - 5Indi awtorymyzdan we kitap tablisalarymyzdan iki sany daşary ýurt açary boljak üçünji tablisany döredeliň we bu baglanyşyk özboluşly bolar. Theagny, şol bir düwmeler bilen iki gezek ýazgy goşmak mümkin bolmaz: TABLE awtorlary_x_books (book_id INT NOT NULL, author_id INT NOT NULL, FOREIGN KEY (book_id) REFERENCES kitaby (id), DAŞARY AEYR (awtor_id) REFERENCES awtory. (id), UNIQUE (kitap_id, awtor_id)); "Java-dan A-dan Z" taslamasy: maglumat bazalaryny we SQL dilini seljerýäris.  5-nji bölüm - birikmeler we birleşmeler - 6Bu ýerde aýratyn düşündiriş berilmeli birnäçe täze aýratynlygy ulandyk:
  • NULL däl, meýdanyň elmydama doldurylmalydygyny aňladýar, eger bolmasa, SQL bize şeýle diýer;
  • UNIQUE, bir meýdan ýa-da bir topar meýdan tablisada özboluşly bolmaly diýýär. Köplenç üýtgeşik kesgitleýjiden başga-da, her ýazgy üçin ýene bir meýdan özboluşly bolmaly. UNIQUE bu mesele üçin jogapkärdir.
Amalymdan: köne ulgamdan täze sistema geçenimizde, döredijiler hökmünde köne ulgamyň şahsyýetnamalaryny onuň bilen işlemek we özümiziňkini döretmek üçin saklamalydyrys. Näme üçin özüňizi döredip, könelerini ulanmaýarsyňyz? Enougheterlik derejede üýtgeşik bolup bilmez ýa-da şahsyýetnamalary döretmäge bolan bu çemeleşme indi ähmiýetli we çäkli bolup bilmez. Bu maksat bilen köne ID adyny tablisada özboluşly etdik. Muny barlamak üçin maglumat goşmaly. Kitap we awtor goşuň: NSERT INTO kitaby (ady) GYMMATLAR ("kitap1"); Awtoryň adyna (ady) GYMMATLAR ("awtor1"); Öňki makalalardan olaryň 1 we 1 belgileriniň boljakdygyny eýýäm bilýäris, şonuň üçin derrew üçünji tablisa ýazgy goşup bileris: INSERT INTO authors_x_books VALUES (1,1); Soňky buýrugy ýene bir gezek gaýtalamak isleýänçäk hemme zat gowy bolar: ýagny şol bir şahsyýetnamalary täzeden ýazyň: "Java-dan A-dan Z" taslamasy: maglumat bazalaryny we SQL dilini seljerýäris.  5-nji bölüm - birikmeler we birleşmeler - 7Netije tebigy bolar - ýalňyşlyk. Bir dublikat bolar. Giriş ýazylmaz. Ine, köp-köp baglanyşyk dörediler ... Bularyň hemmesi gaty gyzykly we gyzykly, ýöne logiki sorag ýüze çykýar: bu maglumatlary nädip almaly? Dürli tablisalardan maglumatlary nädip birleşdirip, bir jogap almaly? Indiki bölümde gürleşeris))

Baglanyşyklar (goşulýar)

Öňki bölümde, goşulmagyň nämedigini we nirede ulanmalydygyny derrew düşünmäge taýýarladym. Düşünişen badyna hemme zadyň derrew ýönekeý boljakdygyna we goşulmak baradaky ähli makalalaryň çaganyň gözi ýaly düşnükli boljakdygyna çuňňur ynanýaryn: D Takmynan we umuman aýdylanda, birleşmeler birnäçe tablisadan netije alýar. JOIN (iňlis dilinden goşulyň). Bularyň hemmesi ...) Goşulmak üçin tablisalaryň goşuljak meýdanyny görkezmeli. Iblis boýalşy ýaly gorkunç däl, şeýlemi?) Soň bolsa, haýsy birleşmeleriň bardygyny we olary nähili ulanmalydygyny gürleşeris. Goşulmagyň köp görnüşi bar we hemmesini göz öňünde tutmarys. Diňe bize zerur bolanlar. Şol sebäpli haç we tebigy ýaly ekzotik birleşmeler bilen gyzyklanamzok. Men düýbünden ýatdan çykardym, ýene bir nuansy ýadymyzdan çykarmaly däldiris: tablisalarda we meýdanlarda lakamlar - lakamlar bolup biler. Goşulmak üçin amatly ulanylýar. Mysal üçin, muny edip bilersiňiz: 1-nji tablisadan saýlaň; talap köplenç tablisa1 ulanjak bolsa, oňa lakam berip bilersiňiz: Tablisa 1-den T1 hökmünde saýlaň; ýa-da ýazmak has aňsat: Tablisa 1-den saýlaň; soň bolsa talapda t1-i bu tablisa lakamy hökmünde ulanmak mümkin bolar.

Içerki goşulma

Iň ýaýran we ýönekeý birleşme. Iki tablisa we oňa goşulyp boljak meýdan bar bolsa, iki tablisadaky gatnaşyklary bar ýazgylaryň saýlanjakdygyny aýdýar. Näme-de bolsa aýtmak kyn boldy. Bir mysala seredeliň: Geliň, şäherlerimiziň maglumatlar bazasyna bir ýazgy goşalyň. Şäherler üçin bir, ýurtlar üçin bir giriş: $ GYMMATLARA $ INSERT (5, "Özbegistan", 34036800); we şähere (ady, ilaty) GYMMATLAR ("Tbilisi", 1171100); Stolumyzda şäher ýok, stolumyzdaky bir ýurt bilen baglanyşykly bolmadyk şäher goşduk. Şeýlelik bilen, INNER JOIN iki tablisadaky baglanyşyklar üçin ähli ýazgylary bermek bilen meşgullanýar. Iki tablisanyň 1-nji tablisasyna we 2-nji tablisa goşulmak islänimizde umumy sintaksisiň görnüşi şeýle: TELID * t1 INNER JOIN table2 ON T1.id = t2.t1_id; soň iki tablisadaky gatnaşygy bolan ähli ýazgylar yzyna gaýtarylar. Biziň ýagdaýymyz üçin, şäherler bilen birlikde ýurtlar üçin maglumat almak islänimizde, şeýle bolar: $ SELECT * şäherden INNER JOIN country co ON ci.country_id = co.id; "Java-dan A-dan Z" taslamasy: maglumat bazalaryny we SQL dilini seljerýäris.  5-nji bölüm - birikmeler we birleşmeler - 8Bu ýerde atlar birmeňzeş bolsa-da, şäherleriň meýdanlarynyň ilki, soňra ýurtlaryň meýdanlarynyň gelýändigini aýdyň görüp bilersiňiz. Emma ýokarda goşan iki ýazgymyz ýok. Sebäbi INNER JOIN-iň işleýşi.

Çep goşulmak

Goňşy tablisada bu barada ýazgynyň ýoklugy sebäpli esasy stoluň meýdanlarynyň ýitmegi bilen kanagatlanmaýan ýagdaýlarymyz bolýar we köplenç. Çep birleşme şu. Öňki haýyşymyzda INNER-iň ýerine Çep tarapy kesgitlän bolsak, jogapda başga bir şäher goşarys - Tbilisi: $ SELECT * Şäherden Çep tarapdan ýurt ýurtdan ci.country_id = co.id; "Java-dan A-dan Z" taslamasy: maglumat bazalaryny we SQL dilini seljerýäris.  5-nji bölüm - birikmeler we birleşmeler - 9Tbilisi hakda täze ýazgy bar we bu ýurda degişli ähli zat ýok . Bu köplenç nähili ulanylýar.

HUKUK BIRLEŞIK

Bu ýerde Çep JOIN-dan tapawut bolar, sebäbi ähli meýdanlar çepde däl-de, baglanyşykda sagda saýlanar. Citiesagny, şäherler däl, ähli ýurtlar alynar: $ SELECT * Şäherden HUKUK JOIN ýurt co ON ci.country_id = co.id; "Java-dan A-dan Z" taslamasy: maglumat bazalaryny we SQL dilini seljerýäris.  5-nji bölüm - birikmeler we birleşmeler - 10Indi bu ýagdaýda Tbilisiniň bolmajakdygy, emma Özbegistanyň boljakdygy aýdyňdyr. Şeýle bir zat…))

Goşulmagy üpjün etmek

Indi size goşulmagyň düýp manysyna düşünýändiklerine ynandyrmak üçin ýetginjekleriň söhbetdeşlikden öň gysýan adaty suratyny görkezmek isleýärin: "Java-dan A-dan Z" taslamasy: maglumat bazalaryny we SQL dilini seljerýäris.  5-nji bölüm - birikmeler we birleşmeler - 11Bu ýerde hemme zat toplum görnüşinde görkezilýär, her tegelek stol. Üstüne boýalan ýerler bolsa, SELECT-de görkeziljek böleklerdir. Geliň seredeliň:
  • INNER JOIN diňe toplumlaryň kesişmesi, ýagny iki tablisa baglanyşygy bolan ýazgylar - A we B;
  • Çep JOIN, A tablisasyndaky ähli ýazgylar, şol sanda A tablisa bilen A bilen kesişýän (baglanyşyk) bolan ähli ýazgylar;
  • HUKUK BIRLEŞIGI Çep JOIN-iň tersine - B tablisadaky ähli ýazgylar we gatnaşygy bolan A ýazgylary.
Bularyň hemmesinden soň bu surat düşnükli bolmaly))

Öý işi

Bu gezek meseleler gaty gyzykly bolar we olary üstünlikli çözenleriň hemmesi SQL tarapynda işlemäge taýýardyklaryna ynanyp bilerler! Wezipeler çeýnelenmeýär we orta okuwçylar üçin ýazylýar, şonuň üçin bu size aňsat we içgysgynç bolmaz :) Bu meseleleri özüňiz ýerine ýetirmek üçin bir hepde wagt bererin, soň jikme-jik derňew bilen aýratyn makala çap ederin size beren meseleleriň çözgüdi.

Asyl wezipe:

  1. Aşakdaky meýdanlar bilen 'Talyp' tablisasyny döretmek üçin SQL skriptini ýazyň: id (esasy açar), ady, familiýasy, e_mail (üýtgeşik).
  2. Aşakdaky meýdanlar bilen 'Kitap' tablisasyny döretmek üçin SQL skriptini ýazyň: id, title (id + title = esasy açar). 'Talyp' we 'Kitap' bilen 'Talyp' bir-birden 'Kitap' gatnaşyklary bilen baglanyşdyryň.
  3. Aşakdaky meýdanlar bilen 'Mugallym' tablisasyny döretmek üçin SQL skriptini ýazyň: id (esasy açar), ady, familiýasy, e_mail (üýtgeşik), mowzuk.
  4. 'Talyp' we 'Mugallym' bilen 'Talyp' köp mugallym gatnaşyklaryny baglanyşdyryň.
  5. Familiýasynda 'oro' bolan 'Talyp' saýlaň, mysal üçin 'Sid oro v', 'V oro novsky'.
  6. 'Talyp' tablisasyndan ähli familiýalary ('familiýa') we gaýtalanýan sanyny saýlaň. Maglumat bazasynda atlaryň bardygyny göz öňünde tutuň. Aşakdaky tertipde mukdar boýunça tertipläň. Bu şeýle bolmaly:
    familiýa mukdary
    Petrow 15
    Iwanow 12
    Sidorow 3
  7. 'Talyp' -dan iň köp gaýtalanýan 3 aty saýlaň. Aşakdaky tertipde mukdar boýunça tertipläň. Bu şeýle bolmaly:
    ady mukdary
    Aleksandr 27
    Sergeý 10
    Peter 7
  8. Iň köp 'Kitap' we baglanyşykly 'Mugallym' bolan 'Talyplary' saýlaň. Aşakdaky tertip boýunça mukdary boýunça tertipläň. Bu şeýle bolmaly:
    Mugallymyň familiýasy Talybyň familiýasy Kitabyň mukdary
    Petrow Sidorow 7
    Iwanow Smith 5
    Petrow Kankava 2>
  9. 'Hli' Talyplaryndan 'iň köp' Kitap 'alan' Mugallymy 'saýlaň. Aşakdaky tertipde mukdar boýunça tertipläň. Bu şeýle bolmaly:
    Mugallymyň familiýasy Kitabyň mukdary
    Petrow 9
    Iwanow 5
  10. Studenthli “Talyp” üçin “Kitap” sany 7 bilen 11 aralygyndaky “Mugallym” saýlaň. Aşakdaky tertipde mukdar boýunça tertipläň. Bu şeýle bolmaly:
    Mugallymyň familiýasy Kitabyň mukdary
    Petrow on bir
    Sidorow 9
    Iwanow 7
  11. 'Hli' Mugallym 'we' Talyp 'meýdan' görnüşi (talyp ýa-da mugallym) bilen 'familiýa' we 'adyny' çap ediň. 'Last_name' boýunça elipbiý boýunça tertipläň. Bu şeýle bolmaly:
    familiýa görnüşi
    Iwanow okuwçy
    Kankava mugallym
    Smith okuwçy
    Sidorow mugallym
    Petrow mugallym
  12. Bar bolan 'Talyp' tablisasyna 'baha' sütünini goşuň, bu okuwçynyň häzirki kursuny saklar (san bahasy 1-den 6-a çenli).
  13. Bu element talap edilmeýär, ýöne goşmaça bolar. 'Hli' Kitaplardan 'geçjek we dykgat bilen bölünen ähli' atlary 'çykarjak bir funksiýa ýazyň.

Netije

Maglumat bazasy baradaky seriýalar birneme çekildi. Razy. Şeýle-de bolsa, biz uzak ýol geçdik we netijede bu meseläni bilmek bilen ýüze çykýarys! Okanyňyz üçin hemmäňize sag bolsun aýdýaryn, taslamany dowam etdirmek we oňa eýermek isleýänleriň hemmesiniň GitHub- da hasap açmalydygyny we hasabyma ýazylmalydygyny ýatladýaryn :) Geljekde - Maven we Docker hakda gürleşeliň. Hemmäňize okanyňyz üçin sag boluň. Againene bir gezek gaýtalaýaryn: ýörän adam ýoly özleşdirer;)

Tapgyryň ähli materiallarynyň sanawy bu makalanyň başynda.

Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION