சார்பு அட்டவணை
இப்போது நமது கேள்விகளை சற்று சிக்கலாக்குவோம். எங்கள் பணியாளர்களுக்கான பணிகளுடன் எங்கள் தரவுத்தளத்தில் ஒரு புதிய பணி அட்டவணையைச் சேர்ப்போம். மேலும் அதில் என்ன உள்ளீடுகள் உள்ளன என்று பார்ப்போம்:
SELECT * FROM task
அத்தகைய கோரிக்கையின் முடிவு:
ஐடி | பணியாளர்_ஐடி | பெயர் | காலக்கெடுவை |
---|---|---|---|
1 | 1 | முகப்பில் ஒரு பிழையை சரிசெய்யவும் | 2022-06-01 |
2 | 2 | பின்தளத்தில் ஒரு பிழையை சரிசெய்யவும் | 2022-06-15 |
3 | 5 | காபி வாங்கு | 2022-07-01 |
4 | 5 | காபி வாங்கு | 2022-08-01 |
5 | 5 | காபி வாங்குவார் | 2022-09-01 |
6 | (ஏதுமில்லை) | அலுவலகத்தை சுத்தம் செய்யுங்கள் | (ஏதுமில்லை) |
7 | 4 | வாழ்க்கையை அனுபவிக்கவும் | (ஏதுமில்லை) |
8 | 6 | வாழ்க்கையை அனுபவிக்கவும் | (ஏதுமில்லை) |
இந்த அட்டவணையில் 4 நெடுவரிசைகள் மட்டுமே உள்ளன:
- ஐடி - தனிப்பட்ட பணி எண் (மற்றும் அட்டவணையில் உள்ள வரிசைகள்);
- Employee_id - பணி ஒதுக்கப்படும் பணியாளர் அட்டவணையில் இருந்து பணியாளரின் ஐடி;
- பெயர் - பணியின் பெயர் மற்றும் விளக்கம்;
- காலக்கெடு - பணியை முடிக்க வேண்டிய நேரம்.
சில நுணுக்கங்களுக்கு கவனம் செலுத்துங்கள். டாஸ்க் N6 இல் Employee_id இல்லை, எங்களிடம் க்ளீனர் இல்லை. பணி உள்ளது, ஆனால் நிகழ்த்துபவர் இல்லை. அது நடக்கும்.
மேலும், பணிகள் 6-9 க்கு நிர்ணயிக்கப்பட்ட காலக்கெடு இல்லை. ஒரு பணியை தொடர்ச்சியாகவும் தொடர்ச்சியாகவும் செய்ய வேண்டியிருக்கும் போது இது நிகழ்கிறது. உதாரணமாக, அலுவலகம் ஒவ்வொரு நாளும் சுத்தம் செய்யப்பட வேண்டும், ஆனால் நீங்கள் ஒவ்வொரு நாளும் வாழ்க்கையை அனுபவிக்க வேண்டும் :)
ஒரு அட்டவணை மற்றொரு அட்டவணையில் இருந்து ஐடிகளைப் பயன்படுத்தினால், அத்தகைய அட்டவணை சார்பு என்று அழைக்கப்படுகிறது .
பல அட்டவணைகளுக்கு எதிராக வினவல்
"வாழ்க்கையை அனுபவிப்பது" என்ற இரண்டு பணிகள் இருப்பதை இங்கே டாஸ்க் டேபிளில் பார்க்கிறோம். இந்த அதிர்ஷ்டசாலிகள் யார் என்று நமக்கு எப்படித் தெரியும்?
இதைச் செய்ய, SQL இல், நீங்கள் ஒரே நேரத்தில் இரண்டு அட்டவணையில் வினவலை இயக்கலாம். பொதுவாக, SQL இல், நீங்கள் ஒரே நேரத்தில் எத்தனை டேபிள்களையும் வினவலாம். அத்தகைய கோரிக்கைக்கான பொதுவான வடிவம்:
SELECT columns
FROM Table 1, table 2, tableN
முக்கியமான! நீங்கள் ஒரே நேரத்தில் பல அட்டவணைகளுக்கு வினவலை எழுதினால், இதன் விளைவாக அட்டவணை வரிசைகளின் கார்ட்டீசியன் தயாரிப்பு என்று அழைக்கப்படுவீர்கள் . முதல் அட்டவணையில் இருந்து ஒவ்வொரு வரிசையும் இரண்டாவது அட்டவணையில் இருந்து ஒவ்வொரு வரிசையிலும் ஒட்டப்படும், மற்றும் பல.
அதாவது, முதல் அட்டவணையில் 5 வரிசைகளும், இரண்டாவது அட்டவணையில் 10 வரிசைகளும் இருந்தால், உங்களுக்கு மொத்தம் 50 வரிசைகள் இருக்கும். ஜாவாவில், இந்த வினவல் இப்படி இருக்கும்:
for (String row1 : table1)
{
for (String row2 : table2)
{
System.out.println(row1 + row2);
}
}
எங்கள் வினவலை ஒரே நேரத்தில் இரண்டு அட்டவணையில் எழுதி என்ன நடக்கிறது என்று பார்ப்போம்:
SELECT * FROM employee, task
மற்றும் இந்த வினவலின் முடிவு:
ஐடி | பெயர் | தொழில் | சம்பளம் | வயது | ஐடி | பணியாளர் | _id | பெயர் | காலக்கெடுவை |
---|---|---|---|---|---|---|---|---|---|
1 | இவனோவ் இவான் | புரோகிராமர் | 100000 | 25 | 1 | 1 | முகப்பில் ஒரு பிழையை சரிசெய்யவும் | 2022-06-01 | |
2 | பெட்ரோவ் பெட்ர் | புரோகிராமர் | 80000 | 23 | 1 | 1 | முகப்பில் ஒரு பிழையை சரிசெய்யவும் | 2022-06-01 | |
3 | இவனோவ் செர்ஜி | சோதனையாளர் | 40000 | முப்பது | 1 | 1 | முகப்பில் ஒரு பிழையை சரிசெய்யவும் | 2022-06-01 | |
4 | ரபினோவிச் மொய்ஷா | இயக்குனர் | 200000 | 35 | 1 | 1 | முகப்பில் ஒரு பிழையை சரிசெய்யவும் | 2022-06-01 | |
5 | கிரியென்கோ அனஸ்தேசியா | அலுவலக மேலாளர் | 40000 | 25 | 1 | 1 | முகப்பில் ஒரு பிழையை சரிசெய்யவும் | 2022-06-01 | |
6 | வாஸ்கா | பூனை | 1000 | 3 | 1 | 1 | முகப்பில் ஒரு பிழையை சரிசெய்யவும் | 2022-06-01 | |
1 | இவனோவ் இவான் | புரோகிராமர் | 100000 | 25 | 2 | 2 | பின்தளத்தில் ஒரு பிழையை சரிசெய்யவும் | 2022-06-15 | |
2 | பெட்ரோவ் பெட்ர் | புரோகிராமர் | 80000 | 23 | 2 | 2 | பின்தளத்தில் ஒரு பிழையை சரிசெய்யவும் | 2022-06-15 | |
3 | இவனோவ் செர்ஜி | சோதனையாளர் | 40000 | முப்பது | 2 | 2 | பின்தளத்தில் ஒரு பிழையை சரிசெய்யவும் | 2022-06-15 | |
4 | ரபினோவிச் மொய்ஷா | இயக்குனர் | 200000 | 35 | 2 | 2 | பின்தளத்தில் ஒரு பிழையை சரிசெய்யவும் | 2022-06-15 | |
5 | கிரியென்கோ அனஸ்தேசியா | அலுவலக மேலாளர் | 40000 | 25 | 2 | 2 | பின்தளத்தில் ஒரு பிழையை சரிசெய்யவும் | 2022-06-15 |
எங்களிடம் மொத்தம் 48 முடிவு வரிகள் உள்ளன, ஆனால் இங்கே நான் 11 மட்டுமே கொடுத்துள்ளேன். இல்லையெனில், போதுமான இடம் இருக்காது.
மூன்று விஷயங்களில் கவனம் செலுத்துங்கள்:
- அதே பெயர்களைக் கொண்ட நெடுவரிசைகள்: ஐடி . இது பணியாளர் அட்டவணையில் இருந்து ஐடி மற்றும் பணி அட்டவணையில் இருந்து ஐடி ஆகும் .
- ஒவ்வொரு அட்டவணையின் வரிசைகளும் மீண்டும் மீண்டும் செய்யப்படுகின்றன. இடது நெடுவரிசையில், ஐடி 6 ஐத் தொடர்ந்து ஐடி = 1 மீண்டும் வருகிறது.
- எங்களிடம் முட்டாள்தனமான வரிசைகள் உள்ளன, எடுத்துக்காட்டாக, ஐடி (பணியாளர் அட்டவணையில் இருந்து) 6 மற்றும் அதே வரிசையில் பணியாளர்_ஐடி 1 ஆகும்.
அர்த்தமற்ற வரிகளை நீக்குதல்
எங்களின் விளைவாக வரும் அட்டவணையில் பல வரிசைகள் உள்ளன , இது பணியாளர் மற்றும் பணி ஆகிய இரண்டு அட்டவணைகளின் அனைத்து வரிசைகளின் கார்ட்டீசியன் தயாரிப்பு ஆகும் .
தர்க்கரீதியாக, 3வது வரிசை Employee_id எனில், அது 3 ஐடியாக இருக்கும் பணியாளர் அட்டவணையில் உள்ள வரிசையில் மட்டுமே ஒட்டிக்கொள்ள வேண்டும். WHERE மூலம் இந்த தவறான புரிதலை சரிசெய்ய முயற்சிப்போம்.
இப்படி ஒரு வினவலை எழுதலாம்:
SELECT * FROM employee, task
WHERE emploee.id = task.emploee_id
மற்றும் இந்த வினவலின் முடிவு:
ஐடி | பெயர் | தொழில் | சம்பளம் | வயது | ஐடி | பணியாளர்_ஐடி | பெயர் | காலக்கெடுவை |
---|---|---|---|---|---|---|---|---|
1 | இவனோவ் இவான் | புரோகிராமர் | 100000 | 25 | 1 | 1 | முகப்பில் ஒரு பிழையை சரிசெய்யவும் | 2022-06-01 |
2 | பெட்ரோவ் பெட்ர் | புரோகிராமர் | 80000 | 23 | 2 | 2 | பின்தளத்தில் ஒரு பிழையை சரிசெய்யவும் | 2022-06-15 |
4 | ரபினோவிச் மொய்ஷா | இயக்குனர் | 200000 | 35 | 7 | 4 | வாழ்க்கையை அனுபவிக்கவும் | (ஏதுமில்லை) |
5 | கிரியென்கோ அனஸ்தேசியா | அலுவலக மேலாளர் | 40000 | 25 | 3 | 5 | காபி வாங்கு | 2022-07-01 |
5 | கிரியென்கோ அனஸ்தேசியா | அலுவலக மேலாளர் | 40000 | 25 | 4 | 5 | காபி வாங்கு | 2022-08-01 |
5 | கிரியென்கோ அனஸ்தேசியா | அலுவலக மேலாளர் | 40000 | 25 | 5 | 5 | காபி வாங்குவார் | 2022-09-01 |
6 | வாஸ்கா | பூனை | 1000 | 3 | 8 | 6 | வாழ்க்கையை அனுபவிக்கவும் | (ஏதுமில்லை) |
நல்ல செய்தி என்னவென்றால், அர்த்தமற்ற வரிகள் மறைந்துவிட்டன: முதல் நெடுவரிசையில் உள்ள ஐடி எப்போதும் Employee_idக்கு சமமாக இருக்கும்.
அலுவலகத்தை சுத்தம் செய்வது போன்ற யாருக்கும் ஒதுக்கப்படாத பணிகள் இல்லாமல் போனது மோசமான செய்தி . அவர்களின் பணியாளர்_ஐடி NULL ஆக இருந்தது, எனவே அவர்கள் எங்கு செய்த பிறகு நிராகரிக்கப்பட்டனர்.
GO TO FULL VERSION