JavaRush /Kurslar /All lectures for TK purposes /Birnäçe tablisadan maglumat almak

Birnäçe tablisadan maglumat almak

All lectures for TK purposes
Dereje , Sapak
Elýeterli

Bagly tablisa

Indi soraglarymyzy birneme çylşyrymlaşdyralyň. Maglumatlar binýadymyza täze tablisa task goşalyň — bu tablisada işgärlerimize berlen wezipeler bar. Görüp geçeliň, bu tablisada nähili ýazgylar bar:


SELECT * FROM task 

Şeýle soragyň netijesi:

id emploee_id name deadline
1 1 Frontende ýaýdan ýerleri düzetmek 2022-06-01
2 2 Backendde ýaýdan ýerleri düzetmek 2022-06-15
3 5 Kofe satyn almak 2022-07-01
4 5 Kofe satyn almak 2022-08-01
5 5 Kofe satyn almak 2022-09-01
6 (NULL) Ofisi arassalamak (NULL)
7 4 Ömrüň hözirini görmek (NULL)
8 6 Ömrüň hözirini görmek (NULL)

Bu tablisada jemi 4 kolonka bar:

  • id — wezipäniň täsin belgisi (we tablisadaky setiriň);
  • employee_id — wezipä bellän işgärimiziň employee tablisasyndaky ID belgisi;
  • name — wezipesiniň ady we beýany;
  • deadline — wezipäni ýerine ýetirmeli wagt.

Käbir çylşyrymly meselelerde üns beriň. N6 wezipäniň employee_id ýok, başymyzda hiç hili arassalaýyş hyzmaty ýok. Wezipe bar, ýerine ýetiriji ýok. Şeýle zatlar bolýar.

6-9 wezipelerde bellenen wagtlimiti ýok. Munuň ýaly ýagdaýlar, wezipe yzygiderli we erksiz ýerine ýetirilmeli bolsa, ýüze çykyp biler. Mysal üçin, ofis her gün arassalanmaly, ömrüň hözirini görmek hem her gün gerek :)

Eger bir tablisada başga bir tablisanyň ID-dan peýdalansa, şol tablisa bagly diýilýär.

Birnäçe tablisadan sorag

Task tablisasynda "Ömrüň hözirini görmek" diýen iki sany wezipe bar. Bu wagt hözirini kim görüji?

Bunun üçin SQL-de iki tablisadan sorag edip bolýar. Aslynda SQL-de bir wagtyň özünde islendik sany tablisadan sorag edip bolýar. Soragyň umumy görnüşi:

SELECT kolonalar FROM tablis1, tablis2, tablisN

Diňle! Eger birnäçe tablisadan sorag ýazsaň, netijede "dekart çarpmasy" diýilýän zat alarsyň. Birinji tablisanyň her bir setirine ikinji tablisanyň her bir setiri goşular we ş.m.

Edil Java dilinde şeýle sorag şeýle bolup biler:


for (String row1 : table1) 
{ 
	for (String row2 : table2)  
   { 
  	System.out.println(row1 + row2); 
   }  
} 

Indi iki tablisadan birden öz soragymyzy ýazalyň we näme çykjakdygyny göreliň:


SELECT * FROM employee, task

Bu soragyň netijesi:

id name occupation salary age id emploee_id name deadline
1 Iwanow Iwan Programmist 100000 25 1 1 Frontende ýaýdan ýerleri düzetmek 2022-06-01
2 Petrow Petr Programmist 80000 23 1 1 Frontende ýaýdan ýerleri düzetmek 2022-06-01
3 Iwanow Sergeý Testirleýji 40000 30 1 1 Frontende ýaýdan ýerleri düzetmek 2022-06-01
4 Rabinowiç Moýşa Derektor 200000 35 1 1 Frontende ýaýdan ýerleri düzetmek 2022-06-01
5 Kiriýenko Anastasýa Ofis-menejer 40000 25 1 1 Frontende ýaýdan ýerleri düzetmek 2022-06-01
6 Waşka pişik 1000 3 1 1 Frontende ýaýdan ýerleri düzetmek 2022-06-01
1 Iwanow Iwan Programmist 100000 25 2 2 Backendde ýaýdan ýerleri düzetmek 2022-06-15
2 Petrow Petr Programmist 80000 23 2 2 Backendde ýaýdan ýerleri düzetmek 2022-06-15
3 Iwanow Sergeý Testirleýji 40000 30 2 2 Backendde ýaýdan ýerleri düzetmek 2022-06-15
4 Rabinowiç Moýşa Derektor 200000 35 2 2 Backendde ýaýdan ýerleri düzetmek 2022-06-15
5 Kiriýenko Anastasýa Ofis-menejer 40000 25 2 2 Backendde ýaýdan ýerleri düzetmek 2022-06-15

Jemi 48 setirimiz bar, emma men diňe 11 setir görkezdim. Ýogsam ýer ýetmezdi.

Üns ber, üç zada:

  • Birmeňzeş atlar bilen kolonlar: id. Employee tablisadan id we task tablisadan id.
  • Her tablisanyň setirleri gaýtalanýar. Çep sütündäki ID 6-dan soň ID täzeden 1 bolýar.
  • Manysy ýok setirlerimiz bar, mysal üçin, employee tablisadaky id 6-gä deň bolsa we şol setirde employee_id 1-gä deň bolsa.

Manysy ýok setirleri aýyrmak

Employee we task tablisalaryň ähli setirleriniň dekart çarpmasy bolan netijeli tablisamyzda setir örän köp.

Logika laýyklykda, employee_id 3-e diýen setir diňe employee tablisadan id 3-e diýen setir bilen birleşmelidir. Bu düşnüksizligi WHERE bilen düzedeliň.

Şeýle sorag ýazalyň:

SELECT * FROM employee, task WHERE emploee.id = task.emploee_id 

Bu soragyň netijesi:

id name occupation salary age id emploee_id name deadline
1 Iwanow Iwan Programmist 100000 25 1 1 Frontende ýaýdan ýerleri düzetmek 2022-06-01
2 Petrow Petr Programmist 80000 23 2 2 Backendde ýaýdan ýerleri düzetmek 2022-06-15
4 Rabinowiç Moýşa Derektor 200000 35 7 4 Ömrüň hözirini görmek (NULL)
5 Kiriýenko Anastasýa Ofis-menejer 40000 25 3 5 Kofe satyn almak 2022-07-01
5 Kiriýenko Anastasýa Ofis-menejer 40000 25 4 5 Kofe satyn almak 2022-08-01
5 Kiriýenko Anastasýa Ofis-menejer 40000 25 5 5 Kofe satyn almak 2022-09-01
6 Waşka pişik 1000 3 8 6 Ömrüň hözirini görmek (NULL)

Gowy habar — manysy ýok setirlerimiz ýok boldy: ilkinji sütün setirindäki id hemişe employee_id-e deň.

Erbet habar — hiç kime berilmedik wezipeler, mysal üçin, ofisi arassalamak ýaly wezipeler ýok boldy. Olaryň employee_id NULL-e deňdi, şonuň üçin WHERE ýerine ýetirenden soň aýryldy.

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