Thursday, July 23, 2009

ப்ளாகை ஃபாலோ பண்ணுவது


இதை தங்கள் குட்ப்ளாக்ஸ் பகுதியில் வெளியிட்ட, யூத்ஃபுல் விகடனுக்கு நன்றி!
உங்களுக்கு ஒரு பதினாறு ப்ளாக் பிடித்திருக்கிறதென்று வைத்துக் கொள்ளுங்கள். நீங்கள் அவ்வளவு பேரையும் ஞாபகம் வைத்துக் கொள்ள வேண்டும். அல்லது, ஃபேவரிட்ஸில் ஆட் பண்ணனும். அப்படி ஆட் பண்ணினால் ஆபீஸ் சிஸ்டத்தில் அது இருக்காது.அது மட்டுமல்ல, உங்களுக்கு விருப்பமான ப்ளாகில், புது பதிவுகள் போடப்பட்டுள்ளதா? என்று ஒவ்வொரு முறையும் ஓபன் பண்ணிப் பார்ப்பீர்கள். ஒரு சில ப்ளாக் அட்ரஸை மறந்து கூட போய் விடுவீர்கள்.இதற்கெல்லாம் சுலபமான ஒரு தீர்வு இருக்கிறது. நீங்கள் ப்ளாகை ஓபன் செய்யாமலே, அதில் புது பதிவு போடப்பட்டுள்ளதா என்று தெரிந்து கொள்ளலாம். அது மட்டுமல்ல, நீங்கள் விரும்பும் அந்த பதினாறு ப்ளாகுகளின் அனைத்து புது பதிவுகளின் தலைப்புகளும் ஒரே இடத்தில் பார்த்துக் கொள்ளலாம். என்ன புரியவில்லையா? தொடர்ந்து படியுங்கள்.ஒரே தீர்வு, அந்த ப்ளாகை ஃபாலோ பண்ணுவது தான். இதோ இந்த ப்ளாகில், ரசிப்பவர்கள் என்ற தலைப்பில் அது இடம் பெற்றிருக்கிறது. பிளாக் எழுதும் பிளாகர்ஸ் தவிர, மற்றவர்களுக்கு அது பற்றி சரியாக தெரிவதில்லை. அதற்காகத்தான் இந்த பதிவு.பல பேர் நினைப்பது போல, இது சும்மா, நம்ம பெயரை, நாம் அவர்களுடைய ஃபேன் என்று காட்டுவதற்காக இணைத்துக் கொள்வதல்ல. இது, நமக்கு எத்துணை ப்ளாகுகள் விருப்பமோ, அத்துணையின் பதிவுகளையும் மிஸ் பண்ணாமல் படிக்க உதவுகிறது.இதற்கு, gmail அக்கவுண்ட் வேண்டும். இல்லாதவர்கள், http://www.gmail.com/ ல் ஒன்று க்ரியேட் செய்து கொள்ளவும். அடுத்து, வலதுபுறம், ‘ரசிப்பவர்கள்:’ என்று இருக்கும் தலைப்பின் கீழ் உள்ள FOLLOW என்பதைக் க்ளிக் செய்யவும். இப்போ கீழ்கண்ட விண்டோ தோன்றும்.
இதில் கூகுள் (Google) என்று இருப்பதின் மேல் வைத்து க்ளிக் செய்யுங்கள். இப்பொழுது கீழே காணும் படியான இன்னொரு விண்டோ ஓபன் ஆகும். இதில் உங்க gmail யூஸர் ஐடி மற்றும் password கொண்டு sign in பண்ணிக் கொள்ளுங்கள். இப்பொழுது கீழே இருக்கும் விண்டோவைப் பார்க்கலாம். இதில், பெயர் என்ற இடத்தில், உங்கள் பெயரை அல்லது புனைப் பெயரைக் கொடுங்கள். கவலை வேண்டாம், பிடிக்காவிட்டால், பெயரை பின்பு மாற்றிக் கொள்ளலாம். அல்லது போட்டோ அப்லோடு செய்யலாம் அல்லது பின்னர் செய்து கொள்ளலாம். இப்போ, Follow this blog என்று இருப்பதை க்ளிக் செய்யுங்கள். இப்பொழுது, உங்கள் ஸ்கிரீனின் தோற்றம் இவ்வாறு இருக்கும்: ஒரு நிமிஷம், இப்போ Close கொடுப்பதற்கு முன், View Blogger Dashboard என்பதை க்ளிக் செய்யுங்கள். நீங்கள் விருப்பப்பட்டால், உங்க ஃபிரெண்ட்ஸையும் இந்த ப்ளாகில் இணையும்படி, மெயில் அணுப்பலாம், Invite your friends என்ற லின்க் மூலம். சரி, இப்போதைக்கு View Blogger Dashboard என்பதை க்ளிக் பண்ணி இருக்கீங்க. இப்போ இந்த விண்டோ ஓபன் ஆகும். இது தான் டாஷ்போர்டு என்பது. இதில் கீழ் பாதியில் பாருங்கள். Reading List என்று இருக்கும். அதன் கீழே Blogs என்பதன் கீழ், All blog updates - ‘என்’ எழுத்து இகழேல் என்று நீங்கள் ஃபாலோ பண்ணிய ப்ளாகின் பெயர் உள்ளது. அடுத்து, Items ன் கீழ், ‘கொடிவேரியில் காவேரியா?’ என்ற பதிவும், அது எந்த ப்ளாகுடையது என்பதும், பதிவு போட்ட நேரமும், முதல் சில வரிகளும் இருக்கிறது. இதை அப்படியே ஸ்க்ரோல் பண்ணிப் பார்த்தால், கடைசியாக போட்ட ஒரு சில பதிவுகள் இருக்கும்.
இதில் உங்களுக்கு விருப்பமான அந்த பதினாறு ப்ளாகுகளை நீங்கள் ஆட் பண்ணிக் கொண்டால், இடது புறம், அந்த பதினாறு ப்ளாகுகளின் லிஸ்ட்டும், வலதுபுறம், அதன் பதிவுகளும் இருக்கும். அதை க்ளிக் பண்ணினால், புது விண்டோவில் அந்த ப்ளாக் ஓபன் ஆகும். பதினாறு என்பது ஒரு உதாரணம் தான். நீங்கள் இவ்விதம் நூறு ப்ளாகுகள் கூட ஆட் செய்து கொள்ளலாம்.
சரி, எல்லாவற்றையும் close பண்ணிவிடுங்கள். இப்ப, எப்படி dashboard க்கு போவது?
http://www.blogger.com/ போங்கள். அதில், உங்க gmail யூசர் ஐடி பாஸ்வோர்டால் sign in பண்ணுங்கள். dashboard வந்து விடும். அவ்வளவு தான். சந்தேகம் இருந்தால் கேட்கலாம்.-சுமஜ்லா
வருகைக்கு நன்றி! வாசித்ததை விமரிசித்து, வாக்களித்துச் செல்லுங்கள்!
button="hori";
submit_url ="http://dileepadmin.blogspot.com/

You might also like:

LinkWithin

Saturday, April 25, 2009

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

எளிய தமிழில் SQL: எளிய தமிழில் SQL -

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

கடந்த 17 பாகங்களில் எளிய தமிழில் SQL என்கிற தொடரைப் படித்திருப்பீர்கள்.

செயல்முறைப் பயிற்சிகளையும் செய்து பார்த்திருப்பீர்கள்.

இந்த 18வது பகுதியில் SQL குறித்த கேள்விகளைக் காணவிருக்கிறோம். நாம் இங்கே 17 பாகங்களிலும் பார்க்காத சில கேள்விகளும் கீழே வந்திருக்கும். அதைப் பற்றிக் கவலை வேண்டாம். இவற்றுக்கான விடைகளை இணையத்தில் தேடினால் விடை கிடைக்கும்.

மேலும் உங்கள் கருத்துக்களை அறிய ஆவலுடன் இருக்கிறேன்.

உங்கள் ஆர்வத்தைத் தூண்டுவதற்காகவே இந்தக் கேள்விகளை இங்கே தருகிறேன்.

நன்றி.
தமிழ்நெஞ்சம்

Part - A

If I want to see what fields a table is made of, and what the sizes of the fields are, what option do I have to look for?

What is a query?

A SQL query is typed in the _________ .

What is the purpose of the model database?

What is the purpose of the master database?

What is the purpose of the tempdb database?

What is the purpose of the USE command?

If you delete a table in the database, will the data in the table be deleted too?

What is the Parse Query button used for? How does this help you?

Tables are created in a ____________________ in SQL Server 2005.

Part - B

  1. What is usually the first word in a SQL query?

  2. Does a SQL Server 2005 SELECT statement require a FROM?

  3. Can a SELECT statement in SQL Server 2005 be used to make an assignment? Explain with examples.

  4. What is the ORDER BY used for?

  5. Does ORDER BY actually change the order of the data in the tables or does it just change the output?

  6. What is the default order of an ORDER BY clause?

  7. What kind of comparison operators can be used in a WHERE clause?

  8. What are four major operators that can be used to combine conditions on a WHERE clause? Explain the operators with examples.

  9. What are the logical operators?

  10. In a WHERE clause, do you need to enclose a text column in quotes? Do you need to enclose a numeric column in quotes?

  11. Is a null value equal to anything? Can a space in a column be considered a null value? Why or why not?

  12. Will COUNT(column) include columns with null values in its count?

  13. What are column aliases? Why would you want to use column aliases? How can you embed blanks in column aliases?

  14. What are table aliases?

  15. What are table qualifiers? When should table qualifiers be used?

  16. Are semicolons required at the end of SQL statements in SQL Server 2005?

  17. Do comments need to go in a special place in SQL Server 2005?

  18. When would you use the ROWCOUNT function versus using the WHERE clause?

  19. Is SQL case-sensitive? Is SQL Server 2005 case-sensitive?

  20. What is a synonym? Why would you want to create a synonym?

  21. Can a synonym name of a table be used instead of a table name in a SELECT statement?

  22. Can a synonym of a table be used when you are trying to alter the definition of a table?

  23. Can you type more than one query in the query editor screen at the same time?

Part - C

  1. The INSERT INTO .. VALUES option will insert rows into the _________ of a table.

  2. While you are inserting values into a table with the INSERT INTO .. VALUES option, does the order of the columns in the INSERT statement have to be the same as the order of the columns in the table?

  3. While you are inserting values into a table with the INSERT INTO .. SELECT option, does the order of the columns in the INSERT statement have to be the same as the order of the columns in the table?

  4. When would you use an INSERT INTO .. SELECT option versus an INSERT INTO .. VALUES option? Give an example of each.

  5. What does the UPDATE command do?

  6. Can you change the data type of a column in a table after the table has been created? If so, which command would you use?

  7. Will SQL Server 2005 allow you to reduce the size of a column?

  8. What integer data types are available in SQL Server 2005?

  9. What is the default value of an integer data type in SQL Server 2005?

  10. What decimal data types are available in SQL Server 2005?

  11. What is the difference between a CHAR and a VARCHAR datatype?

  12. Does Server SQL treat CHAR as a variable-length or fixed-length column? Do other SQL implementations treat it in the same way?

  13. If you are going to have too many nulls in a column, what would be the best data type to use?

  14. When columns are added to existing tables, what do they initially contain?

  15. What command would you use to add a column to a table in SQL Server?

  16. In SQL Server, which data type is used to store large object data types?

  17. If I do not need to store decimal places, what would be a good numeric data type to use?

  18. If I need to store decimal places, but am not worried about rounding errors, what would be a good data type to use?

  19. Should a column be defined as a FLOAT if it is going to be used as a primary key?

Part - D

  1. What is a join? Why do you need a join?

  2. What is an INNER JOIN?

  3. Which clause[s] can be used in place of the JOIN in Server SQL?

  4. What is the Cartesian product?

  5. What would be the Cartesian product of a table with 15 rows and another table with 23 rows?

  6. List some uses of the Cartesian product.

  7. What is an equi-join?

  8. What is a non-equi-join? Give an example of an non-equi-join.

  9. What is a self join? Give an example of a self join.

  10. What is a LEFT OUTER JOIN?

  11. What is a RIGHT OUTER JOIN?

  12. What is a CROSS JOIN?

  13. What is a FULL OUTER JOIN?

  14. Does Server SQL allow the use of *= to perform outer joins?

  15. What is the maximum number of rows that a self join can produce?

  16. For what kinds of joins will the associative property hold?

  17. What would be the Cartesian product of the two sets {a,b,c} and {c,d,e}?

Part - E
  1. What are functions?

  2. What are aggregate functions? Give examples of aggregate functions. What is another term for an aggregate function?

  3. What are row-level functions? Give examples of row-level functions.

  4. Is COUNT an aggregate function or a row-level function? Explain why. Give at least one example of when the COUNT function may come in handy. Does the COUNT function take nulls into account?

  5. Is AVG an aggregate function or a row-level function?

  6. What is the NULLIF function? Explain.

  7. How are ties handled in SQL Server?

  8. How does the DISTINCT function work?

  9. Are string functions (for example, SUBSTRING, RIGHT, LTRIM) aggregate functions or row-level functions?

  10. What is the SUBSTRING function used for?

  11. What is the CHARINDEX function used for?

  12. What function would you use to find the leftmost characters in a string?

  13. What are the LTRIM/RTRIM functions used for?

  14. What function would produce the output in all lowercase?

  15. What function would you use to find the length of a string?

  16. What characters or symbols are most commonly used as wildcard characters in SQL Server 2005?

  17. What is the concatenation operator in Server SQL 2005?

  18. What does the YEAR function do?

  19. What does the MONTH function do?

  20. What does the GEtdATE function do?

  21. What will the following query produce in SQL Server 2005?

        SELECT ('.....'+ names) AS [names]
    FROM Employee

  22. Does Server SQL allow an expression like COUNT(DISTINCT column_name)?

  23. How is the ISNULL function different from the NULLIF function?

  24. What function would you use to round a value to three decimal places?

  25. Which functions can the WITH TIES option be used with?

  26. What clause does the WITH TIES option require?

  27. What is the default date format in SQL Server 2005?

  28. How do dates have to be entered in Server SQL 2005?

  29. What function is used to convert between data types?

  30. What function is useful for formatting numbers?

  31. What function is useful for formatting dates?

