Thursday, November 7, 2013

விண்டோஸ் அட்மின் பாஸ்வேர்டை மாற்றி அமைக்க



ஆப்லைன் என்.டி. பாஸ்வேர்ட் - ரெஜிஸ்ட்ரி எடிட்டர் (Offline NT Password & Registry Editor ) என்னும் டூலைப் பயன்படுத்தி, கம்ப்யூட்டர் சிஸ்டம் ஒன்றின், அட்மினிஸ்ட்ரேட்டர் பாஸ்வேர்டினை மாற்றி அமைக்கலாம். 

இது ஓப்பன் சோர்ஸ் எனப்படும் திறவூற்று வகையில் அமைக்கப்பட்ட புரோகிராம் என்பதால், இணையத்தில் இலவசமாகவே கிடைக்கிறது. இது பழைய பாஸ்வேர்டினை முழுமையாக அழிக்கிறது. 

எனவே, விண்டோஸ் சிஸ்டம் செல்ல வேண்டியதில்லை. இது எந்தப் பிரச்னையும் இன்றி, விண்டோஸ் எக்ஸ்.பி., விஸ்டா மற்றும் விண்டோஸ் 7 சிஸ்டங்களில் செயல்படுகிறது. 

இவற்றின் 64 பிட் பதிப்புகளிலும் செயல்படுகிறது. இதற்கு http://pogostick.net/~pnh/ntpasswd/என்ற முகவரியில் உள்ள இணையதளம் செல்லவும். 

1. முதலில் இந்த இணைய தளம் சென்று, ”How to get it?” பிரிவில், Password reset CD/USB bootdisk: Instructions image என்பதனைக் கண்டறிந்து கிளிக் செய்திடவும். மீண்டும் கீழாகச் சென்று cd110511.zip என்ற பைலைத் தரவிறக்கம் செய்திடவும். இது ஏறத்தாழ 3 எம்.பி. அளவுள்ள பைலாகும். 
2. இந்த ஸிப் பைலில் இருந்து, ஐ.எஸ்.ஓ. பைலை எக்ஸ்ட்ராக்ட் செய்திடவும். இந்த பைலை, டிஸ்க் ஒன்றில் பதியவும். 
3. அடுத்து, இந்த சிடியினைப் பயன்படுத்தி, உங்கள் கம்ப்யூட்டரை இயக்கவும். 
4. பூட் கட்டளைப் புள்ளி தோன்றுகையில், எண்டர் அழுத்தவும். புரோகிராம் லோட் ஆகும் வரையில் காத்திருக்கவும். 
5. உங்கள் கம்ப்யூட்டரின் ஹார்ட் ட்ரைவின் அனைத்து பகுதிகளையும் நீங்கள் இங்கு காணலாம். இங்கு, விண்டோஸ் லோட் ஆகி உள்ள ஹார்ட் ட்ரைவின் பகுதியினைத் தேர்ந்தெடுக்கவும். பொதுவாக, மாறா நிலையில், இதுவே முதலாவதாக இருக்கும். இதில் எண்டர் அழுத்தவும். 
6. விண்டோஸ் ரெஜிஸ்ட்ரி உள்ள இடத்தின் சரியான இடம் பெறவும். மாறா நிலையில், இது Windows/System32/config என்ற பிரிவில் இருக்கும். மீண்டும் எண்டர் அழுத்தவும்.
7. அடுத்து, Password reset [sam system security] என்ற ஆப்ஷனைத் தேர்ந்தெடுக்கவும். எண்டர் அழுத்தவும்.
8. பாஸ்வேர்ட் ரீசெட் செய்வதற்கான யூசர் நேம் டைப் செய்திடவும். மீண்டும் எண்டர் தட்டவும்.
9. இங்கு யூசர் பாஸ்வேர்டினை நீக்கிட, 1 என்ற ஆப்ஷனைத் தேர்ந்தெடுக்கவும். எண்டர் அழுத்தவும்.
10. மேலே காட்டப்பட்டுள்ள அனைத்தையும் எந்த தவறும் இல்லாமல் மேற்கொண்டால், ஒரு உறுதி செய்வதற்கான மெசேஜ் ஒன்று காட்டப்படும். மீண்டும் இப்போது ! யை டைப் செய்து, எடிட்டிங் பணியிலிருந்து வெளியேற எண்டர் தட்டவும்.
11. அடுத்து q அழுத்தி புரோகிராமில் இருந்து வெளியேற எண்டர் அழுத்தவும். 
12. அடுத்து y என அழுத்தி, அனைத்து மாற்றங்களையும் நிரந்தரமாக வைத்துக் கொள்ள உறுதி செய்திடவும். எண்டர் அழுத்தவும்.
13. மீண்டும் புரோகிராம் செல்ல விருப்பம் இல்லை என்பதனைத் தெரிவிக்க, எண்டர் அழுத்தவும்.

