# கட்டமைப்புள்ள வினவு மொழி

## மொழி கூறுகள்

### வினவல்கள்

வினவல் என்பது எஸ்.கியூ.எல்லில் மிகவும் பொதுவான செயல்பாடு ஆகும். இது அறிவித்தல் <code>SELECT</code> வாக்கியத்துடன் நிகழ்த்தப்படுகின்றது. <code>SELECT</code> வாக்கியமானது தரவை ஒன்று அல்லது அதற்கு மேற்பட்ட அட்டவணைகள் அல்லது கோவைகளில் இருந்து பெறுகின்றது. தரநிலையான SELECT கூற்றுக்கள் தரவுத்தளத்தில் ஒரே மாதிரியான விளைவுகளைக் கொண்டிருப்பதில்லை. <code>SELECT</code> இன் சில தரநிலையற்ற செயலாக்கங்கள் சில தரவுத்தளங்களில் காணப்படும் <code>SELECT INTO</code> தொடரியல் போன்று ஒரே மாதிரியான விளைவுகளைக் கொண்டிருக்கலாம்.  
வினவல்கள் பயனரை தேவையான தரவை விவரிக்க அனுமதிக்கின்றது. தரவுத்தள மேலாண்மை அமைப்பை(DBMS) திட்டமிடல், ஏற்புடையதாக்கல் மற்றும் அது தேர்ந்தெடுக்கின்ற முடிவை வருவிக்கத் தேவையான இயற்பியல் ரீதியான செயல்பாடுகளை நிகழ்த்த விடுகின்றது.  
ஒரு வினவலானது <code>SELECT</code> குறிச்சொல்லை உடனடியாகப் பின்பற்றி வருகின்ற இறுதி முடிவில் சேர்க்கப்படக்கூடிய நெடுவரிசைகளின் பட்டியலைக் கொண்டுள்ளது. ஒரு நட்சத்திரக் குறியானது ("<code>*</code>") அந்த வினவலானது வினவப்பட்ட அட்டவணைகளின் அனைத்து நெடுவரிசைகளையும் கொடுக்க வேண்டும் என்பதைக் குறிக்கவும் பயன்படுத்தப்படலாம். <code>SELECT</code> என்பது எஸ்.கியூ.எல்லில் விருப்பக் குறிச்சொற்கள் மற்றும் பிரிவுகளைக் கொண்ட மிகவும் சிக்கலான கூற்றாகும், அது பின்வருவனவற்றை உள்ளடக்குகின்றது:  
- <code>FROM</code> பிரிவானது எந்த அட்டவணை(களில்) இருந்து தரவு பெறப்பட இருக்கின்றது என்பதைக் குறிக்கின்றது. <code>FROM</code> பிரிவானது இணைக்கப்படும் அட்டவணைகளுக்கான விதிகளைக் குறிப்பிட விருப்ப <code>JOIN</code> துணைப்பிரிவுகளை சேர்க்க முடியும்.
- <code>WHERE</code> பிரிவானது ஒரு ஒப்பீட்டு நிலையை கொண்டிருக்கின்றது. இது வினவலால் வரிசைகள் அளிக்கப்படுவதைக் கட்டுப்படுத்துகின்றது. <code>WHERE</code> பிரிவானது உண்மைக்கு மதிப்பிடப்படாத ஒப்பீட்டு நிலைக்கான முடிவுத் தொகுப்பிலிருந்து அனைத்து வரிசைகளையும் நீக்குகின்றது.
- <code>GROUP BY</code> பிரிவானது சிறிய வரிசைகளில் தொகுப்பில் பொதுவான மதிப்புகளைக் கொண்ட வரிசைகளைக் காண்பிக்கப் பயன்படுகின்றது. <code>GROUP BY</code> என்பது பெரும்பாலும் எஸ்.கியூ.எல் ஒருங்கிணைப்பு செயல்பாடுகளுடன் சேர்க்கையில் பயன்படுகின்றது அல்லது முடிவுத் தொகுப்பில் இருந்து பிரதி வரிசைகளை நீக்கப் பயன்படுகின்றது. <code>WHERE</code> பிரிவானது <code>GROUP BY</code> பிரிவுக்கு முன்னர் பொருத்தப்படுகின்றது.
- <code>HAVING</code> பிரிவானது <code>GROUP BY</code> பிரிவிலிருந்து வெளிவரும் முடிவு வரிசைகளை வடிகட்டப் பயன்படுத்தும் நிலையைக் கொண்டிருக்கின்றது. ஏனெனில் இது <code>GROUP BY</code> பிரிவின் முடிவுகளில் செயல்படுகின்றது. மொத்த செயல்பாடுகளை <code>HAVING</code> பிரிவு நிலையில் பயன்படுத்த முடியும்.
- <code>ORDER BY</code> பிரிவானது நெடுவரிசைகள் முடிவான தரவை வரிசைப்படுத்தப் பயன்படுகின்றது மற்றும் எந்தத் திசையில் அவை வரிசைப்படுத்தப்பட வேண்டும் (விருப்பங்களாக ஏறுவரிசை அல்லது இறங்குவரிசை உள்ளன) என்பதை அடையாளம் காணுகின்றது. <code>ORDER BY</code> பிரிவு இல்லாமல் எஸ்.கியூ.எல் வினவல் மூலமாக அளிக்கப்பட்ட வரிசைகளின் வரிசைப்படுத்தலானது வரையறுக்க முடியாததாக உள்ளது.  
பின்வருவது விலையுயர்ந்த நூல்களின் பட்டியலை அளிக்கின்ற <code>SELECT</code> வினவலின் உதாரணம் ஆகும். வினவலானது *price* நெடுவரிசையானது 100.00 க்கும் அதிகமான மதிப்பைக் கொண்டுள்ள *Book* அட்டவணையிலிருந்து அனைத்து வரிசைகளையும் எடுக்கின்றது. முடிவானது *title* இன் படி ஏறுவரிசையில் வரிசைப்படுத்தப்பட்டுள்ளது. *select list* இல் நட்சத்திரக் குறியீடானது (*) *Book* அட்டவணையின் அனைத்து நெடுவரிசைகளையும் முடிவுத் தொகுப்பில் சேர்க்கப்பட வேண்டும் என்பதைக் குறிக்கின்றது.
<source lang="sql">
SELECT *
FROM Book
WHERE price > 100.00
ORDER BY title;
</source>  
கீழேயுள்ள உதாரணமானது பல்வேறு அட்டவணைகள், குழுப்படுத்துதல் மற்றும் ஒருங்கிணைத்தல் ஆகியவற்றின் வினவலை நூல்களின் பட்டியல் மற்றும் ஒவ்வொரு நூலுடன் தொடர்புடைய ஆசிரியர்களின் எண்ணிக்கை ஆகியவற்றை அளிப்பதன் மூலமாக விளக்குகின்றது.  
<source lang="sql">
SELECT Book.title,
count(*) AS Authors
FROM Book
JOIN Book_author ON Book.isbn = Book_author.isbn
GROUP BY Book.title;
</source>  
உதாரண வெளியீடானது பின்வருவனவற்றை ஒத்திருக்கலாம்:  
Title Authors
---------------------- -------
SQL Examples and Guide 4
The Joy of SQL 1
An Introduction to SQL 2
Pitfalls of SQL 1  
நிபந்தனையின் முன்னர் *isbn* மட்டுமே இரண்டு அட்டவணைகளின் பொதுவான நெடுவரிசைப் பெயராகும். மேலும் *title* என்ற நெடுவரிசைப் பெயர் *Books* அட்டவணையில் மட்டுமே உள்ளது, மேலே உள்ள வினவலை பின்வரும் வடிவில் எழுதலாம்:  
<source lang="sql">
SELECT title,
count(*) AS Authors
FROM Book
NATURAL JOIN Book_author
GROUP BY title;
</source>  
இருப்பினும் பல விற்பனையாளர்கள் ஒன்று இந்த அணுகுமுறையை ஆதரிப்பதில்லை அல்லது நெடுவரிசை பெயர் மாற்றங்களைக் கோருகின்றனர்.  
எஸ்.கியூ.எல் சேமிக்கப்பட்ட மதிப்புகளில் கணிக்கப்படும் மதிப்புகளுக்கான செயற்குறிகள் மற்றும் செயல்பாடுகளைக் கொண்டுள்ளது. எஸ்.கியூ.எல் ஆனது வெளிப்படும் தரவிற்கு *select list* இல் கோவைகளின் பயன்பாட்டை அனுமதிக்கின்றது. பின்வரும் உதாரணத்தில் 100.00க்கும் அதிகமான விலையுடைய நூல்களின் பட்டியலை அளிப்பதுடன் கூடுதலாக *sales_tax* நெடுவரிசை விற்பனை வரி மதிப்பானது *விலை*யில் 6% கணக்கிடப்பட்டுள்ளது.  
<source lang="sql">
SELECT isbn,
title,
price,
price * 0.06 AS sales_tax
FROM Book
WHERE price > 100.00
ORDER BY title;
</source>