Part - F

  1. Which has precedence, AND or OR?

  2. Why do we need derived structures?

  3. What is a view?

  4. List some advantages of using views.

  5. List some advantages of using temporary tables.

  6. Can temporary tables replace views in all cases?

  7. What is the difference between a view and temporary table?

  8. What is the difference between a local temporary table and global temporary table?

  9. If data is changed in a view, is it changed in the original table?

  10. If data is changed in a temporary table, does it automatically change data in the original table?

  11. What happens to local temporary tables after the session has been ended?

  12. What happens to global temporary table after the session has been ended?

  13. Which type of temporary table has a system-generated suffix attached to it? What does this suffix mean?

  14. Why are inline views helpful?

  15. In SQL Server, is the ORDER BY clause allowed during the creation of a view?

  16. Is SELECT INTO allowed in a view? Why or why not?

  17. Where is the data stored in a view?

  18. How do you delete views?

  19. How do you delete a temporary table?

  20. Do you need to delete a local temporary table? Why or why not?

  21. Which operators have the highest/lowest precedence?

  22. In SQL Server, if a column of FLOAT data type were divided by a column of REAL data type, what data type would the resulting column have? (Hint: refer to the section on Data Type Preference.)

  23. Is an ORDER BY clause necessary when you use a DISTINCT? Why or why not?

Part - G
  1. What are the major differences between the UNION operation and the JOIN operation?

  2. What is the major difference between the UNION and the UNION ALL?

  3. What major set operator does SQL Server 2005 not have? How can these problems be resolved?

  4. What does union compatibility mean?

  5. What data types are union-compatible?

  6. What is the maximum number of rows that can result from a UNION of two tablesone with 5 rows and the other with 6 rows?

  7. What is the maximum number of rows that can result from a JOIN of two tablesone with 5 rows and the other with 6 rows?

  8. How can a UNION be used to implement an outer join? Explain.

  9. Does SQL Server 2005 support the MINUS operation? How can this be resolved? Give examples.

  10. What is a full outer join? Does SQL Server 2005 directly support a full outer join?

  11. Do you need the same number of columns to perform a union?

  12. Do you need the same data types to perform a union?

  13. Do you need the same number of columns to perform a join?

  14. From the examples given in the chapter, what does the UNION JOIN appear to do?

  15. If a VARCHAR column were unioned with a CHAR column, what would the resulting column be? (Hint: refer to the "Data Type Precedence" section in Chapter 6.)

  16. What does set compatibility mean?

  17. What is the maximum number of rows that can result from a INTERSECT of two tablesone with 5 rows and the other with 6 rows?

  18. Do you need the same number of columns to perform an INTERSECT operation?

  19. Do you need the same data types to perform an INTERSECT operation?


Part - H

  1. What is a subquery?

  2. Which part of the query/subquery is considered the inner query, and which part is considered the outer query?

  3. Can a subquery always be done as a join? Why or why not?

  4. When writing a query that will have a subquery, how do you determine which table/tables will go in the outer query?

  5. Which predicate can usually be reformulated into a join?

  6. When using operators, are many values acceptable from a result of a subquery?

  7. What can you do to insure a working subquery?


Part - I
  1. What do aggregate functions do?

  2. How does the GROUP BY clause work?

  3. What is the difference between a GROUP BY and ORDER BY?

  4. What is the HAVING clause used for?

  5. Can the WHERE clause always be considered a substitute for the HAVING clause? Why or why not?

  6. Do functions of functions have to be handled in a special way in Server SQL 2005?

  7. Will nulls in grouped columns be included in a result set?

  8. How do aggregate functions treat nulls?

  9. Does the sequence of the columns in a GROUP BY clause have an effect on the end result?

  10. When would it not make sense to use the GROUP BY and DISTINCT functions together?

  11. Is GROUP BY affected by nulls?

  12. Which comes first in a SELECT statement, an ORDER BY or GROUP BY? Why?

  13. The GROUP BY and ________________ clauses are used together.


Part - J

  1. What is a noncorrelated subquery?

  2. Which type of subquery can be executed on its own?

  3. Which part of a query is evaluated first, the query or the subquery?

  4. What are correlated subqueries?

  5. What does the EXISTS predicate do?

  6. What are considered universal qualifiers?

  7. Is correlation necessary when we use EXISTS? Why?

  8. Explain how the "for all" type SQL query involves a double-nested correlated subquery using the NOT EXISTS predicate.

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

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

இதன்மூலம் Front End, back end போன்றவற்றைத் தெரிந்துகொள்வதுடன் அவை எதற்காகப் பயன்படுகின்றன என்பதையும் அறிந்துகொள்வீர்கள்.


அவர் கேட்ட கேள்வி :

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

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

எனது சந்தேகம் Oracle, Power Builder மற்றும் எங்களது Inventory software இவை மூன்றுக்கும் என்ன தொடர்பு?

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

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


நன்றியுடன்,

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


இனி எனது பதில் :

Inventory Software ஐ Power Builder பயன்படுத்திச் செய்து Inventory.EXE ஐ உருவாக்கி இருப்பார்கள்.

அதன் முகப்புத்தோற்றங்கள் அனைத்தையும் Power Builder வழியாக எளிதாகச் செய்திருப்பார்கள்.

Power Builder, Visual Basic போன்றவற்றை Front End Tools என்போம். நீங்கள் அந்த பயன்பாட்டை இயக்கும்போது உங்கள் கண்முன்னே தெரியும் Textbox, combobox, Grid, dialog box இப்படி என்னவெல்லாம் கண்முன் தெரிகிறதோ அவையனைத்தையுமே ஒரு Front End ஐ வைத்தே உருவாக்கி இருப்பார்கள்.

உங்களிடம் இருந்து User Name, Password ஆகியவற்றை வாங்குவதற்காக உங்கள் கண்முன் தெரிகிறதே TextBox இவற்றை உருவாக்க உதவுவது Front End Tool.


ஆனால் உங்கள் User Name, Password போன்றவை எங்கே பதிவாகி இருக்கும்? அது ஒரு Back End ல் பதிவாகி இருக்கும். Back End tool க்கு உதாரணம்தான் Oracle, Sybase, MySQL, SQL Server எல்லாம்.

உங்களிடமிருந்து தகவலை வாங்குவதற்கு உதவும் முகப்புத்திரைகளை Front End Tool வாயிலாகச் செய்தபின், தகவல்கள் அனைத்தையும் பதிந்து வைப்பதற்காக Back End பயன்படுகிறது.

உங்கள் கணினியில் Power Builder இனிமேல் தேவைப்படாது. எப்போது? எந்தத் தவறுகளும் இல்லாத ஒரு Application ஐ உருவாக்கிய பிறகு அதன் Codings அனைத்தையும் சுருக்கி ஒரே கோப்பாகவோ, அல்லது Installation Package ஆகவோ கொடுப்பார்கள்.

அந்த Installation Package அல்லது ஒரு EXE ஐ வேறு ஒரு கணினியில் நிறுவியபிறகு (Install) Front End Tool தேவைப்படாது (உங்கள் கருத்துப்படி Power Builder).

ஆனால் அனைத்துத்தகவல்களையும் உங்கள் கருத்துரைப்படி Oracle ல் பதிவதால் Oracle கண்டிப்பாக Install செய்யப்பட்டு இருக்கவேண்டும்.

எப்போதெல்லாம் பழைய தகவல்கள் தேவைப்படுகிறதோ, அப்போதெல்லாம் அந்த EXE ஆனது Database உடன் தொடர்புகொண்டு தகவல்களை எடுத்துக்கொண்டுவந்து திரையில் காண்பிக்கும்.

எனது சந்தேகம் Oracl, Power Builder மற்றும் எங்களது Inventory software இவை 3 ற்க்கும் என்ன தொடர்பு?

நன்றாக நினைவில் கொள்ளவும் :
1) கண்முன்னே காணப்படும் திரைகளை, திரையில் தெரியும் தகவல்கள் அல்லாத பிற அம்சங்களை உருவாக்கத்தான் Power Builder.
2) Inventory.exe ஐ இயக்கியபிறகு அது கேட்கும் தகவல்களை நீங்கள் கொடுப்பீர்கள். அல்லது நீங்கள் கேட்கும் தகவல்களை அது கொடுக்கும். ஆக அனைத்துத்தகவல்களும் உங்களுடைய Oracle databaseல் இருந்துதான் வருகிறது.
3) எதை நீங்கள் பதிந்தாலும் உங்களது Oracleல் தான் பதிவாகும்.
4) எதை நீங்கள் எடுத்தாலும் உங்களது Oracleல் இருந்துதான் எடுப்பீர்கள்.

Inventory.EXEஐ உருவாக்கிய பிறகும் எதற்காக மீண்டும் PowerBuilder ஐ நிறுவுகிறார்கள்.

இந்த Application ல் எந்த விதமான பிழைகளும் இல்லாமல் இருப்பின் Power Builder ஐ நிறுவவேண்டிய அவசியம் இல்லை.
ஏதேனும் பிழைகளோ அல்லது புதிய அம்சங்களை உங்களது Inventory Applicationல் சேர்க்கவேண்டிய கட்டாயமோ இருப்பின் PowerBuilder ஐ ஒரு ஓரமாக நிறுவிக்கொள்வார்கள்.
புதிய அம்சங்களை, புதிய மேம்பாடுகளை உங்கள் Applicationல் உருவாக்குவதற்காக Power Builderல் புதிய நிரல்களை எழுதுவார்கள்.

ஏற்கனவே எழுதிய நிரல்களின் தொகுப்புதான் ஒரு Inventory.exe இதை நினைவில் வைக்கவும்.

புதிதாகச் சேர்க்கப்படவேண்டிய புதிய அம்சங்கள், மேம்பாடுகள் (Updates) போன்றவற்றை உருவாக்குவதற்காக PowerBuilder மூலம் ஏற்கனவே உள்ள codingஉடன் புதிதாக coding எழுதி அனைத்தையும் ஒருங்குபடுத்தி (Integrate) மீண்டும் ஒரு புதிய Inventory.exe ஐ உருவாக்குவார்கள். அல்லது புதிய Installation package உருவாக்குவார்கள்.

ஒவ்வொரு முறையும் உங்களது தேவைக்கேற்றபடி Applicationல் மாற்றங்கள் செய்யப்படவேண்டும் என்றால் - ஒவ்வொரு முறையும் புதிது புதிதாக coding எழுதவோ அல்லது ஏற்கனவே எழுதப்பட்ட Coding ல் மாறுதல் செய்யவோதான் Power Builderஐ பயன்படுத்துகிறார்கள். எல்லா மாற்றங்களும் , மேம்பாடுகளும் செய்யப்பட்ட பிறகு கிடைக்கக்கூடிய புதிய EXE ஐ உங்களுக்கு வழங்குவார்கள்.

Oracleக்குப் போட்டியாளர் மென்பொருள்தான் SQL Server.
PowerBuilder க்குப் பதிலாக Visual Basic, C#, VC++ போன்றவற்றைப் பயன்படுத்தி Front End உருவாக்கலாம்.

MS-Access என்பது ஒரு மிகச்சிறிய அளவிலான தகவல்களைக் கையாள்வதற்குப் பயன்படும் Database தான்.

மிகப்பிரமாண்டமான அளவில் இருக்கும் தகவல்களைக் கையாள்வதற்கு Oracle, SQL Server போன்றவற்றைப் பயன்படுத்தலாம்.

MS-Access ஐப் பயன்படுத்தியும் Inventory Applicationஐச் செய்யலாம். ஆனால் அதன் மூலம் மிக அதிக அளவிலான தகவல்களைக் கையாள இயலாது.

Table என்பதை வெறும் Table எனத்தப்புக் கணக்குப் போட்டுவிடவேண்டாம். அனைத்துத் தகவல்களுமே இந்த Tableகளில்தான் Row by Row ஆகப் பதிவாகி இருக்கின்றன என்பதை மறந்துவிடவேண்டாம்.

இத்தனை மில்லியன் தகவல்களில் குறிப்பிட்ட தகவலைத் தேடி எடுக்கவே Query பயன்படுகிறது. இந்த queryகளை எழுத SQL உதவுகிறது.

SQL Server என்பது ஒரு பயன்பாடு. இதன் மூலம் பல Databaseகளை உருவாக்கிக்கொள்ளலாம். ஒவ்வொரு Databaseகளிலும் பல்வேறு Tableகளையும் ஒவ்வொரு Tableலும் ஏராளமான Rows இருக்கும்.

இந்தப் பதிவை முதல்முறை படிக்கும்போது புரியாமல் போவதற்கு வாய்ப்பளிக்கக்கூடாது என்பதற்காகவே குறிப்பிட்ட வரிகளைத் திரும்பத் திரும்ப எழுதியுள்ளேன்.

எளிய தமிழில் 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 Server பயன்பாட்டை எவ்வாறு நிறுவுவது என திரு. G. ராஜாராமன் சவுதி அரேபியா கேட்டிருந்தார். அவருக்காக இணையத்தில் தேடியபோது ஒரு அருமையான தளமுகவரி கிடைத்தது அதை இங்கே பகிர்கிறேன்.

ஒவ்வொரு திரையாகப் படம் பிடித்து அருமையாக விளக்கியிருக்கிறார்கள்.
http://www.functionx.com/sqlserver/Lesson01.htm

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

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

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

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

AND / OR SELECT column_name(s)
FROM table_name
WHERE condition
AND|OR condition
ALTER TABLE ALTER 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