14. இனி, டிஸ்க்கினை நீக்கி, கம்ப்யூட்டரை ரீஸ்டார்ட் செய்திடவும். இனி, பாஸ்வேர்ட் எதுவும் தராமல், உங்களால், லாக் இன் செய்திட முடியும்.

Sunday, September 15, 2013

கட்டாயம் வைத்திருக்க வேண்டிய இலவச மென்பொருட்கள்

மென்பொருட்கள் இல்லாமல் நாம் கணினியை பயன்படுத்தவே முடியாது. நம்முடைய அத்தனை செயல்களும் ஏதோ ஒரு மென்பொருளை சார்ந்தே இருக்கும். இதில் நிறைய மென்பொருட்கள் நமக்கு இலவசமாகவே கிடைக்கின்றன. அதில் சில நமக்கு கட்டாயம் தேவைப்படும் அவற்றைப் பற்றி பார்ப்போம்.

~~Browser~~

ப்ரௌசர் என்பது இல்லாமல் நீங்கள் இப்போது இந்த பதிவை படிக்க முடியாது. இணையத்தில் நாம் செயல்பட ப்ரௌசர் ஒரு கட்டாய தேவை. இதில் சிறந்த இரண்டு.

1. Chrome - http://goo.gl/j11of
2. Firefox - http://goo.gl/7ICv2

~~Antivirus~~

அடிக்கடி பென்டிரைவ் அல்லது இணையத்தில் இருந்து டவுன்லோட் செய்யும் போது நம் கணினியில் வைரஸ் வர வாய்ப்பு உள்ளது. அம்மாதிரியான தருணங்களில் அவற்றை தடுக்கவோ அல்லது தவிர்க்கவோ ஒரு ஆண்டி வைரஸ் மென்பொருள் தேவை. அவற்றில் சிறந்த இரண்டு.

1. Avast - http://goo.gl/8Br5g
2. Microsoft Security Essentials - http://goo.gl/YDpJ7

~~File Compression Software~~

File Compression Software என்பது நாம் அடிக்கடி பயன்படுத்தும் ஒன்று. இதில் winzip மற்றும் winrar போன்றவை கட்டண மென்பொருட்கள். இதை செய்ய சிறந்த இலவச மென்பொருட்கள்.

1. 7-Zip - http://goo.gl/CHqRw
2. Zip2Fix - http://goo.gl/y1m9E

~~Image/Graphics editor, paint program, and picture organizer~~

இமேஜ் எடிட்டர் என்பது நமக்கு அடிக்கடி தேவைப்படும் ஒன்று. இதில் பெரும்பாலான மென்பொருட்கள் நமக்கு இலவசமாக கிடைப்பது இல்லை. ஆனால் சில நமக்கு இலவசமாக பல வசதிகளை தருகின்றன. அவற்றில் சிறந்தவை.

1. Gimpshop - http://goo.gl/UK9s
2. Paint.NET - http://goo.gl/59FB
3. IrfanView - http://goo.gl/59FB
4. Inkscape - http://goo.gl/q6Sh

~~Multimedia~~

கணினியில் ஓய்வு நேரங்களில் நாம் செய்வது பாடல்கள் கேட்பது மற்றும் படங்கள் பார்ப்பது. அத்தோடு Video Editor, Video Converter போன்றவை தொழில்ரீதியாக உள்ள Multimedia Tools. இதில் சிறந்த இலவச மென்பொருட்கள்.

1. VLC media player - http://goo.gl/oRNqK
2. KM Player - http://goo.gl/VMzX7
3. Audacity – Free Audio Editor - http://goo.gl/ARs0
4. Avidemux – Free Video Editor - http://goo.gl/Uzr2n
5. DVD Video Soft - http://goo.gl/w6Hhj
6. Free Make Video Converter - http://goo.gl/Hyb9J

~~~Office Tools~~

MS Office க்கு மாற்றாக பல இலவச மென்பொருட்கள் உள்ளன. அவற்றில் சிறந்தவை.

1. MS Officeக்கு மாற்றாக சில இலவச மென்பொருட்கள் -http://goo.gl/XuiAM

Thursday, August 8, 2013

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

இன்றைய பாகம்-16ல் SQL ன் Aggregate Functions மற்றும், Grouping போன்றவற்றைக் காணலாம்.


இதற்கான ஒரு மாதிரி Table Structure கீழே:


இந்த Table ஐப் பயன்படுத்தி இன்றையப் பாகத்தைத் தொடருவோம்.

Aggregate Functions என்றால் என்ன?
SUM, AVG, MIN, MAX, COUNT போன்றவற்றைப் பயன்படுத்தி கணித விடை காணல். இதன் விடையாக ஒரே ஒரு மதிப்பு மட்டும் வெளியாகும்.


