Thursday, August 8, 2013

எளிய தமிழில் 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 ஆனது, அதற்குள்ளேயே இணைக்கப்படுவதால் அவ்வாறு அழைக்கப்படுகிறது. 

0 comments:

Post a Comment