BETWEEN SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2
CREATE DATABASE CREATE DATABASE database_name
CREATE TABLE CREATE TABLE table_name
(
column_name1 data_type,
column_name2 data_type,
column_name2 data_type,
...
)
CREATE INDEX CREATE INDEX index_name
ON table_name (column_name)

or

CREATE UNIQUE INDEX index_name
ON table_name (column_name)

CREATE VIEW CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
DELETE DELETE 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 DATABASE DROP DATABASE database_name
DROP INDEX DROP 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 TABLE DROP TABLE table_name
GROUP BY SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING SELECT 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
IN SELECT column_name(s)
FROM table_name
WHERE column_name
IN (value1,value2,..)
INSERT INTO INSERT INTO table_name
VALUES (value1, value2, value3,....)

or

INSERT INTO table_name
(column1, column2, column3,...)
VALUES (value1, value2, value3,....)

INNER JOIN SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
LEFT JOIN SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
RIGHT JOIN SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
FULL JOIN SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name
LIKE SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern
ORDER BY SELECT column_name(s)
FROM table_name
ORDER BY column_name [ASC|DESC]
SELECT SELECT column_name(s)
FROM table_name
SELECT * SELECT *
FROM table_name
SELECT DISTINCT SELECT DISTINCT column_name(s)
FROM table_name
SELECT INTO SELECT *
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 TOP SELECT TOP number|percent column_name(s)
FROM table_name
TRUNCATE TABLE TRUNCATE TABLE table_name
UNION SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
UNION ALL SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2
UPDATE UPDATE table_name
SET column1=value, column2=value,...
WHERE some_column=some_value
WHERE SELECT 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 (இறங்குவரிசையில் காண)

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

இன்று ஒரு சிறிய செயல்முறைப் பயிற்சியை மேற்கொள்வோம். இதற்காக நாம் ஒரு புதிய Tableஐ உருவாக்குவோம். அதற்குரிய Structure கீழே :

இந்தப் படத்தில் RegNoக்குறிய Columnல் Primary key க்கான படம் சிறிய சாவியாகக் குறிக்கப்பட்டுள்ளது. ஒரு Column ஐ Primary key ஆக எப்படி மாற்றுவது?
அந்தக் குறிப்பிட்ட Columnஐத் தேர்வு செய்யவும். பிறகு Right Click செய்து, வரக்கூடிய சிறிய menu வில் Set Primary key எனக் கொடுக்கவும்.


அவ்வளவுதான் Columnஐ, Primary key எனக் குறித்தாயிற்று. அதனால் ஒவ்வொரு நபருக்கும் நாம் கொடுக்கவேண்டிய பதிவு எண் (Registration Number)ணை மாற்றி, மாற்றிக் கொடுக்கவேண்டும். ஒரு நபருக்குக் கொடுத்த எண்ணையே மற்றோர் நபருக்குத் திரும்பவும் கொடுத்தால் பிழைச்செய்தி வரும். ஒவ்வொரு Rowன் RegNo ஐயும் வித்தியாசப்படுத்தவே Primary key ஐத் தேர்வுசெய்கிறோம்.


Table Structureஐ Close செய்துவிட்டு, ஒரு Table Name கொடுத்துப் பதிவு செய்கிறோம். (MarkStatement என்று பெயர்கொடுத்திருக்கிறேன்). நினைவகத்தில் வன்வட்டு (hard disk)ல் பதிவாகிவிடும்.

இதில் Total, Average, Result ஆகிய Columnளுக்கு மட்டும் Allow Nulls என்பதற்கு நேராக Tick செய்துள்ளோம். ஆகவே Total, Average, Result ஆகியவற்றுக்கு மட்டும் தகவல்களை உள்ளீடு செய்யவேண்டிய அவசியம் இல்லை. பிறகு ஒரு UPDATE மூலம் அவற்றைக் கணக்கிட்டுக்கொள்ளலாம்.


இப்போது இந்த அட்டவணை (Table)ல் ஒவ்வொரு Rowவாகத் தகவல்களைக் கொடுக்கப்போகிறோம்.

இதற்காக MarkStatement ல் Right Click செய்து வரும் சிறு menuவில், Open Table தேர்வுசெய்யவும்.






இங்கே ஒவ்வொரு Rowவாக Table ல் தகவல்களை ஏற்றும்போது, Total,Average,Result ஆகியவற்றுக்கான மதிப்புகளை NULL ஆகவே விட்டுவிட்டு மற்ற Columnகளுக்கு உரிய மதிப்புகளை மட்டும் கொடுத்தால் போதும்.

நம் செயல்முறைகளுக்கு, 10 Rows மட்டும் போதும். அதற்காக இதைக் Close செய்யவும்.
இப்போது, UPDATE மூலம் Total,Average,Result ஆகியவற்றை எப்படி நிரப்புவது என்பதைக் காண்போம். இதற்காக T-SQL Editorஐத் திறந்து கொள்ளவும்.

இதற்காக Databaseஐத் தேர்வு செய்தபிறகு, New Queryஎன்னும் ஒரு Toolbar ன் buttonஐத் தேர்வு செய்யவும்.


வலதுபுறம் உள்ள காலியிடமே T-SQL Editor ஆகும். அங்கே கீழ்க்கண்ட வரிகளை எழுதுங்கள்.

UPDATE dbo.MarkStatement
SET
Total = Tamil + English + Maths

இதன் விளைவாக Total என்கிற Columnல் மூன்று பாடங்களில் அவரவர்கள் வாங்கிய மதிப்பெண்களைக் கூட்டி வரும் விடை நிரப்பப்பட்டுவிடும். இந்த UPDATE ல் எந்த WHEREம் இல்லாததால் அனைத்து Rowsம் மாற்றப்பட்டுவிடும்.

எனக்குக் கிடைத்த விடை : (10 row(s) affected)
இப்போது SELECT * FROM MarkStatement - இதை ஓட்டிப்பார்த்து Total Column மதிப்பை உடனே அறிந்துகொள்ளலாம்.

Average ( சராசரி ) காண்பதற்காக :

UPDATE dbo.MarkStatement
SET
Average = Total / 3

மூன்றையும் கூட்டி மூன்றால் வகுத்தால் வரும் விடை இங்கே சராசரி ஆகும் (Average).

கீழ்க்கண்ட வரியை இயக்கினால் எந்தெந்த மாணவர்கள் தேர்ச்சியுற்றிருக்கிறார்களோ அவர்களுக்கு மட்டும் PASS என Result Columnன் மதிப்பை மாற்றிவிடலாம்.

UPDATE dbo.MarkStatement
SET
[Result] = 'PASS'
WHERE
Tamil >= 35 AND English >= 35 AND Maths >= 35

Tamil, English, Maths ஆகிய 3 மாறுபட்ட பாடங்களிலும், அனைத்துப் பாடங்களிலும் குறைந்தபட்சம் 35 மதிப்பெண்கள் எடுத்தவர்களுக்கு PASS போட்டு விடப்படும்.

AND எனப்படும் தர்க்கரீதியிலான Logical Operator ஆனது, அனைத்துக் கட்டுப்பாடுகளுக்கும் சம்மதிக்கக் கூடிய Rows ஐ மட்டும் பிரித்தெடுத்து அவைகளை மட்டும் UPDATE செய்ய அனுமதிக்கும்.

விடை : (8 row(s) affected)

UPDATE dbo.MarkStatement
SET
[Result] = 'FAIL'
WHERE
Tamil <>

மேற்கண்ட வரியை இயக்கினால், ஏதேனும் ஒரு பாடத்தில் மட்டுமாவது 35 மதிப்பெண்களைவிடக் குறைவாகப் பெற்றவர்களுக்கு மாத்திரம் FAIL போடப்பட்டுவிடும்.

OR எனப்படும் தர்க்கரீதியிலான Logical Operator ஆனது ஏதேனும் ஒரு கட்டுப்பாட்டுக்காவது சம்மதிக்கும் Rows ஐ UPDATE செய்துவிடும்.

கிடைத்த விடை : (2 row(s) affected)

இப்போது SELECT * FROM MarkStatement - இதை ஓட்டிப்பார்த்து Total, Average, Result Columnகளில் Update செய்யப்பட்ட மதிப்பை அறிந்துகொள்ளலாம். ஹரி, மற்றும் பானு இருவர் மட்டும் தோல்வியடைந்துள்ளனர். மீதி அனைவரும் தேர்ச்சியடைந்துள்ளனர்.

அதிகபட்ச மதிப்பெண்ணைக் காண :
SELECT MAX(total) FROM Markstatement

இதன் விடை : 267

MAX ( ) என்பது Maximum ஒரு உள்ளமைந்த built-in Function ஆகும். இது குறிப்பிட்ட Columnல் இருக்கும் அனைத்து மதிப்புகளிலும் மிக உயர்ந்தது எது என்பதைக் கண்டறிய உதவும்.

ஏற்கனவே முந்தைய பாடத்தில் UPPER ( ) , GETDATE ( ) போன்ற Functions ஐப் பார்த்திருக்கிறோம். அதைப் போன்றே இது.

குறைந்தபட்ச மதிப்பெண் யாது?


SELECT MIN(Total) FROM Markstatement

இதன் விடை : 118

MIN( ) என்பது Minimum ஒரு உள்ளமைந்த built-in Function ஆகும். இது குறிப்பிட்ட Columnல் இருக்கும் அனைத்து மதிப்புகளிலும் மிகக் குறைவானது எது என்பதைக் கண்டறிய உதவும்.

முதல் மதிப்பெண்ணைப் பெற்றவர்களது தகவல்களைக் கண்டறிய :

SELECT * FROM MarkStatement
WHERE TOTAL = (SELECT MAX (Total) FROM Markstatement)

அல்லது,

DECLARE @M INT

SET @M= ( SELECT MAX(Total) FROM MarkStatement )

SELECT * FROM MarkStatement WHERE Total = @M

எனக் கொடுக்கலாம். இதன் விடை கீழே :




தேர்வில் தோல்வியடைந்தவர்களின் records ஐ அழித்துவிடுவோம். அதற்காக,

DELETE FROM MarkStatement WHERE [Result] = 'FAIL'

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

SQL கற்பதற்கான ஒரு இலவச மென்பொருளான 2005 ஐ முந்தைய பாகங்களில் கண்டோம்.
அதன் நவீன வடிவமாகிய Microsoft® SQL Server® 2008 Express with Tools ஐ இறக்கி நிறுவிப் பயன்பெருங்கள்.

SQL Server 2008 Express with Tools
SQL Server database engine - create, store, update and retrieve your data
SQL Server Management Studio Basic - visual database management tool for creating, editing and managing databases

இந்த அடிப்படைப் பயன்பாடு நமக்கு ஒத்துவரும். 2005 ஐ நிறுவியிருந்தவர்கள் அதை uninstall செய்தபிறகு இதை நிறுவவும்.

நேற்றையப் பதிவில் CREATE,INSERT,SELECT ஆகியவை பற்றிப் பார்த்தோம்.

இன்றைக்கு UPDATE மற்றும் DELETE ஆகியவற்றைப் பற்றிப் பார்ப்போம்.

ஏற்கனவே பதியப்பட்ட தகவல்களில் மாற்றங்கள் செய்வதற்கு UPDATE உதவும்.
பழைய தகவல்களின் Row / Rows ஐ அழித்துவிடுவதற்கு DELETE உதவும்.

ஏற்கனவே நாம் உருவாக்கிய MyListஐ ஒரு Copy (படி) எடுத்து வைப்பதற்காக கீழ்க்கண்ட வரியை இயக்கவும்.

Table ஐ Copy செய்வதற்குரிய Syntax :

SELECT * INTO newTableName FROM oldTableName



உதாரணம்:
SELECT * INTO BakupMyList FROM MyList


இதன் மூலம் MyList எனப்படும் நம்முடைய பழைய Tableன் Copy ஐ, புதிய BackupMyListல் எழுதி வைத்துவிடலாம்.

இதை இயக்கியதும் எனக்குக் கிடைத்த விடை : (5 row(s) affected)

இப்போது UPDATE பற்றிப் பார்ப்போம்.

UPDATE ன் Syntax:
UPDATE tableName
SET
[fieldName] = 'newValue'
WHERE
[fieldName] ='oldValue'

உதாரணம்:
UPDATE MyList
SET
[Name] = 'Arun'
WHERE
[Name] ='valpaiyan'

நம்முடைய MyList என்னும் Tableல் 2வது rowல் உள்ள தகவல் 2,valpaiyan,Erode - என இருந்தது. அவருடைய உண்மையான பெயர் Arun. செல்லமாக அவர் வைத்துக்கொண்ட பெயர் valpaiyan. அவருடைய செல்லப்பெயரை, உண்மைப் பெயரைக் கொண்டு மாற்றுவதற்கு - மேற்கொண்ட UPDATE பயன்படும்.

