Tuesday, February 10, 2009

எளிய தமிழில் SQL - பாகம் 15

இன்றைய பாகம் 15ல் இரண்டு tableகளை இணைப்பது குறித்து இன்னும் விவரமாகப் பார்க்க இருக்கிறோம்.

பாகம் 14ல் Primarykey மற்றும் Foreign key ஆகியவற்றைப் பயன்படுத்துவது என்பது குறித்துப் பார்த்தோம். அதன் தொடர்ச்சியாக இதைக் கொண்டாலும் இதில் சில விதிவிலக்குகள் புரிதலுக்காகச் செய்திருக்கிறேன்.

ஒன்றுக்கு மேற்பட்ட Tableகளை இணைத்து அனைத்து அறிக்கைகளையும் ஒரே திரையில் காண்பதற்கு JOIN பயன்படுத்தப்படுகிறது.

JOINன் வகைகள்
INNER JOIN
OUTER JOIN
SELF JOIN
CROSS JOIN

OUTER JOIN ஐ இன்னும் 3 வகை உட்பிரிவுகளாகப் பிரித்து, LEFT OUTER, RIGHT OUTER, FULL OUTER எனப் பிரிக்கலாம்.

இங்கே மாதிரிக்காக 2 tableகளை உருவாக்கி அவற்றில் சில மாதிரி records ஐ ஏற்றியிருக்கிறேன். அவற்றின் பெயர்கள் Author மற்றும் Publication ஆகியவை.
Author அட்டவணையின் Structure மற்றும் மாதிரி தகவல்கள் ஆகியவை கீழே:


Publication அட்டவணையின் Structure Structure மற்றும் மாதிரி தகவல்கள் ஆகியவை கீழே:


எழுத்தாளர் அட்டவணையில் உள்ள முதல் 4 Authorகள் பதிப்பக அட்டவணையில் வேறுவேறு நூல்களை எழுதி இருக்கின்றனர். ஆனால் மீதமுள்ள 6 எழுத்தாளர்கள் எழுதிய நூல்களின் விவரங்கள் பதிப்பக அட்டவணையில் இல்லை.

அதேபோல பதிப்பக அட்டவணையில் உள்ள குறிப்பிட்ட Chicken Special முதல் Making of Nandha வரையிலான புத்தகங்களின் எழுத்தாளர்கள் பற்றிய விவரங்கள் Author அட்டவணையில் இல்லை. இது ஒரு மாதிரிக்காக உருவாக்கப்பட்ட tableகள். இவற்றின் மூலம் நாம் tableகளை இணைக்கும் JOIN பற்றி எளிதாக அறிந்துகொள்ளலாம்.

முதலில் INNER JOIN பற்றிப் பார்ப்போம். அதன் Syntax கீழே:


SELECT table1.Field1, table1.Field2, table2.Field1, table2.Field2
FROM
table1 INNER JOIN table2
ON
table1.CommonField = table2.CommonField

இங்கே table1 = Author , table2 = Publication என அறிக.
இதற்கான உதாரணத்தைக் கவனிக்கவும்

SELECT Author.AuthorID, Author.AuthorName, Publication.BookName
FROM Author INNER JOIN
Publication ON Author.AuthorID = Publication.AuthorID

இதன் விடை:

இங்கே இரண்டு tableகளுக்கும் பொதுவாக அமைந்துள்ள rows மட்டுமே இடம்பெற்றுள்ளன.
Author அட்டவணையிலும், Publication அட்டவணையிலும் வண்ணமிட்டுக் காட்டப்பட்ட தகவல்களைக் காணவில்லை. பொதுவாக உள்ளவை மட்டுமே இடம்பெற்றுள்ளன. கீழேயுள்ள கணம் பற்றிய படத்தைக் கவனிக்கவும்.


LEFT OUTER JOIN பற்றிப் பார்ப்போம். அதன் Syntax கீழே:


SELECT table1.Field1, table1.Field2, table2.Field1, table2.Field2
FROM
table1 LEFT OUTER JOIN table2
ON
table1.CommonField = table2.CommonField

இங்கே table1 = Author , table2 = Publication என அறிக.
இதற்கான உதாரணத்தைக் கவனிக்கவும்

SELECT Author.AuthorID, Author.AuthorName, Publication.BookName
FROM Author LEFT OUTER JOIN
Publication ON Author.AuthorID = Publication.AuthorID

இதன் விடை:
இங்கே முதலாவது table ஆகிய Author ல் இருக்கும் அனைத்து rowsஇடம் பெற்றுள்ளன. ஒரே எழுத்தாளர் ஒன்றுக்கு மேற்பட்ட புத்தகங்களை எழுதியுள்ளதால் அவர்கள் திரும்பத்திரும்ப இடம்பெற்றிருக்கிறார்கள்.
5 முதல் 10 வரையிலான எழுத்தாளர்கள் எழுதிய புத்தகங்கள் Publication அட்டவணையில் இல்லாததால் அவர்களுக்கு நேரே உள்ள BookName ல் NULL மூலம் நிரப்பப்பட்டுவிட்டது.

