meja gumantung

Saiki ayo dadi rumit pitakon kita. Ayo nambahake tabel tugas anyar menyang database kita kanthi tugas kanggo karyawan. Lan ayo ndeleng apa isine:

SELECT * FROM task

Asil saka panjaluk kasebut:

id id_karyawan jeneng deadline
1 1 Ndandani bug ing frontend 2022-06-01
2 2 Ndandani bug ing backend 2022-06-15
3 5 Tuku kopi 2022-07-01
4 5 Tuku kopi 2022-08-01
5 5 Bakal tuku kopi 2022-09-01
6 (NULL) Ngresiki kantor (NULL)
7 4 Seneng urip (NULL)
8 6 Seneng urip (NULL)

Tabel iki mung nduweni 4 kolom:

  • id - nomer tugas unik (lan baris ing tabel);
  • employee_id - ID pegawe saka meja pegawe kanggo kang tugas diutus;
  • jeneng - jeneng lan gambaran saka tugas;
  • deadline - wektu kang tugas kudu rampung.

Pay manungsa waé menyang sawetara nuansa. Tugas N6 ora duwe karyawan_id, kita ora duwe resik. Tugas wis ana, nanging pemain ora ana. Mengkono.

Uga, tugas 6-9 ora duwe wates wektu sing ditemtokake. Iki kedadeyan nalika tugas kudu ditindakake kanthi rutin lan terus-terusan. Contone, kantor kudu diresiki saben dina, nanging sampeyan uga kudu seneng urip saben dina :)

Yen siji tabel nggunakake ID saka tabel liyane, banjur tabel kasebut diarani gumantung .

Pitakonan marang pirang-pirang tabel

Ing kene kita bisa ndeleng ing tabel tugas sing ana rong tugas "Seneng urip". Kepiye carane ngerti sapa sing begja iki?

Kanggo nindakake iki, ing SQL, sampeyan bisa nglakokake pitakon ing rong tabel bebarengan. Umumé, ing SQL, sampeyan bisa takon nomer tabel ing wektu sing padha. Format umum kanggo panyuwunan kasebut yaiku:

SELECT columns
FROM Table 1, table 2, tableN

Penting! Yen sampeyan nulis pitakon menyang sawetara tabel ing wektu sing padha, mula sampeyan bakal entuk produk sing diarani Cartesian saka baris tabel. Saben larik saka meja pisanan bakal ditempelake ing saben larik saka meja kapindho, lan sateruse.

Sing, yen sampeyan duwe 5 larik ing tabel pisanan lan 10 larik ing kaloro, sampeyan bakal duwe 50 larik ing total. Ing Jawa, pitakon iki katon kaya mangkene:

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

Ayo nulis pitakon menyang rong tabel bebarengan lan deleng apa sing kedadeyan:

SELECT * FROM employee, task

Lan asil saka pitakonan iki:

id jeneng pendhudhukan gaji umur id pegawe _id jeneng deadline
1 Iwan Iwan Programmer 100000 25 1 1 Ndandani bug ing frontend 2022-06-01
2 Petrov Petruk Programmer 80000 23 1 1 Ndandani bug ing frontend 2022-06-01
3 Ivanov Sergey Tester 40000 telung puluh 1 1 Ndandani bug ing frontend 2022-06-01
4 Rabinovich Moisha direktur 200000 35 1 1 Ndandani bug ing frontend 2022-06-01
5 Kirienko Anastasia Kantor manager 40000 25 1 1 Ndandani bug ing frontend 2022-06-01
6 Vaska kucing 1000 3 1 1 Ndandani bug ing frontend 2022-06-01
1 Iwan Iwan Programmer 100000 25 2 2 Ndandani bug ing backend 2022-06-15
2 Petrov Petruk Programmer 80000 23 2 2 Ndandani bug ing backend 2022-06-15
3 Ivanov Sergey Tester 40000 telung puluh 2 2 Ndandani bug ing backend 2022-06-15
4 Rabinovich Moisha direktur 200000 35 2 2 Ndandani bug ing backend 2022-06-15
5 Kirienko Anastasia Kantor manager 40000 25 2 2 Ndandani bug ing backend 2022-06-15

We kudu 48 garis asil ing total, nanging kene aku wis diwenehi mung 11. Yen ora, ana mung ora bakal cukup papan.

Elingi telung perkara:

  • Kolom kanthi jeneng sing padha: id . Iki minangka id saka tabel karyawan lan id saka tabel tugas .
  • Larik saben tabel diulang. Ing kolom kiwa, ID 6 ngiring dening ID = 1 maneh.
  • Kita duwe baris omong kosong, contone, id (saka tabel karyawan) yaiku 6 lan ing baris sing padha employee_id yaiku 1.

Ngilangi garis sing ora ana arti

Ana akeh banget larik ing tabel asil kita, kang produk Cartesian kabeh larik loro tabel karyawan lan tugas .

Logis, yen larik employee_id iku 3, banjur mung kudu nempel ing baris saka Tabel pegawe ngendi id 3. Ayo dadi nyoba kanggo ndandani misunderstanding iki karo WHERE.

Ayo nulis pitakon kaya iki:

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

Lan asil saka pitakonan iki:

id jeneng pendhudhukan gaji umur id id_karyawan jeneng deadline
1 Iwan Iwan Programmer 100000 25 1 1 Ndandani bug ing frontend 2022-06-01
2 Petrov Petruk Programmer 80000 23 2 2 Ndandani bug ing backend 2022-06-15
4 Rabinovich Moisha direktur 200000 35 7 4 Seneng urip (NULL)
5 Kirienko Anastasia Kantor manager 40000 25 3 5 Tuku kopi 2022-07-01
5 Kirienko Anastasia Kantor manager 40000 25 4 5 Tuku kopi 2022-08-01
5 Kirienko Anastasia Kantor manager 40000 25 5 5 Bakal tuku kopi 2022-09-01
6 Vaska kucing 1000 3 8 6 Seneng urip (NULL)

Kabar apik yaiku garis sing ora ana gunane wis ilang: id saka kolom pisanan mesthi padha karo employee_id.

Pawarta sing ora becik yaiku tugas sing ora diwenehake marang sapa wae, kayata ngresiki kantor, ora ana. Id_karyawan kasebut NULL, mula dibuwang sawise WHERE rampung.