இப்போது SELECT * FROM MyList WHERE [Person#] = 2 எனக் கொடுத்து F5 அழுத்தினால், கிடைக்கும் விடை : 2 Arun Erode

நாம் ஒரு rowல் இருக்கும் குறிப்பிட்ட Column ல் ஏற்றப்பட்ட மதிப்பை வேறு ஒரு மதிப்பைக் கொண்டு மாற்றுவதற்கு இப்போது UPDATE ஐப் பயன்படுத்தினோம்.

இதில் WHERE எனப்படும் கட்டுப்பாட்டை விதிக்காவிடில் என்ன ஆகும்?
உதாரணமாக :

UPDATE MyList
SET
[Name] = 'Arun'

என்று மட்டும் கொடுத்திருந்தால் என்ன ஆகியிருக்கும்.

இப்படி ஆகியிருக்கும். அனைவருடைய பெயரையுமே Arun என்று மாற்றியிருக்கும்.

எத்தனை முறை SELECT கொடுத்தாலும், எந்தத் தகவலுமே மாறாமல் அப்படியே இருக்கும்.

ஆனால் UPDATE, DELETE கொடுக்கும்போது கவனமாக இருக்கவும். எதாவது தவறிழைத்துவிட்டால் - அனைத்துத் தகவலும் நொடியினில் மாறிவிடும் ஆபத்து உள்ளது.

அதற்காகவே SELECT * INTO கொடுத்து ஒரு backup எடுத்து வைத்துக்கொண்டேன்.

இந்த அட்டவணையில் (Table) ஏற்கனவே ஏற்றப்பட்டுள்ள 5 Rowsல் இருக்கும் [Name] Columnன் மதிப்புகள் அனைத்தையுமே பெரிய எழுத்துகளில் (CAPITAL LETTERS) மாற்றுவதற்கு என்ன செய்யவேண்டும்?

UPDATE MyList
SET
[Name] = UPPER([Name])


இங்கே UPPER( ) என்பது ஒரு Function ஆகும். இதை உள்ளமைந்த built-in function என்போம். இது பெரிய எழுத்துகளாக மாற்றுவதற்குப் பயன்படுகிறது.

இந்த UPPER( ) மாற்றப்பட்டவுடன் கிடைத்த விடை மேலே:

இப்போது அழிக்கும் வேலைக்கு என்ன Statement என்பதைக் காண்போம்

Syntax கீழே:
DELETE FROM tableName WHERE Condition

DELETE FROM
MyList
WHERE
[Person#] = 4

இதன் அர்த்தம் என்ன. 4வது rowவை அழித்துவிடு.

DELETE FROM MyList என்று WHERE ஐ நீக்கிவிட்டுக் கொடுத்தால் என்ன ஆகும்?
ஒட்டுமொத்தமாக அனைத்து records (rows) ம் அழிந்து போகும்.
ஆனால் Tableன் Structure அழியாது.

இந்த DELETE FROM MyList இதற்குச் சமமாக வேறு ஒரு Statement ம் இருக்கிறது.

அதன் Syntax மற்றும் உதாரணம் கீழே:

TRUNCATE TABLE tableName


TRUNCATE TABLE MyList

குறிப்பு :
ஒரு Table ஆனது, அதனுடன் தொடர்புடைய இணைக்கப்பட்ட மற்றொரு Table உடன் இணைப்பில் இருந்தால் (Foreign Key Relationship) அதை Truncate செய்ய இயலாது. Truncate ன் மூலம் ஒரு Tableல் உள்ள அனைத்து Rows ஐயும் அழித்துவிட இயலும்.

ஒரு Tableஐ வேறொரு Tableஉடன் இணைப்பதற்கு (join) Foreign key பயன்படுகிறது.

Structure ஐயும் சேர்த்து அழிப்பதற்கு என்ன செய்யவேண்டும்?

Syntax :

DROP TABLE tableName

உதாரணம்:
DROP TABLE MyList




இப்போது ஏற்கனவே Copy செய்து வைத்திருக்கிறோமே BakupMyList என்கிற Table அதை MyList என பெயர் மாற்றுவோம்.

இப்படி ஒரு Tableன் பெயரை மாற்றுவதற்கு கீழே உள்ள வரியை இயக்கலாம்.

SP_RENAME 'BackupMyList', 'MyList'

SP_RENAME என்பது ஏற்கனவே எழுதப்பட்ட ஒரு நிரல். அதனை Stored Procedure என்று அழைப்பார்கள். அதுபற்றிப் பிறகு பார்ப்போம்.

இதன் Syntax:

SP_RENAME 'oldTableName', 'newTableName'

இப்படி ஒரு Tableன் பெயரை மாற்றும்போது, கிடைக்கும் ஒரு எச்சரிக்கைச் செய்தி:

Caution: Changing any part of an object name could break scripts and stored procedures.

Tableன் ஒரு குறிப்பிட்ட columnன் பெயரை மாற்ற என்ன செய்ய வேண்டும்?

SP_RENAME 'dbo.MyList.City', 'Place', 'COLUMN'

இதன் Syntax :

SP_RENAME
'dbo.tableName.oldColumnName',
'newColumnName', 'COLUMN'


இங்கே dbo என்பது object owner.

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

ஒரு சிறிய Table ஒன்றை உருவாக்கிக்கொள்வோம். அதைக் கொண்டு SELECT ன் தன்மைகளை ஆராயலாம்.

Table ஒன்றை உருவாக்குவதற்காக, GUI (Graphical User Interface) வழியாக என்ன செய்வதென்று ஏற்கனவே பாகம்-5ல் பார்த்திருக்கிறோம்.

அதையே CUI எனப்படும் Character User Interface வாயிலாக T-SQL Editor ல் தட்டித்தட்டியே ஒரு Tableன் Structureஐ எப்படி உருவாக்குவது என்பதை இங்கே காணலாம்.

T-SQL Editorல் எவ்வாறு நிரல் எழுதுவது? T-SQL Editorக்கு எந்த செயல்வழி மூலம் செல்வது? ஆகியவற்றைத்தெரிந்து கொள்ள - இங்கே சொடுக்கவும்.

ஒரு வழியாக T-SQL Editorக்கு வந்துவிட்டோம்.

Table ஒன்றை புதிதாக உருவாக்க உதவும் ஒரு எளிய pattern கீழே :

CREATE TABLE tableName
(

ColumnName1 datatype,

ColumnName2 datatype,

ColumnName3 datatype, ....
)
இந்த pattern ஐ Syntax என்பார்கள். கணக்குப் பாடத்தில் ஒரு கணக்கைச் செய்வதற்கு முன் மாதிரி கணக்கைக் கொடுத்து - அதைப்போல மற்றொன்றைச் செய்யச் சொல்வார்கள். அந்த மாதிரி கணக்கு போலத்தான் இந்த Syntax.

இந்த Syntax ல் tableName என்கிற இடத்தில் ஒரு அட்டவணையின் பெயர் (MyList), ColumnName1 என்கிற இடத்தில் Person#, LastName, FirstName, City போன்றவையும் ஒவ்வொரு DataTypeக்கு நேராக அதன் வகையையும் குறிப்பிட்டுவிட்டால் கீழ்க்கண்டமாதிரி Tableன் வடிவம் இருக்கும்.

CREATE TABLE MyList
(

Person# int,
[Name] varchar(50),

City varchar(50)

)


Name என்பது SQL ல் உள்ளமைந்த ஒரு தனிப்பட்ட keyword. ஆகவே அதைப் பிரித்துக் காண்பிப்பதற்காக [Name] என ஒரு அடைப்புக்குள் (Square Bracket) குறிப்பிடுகிறோம். இந்த Pattern - Syntax ஐ நிரப்பிய பிறகு F5 keyஐ விசைப்பலகையில் அழுத்தி Table ஐ உருவாக்கலாம். ஏதேனும் பிழைச்செய்தி வந்தால் அதைச் சரிசெய்தபிறகு Table உருவாகிவிடும்.

Table உருவாகிவிட்டதா என்பதை எப்படி அறிவது?

ஒரு சிறிய SELECT வடிவம் ஒன்று.

SELECT * FROM tableName ---> ஒரு Tableல் இருக்கும் அனைத்து rowsஐயும் திரையில் காண்பிப்பதற்காக.

SELECT * FROM MyList --> MyList என்பது நாம் சற்று முன்னர் உருவாக்கிய Tableன் பெயரே. இதை இயக்குவதற்கு F5 அழுத்தினால் கிடைக்கும் விடை கீழே :

இங்கே * என்பது அனைத்து rows ஐயும் குறிக்கிறது.

நாம் இப்போது உருவாக்கிய Persons என்கிற Tableல் எந்தவிதமான தகவலும் ஏற்றப்படவில்லை. வெறும் Structure மட்டுமே உருவாக்கப்பட்டுள்ளது.

இந்த MyList என்று சற்றுமுன்னர் உருவாக்கிய Tableல் ஒவ்வொரு rowவாக புதுப்புது தகவல்களை ஏற்றுவதற்கு என்ன செய்யவேண்டும்?

புதிய தகவல்களை ஏற்றுவதற்கு உரிய Syntax (Pattern)

INSERT INTO table_name
(
column1,
column2, ...
)
VALUES
(
'value1',
'value2', ...
)


நாம் நமது MyList அட்டவணைக்குத் தகுந்தாற்போல் மாற்றினால்

INSERT INTO MyList (Person#, [Name] , City) VALUES (1, 'Jimsha', 'Chennai')
INSERT INTO MyList (Person#, [Name] , City) VALUES (1, 'Valpaiyan', 'Erode')
INSERT INTO MyList (Person#, [Name] , City) VALUES (1, 'Karthik', 'Erode')
INSERT INTO MyList (Person#, [Name] , City) VALUES (1, 'Vizhiyan', 'Chennai')
INSERT INTO MyList (Person#, [Name] , City) VALUES (1, 'PKP', 'USA')

என 5 rowக்களுக்கான தகவல்களை 5 வரிகளில் எழுதவேண்டும்.

இப்போது நாம் கொடுத்த தகவல்களை திரையில் காண்பதற்கு :
SELECT * FROM MyList
எனத்தட்டெழுதி F5 அழுத்தவும்.
விடை கீழே :


CREATE புதிய Tableன் Structureஐ உருவாக்க
SELECT ஏற்றப்பட்ட தகவல்களைப் பார்வையிட
INSERT புதிய தகவல்களை ஒன்றொன்றாகப் பதிந்திட

SELECT ல் Wild Card Character என்று குறிப்பிட்டிருந்தேன். அது என்ன Wild Card Character?



உதாரணமாக SELECT * FROM MyList எனக் கொடுத்தால் ஏற்றப்பட்ட 5 rowsஉம் உடனே கண்முன் வந்து நிற்கும்.

இதில் குறிப்பிட்ட rowsஐ மட்டும் பார்ப்பதற்கு என்ன செய்வது? வடிகட்டுதல் நுட்பத்திற்காக SELECT உடன் WHERE எனப்படும் கட்டுப்பாட்டை உடன் இணைக்கிறோம்..

இப்போது SELECT ன் Syntax இவ்வாறு இருக்கும்.
SELECT * FROM tableName WHERE Condition

Condition என்கிற இடத்தில் Relational மற்றும் Logical Operators ஐப் பயன்படுத்தி வடிகட்டுதல் வேட்டையைத் தொடரலாம்.

சில உதாரணங்கள்:
SELECT * from MyList WHERE Person# = 5

5வது நபரின் தகவல்களை மட்டும் திரையில் காண்பதற்கு
விடை :

SELECT * FROM MyList WHERE Person# >=2 AND Person# <= 4.
2 முதல் 4 வரை எண்களைக் கொண்ட நபர்களின் தகவல்களைக் காண SELECT * FROM MyList WHERE City = 'Erode'
ஈரோடு நகரில் வசிக்கும் நபர்களை மட்டும் பார்க்க

SELECT * from MyList WHERE City <> 'Erode'
ஈரோடு நகரை விடுத்து பிற நகரங்களில் வசிப்போர் யார் யார்?
இது வரை நாம் Wild Card ஐப் பயன்படுத்தவில்லை. இப்போது பயன்படுத்திப் பார்ப்போம். Wild Card என்றால் நிரப்பிகள் எனப்படும்.
Wild Card பயன்படுத்தும் Syntax வடிவம்

SELECT * FROM
tableName
WHERE
filedName
LIKE
'wild pattern'


LIKE 'C%'
எனக்கொடுத்தால் C என்கிற எழுத்தில் ஆரம்பிக்கக் கூடிய எல்லாமே
நகரத்தின் ஆரம்ப எழுத்து C.
SELECT * FROM MyList WHERE City LIKE 'C%'
LIKE '%i%'
எனக் கொடுத்தால் இரண்டாவது எழுத்து i
% என்பது எல்லாமே , _ என்பது ஒரு எழுத்தை மட்டும் குறிக்கிறது.

SELECT * FROM MyList WHERE [Name] LIKE '%i%'
பெயரின் ஏதோ ஒரு எழுத்து i ஆக இருப்பவர்கள் யார் யார்?

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

How to install Sql Server 2005 Expression Edition?


ஏழாவது பாகத்தில் Relational operators, மற்றும் Logical Operators ஆகியவற்றைப் பார்த்தோம்.

Relational Operatorsல் <, >, >=, <=, =, != , <> போன்றவை வரும்.
Logical Operatorsல் AND, OR, NOT போன்றவை வரும்.

ஒரு குறிப்பிட்ட மதிப்பானது அதிகமா, குறைவா, சமமா, சமமில்லையா என சோதித்தறிய Relational Operators பயன்படுத்தலாம்.

ஒன்றுக்கு மேற்பட்ட கட்டுப்பாடுகளைத் தொடர்புபடுத்தி விடைகாண்பதற்கு Logical Operators பயன்படுத்தலாம்.

கணிதச் சமன்பாடுகளை, கூட்டல்,கழித்தல்,வகுத்தல்,பெருக்கல் போன்ற கணக்குகளைச் செய்வதற்காக Arithmetic Operators உள்ளன.

அவை :
+ கூட்டல் (Addition)
- கழித்தல் (Subtraction)
* பெருக்கல் (Multiplication)
/ வகுத்தல் (Division)

உதாரணம்:

DECLARE @a int
DECLARE @b int
DECLARE @c int

SET @a = 100
SET @b = 150
SET @c = @a + @b

PRINT @c

மேலே ஒரு எளிய T-SQL நிரல் (Program) ஒன்றைக் கொடுத்துள்ளேன்.
@a, @b, @c ஆகியவை Variable எனப்படும். அதாவது மாறிகள். ஒவ்வொரு மாறிகளுக்கும் தனித்தனி மதிப்புகளைக் கொடுக்கிறோம். அதற்கு SET என்னும் keyword பயன்படும்.
SET @c = @a + @b என்பதில் a, மற்றும் b ஆகிய இரண்டின் மதிப்பையும் + என்கிற கூட்டல் (Addition - Arithmetic Operator) அடையாளத்தைப் பயன்படுத்திக் கூட்டிக் கிடைக்கின்ற விடையை @c மூன்றாவது மாறியில் போட்டுவிடு - என அர்த்தம்.

PRINT @c எனக் கொடுத்ததும் cன் மதிப்பு 250 எனத் திரையில் காட்டும்.

மேற்கூரிய எளிய நிரலில் + எனப்படும் ஒரு Arithmetic Operator பயன்படுத்தியுள்ளோம்.
இது போல எளிய நிரல்களை எழுதிப் பாருங்கள்.

இந்த நிரல்களை எழுதி விடை காண SQL Server Expression Edition 2005ல் நாம் என்ன செய்ய வேண்டும். அதன் வழிமுறைகளைக் காண்போம்.

உங்கள் Authentication எதுவாக இருக்கிறதோ அதைத் தேர்வு செய்தபிறகு, Connect ஐ அழுத்தவும்.
திரையில் Object Explorer என்னும் ஒரு Window தெரியும்.

அதில் பாகம்-5ல் நாம் ஏற்கனவே உருவாக்கிய Test எனப்படும் Database ஐத் தேர்வுசெய்யவும்.

File ==> New ==> Query with New Connection இதைக் கிளிக்கவும்.

உடனே ஒரு வெள்ளைத் திரை கண் முன்னர் நிற்கும். இதுதான் T-SQLக்கான Editor. இதில் நாம் நிரல்களை எழுதிப் பழகலாம்.

நிரல் எனப்படும் Programஐ எழுதிய பிறகு அதை இயக்கிப் பார்க்க F5 விசையை அழுத்தவும்.

இந்த Programன் விடை கீழே உள்ள சட்டத்தில் 250 எனக் காட்சியளிக்கும்.



இந்த programல் சில இடங்களில் நான் வேண்டுமென்றே தவறு செய்கிறேன். பிழைச்செய்தி எப்படி வருகிறது என்பதைக் காண்பதற்காகத்தான்.
DECLARE @a int
DECLARE @b int
DECLAR @c int ---> தவறு (1) ஒரு E எழுத்தை விட்டுவிடுகிறேன்.

SET @a = 100
SET @b = 150
SET @c = @a + @b

PRINTT @c ----> தவறு (2) ஒரு T எழுத்தை அதிகமாகக் கொடுக்கிறேன்.

இப்போது F5 key ஐ அழுத்தி விடையை எதிர்பார்த்தால் என்ன கிடைக்கிறது?

Msg 102, Level 15, State 1, Line 3
Incorrect syntax near 'DECLAR'.
Msg 137, Level 15, State 1, Line 6
Must declare the scalar variable "@b".
Msg 137, Level 15, State 2, Line 7
Must declare the scalar variable "@b".


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

இன்றையத் தேதி என்னவென்பதை T-SQL வாயிலாக எப்படிக் கண்டுபிடிப்பது?

DECLARE @today datetime
SET @today = getdate()
PRINT @today

இங்கே @today என்பது ஒரு மாறி (Variable). அதனுடைய Data Type ஆனது datetime வகையைச் சேர்ந்தது.

getdate( ) என்பதை Function என்போம். இந்த Function ஆனது இன்றைய தேதிநேரத்தைக் கண்டறிய உதவும். அதை @today ல் பதிந்துவிடும்.


PRINT @today எனக் கொடுத்ததும் கிடைத்த விடை :
Jan 30 2009 11:32PM

இதை மிகச் சுருக்கமாக : PRINT getdate( ) என்றும் கொடுக்கலாம்.


குறிப்பு : எழுதிய program ஐ இயக்கி / ஓட்டி / run / execute செய்து பார்ப்பதற்கு F5 விசையை keyboardல் அழுத்த வேண்டும்.

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

ஏற்கனவே பதிந்துள்ள தகவல்களைத் தேடி எடுக்கும்போது மேலே குறிப்பிட்டுள்ள அடையாளங்களைப் பயன்படுத்தி வடிகட்டலாம். மில்லியன் கணக்கில் பதிந்திருக்கும் recordsல் இருந்து குறிப்பிட்ட சில rows (records) ஐ மட்டும் நமது தேவைக்காகத் தேடி எடுக்கும் செயலுக்குத் துணைபுரிபவை Queries ஆகும். DQL என்றால் Data Query Language.

இதற்கு SELECT எனப்படும் கட்டளையைப் பயன்படுத்துகிறோம். SELECT என்றால் தேர்வு செய் என அர்த்தம். ஆயிரக்கணக்கான, லட்சக்கணக்கான தகவல்களில் இருந்து நமது தேவைக்கேற்ற தகவலை மட்டும் தேடியெடுத்துத் தருவதற்கு SELECT ஐப் பயன்படுத்தலாம்.

ஒரு மிக மிக எளிய உதாரணம் ஒன்று.

முன்பெல்லாம் 10ம் வகுப்பு, 12ம் வகுப்பு தேர்வு முடிவுகள் அறிவிக்கப்பட்ட நாளின்போது மாலைப்பதிப்பு நாளிதழ்களான மாலைமுரசு, மாலைமலர் போன்றவற்றில் தேர்வில் தேரியோரின் எண்கள் வெளிவரும். பின்பு காலைப்பதிப்பிலும் வேறு வேறு நாளிதழ்களில் வெளிவரும். இன்றும் கூட இது நடைமுறையில் இருக்கும் ஒன்றுதான்.

6,75,643 மாணவர்கள் தேர்வெழுதினார்கள் எனில் அதில் 80% தேர்வாகி இருந்தால் 540514 பேர்களின் எண்கள் கல்விமாவட்ட வாரியாக நாளிதழில் வெளியாகி இருக்கும். இதில் ஒவ்வொருவரின் எண்ணும் வந்திருக்கிறதா? இல்லையா? என பட்டிமன்றமே நடக்கும்.

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

6,75,643 பேர்களின் தகவல்கள் அனைத்தையும் ஒவ்வொரு record (row) ஆக கணினியில் உள்ள Databaseல் ஏற்றிவிடுவார்கள். இதற்கு ஒரு குழு இயங்கும். அவர்கள் ஒவ்வொருவரின் பதிவெண், பள்ளியின் பெயர், பாடங்கள், ஒவ்வொரு பாடத்திலும் எத்தனை மதிப்பெண்கள் பெறப்பட்டன போன்றவற்றை Databaseல் ஏற்றிவிடுவார்கள். இந்த குழு மின்னல் வேகத்தில் தகவல்களை ஏற்றிவிடும் வல்லமை கொண்டது.

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

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

எனது நண்பரின் பதிவெண் 059169 எனக் கொண்டால், இந்தக் குறிப்பிட்ட 059169 என்கின்ற எண்ணை 6,75,643 பேர்களின் தகவல்கள் அடங்கிய Databaseல் இருந்து நொடிகளில் தேடியெடுத்துவிடும் வல்லமை SELECT கட்டளைக்கு உண்டு.

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

இதற்காக SELECT கட்டளையுடன் உறுதுணையாக உதவுவதற்குப் பயன்படுபவையே Operators ஆகும்.

Operatorsகளையும் அவற்றிற்கான பயன் மற்றும் குறுவிளக்கம் : கீழே

059169 எண்ணுக்கு உரிய தகவல்களை எனக்காகக் காண்பி = Equal

தேரியோர்களை மட்டும் காண்பி = Equal

தேராதவர்களைக் காண்பிக்காதே <> Not equal

80%க்கு மேல் மதிப்பெண்கள் வாங்கியோர் யார் யார்? > Greater than

50%க்குக் கீழே வாங்கியோர் யார் யார்? <= Less than or equal

34 மதிப்பெண்கள் அல்லது அதைவிடக் கீழே எடுத்தவர்கள் யார் யார்?<= Less than or equal கணக்குப் பாடத்தில் 80லிருந்து 100க்குள் எத்தனை பேர் மதிப்பெண்கள் எடுத்தனர் BETWEEN Between an inclusive range ஒரு குறிப்பிட்ட எழுத்தில் ஆரம்பிக்கும் பெயர்களையுடையவர்கள் யார் யார்? LIKE Search for a pattern குறிப்பிட்ட SET { } க்குள் அகப்படும் தகவல்களை மட்டும் எடுத்துக்கொண்டு வா IN If you know the exact value you want to return for at least one of the columns இது போக AND, OR, NOT எனப்படும் மூன்று முக்கிய Operators உள்ளன. இவற்றின் பயன் என்னவென்றால் தேடியெடுக்கும் முடிவுகளைக் கட்டுப்படுத்துவதே. இத்தனை லட்சம் தகவல்களில் நமக்குத் தேவைப்படும் தகவல்களை மட்டும் வடிகட்டி எடுப்பதற்கு இந்த Operators தான் காரணம். AND -- தேடும்போது எத்தனை கட்டுப்பாடுகள் விதிக்கிறோமோ, அத்தனை கட்டுப்பாடுகளுக்கும் சம்மதிக்கக் கூடிய தகவல்களை மாத்திரம் எடுத்து வருவதற்கு. உதாரணம்: 5 பாடங்களில் அனைத்துப் பாடங்களிலும் தேரியிருந்தால் மட்டுமே மாணவர் அடுத்த வகுப்புக்குச் செல்லும் தகுதியடைகிறார். அதாவது அனைத்துக் கட்டுப்பாடுகளுக்கும் சம்மதித்திருக்கிறார். கட்டுப்பாடுகள் என்பதை Condition என்பதற்காகக் கொடுத்திருக்கிறேன். 5 Conditions இருக்கின்றன. அனைத்து Condition களும் ஏற்றுக்கொள்ளப்பட்டிருக்க வேண்டும். அதுவே AND Operatorன் வெற்றியை உறுதிப்படுத்தும். OR -- தேடும்போது இந்தக் கட்டுப்பாடோ அல்லது வேறொன்றோ எதாவது ஒன்றுக்குச் சம்மதிக்கக் கூடிய தகவல்களைக் கொணர்வதற்கு. 5 பாடங்களில் ஏதேனும் ஒன்றில் தேர்ச்சியடையாவிட்டாலும் ஒட்டுமொத்தமாக மாணவரானவர் தேர்வில் தவறிவிட்டார். இதற்கு OR. இந்தப் பாடம் அல்லது அந்தப் பாடம், அல்லது வேறொன்று எதாவது ஒன்றில் தேர்வடையாவிட்டாலும் ஒட்டுமொத்தமாக FAIL எனக் குறிப்பிட OR பயன்படுத்தலாம். 5 Conditionsல் ஏதேனும் ஒரு Condition மட்டும் Satisfy ஆனாலே ORன் வெற்றி தீர்மாணிக்கப்பட்டு விடுகிறது. NOT - எந்தக் கட்டுப்பாடு விதிக்கிறோமோ அதற்கு முரண்பாடான தகவல்களைப் பெறுவதற்கு. உதாரணமாக தேர்வில் தேறாதவர்களை மட்டும் காண்பி. இதற்கு NOT உதவும். AND, OR, NOT இவற்றை தர்க்க ரீதியிலான செயல்பாடுகள் என்போம். அதாவது Logical Operators. நீ தவறைச் செய்தால் தண்டிக்கப்படுவாய் - நேர்மறை. நீ தவறைச் செய்யாவிட்டால் தண்டிக்கப்படமாட்டாய் -- இந்த மாதிரி இடங்களில் NOT பயன்படுத்தலாம்.


= Equal
<> Not equal
> Greater than
>= Greater than or equal
<= Less than or equal
BETWEEN Between an inclusive range
LIKE Search for a pattern
IN If you know the exact value you want to return for at least one of the columns

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

DQL: SELECT
DML: DELETE, INSERT, UPDATE
DDL: CREATE, DROP, TRUNCATE, ALTER
TCL: COMMIT, ROLLBACK, SAVEPOINT
DCL: GRANT, REVOKE

மேலே சில கட்டளைகளை (Commands)கொடுத்துள்ளேன். இந்தக் கட்டளைகள் மூலம் Databaseஐ நாம் நமது கட்டுப்பாட்டுக்குள் கொண்டு வரலாம்.

DQL என்பது Data Query Language. ஒரு Databaseன் Tableல் ஏற்கனவே நாம் பதிந்துவைத்துள்ள தகவல்களை தேடி எடுப்பதற்கு. உதாரணமாக 1000 rows இருப்பதாகக் கொள்வோம். அதில் குறிப்பிட்ட சில rows மட்டும் நமக்குத் தேவையெனில் அவற்றை மட்டும் தேடி எடுக்க DQL . இதற்காக SELECT என்கிற கட்டளை பயன்படும்.

DML என்பது Data Manipulation Language. ஏற்கனவே பதிந்துவைத்திருக்கும் தகவல்களில் மாற்றங்களை ஏற்படுத்த, அழிக்க, உருவாக்க. (தகவல்களைத் தான் மாற்றுகிறதே ஒழிய ஒரு Tableன் Structureல் எந்த மாற்றமும் நிகழாது).

DDL என்பது Data Definition Language. புதிய Database (அ) Table போன்றவற்றை உருவாக்க. அதாவது Tableன் Structure ஐ உருவாக்க, ஒட்டுமொத்த Table ஐயுமே அழிக்க, மாற்றங்கள் செய்ய. ஒரு குறிப்பிட்ட Column ன் Data Type ஐ மாற்ற.புதிய Column ஐ உருவாக்க, தேவையற்ற Column இருப்பின் அதை நீக்க.

TCL என்றால் Transaction Control Language. ஒரு நிரலை இயக்கும்போது ஏதேனும் பிழைகள் ஏற்பட்டால், பிழை ஏற்படுவதற்கு முன்னர் வரை ஏதேனும் மாற்றங்கள் நிகழ்ந்திருந்தால் அவையனைத்தையும் நிராகரித்து முந்தைய நிலைக்குக் கொண்டு செல்வதற்கு.

TCL பற்றி சிறிது விளக்கமாகப் பார்ப்போம்.

உதாரணமாக ஒன்றுக்கு மேற்பட்ட Database அல்லது Tableகளில் நாம் ஒரு குறிப்பிட்ட Program ஐ இயக்குவதாகக் கொள்வோம். ஒரு Tableல் உள்ள ஒரு மதிப்பைக் கழித்து (முதலாவது செயல்), அடுத்த Tableல் உள்ள ஒரு குறிப்பிட்ட மதிப்புடன் கூட்டச் செய்ய(இரண்டாவது செயல்) முயற்சிக்கிறோம்.

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

முதலாவது Tableல் அந்த மதிப்பு கழிக்கப்பட்டு இருக்கும். ஆனால் கோளாறு காரணமாக இரண்டாவது Tableல் அந்த மதிப்பு கூட்டப்பட்டு இருக்காது.

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

நல்ல உதாரணம் ஒன்று:

உங்களது வங்கியின் ATM அட்டையை, ATM இயந்திரத்தில் செருகி பணம் எடுக்க முயற்சிக்கிறீர்கள். எத்தனை ரூபாய் பணம் என்பதையும் தட்டிவிட்டீர்கள். இயந்திரமானது பணத்தை எண்ணிக்கொண்டிருக்கும் சத்தம் கேட்கிறது. திடீரென்று கோளாறு. Battery down - Power Cut. ஏதோ ஒரு கோளாறு. என்ன ஆகும்?

பணம் உங்கள் கைக்கு வராது.

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

இந்த மாதிரி இக்கட்டான சமயத்தில் உதவுவதுதான் Transaction Control. TCL ன் பணி என்னவென்றால் ஏதேனும் பிழை ஏற்பட்டிருக்கும்போது அதைத் தலைகீழாக ஆக்கி, reverse செய்து (Undo) ஒட்டுமொத்த செயல்களையும் பழைய நிலைக்கு ஆக்குவதே.

TCL இருப்பதால் உங்கள் வங்கிக்கணக்கிலிருந்து கழிக்கப்பட்ட பணமானது, இயந்திரக்கோளாறு ஏற்பட்ட உடனேயே, தலைகீழ் இயக்கத்தால் திரும்ப உங்கள் accountல் சேர்க்கப்பட்டுவிடும்.

(இது எனக்கு இரண்டுமுறை நடந்து இருக்கிறது. கடந்த 3 ஆண்டுகளில் இரண்டுமுறை இந்த TCL இயக்கத்தால் பணம் பரிபோகாமல் தப்பித்தது.)


1) எந்தப் பிழையும் நிகழாமல் இருக்கும்போது ஒட்டுமொத்த நிரலும் நல்லபிள்ளையாக இயங்கி பரிவர்த்தனையை ஒழுங்காக நிறைவு செய்யும்.

2) ஏதேனும் பிழை ஏற்பட்டால் உடனே நிரலானது தனது இயக்கத்தை நிறுத்திவிட்டு, அதுவரை செய்யப்பட்ட இயக்கத்தை reverse செய்து தகவல் இழப்பைத் தடுத்துவிடுகிறது.

முந்தைய பாடத்தில் Authorization பற்றிப் பார்த்தோம். ஒரு குறிப்பிட்ட பயனாளருக்கு ஒரு Databaseஐப் பார்வையிட மட்டும் அனுமதிக்க DCL உதவும்.

DCL என்றால் Data Control Language. ஒரு குறிப்பிட்ட பயனர் உருவாக்கிய Database,Table களின் உரிமங்களை அடுத்த பயனாளருக்கு விட்டுத்தருவதற்கு. அல்லது அடுத்தவருக்கு விட்டுத்தந்த சலுகைகளை நிராகரிப்பதற்கு.

GRANT என்றால் சலுகைகளை வழங்குவது. உரிமங்களை வழங்குவதற்கு.

REVOKE என்றால் கொடுத்த சலுகைகளை / உரிமைகளைத் திரும்பப் பெருவதற்கு.

DROP என்பது ஒட்டுமொத்த Database (அ) Table ஐ அழிப்பதற்கு (தகவலும், Structureம் அழிந்துவிடும்).

TRUNCATE என்பது தகவல்களை மட்டும் அழிப்பதற்கு (Structure அழியாது).

SELECT பதியப்பட்ட தகவல்களைத் தேடித் தருவதற்கு

INSERT புதிய rowவை உருவாக்க
UPDATE பழைய rowன் தகவலை மாற்றுவதற்கு
DELETE பதிந்திருக்கும் row / rows ஐ அழிப்பதற்கு

CREATE புதிய Database / Table ஐ உருவாக்க

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

SQL Server 2005 Express Edition ஆனது Microsoft நிறுவனத்தால் வழங்கப்படும் ஒரு இலவச மென்பொருள். இதை நீங்கள் Microsoft தளத்திலிருந்து இந்த Link வாயிலாக இறக்கிக்கொண்டு நிறுவிக்கொள்ளவும். எல்லா Database களுமே அவற்றின் கட்டமைப்பில் கிட்டத்தட்ட சமானமாகவே இருக்கின்றன.

Database ல் நாம் என்ன செய்யப்போகிறோம்?

CRUD என்கிற Create, Read, Update, Delete இந்தச் செயல்களைத்தான் செய்யப்போகிறோம்.

MySQL ஐ Sun Micro System வாங்கிவிட்டாலும் அதன் MySQL Community Server ஐ இலவசமாகவே வழங்குகிறது. அதைத் தரவிறக்கம் செய்வதற்கு இங்கே சொடுக்கவும்.

ஆனால் MySQL Enterprise Edition ஆனது இலவசமன்று. நான் அலுவலகத்திலும், வீட்டிலும் SQL Server 2005ன் Express Edition தான் பயன்படுத்துகிறேன்.

இந்த மென்பொருளை நிறுவும்போது Administratorக்கான User name, password முதலியவற்றைக் கேட்கும். அவற்றைக் கொடுக்கவும். மேலும் அவற்றை நினைவில் கொள்ளவும்.

முறைப்படி நிறுவிய பிறகு Sql Server Express ஐ இயக்கவும். இதற்கு ஒரு குறுக்குவழியாக Start ==> Run ==> SQLWB எனக் கொடுத்தால் உடனே பயன்பாட்டின் முதல் திரை கண்முன்னே நிற்கும்.

பாதுகாப்பு காரணங்களுக்காக உங்களிடம் பயனர் கணக்கையும், கடவுச்சொல்லையும் (User name & password) எதிர்பார்க்கும். Install செய்யும்போது என்ன கொடுத்தீர்களோ அதைக் கொடுத்து உள்ளே செல்லலாம்.

நிறுவும்போதே எந்தவிதமான நுழைவாயில் என்பதைக் கூறிவிடுங்கள். அதாவது Authentication ஆனது Windows Authentication அல்லது SQL Server Authentication இரண்டில் எதோ ஒன்றா? அல்லது இரண்டுமா? என்பதைக் கூறிவிடவும்.

Authentication என்றால் என்ன?
சரியான பயனர் பெயரும், Passwordம் கொடுத்தால் மட்டுமே உள்நுழைய அனுமதிக்கும் செயல். என் வீடு பூட்டியிருக்கிறது. வீட்டிற்கு இரண்டு சாவிகள். ஒன்று என்னிடமும், மற்றொன்று மகனிடம் உள்ளது. சரியான சாவியைப் போட்டு நானோ அல்லது மகனோ திறக்கலாம். தவறான சாவியைப் பிரயோகம் செய்தால் வீட்டைத் திறக்க இயலாது. இதுவே Authentication எனப்படும். முறையான User Name மற்றும் Password கொடுக்கும் செயல்.

Authorization என்பது என்ன?
ஒரு அலுவலகத்தில் 30 பேர் வேலை செய்கிறார்கள் என வைத்துக்கொள்வோம். அதில் அனுபவ முதிர்ச்சி கொண்டவர், தற்போதுதான் கல்வியை முடித்து முதன்முதலாக வேலைக்கு வருபவர், அனைவருக்கும் மூத்த தலைவர் எனப் பலவித பணியாளர்கள் இருப்பார்கள். ஒவ்வொருவருக்கும் ஒவ்வொரு பணி. இதில் யாருக்கு அதிக சிறப்பு உரிமைகள் கொடுக்கப்படுகின்றன, யாருக்குப் பல உரிமைகள் மறுக்கப்படுகின்றன - என்பதே Authorization ஆகும்.

Chess விளையாட்டில் சிப்பாய், மந்திரி, யானை, குதிரை, அரசன், அரசி என அனைவருக்கும் ஒவ்வொரு உரிமைகள் இருக்கும். ஒருவருக்கு இருக்கும் சிறப்பு உரிமைகள் அடுத்தவருக்கு இருக்காது. அதுதான் Authorization.

Authentication செயலானது முடிந்தபிறகு Authentication சரிபார்க்கும் செயல் நடைபெறும்.

Administrator என்பவருக்கு மிக அதிக உரிமை. இது போல ஒவ்வொரு பயனருக்கும் ஒவ்வொருவிதமான உரிமைகள். இதை Role என்பார்கள்.

நமது கணினியில் நாமே நிறுவிக்கொள்கிறோம். அதனால் பெரும்பாலும் நாம் இதில் Windows Authentication ஐத் தேர்வு செய்யலாம்.

SQL Server Authentication கொடுத்தால் ஒவ்வொரு முறையும் கடவுச்சொல்லைக் கொடுத்து உள் நுழையவேண்டி வரும். அல்லது அதை சேமித்து வைக்கும் வசதியைப் பயன்படுத்திக்கொள்ளலாம்.

உங்கள் Authentication எதுவாக இருக்கிறதோ அதைத் தேர்வு செய்தபிறகு, Connect ஐ அழுத்தவும்.
திரையில் Object Explorer என்னும் ஒரு Window தெரியும்.


அதில் Databaseல் Right Click செய்து New Database ஐ click செய்யவும்.

புதிய சட்டத்தில் Databaseக்கான பெயர் கொடுக்கவும். நான் Test எனக் கொடுத்துள்ளேன். பிறகு OK கொடுத்தால் Test என்கிற பெயரில் ஒரு Database உருவாகிவிடும்.
Test என்கிற இடத்தில் இருக்கும் + Expand ஐ அழுத்தினால் அதில் Database Diagrams, Tables, Views, Synonyms, Programmability, Service Broker, Storage, Security எனப் பல இருக்கும்.
அதில் Table ல் வைத்து Right click செய்து New Table ஐத் தேர்ந்தெடுக்கவும். இதில் Column Name, Data Type, Allow Nulls ஆகியவை இருக்கும். உங்கள் Tableன் Sturctureக்குத் தகுந்தாற்போல ஒவ்வொரு Column களையும் கொடுக்கவும். Person#, Name, City என மூன்று Columnகள் உதாரணத்திற்குக் கொடுத்திருக்கிறேன்.
பின் இதை Save செய்வதற்கு, Ctrl + S வழமை போலக் கொடுத்து Table க்காக ஒரு பெயர் சூட்டுங்கள். (MyList எனக் கொடுத்துள்ளேன்)
பிறகு இதை Close செய்யலாம். இப்போது உங்கள் Tableன் Structure ஆனது Save செய்யப்பட்டுவிட்டது.

இப்படி உருவாக்கிய Tableல் நமது தகவல்களை ஏற்றுவது எப்படி?
Tables க்கு அருகில் இருக்கும் + அடையாளத்தைச் சொடுக்கி expand செய்தால், dbo.MyList ஐக் காணலாம்.
அதில் Right Click செய்து, Open Table ஐத் தேர்ந்தெடுக்கவும்.
பிறகு அதில் ஒவ்வொரு Row வாகத் தகவல்களை உள்ளீடு செய்யலாம். நான் 5 rowக்களை இதில் ஏற்றிவிட்டேன்.


பதிந்தது போதும் என நினைக்கும்போது அந்த tab ல் வலது க்ளிக் செய்து Close அழுத்திவிடலாம்.
இதுவரையில் இங்கே நாம் GUI எனப்படும் Graphical User Interface வாயிலாக ஒரு Databaseம், அதில் ஒரு Tableம் உருவாக்கி, அதில் புதிய தகவல்களை எப்படிப் பதிவது என்றும் கண்டோம்.

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

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

ஒரு Tableன் Structure எப்படி இருக்கும்?

Column Name, Data Type(Width), Allow Nulls இவைகள் அனைத்தும் அடங்கியது ஒரு Table Structure.


Allow Null என்பது tick செய்யப்பட்டிருந்தால், அதன் மதிப்பை உள்ளீடு செய்யும்போது வெறுமனே விட்டுவிடலாம் என்று அர்த்தம். தற்சமயம் அதன் மதிப்பு நமக்குத் தெரிந்திருக்கவில்லை. பிறகு சில காலம் கழித்துக் கூட அதன் மதிப்பை நாம் உள்ளிட்டுக் கொள்ளலாம்.

Allow Null என்பது tick செய்யப்படாமல் இருந்தால், அந்தக் குறிப்பிட்ட columnன் தகவலைக் கண்டிப்பாக நாம் கொடுத்தே தீரவேண்டும். அதன் மதிப்பை உள்ளிடாமல் விட்டுவிட்டால் பிழைச்செய்தி வரும். ஆனால் Identity Columnக்கு மட்டும் ஒரு விதிவிலக்கு உண்டு.

முதல் Column ஆகிய AddressID ன் ஆரம்பத்தில் ஒரு சிறிய சாவியின் படம் போடப்பட்டுள்ளது. அது இந்த Tableன் primary key ஆகும்.



Primary key ஆனது ஒரு குறிப்பிட்ட Row வை தனித்து அடையாளம் கண்டுகொள்ள உதவும். மேலும் AddressID ஆனது Identity Column ஆகவும் குறிப்பிடப்பட்டுள்ளதால், இதன் மதிப்பை நாம் நேரடியாக உள்ளிட வேண்டிய அவசியமில்லை. Databaseல் தானியங்கியாக அடுத்தடுத்த எண்களை இந்த AddressIDல் Input செய்துவிடும்.

மேலே உள்ள Table Structureல் AddressLine2 க்கு மட்டும் Allow Nulls ஆனது tick செய்யப்பட்டு இருக்கிறது. ஆகவே AddressLine2க்கு உரிய தகவல் நம்மிடம் தற்சமயம் இல்லையென்றால் அதை நாம் உள்ளீடு செய்யாமல் அப்படியே விட்டுவிட்டு அடுத்த Columnக்கு உரிய தகவலை உள்ளீடு செய்யலாம். பிறகு எப்போது வேண்டுமானாலும் AddressLine2க்கு உரிய Dataவைக் கொடுக்கலாம். பிழைச்செய்தி எதுவும் வராது.

rowguid என்பதற்கு நேராக uniqueidentifier என Data Type இருக்கிறது.

அது என்ன Unique Identifier?

8DD27D89-6AE7-4316-B3B8-0CCEF0924F60 இது போன்ற ஒரு hexadecimal மதிப்பு.
இது ஒவ்வொரு முறையும் வேறு வேறு மதிப்புகளைக் கொடுக்கும். கணினிக்குக் கணினி வித்தியாசமான மதிப்பையும், ஒரே கணினியில் ஒவ்வொரு முறையும் இயக்கும்போது வேறு வேறு மதிப்புகளைக் கொடுக்கும்.

நாம் இந்த Unique Identifier Data Type ஐக் கொண்ட Column க்கு எந்த தகவலையும் உள்ளீடு செய்யவேண்டாம். இது தானியங்கியாக கணினியே உருவாக்கும் ஒரு மதிப்பாகும்.

ஒவ்வொரு row வையும் பிரித்துக் காட்ட UniqueIdentifierஐப் பயன்படுத்தலாம்.

உதாரணம் :

declare @a uniqueidentifier
set @a = newid()
print @a

இதன் விடை.

F94771ED-8405-4C30-893E-0325FA0A394C

மேலே கொடுத்துள்ள ஒரு சிறிய நிரல் ஆனது T-SQL programming ல் எழுதப்பட்டது.

T-SQL என்றால் Transact SQL என்ற விரிவைக் கொண்டது. இது ஒரு கணினி மொழி.

மேலே @a என்பது ஒரு variable. இதன் மதிப்பு ஒவ்வொரு முறையும் மாறிக்கொண்டே இருக்கும்.

set @a = newid() ---> என்றால் ஒரு கணினியால் அந்த நேரத்தில் உருவாக்கப்பட்ட ஒரு புதிய hexadecimal based மதிப்பை அந்த variable @a ல் பதிகிறோம்.

print @a --> திரையில் @a என்பதன் மதிப்பைக் காண்பி. உடனே திரையில் தெரியும் மதிப்பானது F94771ED-8405-4C30-893E-0325FA0A394C இப்படி இருக்கலாம். எனக்கு இந்த மதிப்பு வந்தது. உங்களுக்கு வேறு மதிப்பு வரும். ஒவ்வொருவருக்கும் வேறுவேறு மதிப்புகளை இந்த நிரல் உருவாக்கித் தரும்.

AddressLine1, AddressLine2, City, PostalCode ஆகிய Columnகளின் DataType ஆனது nVarchar வகையைச் சேர்ந்தது.

அதாவது இந்த Columnகளில் நாம் unicode வகையைச் சேர்ந்த எண்கள், எழுத்துக்கள், பிற அடையாளங்கள் ஆகியவற்றை உள்ளிடலாம்.

AddressLine1 க்காக நாம் அதிகபட்சமாக 60 எழுத்துக்களை ஒதுக்கியுள்ளோம். ஆனால் நாம் 20 எழுத்துக்களை மட்டுமே உள்ளிட்டால், மீதியுள்ள 40 காலியிடங்கள் trim செய்யப்பட்டு 20 எழுத்துக்கள் மாத்திரமே table ல் பதிவாகும். இதுவே varcharன் சிறப்பு.

இதுவே char என இருந்தால் ஒட்டுமொத்தமாக நாம் எவ்வளவு எழுத்துக்களை ஏற்கனவே ஒதுக்கியுள்ளோமோ அத்தனை இடங்களுமே வீணடிக்கப்பட்டுவிடும்.

AddressID, StateProvinceID இவையிரண்டின் DataType ஆனது int வகையைச் சேர்ந்தது. அதனால் இந்த இரண்டுக்கும் நாம் எண்களை உள்ளீடு செய்யலாம். ஆனால் AddressID ஆனது Identity Column வகையைச் சேர்ந்ததால் (அது auto increment வகைப்பட்டது) அதற்குத் தகவலை உள்ளிட வேண்டாம். StateProviceIDக்கு மட்டும் அதற்குரிய எண்ணைப் பதிவிட்டால் போதும்.

Modified Date என்பதில் அதற்குரிய DataType ஆனது DateTime ஆகக் குறிப்பிடப்பட்டுள்ளது.அதனால் அந்த Modified Date க்கு உரிய columnன் மதிப்பில் ஒரு குறிப்பிட்ட தேதியை உள்ளிடவேண்டும்.

ஒரு சிறிய T-SQL நிரல்.

declare @a datetime
set @a = getdate()
print @a

@a என்பது datetime எனப்படும் DataTypeஐச் சேர்ந்தது.
getdate() எனப்படும் ஒரு function நடப்புத் தேதியையும், நேரத்தையும் தரவல்லது.

print @a என்றவுடன் கிடைத்த விடை.
Jan 26 2009 11:00AM

இங்கே ஒரு சில இடங்களில் புதியவர்களுக்காக சில குறிப்பிட்ட பதங்களை ஒவ்வொரு முறையும் விளக்கியிருப்பேன். Primary key, Identity Column போன்றவற்றை மீண்டும் சுருக்கமாகக் கூறியிருப்பேன். ஒரு புரிதலுக்காகத்தான் அவ்வாறு மீண்டும் கூறியிருக்கிறேனே தவிர வேறெதுவும் இல்லை. இதற்கு முன்னர் வெளியிட்ட 3 பதிவுகளில் அவற்றை விளக்கியிருந்தாலும், அதே பதங்களை இங்கே 4வது பதிவுகளில் பயன்படுத்தும்போது புரியாமல் போகிவிடக்கூடாது மீண்டும் குறுவிளக்கமாகக் குறிப்பிட்டிருக்கிறேன்.

நன்றிகளுடன்,
தமிழ்நெஞ்சம்.

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

Identity Column என்றால் என்ன?

ஒரு குறிப்பிட்ட Column ன் மதிப்பானது, அதற்குரிய மதிப்பை நாம் கொடுக்காமலேயே, அதுவாகவே தானியங்கித்தனமாக உயர்ந்துகொண்டு வருவதை Auto Increment எனலாம். இப்படி ஒரு Column ன் மதிப்பை தானாக உயர்த்துவதால், இந்த Column க்கு Identity Column என்போம்.

இந்த Column ன் Data Type ஆனது numeric ஆக இருத்தல் வேண்டும். இதன் உயர்வு விகிதம் (Identity Increment), எந்த எண்ணிக்கையில் இருந்து ஆரம்பிக்கவேண்டும் (Identity Seed) போன்றவற்றை நாமே தீர்மாணிக்கலாம்.

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

Primary key என்பது என்னவென்று இதற்கு முந்தைய பதிவில் பார்த்தோம்.

Foreign Key என்றால் என்ன?

Table என்றால் என்னவென்று நமக்குத் தெரியும். அதில் பல தகவல்களை ஒவ்வொரு Rowவாக உள்ளீடு செய்து வைத்திருப்போம். ஒன்றுக்கு மேற்பட்ட Tableகளில் இருக்கும் தகவல்களை ஒரே திரையில் காண்பதற்கு உதவுவதே Foreign key ஆகும்.

ஒரு குறிப்பிட்ட Table ல் ஒவ்வொரு Rowவையும் பிரித்துத் தனிமைப்படுத்துவதற்கு, அடையாளம் காண்பதற்கு Primary key உதவுகிறது.

இந்தக் கட்டுமானத்தை Master - Detail என்று கூறுவோம்.
Master Tableல் ஒரு குறிப்பிட்ட Column ஆனது Primary key ஆக இருக்கும். (இது முதலாவது Table). Primary key ன் மதிப்பு ஒவ்வொரு Rowக்கும் மாறிக்கொண்டே இருக்கும். உதாரணமாக Person#. ஒவ்வொரு நபருக்கும் ஒரு தனிப்பட்ட எண்ணைக் கொண்டு வித்தியாசப்படுத்துவதற்கு Primary key உதவும்.

Master Table ல் ஒரு முறை மட்டும் வந்த Person# ஆனது, Detail Table ல் பலமுறை திரும்பத் திரும்ப வரும். இந்த இரண்டு எண்ணும் ஒரே எண்ணாக இருக்கும்.
இரண்டின் Data Type ம் ஒன்றாகவே இருக்கும். இரண்டும் ஒன்றுக்கொன்று தொடர்புடையதாக இருக்கும்.

இந்த Primary - Foreign key மூலம் இரண்டு Tableகளின் மதிப்புகளை ஒரே திரையில் காணலாம். இதை join என்போம்.

இந்த இரண்டு keyகளின் Columnல் ஏற்றப்பட்ட மதிப்புகளை அடையாளப்படுத்தியே Master-Detail Table மையப்படுத்தப்படுகிறது.

Unique என்றால் என்ன?
ஒரு குறிப்பிட்ட Columnல் உள்ள மதிப்பு ஒவ்வொரு Rowக்கும் வித்தியாசமானதாக இருப்பதை Unique எனலாம்.

Person# எனப்படுவதை Unique Column எனலாம். ஒவ்வொரு நபரின் பெயரும் வித்தியாசமானதாக இருக்கத் தேவையில்லை (காரணம் : பெயர்ப் பற்றாக்குறை). ஆனால் ஒவ்வொரு நபருக்கும் நாம் அளிக்கும் குறிப்பிட்ட எண் (Person#) ஆனது Unique ஆகும்.

ஆகவே Primary key ஆனது Unique தான். ஆனால் Primary keyஆனது NULL ஆக இருக்கவே முடியாது. Unique Column ஆனது ஒரே ஒருமுறை மட்டும், NULL மதிப்பை ஏற்றுக்கொள்ளும். இதுவே இவை இரண்டுக்கும் உள்ள ஒரே வித்தியாசம்.

NULL என்பது எந்த மதிப்பும் இல்லாதது. அதன் மதிப்பு பூஜ்யமோ / எதோ ஒரு எழுத்தோ / எழுத்துத் தொகுப்போ இல்லை. அது மதிப்பே இல்லாதது.

Primary key ஆனது NULL ஐ ஏற்றுக்கொள்ளாது. ஆனால் Unique Column ஆனது ஒரே ஒருமுறை மட்டும் NULLஐ ஏற்றுக்கொள்ளூம்.

DataType களின் வகைகள் யாவை?
SQL Server 2005ல் நாம் பயன்படுத்தும் Data Typesகளின் வகைகள் கீழே:

user-defined data types (highest)
sql_variant
xml
datetime
smalldatetime
float
real
decimal
money
smallmoney
bigint
int
smallint
tinyint
bit
ntext
text
image
timestamp
uniqueidentifier
nvarchar
nchar
varchar
char
varbinary
binary (lowest)

Data Types என்பது, ஒவ்வொரு Columnலும் நாம் உள்ளீடு செய்யப்போகும் தகவலின் வகையைக் குறிக்கிறது.எண், எழுத்து, தேதி - போன்ற Data Type ஐ நாம் அதிகம் பயன்படுத்துவோம்.

Character க்கும் Variable Characterக்கும் என்ன வித்தியாசம்?

NAME CHARACTER(50) ---> இது ஒரு Column எனக் கொண்டால், இதில் Field name ஆனது NAME ஆகும். இதில் நாம் உள்ளீடு செய்யவிருக்கிற தகவலின் வகை character எனப்படும் DataType ஐச் சார்ந்தது. அதில் நாம் அதிகபட்சமாக 50 தனித்தனி எழுத்துகளை (இடைவெளி Space) ஐயும் சேர்த்து உள்ளிடலாம்.

உதாரணமாக
NAME = "Raja" எனக் கொடுத்தால், இதில் 4 எழுத்துக்களை உள்ளிட்டு இருக்கிறோம். ஆனால் அதிகபட்சமாக நாம் 50 எழுத்துக்களை உள்ளிட அனுமதிக்கிறது. அடைப்புக்குறிக்குள் இருக்கும் (50) என்பது இதைக் குறிக்கிறது.

நாம் கொடுத்துள்ள Rajaவில் 4 எழுத்துக்கள் மட்டுமே உள்ளன. ஆனால் மீதியுள்ள 46 எழுத்துக்களின் மதிப்பை நாம் உள்ளீடு செய்யாமல் விட்டுவிட்டோம். ஆனால் ஒட்டுமொத்த 50 எழுத்துக்களுமே வன்வட்டு (hard disk) ல் பதிவாகும்.மீதியுள்ள 46 எழுத்துக்களுக்கு Space மூலம் நிரப்பப்பட்டு அதன் ஒட்டுமொத்த 50 மதிப்புகளும் வீணாக்கப்பட்டுவிடும்.

ஆனால் variable character என்பதில், Babu என உள்ளிட்டால் 4 எழுத்துக்கள் மட்டுமே கணக்கில் எடுத்துக்கொள்ளப்படும். மீதியுள்ள 46 எழுத்துக்களில் இருக்கும் Space கணக்கில் எடுத்துக்கொள்ளப்படாமல் அவற்றின் Space எல்லாம் நிராகரிக்கப்பட்டு 4 எழுத்துக்கள் மாத்திரமே hard disk ல் எழுதப்படும். இதனால் நம் நினைவகம் வீணாவது தவிர்க்கப்படும்.

UniCode எழுத்துக்களைப் பதிவு செய்வதற்கு எந்த Data Types ஐப் பயன்படுத்துவது?

பெரும்பாலும் ஆங்கிலத்தில் உள்ள தகவல்களை character, varchar முதலிய Data Type மூலம் உள்ளீடு செய்யலாம்.

ஆனால் ஆங்கிலம் அல்லாத பிற மொழிகளான தமிழ், மலையாள மொழிகளை உள்ளீடு செய்ய நாம் nvarchar, nchar போன்ற Data Type ஐப் பயன்படுத்தலாம்.

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

நேற்று Table, Column, Data Type பற்றிப் பார்த்தோம்.

RDBMS என்பது என்ன?
RDBMS என்பதன் விரிவு : Relational Database Management System.

SQL ஐப் பயன்படுத்தும் நவீன மென்பொருட்கள் சில :
MS SQL Server, IBM DB2, Oracle, MySQL, and Microsoft Access.

Table என்பது என்ன?
Database ல் தகவல்களை எங்கே பதிவு செய்திருக்கிறோமோ அந்த அமைப்பு Table எனப்படும்.

ஒன்றுக்கு ஒன்று தொடர்புடைய தகவல்களின் தொகுப்பு Table.

Table ஆனது எந்தவிதமான கட்டமைப்பில் அமைந்திருக்கும்?.

ஒரு Table ல் பல Column / Field இருக்கும். பல Column களின் தொகுப்பே Table.

ஒவ்வொரு Column மும் ஒரு குறிப்பிட்ட வகையான தகவலைக் கையகப்படுத்தி இருக்கும். ஆகவே ஒவ்வொரு Columnம் அதற்குரிய Data Type ஐக் கொண்டே அனுசரிக்கப்படுகிறது.

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

மேலே ஒரு Tableன் மாதிரி வடிவத்தைக் கொடுத்துள்ளேன். (படத்தின் மேல் சொடுக்கினால் பெரிதாகப் பார்க்கலாம்).

இதில் Person#,LastName,FirstName,Address,City ஆகியவற்றை Column/Field எனலாம்.

Person# என்பது எண்களால் குறிப்பிடப்படுகிறது. இதன் Data Type ஆனது numeric.
LastName,FirstName,City ஆகியவை எழுத்தால் குறிப்பிடப்படுவதால் இவற்றின் Data Type ஆனது character, variable character ஆகும்.

Address என்கிற Columnல் எண்ணாலும், எழுத்தாலும் குறிப்பிடப்பட்டாலும் இது character அல்லது variable character என்கிற வகைக்குள்ளேயே வைத்து விடலாம்.

PinCode என்று ஒரு column இருந்தால் அதையும் Character வகைக்குள்ளே வைத்துவிடலாம். PinCode பயன்படுத்தி நாம் எந்தவிதமான கூட்டல்,கழித்தல்,வகுத்தல்,பெருக்கல் முதலிய கணக்கீடுகளைச் செய்யப்போவதில்லை. அதனால் அதை numeric வகைக்குள் வைப்பதற்குப் பதிலாக character வகைக்குள்ளேயே வைத்துவிடலாம்.

ஒரு Table ல் Row அல்லது Tuple என்றால் என்ன?
மேலே உள்ள Table ல் மொத்தம் 3 row க்கள் இருக்கின்றன.

முதலில் இருப்பது தலைப்பாக இருப்பதால் அதை விடுத்து, அதன் கீழ் உள்ள 3 row மட்டுமே கருத்தில் எடுத்துக்கொள்ளப்படுகின்றன.

Row என்பது Columnகளின் தொகுப்பு. ஒன்றுக்கொன்று தொடர்புடைய தகவல்களை ஒரு Row ல் எழுதி வைப்பது வழக்கம்.

உதாரணமாக : 3,Karthik,The Hero,Space, Erode : இவை அனைத்தும் ஒரு குறிப்பிட்ட நபரின் தகவல்களே. ஒன்றுக்கு ஒன்று தொடர்புடைய தகவல்கள்.

3 என்பது நபரின் எண்
Karthik : First Name
The Hero : Last Name
Space : Address
Erode : City

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

Karthik என்பவரின் Address தற்சமயம் நமக்குத்தெரிந்திருக்கவில்லை. அதனால் அதை அப்படியே நிரப்பாமல் விட்டுவிட்டு, அடுத்த Field ஆகிய City ல் Erode என எழுதிவிட்டோம்.

இவ்வாறு ஒரு குறிப்பிட்ட Columnல் நிரப்பப்பட வேண்டிய தகவலானது தற்சமயம் நிரப்பப்பட அவசியம் இல்லை என்பதை Allow Null என்பதே தீர்மாணிக்கும்.

A = 0, ----> இது எண் வகையைச் சேர்ந்தது (numeric)
B = "Karthik" ----> இது எழுத்து வகையைச் சேர்ந்தது (character)
C = NULL ----> தகவல் தற்சமயம் கைவசம் இல்லை (NULL)

NULL என்பதன் அர்த்தம் யாதெனில், தற்போது அந்தக் குறிப்பிட்ட தகவலின் மதிப்பு எதுவும் இல்லை. அது பூஜ்யமும் இல்லை. அதில் எந்த மதிப்பும் இல்லை. அது NULL - அவ்வளவுதான்.

Allow NULL - இதன் மதிப்பை ஆமாம் (true), இல்லை (false) என்கிற கட்டுக்குள் கொண்டு வரலாம். true / false.

ஒவ்வொரு நபருக்கும் தனித்தனிப் பெயர் இருப்பதுபோல, இங்கே அவரவர்க்கும் தனித்தனி எண்கள் தரப்படும்.

ஒன்றுக்கு மேற்பட்டவர்களுக்கு ஒரே பெயர்கள் இருக்கலாம் (பெயர்ப் பற்றாக்குறை!).

எனக்கு Karthik என்கிற பெயர்கள் உடைய 6 நண்பர்கள் இருக்கிறார்கள். அவர்களை வித்தியாசப்படுத்த ஒவ்வொருவருக்கும் ஒரு எண்கள் தரப்படுகின்றன. அதுவே Person#.

இதற்கு Primary Key என்று பெயர்.

அது என்ன Primary Key?

ஒன்றுக்கு மேற்பட்டவர்களின் பெயர்கள் ஒரே மாதிரியாக இருக்கும்போது, ஒவ்வொருவரையும் தனித்தனியாக அடையாளம் காண்பிப்பதற்கு உதவும் மாற்று உறுப்புதான் Primary Key ஆகும்.

ஒரு Tableல் பல Rowக்கள் இருக்கலாம். ஒரு Rowல் பல Column இருக்கலாம்.

ஒவ்வொரு Rowவையும் மற்ற Row க்களில் இருந்து பிரித்து தனித்து அடையாளம் காண்பதற்கு Primary key பயன்படுத்துகிறோம்.

சற்று முன்னர் NULL பற்றிப் பார்த்தோம். ஒரு குறிப்பிட்ட தகவலின் மதிப்பு, தற்சமயம் கையில் இல்லாமல் இருந்தால் அதை NULL என்று தீர்மானித்து அப்படியே விட்டுவிடலாம்.

Primary key ஆனது NULL ஆக இருக்க வாய்ப்பு உள்ளதா?
கண்டிப்பாக இல்லை. Primary key ஆனது எந்த ஒரு சமயத்திலும் NULL ஆக இருக்கவே இருக்காது.

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

SQL என்பதன் விரிவு என்ன?
Structured Query Language

SQLன் பயன்கள் யாவை?

Databaseன் தகவல்களைத் தேடி எடுப்பது,
புதிய தகவலை ஏற்றுவதற்கு,
பழைய விவரங்களை மாற்றுவதற்கு,
அழிப்பதற்கு மற்றும் இன்னும் நிறைய விசயங்களுக்கு SQL பயன்படுகிறது.
Database களில் இருக்கும் தகவல்களை எடுக்க / கொடுக்க SQL உதவுகிறது.

Query என்றால் கேள்வி, விசாரணை, தேடுதல் என அர்த்தம் கொள்ளலாம்.


சரி எடுத்த எடுப்பில் Database என ஆரம்பித்துவிட்டேன்.
அது என்ன Database?

பாய்ஸ் படத்தில் நடிகர் செந்தில், மணிகண்டனுடன் ஒரு கையடக்க நோட்டுப்புத்தகத்தை வைத்துக்கொண்டு ”எந்தக் கோவிலில் எந்த நேரத்தில் என்ன கொடுப்பார்கள்”? என புள்ளிவிவர அறிக்கை விடுவார்.

ஒரு வசனம் பேசுவார் - Information, Information is Wealth என்பார். அது யாரோ எழுதிக்கொடுத்த வசனம் அல்ல. எழுத்தாளர் சுஜாதா பாய்ஸ் படத்துக்காக எழுதிக்கொடுத்த வசனம்தான். இது ஒரு நகைச்சுவை உதாரணம்.

கீழே ஒரு எளிய Table வடிவம் ஒன்றைத் தருகிறேன்.

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

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

இதில் மாணவர் பெயர், தேதி முதலியவற்றை Field அல்லது Column எனலாம்.
மாணவரின் பெயர் எழுத்து வடிவில் இருக்கும்.
அதனை String / Character / Variable character என்போம்.

தேதி என்பது month-date-year அல்லது date/month/year போன்ற ஒரு வடிவில் அமைந்திருக்கும். இது இரண்டாவது Field ஆகும்.

மாணவர் பெயர் ---> character(50)
தேதி ---> datetime

ஒரு மாணவருக்காக எவ்வளவு எழுத்துகளை அதிகபட்சமாக ஒதுக்குகிறோம் என்பதே அடைப்புக்குறிக்குள் தரப்படுகிறது.

உதாரணமாக மாணவரின் பெயர் ‘Babu’ எனக் கொண்டால் அவருடைய பெயரின் எழுத்துக்களின் எண்ணிக்கை 4.
’valpaiyan @ Arun The Hero’ எனக் கொண்டால் அவருடைய பெயரின் ஒட்டுமொத்த எழுத்துக்களின் எண்ணிக்கை 25.

இப்படி ஒவ்வொருவரின் பெயரில் உள்ள எழுத்துக்களின் எண்ணிக்கை வித்தியாசப்படுகிறது. ஆகவே நாமாகவே ஒரு உச்சமதிப்பு ஒன்றை கொடுத்துவிடவேண்டும். இங்கே character(50) எனக் கொடுத்தால் Name என்கிற Field / Column ல் அதிகபட்சமாக 50 எழுத்துக்களைப் பதிவுசெய்ய இயலும் எனக் கொள்க.


மாணவர் பெயர் ---> character(50)
தேதி ---> datetime இவை இரண்டும் இரண்டு Column எனக் கொண்டால், இவற்றினை ஒட்டுமொத்தமாக ஒரு Table எனலாம்.

ஒரு Table என்பது பல Field களின் தொகுப்பு.

ஒரு Field என்பது குறிப்பிட்ட ஒரே மாதிரியான தகவலின் தொகுப்பு.

ஒவ்வொரு Fieldலும் நாம் பதிவு செய்யப்போகிற தகவலின் அடிப்படையில், எந்த மாதிரியான தகவலைப் பதிவு செய்யப் போகிறோம் என்பதை அதன் Data Type மூலம் நிர்ணயிக்கலாம்.

மாணவரின் பெயரை character(50) என்றோம். இங்கே 50 என்பது எத்தனை எழுத்துக்கள் என்பதைக் குறிக்கிறது. character என்பது ஒரு Data Type ஆகும்.

தேதி --> datetime இங்கு datetime என்பது மற்றொரு வகை Data Type ஆகும்.

எழுத்துக்களைப் பதியும்போது character, எண்களைப்பதியும்போது numbers (int,bigint,decimal,float). தேதியைக் குறிக்கும்போது datetime என ஒவ்வொரு வகையான தகவலுக்கும் ஒவ்வொரு DataType உள்ளது.

ஆகவே Data Type என்பது தகவலின் வகையைக் குறிப்பதாகும்.

SQL வாயிலாக ஒரு Table ஐ உருவாக்க / மாற்ற / அழிக்க / தகவலைத் தேட இயலும்.

Table என்பதில் பல Columns இருக்கும். ஒவ்வொரு Columnன் தகவலின் வகையை DataType மூலம் நிர்ணயிக்கலாம். எவ்வளவு எழுத்துகள் என்பதை அடைப்புக்குறிக்குள் சொல்கிறோம்.

உங்கள் கணினியில் SQL கட்டளைகளை இயக்கிப் பார்ப்பதற்காக Microsoft SQL Server 2005 Express Edition மென்பொருளை இலவசமாகத் தரவிறக்கி உங்கள் கணினியில் நிறுவிக்கொள்ளவும்.

பின் குறிப்பு : வாரத்திற்கு 2 முறையாவது இந்த எளிய தமிழில் SQL என்கிற தொடர் பதிவுகளை அளிக்கலாம் என முன்வந்துள்ளேன். உங்கள் ஆதரவு தேவை.

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

முதலில் சில terms உங்களுக்குக் குழப்பமாக இருப்பினும் தொடர்ந்து படியுங்கள். இங்கே குறிப்பிடும் உதாரணங்களை கணினியில் செய்து பாருங்கள். வித்தியாசத்தை நீங்களே உணர்வீர்கள்.

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

http://www.microsoft.com/downloads/details.aspx?FamilyID=220549b5-0b07-4448-8848-dcc397514b41&DisplayLang=en

எனது நோக்கம் என்னவெனில் இந்தத் தொடரின் மூலம் புதியவர்களுக்கு Database பற்றியும், SQL பற்றியும் அறிந்துகொள்ளும் ஒரு வாய்ப்பை உருவாக்கித் தருவதே.

நன்றிகளுடன்,