இடதுபுற (Left side = Author) அட்டவணையில் எல்லா recordsம் தேர்வுசெய்யப்பட்டுவிடும். ஆனால் வலது புறத்தில் உறவுமுறை (Relation) இல்லாத rows எல்லாவற்றிலும் NULL நிரப்பப்பட்டுக் காண்பிக்கப்படும்.


மேலே காட்டப்பட்டிருக்கு கணம் பற்றிய படத்தைக் கவனிக்கவும்.

RIGHT OUTER JOIN பற்றிப் பார்ப்போம். அதன் Syntax கீழே:


SELECT table1.Field1, table1.Field2, table2.Field1, table2.Field2,table2.Field3
FROM
table1 RIGHT OUTER JOIN table2
ON
table1.CommonField = table2.CommonField

இங்கே table1 = Author , table2 = Publication என அறிக.
இதற்கான உதாரணத்தைக் கவனிக்கவும்

SELECT Author.AuthorID, Author.AuthorName, Publication.BookName,Publication.Publication
FROM Author RIGHT OUTER JOIN
Publication ON Author.AuthorID = Publication.AuthorID

இதன் விடை: AuthorIDல் 5 முதல் 10 வரையிலான அனைத்து Authorகளைத் தவிர மீதியுள்ளோர் மட்டுமே இடதுபுறம் இடம்பெற்றுள்ளனர். Chicken Special முதல் Making of Nandha வரையிலான நூல்களை எழுதிய Author பற்றிய குறிப்புகள் Author அட்டவணையில் இல்லை - அதனால் அவற்றுக்கு நேராக NULL நிரப்பப்பட்டுவிட்டது. Right Outer Join ல் வலது புறம் (Right side) உள்ள அட்டவணையின் அனைத்து records ம் திரையில் காண்பிக்கப்படும். ஒப்புமை இல்லாத இடதுபுற rowsக்கு மட்டும் NULL நிரப்பப்பட்டுவிடும்.

கீழேயுள்ள கணம் பற்றிய படத்தைக் கவனிக்கவும்.இப்போது FULL OUTER பற்றிப் பார்ப்போம்.
அதன் Syntax கீழே:


SELECT table1.Field1, table1.Field2, table2.Field1, table2.Field2,table2.Field3
FROM
table1 FULL OUTER JOIN table2
ON
table1.CommonField = table2.CommonField

இங்கே table1 = Author , table2 = Publication என அறிக.
இதற்கான உதாரணத்தைக் கவனிக்கவும்

SELECT Author.AuthorID, Author.AuthorName, Publication.BookName,Publication.Publication
FROM Author FULL OUTER JOIN
Publication ON Author.AuthorID = Publication.AuthorID

இதன் விடை:

இரண்டுபுறமுள்ள tableகளிலும் உள்ள பொதுவான rows அதன் இடங்களில் சரியாக இடம்பெற்றுள்ளன. உறவுமுறையில்லாத recordsம் இடம்பெற்றுள்ளன. ஆனால் எங்கெங்கு தகவல்கள் இல்லையோ அங்கேயெல்லாம் NULL மூலம் நிரப்பப்பட்டுவிட்டன. Author அட்டவணையின் Elavarasan முதல் KaviNilavu வரையிலான எழுத்தாளர்களும் இடம்பெற்றிருக்கின்றனர். ஆனால் அவர்கள் எழுதிய புத்தகங்கள் Publication அட்டவணையில் இல்லாத காரணத்தால் வலதுபுறத்தில் NULL இடம்பெற்றுள்ளது. அதேபோல Chicken Special முதல் Making of Nandha வரையிலான நூல்களை எழுதியவர்களின் விபரம் Author அட்டவணையில் இல்லாததால் இடப்பக்கமாக NULL நிரப்பப்பட்டுவிட்டது.

CROSS JOIN பற்றிப் பார்ப்போம்.
Cross join என்பது குறுக்குப் பெருக்கல் ஆகும்.
இதன் மாதிரி வடிவம்:

SELECT Author.AuthorName, Publication.BookName, Publication.Publication
FROM Author CROSS JOIN
Publication

மொத்த rowsன் எண்ணிக்கை = இடப்புறம் உள்ள rowsகளின் எண்ணிக்க x வலப்புறம் உள்ள rows எண்ணிக்கை.

SELECT COUNT(*) FROM Author --> 10 records உள்ளன
SELECT COUNT(*) FROM Publication --> 16 rows உள்ளன.

Count(*) இந்த Function மூலம் ஒரு tableல் எத்தனை rows உள்ளன என அறியலாம்.

Cross join இணைப்பிற்குப் பிறகு உருவாகும்
rowsகளின் எண்ணிக்கை = 10 x 16 = 160.