இந்த Tableல் மணி, வீரன், சந்த்ரு, ஹாரிஸ் ஆகிய 3 விற்பனையாளர்களும் வெவ்வேறு காலகட்டங்களில் வேறு வேறு பகுதிகளில் எவ்வளவு தொகைக்கு விற்பனை செய்துள்ளனர் என்பதை அறியக் கொடுத்துள்ளேன்.

அனைவரும் சேர்ந்து ஒட்டுமொத்தமாக எவ்வளவு தொகைக்குப் பொருட்களை விற்பனை செய்துள்ளனர். இதற்கு SUM பயன்படுத்தலாம்.

ஒட்டுமொத்தமான கூடுதல் தொகை.
SELECT SUM(SaleAmount) AS [Total Sale Amount] from Sales
விடை : 59310

அதிகபட்சமாக விற்பனையான தொகை
SELECT MAX(SaleAmount) AS [Maximum] from Sales
விடை : 7800

குறைந்தபட்சமாக விற்பனையான தொகை
SELECT MIN(SaleAmount) AS [Minimum] from Sales
விடை : 400

சராசரித் தொகை
SELECT AVG(SaleAmount) AS [Average] from Sales
விடை : 3954.000000

மொத்தத்தில் எத்தனை முறை விற்பனை நடந்துள்ளது?
SELECT count(*) AS [Total Transactions] from Sales
விடை : 15

மொத்தம் எத்தனை விற்பனையாளர்கள் ?
SELECT COUNT(DISTINCT SalesMan)AS [Total Persons Involved] FROM Sales
விடை:4

இங்கே மாதிரி Tableல் ஒவ்வொரு பிரதிநிதிகளும், ஒன்றுக்கு மேற்பட்டமுறை விற்பனை செய்துள்ளனர். ஆதலால் ஒவ்வொரு பிரதிநிதியின் தனிப்பட்ட கூடுதல், அதிகபட்ச / குறைந்தபட்ச விற்பனைத்தொகை முதலியவற்றைக் காண்பதற்கு GROUP BY பயன்படுத்தலாம்.

ஒவ்வொருவரின் தனிப்பட்ட விற்பனைத்தொகையைக் காண
SELECT SalesMan,SUM(SaleAmount) as [Individual SaleAmount]
FROM Sales GROUP BY SalesMan

விடை :



ஒவ்வொருவரின் அதிகபட்ச விற்பனைத்தொகையைக் காண்பதற்கு
SELECT SalesMan,MAX(SaleAmount) as [Individual Max Efficiency]
FROM Sales GROUP BY SalesMan

ஒவ்வொருவரின் குறைந்தபட்ச திறனைக் காண
SELECT SalesMan,MIN(SaleAmount) as [Individual Min Amt] FROM Sales GROUP BY SalesMan

SELECT உடன் மேலும் அதிகமான கட்டுப்பாடுகளை விதிப்பதற்கும் Conditionகளைக் கூறுவதற்கும் WHERE சேர்த்துப் பயன்படுத்துவோம். அதுபோல இங்கே Aggregate Functions பயன்படுத்தும்போது HAVING ஐ இணைத்துப் பயன்படுத்துவோம்.

விற்பனைப் பிரதிநிதிகளின் இரண்டாவது எழுத்து 'a' ஆக உள்ளவர்களையும், அவர்களது ஒட்டுமொத்த விற்றதொகையையும் காண

SELECT SalesMan,SUM(SaleAmount) as [Individual SaleAmount]
FROM Sales GROUP BY SalesMan
HAVING SalesMan LIKE '_a%'

_ மற்றும் % ஆகிய அடையாளங்களுக்கு Wild card characters என்று பெயர். அதாவது இட நிரப்பிகள். _ என்பது ஒரு எழுத்தை மட்டும் நிரப்பும். % என்பது அனைத்து எழுத்துகளையும் நிரப்பும்.
‘_a%' என்றால் முதல் எழுத்து ஏதோ ஒன்றாகவும், கண்டிப்பாக இரண்டாம் எழுத்து 'a' பிற எழுத்துகளைப் பற்றிக் கவலையில்லை. இப்படி எந்த பிரதிநிதியின் பெயரில் இரண்டாவது எழுத்து 'a' வருகிறதோ அவர்களை மட்டும் காண்பதற்கு.

ஒட்டுமொத்தத்தில் 20000 ஐ விட அதிகமாக விற்பனை செய்தவர்களை மட்டும் காண்பதற்கு:
SELECT SalesMan, SUM(SaleAmount) as [Individual SaleAmount] FROM Sales
GROUP BY SalesMan
HAVING SUM(SaleAmount) > 20000
மொத்தவிற்பனை 5000 ரூபாயைவிடக் குறைவாக விற்றவர் யார்?
SELECT SalesMan,SUM(SaleAmount) as [Individual SaleAmount] FROM Sales
GROUP BY SalesMan
HAVING SUM(SaleAmount)5000 ரூபாய்கள் முதல் 20000 ரூபாய்கள் வரை விற்பனை செய்தோர் யாவர்?
SELECT SalesMan,SUM(SaleAmount) as [Individual SaleAmount] FROM Sales
GROUP BY SalesMan
HAVING SUM(SaleAmount) BETWEEN 1000 AND 20000



