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.
GO TO FULL VERSION