இடப்புறமுள்ள ஒவ்வொரு recordம் , வலப்புறமுள்ள அனைத்து recordsஉடன் ஒவ்வொருமுறையும் இணைத்துக் காட்சியளிக்கும்.

SELF JOIN என்பது ஒரே table ஆனது, அதற்குள்ளேயே இணைக்கப்படுவதால் அவ்வாறு அழைக்கப்படுகிறது.

6 comments:

வடுவூர் குமார் said...

வாவ்! கலர் கலராக படம் போட்டு எளிதாக புரியும் படி கொடுத்திருக்கிறீர்கள்.
இவ்வளவு விஷயம் இருக்கா? இதில்,ஆச்சரியமாக இருக்கு.

butterfly Surya said...

பாகம் பாகமா என்னமோ சொல்றீங்க.. ஆனா என்னன்னு தெரியவில்லை. Sorry.. படிக்க எனக்கு பொறுமையில்லைன்னுதான் சொல்லணும்.

16ம் வாய்ப்பாடு வரை படிச்சிருக்கேன்..
Software தெரியாது.. சேமியா உப்புமா பிடிக்காது.சரி... அதை விடுங்க...


மொக்கையும் கும்மியும் நிறைந்த வலை உலகத்தில் அதுவும் பரஸ்பர பாராட்டு வேற.. ஒரே ஆள் ஒரே பதிவுக்கு 19 பின்னூட்டம்லா போடுறான். யப்பா .. என்ன பொறுமை..?? இதுல "me the first" ... வேற ...

எந்த ஆர்பாட்டமும் இல்லாமல் அமைதியாக பயனுள்ள பதிவுகளை இடும் வேலனுக்கும் தமிழ் நெஞ்சம் அவர்கட்கும் அன்புன் ஆதரவும் என்றும் உண்டு..

ஏதோ உலக சினிமா பற்றி கொஞ்சம் ஆவல்..கிறுக்கி தள்ளுறேன்..நேரமிருந்தா அப்படி எட்டி பாருங்க..


வாழ்த்துக்கள்..

Tech Shankar said...

Thanks to : வடுவூர் குமார் , வண்ணத்துபூச்சியார்

Tech Shankar said...

Hi வண்ணத்துபூச்சியார்,

Very very Thanks you for lengthy comment

rajaraman_ecs said...

மிகவும் அழகாக தொடரை வழங்கி கொண்டு இருக்கின்ற நண்பருக்கு மிக்க நன்றி. நண்பரே எனக்கு ஒரு சந்தேகம் உள்ளது. அதனை தாங்கள் தீர்ப்பீர்கள் என நம்புகிறேன்.

எனது அலுவலகத்திள் Inventory Sotware பயன்படுத்துகின்றனர். இந்த Inventory sotware ஐ கணிப்பொறியிள் C அல்லது D ஏதேனும் ஒரு கோலனிள் ( partation) copy & past செய்துள்ளனர். பிறகு இதற்க்காக oracle developer 6i மற்றும் Power builder 5 ஐ install செய்துள்ளனர். பிறகு Past செய்துள்ள Inventory software ல் உள்ள inventory.exe எனும் file ஐ click செய்தாள் inventory வேலை செய்கிறது. மேலும் இதன் மூலம் உள்ளீடு செய்யப்படுகின்ற தகவல் அனைத்தும் எங்கள் அலுவலகத்திள் தனியாக வைதுள்ள server ல் பதிவாகிறது. இந்த Inventory software ஆனது network ல் system ல் மட்டும் வேலை செய்கிறது.

எனது சந்தேகம் Oracl, Power Builder மற்றும் எங்களது Inventory software இவை 3 ற்க்கும் என்ன தொடர்பு எங்கள் அலுவலகத்திள் Inventory software எந்த software பயன்படுத்தி Create பண்ணியுள்ளனர். மேலும் நாம் பார்துவரும் sql server ர்க்கும் நான் மேலே கூரியவற்றக்கும் ஏதேனும் தொடர்பு உள்ளதா. sql server ஐ பயன்படுத்தி table மட்டும் தான் create பண்ணமுடியுமா அப்படியன்றாள் MS-Access ஐ பயன்படுதியே இதனை செய்யலாமே, மேலும் sql server ல் Inventory software ஐ உருவாக்கமுடியுமா,

நண்பரே நான் எழுப்பியுள்ள சந்தேகத்தை நீங்கள் தீர்ப்பீர்கள் என அதனை நான் இங்கே வைதுள்ளேன்.


நன்றியுடன்,

G. ராஜாராமன், சவுதி அரேபியா

Tech Shankar said...

Hi Rajaraman :

Please visit here :

http://tamilsql.blogspot.com/2009/02/sql-17.html

எளிய தமிழில் SQL - பாகம் 17

பாகம் 15ல் திரு G. ராஜாராமன், சவுதி அரேபியா அவர்கள் கீழ்க்கண்ட கேள்வியை எழுப்பி இருந்தார். அவருக்கு விடையளிக்கும் விதமாக இந்தப்பதிவு அமைகிற...