கீழே உள்ளதைக் கவனிக்கவும்.
SELECT SalesMan, SUM(SaleAmount) as [TotalSales], MAX(SaleAmount) as [Maximum], Min(SaleAmount) as [Minimum], count(SaleAmount)as [TotalTransaction] from Sales

நான் எதையோ எதிர்பார்த்து இப்படிக் கொடுத்தால் என்ன ஆகும். Sum, Max, Min, Count அனைத்தையும் கொடுத்துள்ளேன். ஆனால் GROUP BY மட்டும் கொடுக்காமல் விட்டுவிட்டேன். இப்போது என்ன ஆகும்?

கீழேயுள்ள பிழைச்செய்திதான் கிடைக்கும். குழுவாகப் பிரித்து ஒவ்வொருவரின் தனித்திறமையைக் காண்பதற்கே GROUP BY பயன்படுகிறது.
Msg 8120, Level 16, State 1, Line 1
Column 'Sales.SalesMan' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

இதைச் சரிசெய்த பிறகு,

SELECT SalesMan, SUM(SaleAmount) as [TotalSales], MAX(SaleAmount) as [Maximum], Min(SaleAmount) as [Minimum], count(SaleAmount)as [TotalTransaction]
from Sales
GROUP BY SalesMan

இதன் விடை:

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

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

மேலும் SQL க்கான Syntax அட்டவணையைhttp://www.w3schools.com/sql/sql_quickref.asp ல் கண்டேன். அதனைக் கீழே தந்திருக்கிறேன்.


நன்றி : http://www.w3schools.com

இந்த SQL Syntaxகளை நன்றாகப் படித்து மனதில் வைத்துக்கொள்ளவும்.

AND / ORSELECT column_name(s)
FROM table_name
WHERE condition
AND|OR condition
ALTER TABLEALTER TABLE table_name
ADD column_name datatype
or
 
ALTER TABLE table_name
DROP COLUMN column_name
AS (alias)SELECT column_name AS column_alias
FROM table_name
or
 
SELECT column_name
FROM table_name AS table_alias
BETWEENSELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2
CREATE DATABASECREATE DATABASE database_name
CREATE TABLECREATE TABLE table_name
(
column_name1 data_type,
column_name2 data_type,
column_name2 data_type,
...
)
CREATE INDEXCREATE INDEX index_name
ON table_name (column_name)
or
 
CREATE UNIQUE INDEX index_name
ON table_name (column_name)
CREATE VIEWCREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
DELETEDELETE FROM table_name
WHERE some_column=some_value
or
 
DELETE FROM table_name
(Note: Deletes the entire table!!)
 
DELETE * FROM table_name
(Note: Deletes the entire table!!)
DROP DATABASEDROP DATABASE database_name
DROP INDEXDROP INDEX table_name.index_name (SQL Server)
DROP INDEX index_name ON table_name (MS Access)
DROP INDEX index_name (DB2/Oracle)
ALTER TABLE table_name
DROP INDEX index_name (MySQL)
DROP TABLEDROP TABLE table_name
GROUP BYSELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVINGSELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value
INSELECT column_name(s)
FROM table_name
WHERE column_name
IN (value1,value2,..)
INSERT INTOINSERT INTO table_name
VALUES (value1, value2, value3,....)
or
 
INSERT INTO table_name
(column1, column2, column3,...)
VALUES (value1, value2, value3,....)
INNER JOINSELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
LEFT JOINSELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
RIGHT JOINSELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
FULL JOINSELECT column_name(s)
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name
LIKESELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern
ORDER BYSELECT column_name(s)
FROM table_name
ORDER BY column_name [ASC|DESC]
SELECTSELECT column_name(s)
FROM table_name
SELECT *SELECT *
FROM table_name
SELECT DISTINCTSELECT DISTINCT column_name(s)
FROM table_name
SELECT INTOSELECT *
INTO new_table_name [IN externaldatabase]
FROM old_table_name
or
 
SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_table_name
SELECT TOPSELECT TOP number|percent column_name(s)
FROM table_name
TRUNCATE TABLETRUNCATE TABLE table_name
UNIONSELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
UNION ALLSELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2
UPDATEUPDATE table_name
SET column1=value, column2=value,...
WHERE some_column=some_value
WHERESELECT column_name(s)
FROM table_name
WHERE column_name operator value



Select Statement
SELECT "column_name" FROM "table_name"

Distinct
SELECT DISTINCT "column_name"
FROM "table_name"

Where

