முக்கிய விஷயங்கள்
- டெவலப்பர், QA ஆட்டோமேஷன், டேட்டா அனலிஸ்ட் என எந்த IT வேலைக்கும் SQL அடிப்படைத் தகுதியாக இருக்கிறது.
- SQL Table என்பதை ஒரு ஸ்ட்ரிக்ட்டான Excel Sheet போல நினைக்கலாம்; இதில் ஒவ்வொரு வரிசையும் ஒரு தனி நிகழ்வு.
- SELECT என்பது என்ன தகவல் வேண்டும் என்பதையும், WHERE என்பது எந்த வரிசைகள் மட்டும் வேண்டும் என்பதையும் முடிவு செய்கிறது.
- GROUP BY பல வரிசைகளை ஒன்றாகச் சுருக்கி பிசினஸ் கணக்குகளை (SUM, COUNT, AVG) எளிதாகப் போடுகிறது.
SQL Table அப்படின்னா உண்மையில் என்ன?
சென்னை OMR-ல் இருக்கிற ஒரு சாஃப்ட்வேர் கம்பெனியோ அல்லது பெங்களூரு ஸ்டார்ட்அப்போ, நீங்க எந்த IT ஆபீஸிற்குள் போனாலும் ஒரு விஷயம் பொதுவா இருக்கும். அங்கே ஒரு ஃபுட் டெலிவரி ஆப் உருவாக்கினாலும் சரி, பேங்கிங் சிஸ்டம் உருவாக்கினாலும் சரி, பின்னணியில் டேட்டாபேஸ் ஓடிக்கொண்டே இருக்கும். அந்த டேட்டாபேஸை புரிந்துகொள்ள உதவும் ஒரு பொதுவான மொழிதான் SQL (Structured Query Language).
SQL Table என்பதை நாம தினமும் பார்க்கிற Excel Sheet மாதிரி சுலபமா புரிஞ்சுக்கலாம். ஆனா எக்செல் ஷீட்டில் ஒரு காலத்தில் நம்பர் போட்டுவிட்டு அடுத்த வரியில் எழுத்துக்களை எழுதினாலும் அது தடுத்து நிறுத்தாது. SQL டேபிள் அப்படி கிடையாது. அது ரொம்பவே ஸ்ட்ரிக்ட். ஒவ்வொரு Column-க்கும் என்ன வகையான டேட்டா (Data Type) வர வேண்டும் என்று முன்கூட்டியே சட்டம் போட்டு வைத்திருப்பார்கள்.
உதாரணமாக, ஒரு ஆன்லைன் ஷாப்பிங் தளத்தில் customer_orders என்ற டேபிள் இருக்கிறது என்று வைத்துக்கொள்வோம். இதில் ஒவ்வொரு Row-வும் ஒரு வாடிக்கையாளர் செய்த ஆர்டரைக் குறிக்கும். அதில் ஆர்டர் எண் (order_id), வாடிக்கையாளர் இருக்கும் ஊர் (city), பொருள் வகை (category), வாங்கிய தொகை (amount_inr) மற்றும் பணம் செலுத்தப்பட்ட நிலை (payment_status) போன்ற விவரங்கள் இருக்கும். இந்த விவரங்களை நமக்குத் தேவையானபடி பிரித்தெடுக்க SQL உதவுகிறது.
SELECT மற்றும் WHERE பயன்படுத்தி Data-வை எப்படி எடுக்கலாம்?
ஒரு டேபிளில் லட்சக்கணக்கான பதிவுகள் இருக்கும்போது, எல்லாவற்றையும் அப்படியே அள்ளி எடுத்துக்கொண்டு வர முடியாது. நமக்குத் தேவையான தகவல்களை மட்டும் பிரித்து எடுக்க SELECT பயன்படுகிறது. அதாவது, ஸ்கிரீனில் எந்தெந்த Columns மட்டும் தெரிய வேண்டும் என்பதை SELECT தான் முடிவு செய்கிறது.
அதேபோல, எல்லா வாடிக்கையாளர்களின் டேட்டாவும் நமக்குத் தேவைப்படாது. வெற்றிகரமாக முடிந்த ஆர்டர்கள் மட்டும் வேண்டும் என்றால், அங்கே ஃபில்டர் போட வேண்டும். அந்த வேலையைத்தான் WHERE செய்கிறது. டேபிளில் உள்ள ஒவ்வொரு வரிசையையும் இந்த கண்டிஷன் வைத்து செக் பண்ணி, உண்மை என்றால் மட்டுமே ரிசல்ட்டில் கொண்டுவரும்.
SELECT order_id, city, amount_inr
FROM customer_orders
WHERE payment_status = 'COMPLETED' AND amount_inr > 1000;மேலே உள்ள கோடில் நாம டேட்டாபேஸுக்கு என்ன சொல்லியிருக்கிறோம் தெரியுமா? customer_orders டேபிளுக்குள் போ. அங்கே பணம் வெற்றிகரமாகச் செலுத்தப்பட்டு (payment_status = 'COMPLETED') மற்றும் 1000 ரூபாய்க்கு மேல் ஆர்டர் செய்த விவரங்களை மட்டும் பார். அந்த வரிசைகளில் இருந்து order_id, city மற்றும் amount_inr ஆகிய மூன்று விஷயங்களை மட்டும் எடுத்துக் கொடு என்று கட்டளையிட்டு இருக்கிறோம்.
ORDER BY மற்றும் LIMIT கொண்டு Data-வை எப்படி வரிசைப்படுத்தலாம்?
டேட்டாபேஸ் என்பது ஒரு பெரிய கிடங்கு மாதிரி. அதில் டேட்டா நாம் உள்ளே போட்ட வரிசையிலேயே சேமித்து வைக்கப்படும் என்று சொல்ல முடியாது. சாதாரணமாக ஒரு Query ரன் பண்ணும்போது, ஹார்ட் டிஸ்க்கில் இருந்து எது வேகமாக வருகிறதோ அந்த வரிசையில் முன்னும் பின்னுமாக வரலாம்.
அதை ஒரு நேர்த்தியான வரிசையில் கொண்டுவர ORDER BY பயன்படுகிறது. பெரிய தொகையிலிருந்து சின்ன தொகை வரை வரிசைப்படுத்த வேண்டும் என்றால் DESC (Descending) சேர்க்க வேண்டும். சின்னதிலிருந்து பெருசு என்றால் ASC (Ascending) பயன்படுத்தலாம்.
SELECT order_id, amount_inr
FROM customer_orders
WHERE payment_status = 'COMPLETED'
ORDER BY amount_inr DESC
LIMIT 5;இந்த குவரியில் ORDER BY amount_inr DESC என்று கொடுத்திருப்பதால், அதிக விலையுள்ள ஆர்டர்கள் மேலே வந்துவிடும். அதோடு கடைசியில் LIMIT 5 சேர்த்திருக்கிறோம். அதாவது முதல் 5 பெரிய ஆர்டர்களை மட்டும் எனக்குக் காட்டு என்று சொல்கிறோம். ஸ்விக்கி அல்லது அமேசானில் அதிக விலைக்கு வாங்கிய டாப் 5 ஆர்டர்களைத் தேடுவது இப்படித்தான் நடக்கிறது.
GROUP BY மற்றும் Aggregates வெச்சு மொத்த கணக்கு எப்படி போடுவது?
தனித்தனி ஆர்டர்களைப் பார்ப்பது ஒருபுறம் இருக்க, பிசினஸ் முடிவுகள் எடுக்க மொத்தக் கணக்கு ரொம்ப முக்கியம். ஒவ்வொரு ஊரிலும் எவ்வளவு ரூபாய்க்கு வியாபாரம் நடந்திருக்கிறது என்று பார்க்க வேண்டும் என்றால் என்ன செய்வது? அதற்குத்தான் GROUP BY பயன்படுகிறது.
GROUP BY என்பது ஒரே மாதிரி இருக்கும் தகவல்களை ஒன்றாகக் குவித்து ஒரு ஒற்றை வரியாக மாற்றும். இதனுடன் SUM (கூட்டுத்தொகை), COUNT (எண்ணிக்கை), AVG (சராசரி) போன்ற அக்ரிகேட் ஃபங்ஷன்களைப் பயன்படுத்த வேண்டும்.
SELECT city, COUNT(order_id) AS total_orders, SUM(amount_inr) AS total_sales
FROM customer_orders
WHERE payment_status = 'COMPLETED'
GROUP BY city
ORDER BY total_sales DESC;இங்கே என்ன நடக்கிறது என்றால், முதலில் வெற்றிகரமான ஆர்டர்களை WHERE பிரித்து விடுகிறது. பின்னர் சென்னை, கோவை, மதுரை என ஊர்களின் அடிப்படையில் (city) ஆர்டர்கள் தனித்தனி குழுவாகப் பிரிக்கப்படுகின்றன. ஒவ்வொரு ஊருக்கும் எத்தனை ஆர்டர்கள் வந்தன என்பதை COUNT கணக்கிடுகிறது; மொத்த வருமானம் எவ்வளவு என்பதை SUM கூட்டிக் காட்டுகிறது.
ஒரு Sales Table வெச்சு இதை எப்படி ரியல் டைமில் Practice செய்வது?
படிக்கும்போது எல்லாமே எளிதாகத்தான் தெரியும். ஆனால் நீங்களாகவே ஒரு சின்ன குவரியை எழுதிப் பார்க்கும் போதுதான் லாஜிக் மனதில் பதியும். நம்முடைய டேபிளில் எலெக்ட்ரானிக்ஸ், ஃபேஷன், மளிகை எனப் பல வகைகள் (category) இருக்கின்றன என்று வைத்துக்கொள்வோம்.
ஒவ்வொரு பொருளின் பிரிவிலும் சராசரியாக வாடிக்கையாளர்கள் எவ்வளவு தொகைக்கு பில் செய்கிறார்கள் என்பதைத் தெரிந்துகொள்ள கீழ்க்கண்ட குவரியை எழுதிப் பார்க்கலாம்.
SELECT category, AVG(amount_inr) AS average_bill
FROM customer_orders
WHERE payment_status = 'COMPLETED'
GROUP BY category;இந்த குவரியை இயக்கும்போது, ஃபேஷன் பிரிவில் சராசரி பில் எவ்வளவு, மளிகைப் பிரிவில் சராசரி பில் எவ்வளவு என்று தெளிவாகத் தெரிந்துவிடும். இதை வைத்து எந்தப் பிரிவில் வாடிக்கையாளர்கள் அதிக பணம் செலவழிக்கிறார்கள் என்பதை பிசினஸ் டீம் எளிதாகத் தீர்மானிக்கும்.
பிகினர்ஸ் SQL எழுதும்போது பண்ற பொதுவான தவறுகள் என்ன?
புதிதாக SQL கற்கும்போது பெரும்பாலானோர் செய்யும் முதல் தவறு, எல்லாவற்றிற்கும் SELECT * போடுவதுதான். லோக்கல் லேப்டாப்பில் இது பிரச்சினை இல்லை. ஆனால் கோடிக்கணக்கான டேட்டா இருக்கும் சர்வரில் அத்தனை காலம்களையும் இழுத்து வந்தால், நெட்வொர்க் டிராஃபிக் அதிகமாகி அப்ளிகேஷன் ஸ்லோ ஆகிவிடும்.
இரண்டாவது தவறு, GROUP BY போடும்போது நடக்கும் குழப்பம். SELECT-ல் நீங்கள் என்னென்ன சாதாரண காலம்களைப் போடுகிறீர்களோ, அவை அத்தனையும் GROUP BY வரியிலும் கண்டிப்பாக இருக்க வேண்டும். அக்ரிகேட் ஃபங்ஷன்களுக்குள் இருக்கும் காலம்களை மட்டும் அதில் போடத் தேவையில்லை.
மூன்றாவது தவறு, ஃபில்டர் போடுவதில் வரும். சாதாரண வரிசைகளை ஃபில்டர் செய்ய WHERE பயன்படுத்த வேண்டும். ஆனால் GROUP BY செய்த பிறகு வரும் தொகையை ஃபில்டர் செய்ய (உதாரணமாக மொத்த விற்பனை 50,000 ரூபாய்க்கு மேல் உள்ள ஊர்கள் மட்டும் வேண்டும் என்றால்) WHERE வேலை செய்யாது. அதற்கு HAVING பயன்படுத்த வேண்டும்.
இந்திய IT இன்டர்வியூவில் SQL எப்படி டெஸ்ட் பண்றாங்க?
டிசிஎஸ், இன்ஃபோசிஸ், ஸோஹோ போன்ற முன்னணி நிறுவனங்களாக இருந்தாலும் சரி, புதிய தயாரிப்பு நிறுவனங்களாக இருந்தாலும் சரி, ஃப்ரெஷர் அல்லது ஜூனியர் இன்டர்வியூவில் SQL கட்டாயம் இருக்கும். ஜாவா, பைத்தான் தெரியுமா என்று கேட்பதற்கு முன்பாகவே, ஒரு டேபிளைக் கொடுத்து "இரண்டாவது அதிக சம்பளம் வாங்கும் ஊழியரைக் கண்டுபிடி" என்றோ, "சென்னையில் அதிக ஆர்டர் செய்த கஸ்டமரை எடு" என்றோதான் கேள்வி கேட்பார்கள். ஆட்டோமேஷன் டெஸ்டிங் செய்பவர்களுக்கு Backend API தரும் டேட்டாவும், டேட்டாபேஸில் சேரும் டேட்டாவும் ஒன்றுதானா என்று வெரிஃபை செய்ய SQL குவரிகள் தெரிந்திருப்பது கட்டாயம்.
நீங்க இப்போ என்ன பண்ணணும்?
இன்றே உங்கள் லேப்டாப்பில் SQLite அல்லது DBeaver போன்ற ஒரு எளிய டூலை இன்ஸ்டால் செய்து கொள்ளுங்கள். மேலே பார்த்த கான்செப்ட்களை வைத்து உங்களுக்கான ஒரு சின்ன டாஸ்க் இதோ:
நம்முடைய customer_orders டேபிளில் இருந்து, சென்னை (Chennai) நகரத்தில் நடந்த ஆர்டர்களில், அதிக தொகையிலிருந்து குறைந்த தொகை வரை முதல் 3 இடங்களைப் பிடித்த ஆர்டர்களை மட்டும் எடுக்க ஒரு SQL குவரியை எழுதிப் பாருங்கள். எழுதிப் பழகினால் மட்டுமே SQL உங்கள் விரல் நுனிக்கு வரும்.




கருத்துகள் (0)
Be the first to comment!