SELECT "column_name"
FROM "table_name"
WHERE "condition"

And/Or
SELECT "column_name"
FROM "table_name"
WHERE "simple condition"
{[AND|OR] "simple condition"}+

In
SELECT "column_name"
FROM "table_name"
WHERE "column_name" IN ('value1', 'value2', ...)

Between
SELECT "column_name"
FROM "table_name"
WHERE "column_name" BETWEEN 'value1' AND 'value2'

Like
SELECT "column_name"
FROM "table_name"
WHERE "column_name" LIKE {PATTERN}

Order By
SELECT "column_name"
FROM "table_name"
[WHERE "condition"]
ORDER BY "column_name" [ASC, DESC]

Count
SELECT COUNT("column_name")
FROM "table_name"

Group By
SELECT "column_name1", SUM("column_name2")
FROM "table_name"
GROUP BY "column_name1"

Having
SELECT "column_name1", SUM("column_name2")
FROM "table_name"
GROUP BY "column_name1"
HAVING (arithematic function condition)

Create Table Statement
CREATE TABLE "table_name"
("column 1" "data_type_for_column_1",
"column 2" "data_type_for_column_2",
... )

Drop Table Statement
DROP TABLE "table_name"

Truncate Table Statement
TRUNCATE TABLE "table_name"

Insert Into Statement
INSERT INTO "table_name" ("column1", "column2", ...)
VALUES ("value1", "value2", ...)

Update Statement
UPDATE "table_name"
SET "column_1" = [new value]
WHERE {condition}

Delete From Statement
DELETE FROM "table_name"
WHERE {condition} 

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

Primary key மற்றும் Foreign key ஆகியவற்றைப் பற்றியும், SQL வாயிலாக இரண்டு Tableகளை இணைப்பது எப்படி என்றும் இன்றைக்குப் பார்ப்போம்.

Primary key என்பது ஒரு Tableல் இருக்கும் அனைத்து Row களையும் தனித்தனியாகக் கண்டறிய உதவுகிறது. உதாரணமாக ஒரு எளிய Table. அதில் 2 Columns மட்டும். அவை DirectorID int, DirectorName varchar(50)
(மேலும் இது Primary keyஆகவும், Autoincrement ஆகவும் கொடுக்கப்படுகிறது. Auto increment என்பது int எனப்படும் எண்களுக்கு மட்டுமே சாத்தியப்படும்) , இந்த Tableக்கு DirectorInfo எனப் பெயரிடுவோம்.


இந்த DirectorID எனப்படும் Column ஐ Primary key ஆக மாற்ற என்ன செய்யவேண்டும்.

DirectorID எனப்படும் Column ஐத் தேர்வு செய்து Right Click செய்து, தோன்றக்கூடிய சிறு menuவில் Set Primary Key என்பதைச் சொடுக்கவும்.
இதைச் செய்தபிறகு DirectorID க்கு இடது புறம் ஒரு சிறிய சாவியின் படம் தெரிய ஆரம்பிக்கும்.

மேலும் Identity Column ( Auto increment) ஆக மாற்றுவதற்கு என்ன செய்வது?
DirectorID எனப்படும் Column ஐத் தேர்வு செய்து F4 என்னும் Function keyஐ அழுத்தினால் Properties Windows ஐக் காணலாம். அதில் Table Designer என்னும் தலைப்பின் கீழே, Identity Column என்பதற்கு நேராக உள்ள Drop Downlist ல் DirectorID என்பதைத் தேர்வு செய்யவும்.
அல்லது கீழ்க்கண்ட செயல்முறையைத் தொடரலாம். Identity Column ஆக மாற்ற கீழ்க்கண்ட படத்தில் உள்ளபடி செய்யலாம். அந்த Column ஐத் தேர்வுசெய்தபிறகு, கீழே உள்ள Column Properties Tab ல் , Identity Specification ஐ Yes எனக் கொடுக்கவும்.
அதன் Increment , seed மதிப்புகளைக் கொடுக்கலாம். அல்லது 1 எனவே விட்டுவிடலாம். ஒவ்வொரு rowன் மதிப்பும் ஐந்து, ஐந்தாக அதிகரிக்கவேண்டும் எனில் Identity Increment ன் மதிப்பை 5 எனக் கொடுக்கவும்.

சரி ஒருவழியாக DirectorsInfo வின் Structure ஐ உருவாக்கிவிட்டோம். இப்போது இதை Close செய்துவிடவும்.

இப்போது மேலும் ஒரு எளிய Table ஒன்றை உருவாக்கி, அதற்கு FilmInfo எனப் பெயரிடுவோம்.
இந்த FilmInfo என்கிற புதிய Tableல் DirectorID என்னும் Column உள்ளது. இது int எனப்படும் எண் வகையைச் சேர்ந்த Data Type.

ஒவ்வொரு படத்தையும் வேறு வேறு இயக்குநர்கள் இயக்கியிருக்கலாம். ஒன்றுக்கு மேற்பட்ட திரைப்படங்களை ஒரே இயக்குநரே இயக்கியிருக்கலாம்.

1000 திரைப்படங்களின் தகவல்களைச் சேகரித்தோம் எனில், அதில் ஒரே இயக்குநரானவர் 10 அல்லது 25 அல்லது 100 படங்களைக்கூட எடுத்திருப்பார். 100 முறை அவரது பெயரை எழுதினால் நினைவகம் (memory) தேவையில்லாமல் ஆக்கிரமிக்கப்படும். அதனால் அவரது பெயரை ஒரே ஒருமுறை மட்டும் Master Table ல் (இங்கே DirectorsInfo - என்பதே Master table) கொடுத்து அவருக்காக ஒரு எண்ணை ஒதுக்கி விடுகிறோம்.

பலவித திரைப்படங்களின் தகவல்களை இரண்டாவது Table (FilmInfo என்பது இங்கே Detail Table)ல் பதிவுசெய்யப் போகிறோம். இங்கே ஒவ்வொரு Directorன் பெயரை முழுவதும் எழுதி நினைவகத்தை ஆக்கிரமிக்காமல் அவருக்குரிய எண்ணை மட்டும் கொடுப்போம்.

Master Table ல் ஒவ்வொரு Director க்கும் எண்களும், பெயர்களும் கொடுத்துவிட்டு, Detail Tableல் Directorக்கு உரிய எண்ணை மட்டும் கொடுப்பது வழக்கம்.

நினைவக இழப்பைக் குறைப்பதற்காகவும், ஒரே தகவலை திரும்பத்திரும்ப எழுதுவதைத் தவிர்க்கவும் - இந்த ஏற்பாடு.

ஒரு Director ஆனவர் பல படங்களை எடுத்துள்ளார் - எனில் இதை ONE TO MANY RELATIONSHIP என்போம்.

இந்த இரண்டாவது Tableன் Structureஐ ஏற்றிமுடித்ததும் கீழ்க்கண்ட செயல்முறையைச் செய்து இரண்டு Tableகளுக்கும் ஒரு உறவுமுறையை உண்டாக்கவும். உறவுமுறை (Table Relationship).
Test எனப்படும் Databaseல் Database Diagrams என்பதைத் தேர்வுசெய்து, Right Click செய்து, அதில் New Database Diagram ஐத் தேர்ந்தெடுக்கவும்.


உடன் தெரியும் உரையாடல் பெட்டியில் (dialog box) , DirectorsInfo மற்றும், FilmInfo ஆகிய இரண்டு Tableகளையும் தேர்வு செய்து , Add ஐ அழுத்தியபிறகு, Close அழுத்தவும்.இப்போது திரை கீழ்க்கண்டவாறு காட்சியளிக்கும்.

DirectorsInfo ல் இருக்கும் DirectorID ஐ அப்படியே இழுத்துக்கொண்டு வந்து, FilmInfo வில் இருக்கும் DirectorIDல் விடவும். அதாவது Master Tableன் DirectorID ஐ Drag செய்து, Detail Table ல் இருக்கும் DirectorIDல் Drop செய்யவும்.

எளிதான Drag and Drop தான்.

இப்போது திரையில் மேற்கண்ட படம் தெரியும். Primary key Table (Director Info).
Foreign Key Table (FilmInfo). இரண்டுமே DirectorID என்னும் Column ஆகவும், ஒரே DataTypeஆகவும் இருக்கிறது. பிறகு இரண்டு முறை OK கொடுக்கவும்.

இப்போது திரையில் கீழ்க்கண்ட படத்தைக் காணலாம்.இந்த Database Diagram ஐ Close செய்துவிட்டு, Tableக்குரிய தகவல்களை ஒவ்வொரு Row ஆக ஏற்றவும்.

DirectorsInfo வில் முதலில் உங்களுக்குத் தெரிந்த Directorsன் பெயர்களை மட்டும் கொடுத்தால் போதும். DirectorID என்பது அதுவாகவே உருவாகிக்கொள்ளும். அடுத்தடுத்த Directorகளுக்குரிய எண்கள் தானாகவே அமைந்துகொள்ளும். இதற்கு காரணம் அந்த குறிப்பிட்ட Column ஆனது IDENTITY Column என அமைக்கப்பட்டுள்ளதே.

பிறகு ஒவ்வொரு படங்களுக்கும் உரிய தகவல்களை Row by Row வாக FilmInfo என்னும் Tableல் ஏற்றவும். இங்கே DirectorIDஎன்னும் Columnல் ஏற்கனவே Master Tableல் என்ன எண்கள் அளிக்கப்பட்டிருக்கிறதோ அவற்றை மாத்திரமே கொடுக்கவேண்டும். Master Tableல் இல்லாத DirectorID ஐக் கொடுத்தால் பிழைச்செய்தி காண்பிக்கும்.
உதாரணத்திற்காக DirectorInfoவில் சில records உங்கள் பார்வைக்கு.

FilmInfo எனப்படும் Detail Tableல் நான் ஏற்றிய சில Records கீழே.
இதில் Master Table ல் என்ன DirectorID கொடுத்தோமோ அதை Detail Tableல் refer செய்கிறோம். ஒவ்வொரு படத்துக்கும் அதை இயக்கிய இயக்குநரின் பெயரைக் கொடுக்காமல், அவருக்குரிய ID எனப்படும் எண்ணை மட்டும் கொடுக்கிறோம்.

இரண்டு Tableஐயும் இணைத்து JOIN செய்வதற்கு உரிய செயல்முறை கீழே:

T-SQL Editorல் Right Click செய்து, Design Query in Editor என்பதைத் தேர்வு செய்யவும்.

பிறகு வரும் Dialog boxல் இரண்டு Tablesஐயும் தேர்வு செய்து Add கொடுத்தபின் Close செய்யவும்.
ஏற்கனவே Primary key, மற்றும் Foreign key ஆகியவை முறைப்படி இணைக்கப்பட்டிருந்தால் கீழ்க்கண்ட படம் திரையில் காட்சியளிக்கும்.
இரண்டு Tableகளிலிருந்து எந்தெந்த Columnsஐ நாம் தேர்ந்தெடுக்கிறோம் என்பதை ஒவ்வொரு Columnக்கும் எதிரேயுள்ள Checkbox ல் Tick செய்துவிடுங்கள்.
இப்படி Columnகளைத் தேர்வுசெய்தவுடன் உங்களுக்குக் கீழ்க்கண்ட Query கிடைக்கும்

SELECT DirectorsInfo.DirectorName, FilmInfo.FilmName, FilmInfo.Actor, FilmInfo.Actress
FROM DirectorsInfo INNER JOIN
FilmInfo ON DirectorsInfo.DirectorID = FilmInfo.DirectorID
பின் OK அழுத்தினால் மேலேயுள்ள Query ஆனது T-SQL Editorக்கு வந்துவிடும்.

F5 அழுத்தின் இயக்கவும். இதன் மூலம் இரண்டு Tableன் தகவல்களும் ஒரே திரையில் காண்பிக்கப்படும்.


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

SELECT உடன் ஒரு செயல்முறைப் பயிற்சி



SELECT * FROM tableName என்பது ஒரு Tableல் இருக்கும் அனைத்து Rowsஐயும் திரையில் காண்பிக்க, தேடி எடுக்க.

இதில் குறிப்பிட்ட Rowsஐ மாத்திரம் எடுப்பதற்கு என்ன செய்யவேண்டும். ஒரு WHERE ஐ இணைத்தால் போதும்.

SELECT * FROM tableName WHERE Condition

Condition என்பதைக் கட்டுப்பாடு எனக் கொண்டால் ஒன்றுக்கு மேற்பட்ட கட்டுப்பாடுகளை விதிக்க என்ன செய்ய வேண்டும்?

SELECT * FROM tableName WHERE Condition1 AND Condition2 AND Condition3

AND என்னும் Logical Operator ஐ உடன் சேர்த்துப் பயன்படுத்த வேண்டும்.

SELECT * FROM என்று கொடுத்தால் அனைத்து Columns ஐயும் நாம் பார்ப்பதற்காக தேர்வு செய்கிறோம் என்று அர்த்தம்.

இதில் குறிப்பிட்ட Columnsஐ மாத்திரம் பார்க்கவேண்டுமென்றால் என்ன செய்வது?

SELECT Column1, Column2, Column3 FROM tableName

SELECT column_name(s) FROM table_name

உதாரணம்:
SELECT [Name], [City] FROM Persons

கீழ்க்கண்ட Tableன் தகவல்களை உற்று நோக்கவும். இதில் City என்னும் இடத்தில் 3 நகரங்கள் உள்ளன. Chennai, Erode, USA. ஆனால் Chennai,Erode ஆகியவை இரண்டுமுறையும், USA - ஒருமுறையும் இடம் பெற்றுள்ளது.



SELECT [CITY] FROM MyList எனக் கொடுத்தால் அனைத்து நகரங்களும் வரும்.


ஆனால் இதில் திரும்பத்திரும்ப வரும் நகரங்களை விட்டுவிட்டு, ஒன்றுக்கு மேற்பட்டு வந்திருப்பவைகளை ஒரே ஒரு முறை மட்டும் காண்பிப்பதற்கு DISTINCT உதவும்.

SELECT DISTINCT [CITY] FROM MyList

குறிப்பிட்ட நகரத்தை மட்டும் காண்பதற்கு இதில் WHERE பயன்படுத்துவோம்.
SELECT column_name(s)
FROM table_name
WHERE column_name operator value

SELECT * FROM MyList WHERE City ='Erode'
ஈரோடு நகர் நண்பர்களைப் பற்றி மட்டும் காண்பதற்கு
நமது தேர்வில் ஒன்றுக்குமேற்பட்ட நகரத்தைக் காண்பதற்கு OR பயன்படுத்துவோம்

அமெரிக்கா மற்றும், சென்னை - இவற்றைத்  தேர்வு செய்வதற்கு :

SELECT * FROM MyList WHERE City ='USA' OR City  = 'Chennai'
இதையே வேறு விதமாக OR பயன்படுத்தாமல் எழுதலாம். அதற்கு IN பயன்படுத்தவேண்டும்.

SELECT * FROM MyList WHERE City IN ('USA' ,'Chennai')
இதற்கும் அதே விடைதான்.

சென்னை நீங்கலாக உள்ள நகரங்களில் இருக்கும் நண்பர்களின் பட்டியலைப் பார்வையிட:
இதற்கு NOT பயன்படுத்தலாம். NOT என்பது Logical Operator வகையைச் சார்ந்தது.

<> , != என்பது Relational Operator வகையைச் சேர்ந்தது.

அ) SELECT * FROM MyList WHERE City <> 'Chennai'

ஆ) SELECT * FROM MyList WHERE City != 'Chennai'

இ) SELECT * FROM MyList WHERE City NOT IN ('Chennai')

அனைத்துக்கும் ஒரே விடைதான். அது கீழே. சென்னையைத் தவிர.
யாருடைய பெயரில் n என்கிற எழுத்து உள்ளது என்பதை அறிவதற்கு :

SELECT * FROM MyList WHERE [Name] LIKE '%n%'
LIKE எனப்படும் keywordன் பயன் யாதெனில், குறிப்பிட்ட எழுத்துகளைக் கொண்ட தகவல்களை மட்டும் தேர்வு செய்வது
%n% எனில் ஏதோ ஒரு எழுத்து n ஆக இருக்கும் நபர்கள்.

_ என்பது underscore (அடிக்கோடு), இது ஒரு எழுத்தை மட்டும் எதைக்கொண்டாவது நிரப்பிக்கொள் என்பதற்காக. % என்பது மீதமுள்ள அனைத்து எழுத்துக்களையும் நிரப்பிக்கொள் என்பதே. இவற்றிற்கு Wild Card Characters என்று பெயர்.


SELECT * FROM MyList WHERE [Name] LIKE '_a%'

முதல் எழுத்து எதுவாக இருந்தாலும் பரவாயில்லை. ஆனால் இரண்டாம் எழுத்து கண்டிப்பாக 'a'. மீதியுள்ள எழுத்துக்களைப் பற்றிக் கவலையில்லை. அதற்காக.

சுருங்கச் சொன்னால் யாருடைய பெயரில், இரண்டாம் எழுத்து a ஆக இருக்கிறது.

Person# ல் 1,3,5 ஆகியோர்களைத் தேர்வு செய்வதற்கு:
SELECT * FROM MyList WHERE [Person#] = 1 OR [Person#] = 2 OR [Person#] = 3

OR என்பது எதாவது ஒரு Condition ஏற்றுக்கொண்டாலும் ஒத்துழைக்கக்கூடியது
இதை IN மூலம் எழுதினால்,

SELECT * FROM MyList WHERE [Person#] IN (1,3,5)

1,3,5 இவற்றைத் தவிர பிற Rowsகளைப் பார்க்க :
அதாவது 2, மற்றும் 4 ஆகியவற்றை மட்டும் பார்க்க

SELECT * FROM MyList WHERE [Person#] NOT IN (1,3,5)

அல்லது

SELECT * FROM MyList WHERE [Person#] != 1 AND [Person#] != 3 AND [Person#] !=5

அல்லது

SELECT * FROM MyList WHERE [Person#] <> 1 AND [Person#] <> 3 AND [Person#] <> 5

SELECT * FROM MyList எனக் கொடுக்கிறேன்.
இதன் விடை
இதில் பெயர்களை மையமாகக் கொண்டு ஏறுவரிசை (ascending), அல்லது இறங்குவரிசை (descending) ஆகக் காண்பிப்பதற்கு என்ன செய்வது?

இதற்காக SELECT உடன் ORDER BY எனப்படும் keyword ஐப் பயன்படுத்தவேண்டும்.

ASC எனக் கொடுத்தால் ஏறுவரிசையாகவும், DESC எனக் கொடுத்தால் இறங்குவரிசையாகவும் காட்சியளிக்கும்.

SELECT * FROM MyList ORDER BY [Name] ASC (ஏறுவரிசையில் பார்க்க)

SELECT * FROM MyList ORDER BY [Name] DESC (இறங்குவரிசையில் காண)