مروری بر SQL تاریخچه SQL از لابراتوار IBM در سان خوزه کالیفرنیا شروع میشود.
جایی که SQL در اواخر دهه 1970 میلادی شکل گرفت.
کلمه SQL برگرفته از حروف اول کلمات Structuted Query Language ساخته شده و اغلب اوقات اشاره به 'sequel' میکند.
این زبان ابتدا برای محصول DB2 شرکت IBM (یک سیستم مدیریت پایگاه داده ای رابطهای یا RDBMS که امروزه نیز برای بعضی محیطها فروخته میشود، طراحی شد.) در واقع SQL امکان RDBMS را فراهم میآورد.
SQL یک زبان غیر روالمند میباشد، بر خلاف زبانهای روانمند یا زبانهای نسل سوم (3 GLs) مثل کوبول و C که در آن زمانها ایجاد شده بودند.
تذکر غیر روانمند یعنی چه به جای چگونه، بطور مثال SQL میگوید که دادهها باید ذخیره، حذف، اضافه یا بازیابی شوند بدون آنکه به چگونگی انجام آنها کاری داشته باشد.
ویژگی مهمی که باعث تفاوت بین DBMS و RDBMS میگردد، آن است که یک RDBMS از یک زبان مبتنی بر مجموعهها استفاده میکند.
در اکثر RDBMS ها این زبان، زبان SQL است.
در نتیجه SQL زبان مبتنی بر مجموعهها است.
SQL، یک زبان کامپیوتری مبتنی بر استاندارد (American National Standards Institute) ANSI برای بازیابی و بروز رسانی دادهها در یک پایگاه دادهای میباشد و با برنامههای پایگاه دادههایی مانند MS Access ، DB2 ، MS SQL Server ، Oracle، Sybase و ...
کار میکند.
از طریق SQL، یک برنامه نویس یا گرداننده دادهها میتواند کارهای زیر را انجام دهد: !
تغییر ساختار یک پایگاه داده ای !
تغییر مشخصات امنیتی سیستم !
امکان اعطای اجازه دسترسی کاربران به پایگاه دادهای یا جداول !
پرس و جو از یک پایگاه دادهای استفاده از SQL و پایگاه دادهای رابطهای نیز از مهمترین اقدامات انجام شده در جهت توسعه کاربرد Client/Server میباشد.
SQL بطور کلی شامل دو گروه از جملات میباشد: جملات پردازش دادهها (DML) جملات تعریف داده ها (DDL) جملات پردازش دادهها (DML) شامل عبارات زیر میباشند: ¶ INSERT ¶ DELETE ¶ UPDATE مهمترین عبارات DDL در SQL نیز عبارتند از: ¶ CREATE TABLE ¶ ALTER TABLE ¶ DROP TABLE ¶ CREATE INDEX ¶ DROP INDEX ¶ CREATE VIEW ¶ DROP VIEW در بخشهای بعد بطور کاملتر این دستورات توضیح داده خواهند شد.
دستور SELECT قاعده نگارش را با دستور SELECT شروع میکنیم زیرا اکثر جملات با SELECT شروع میشوند.
این دستور که دستوری مستقل نیست و حتما باید با اجزایی بکار رود، جهت ساخت پرس و جو بر روی بانک اطلاعاتی بکار میرود و رکوردهایی را که با شرایط این دستور همخوان باشد، به عنوان نتیجه پرس و جو برمیگرداند.
توجه هرگاه SELECT استفاده میشود حتما باید از شبه جملات FROM نیز استفاده شود.
انتخاب تمام ستونها: SELECT * FROM table_name انتخاب ستونهای خاص: SELECT column_name(s) FROM table_name تذکر در بعضی از نرمافزارهای SQL علامت سمیکولن (;) در انتهای جمله به مفسر میگوید که پرس و جو تمام شده است.
به عنوان مثال SQL*plus اوراکل، پرس و جویی را اجرا نمیکند تا زمانیکه یک سمیکلون (یا یک اسلش (/)) را پیدا نکند.
در حالی که بعضی دیگر از نرم افزارهای SQL از سمیکلون به عنوان انتهای یک جمله SQL استفاده نمیکنند.
به عنوان مثال پرس و جو در مایکروسافت نیازی به تمام کننده ندارد زیرا پرس و جو در جعبه ویرایش تایپ میشود و وقتی دکمهای را فشار دهیم اجرا میگردد.
پرس و جو با استفاده از DISTINCT برخی اوقات در جداول بعضی از اقلام دادهای تکرار میشون.
اگر آنچه نیاز داریم آن است که بدانیم چه مقادیر متفاوتی در یک ستون وجود دارند، از دستور زیر استفاده میکنیم: SELECT DISTINCT column_name(s) FROM table_name این جمله اقلام دادهای تکراری در ستون مورد نظر را حذف میکند.
به عبارت دیگر DISTINC باعث محدود شدن نتایج خروجی میشود به شکلی که دادههای تکراری در جواب ظاهر نمیشوند.
عبارات یک عبارت یک مقدار را برمیگرداند.
از نقطه نظر نوع داده، عبارت انواع متفاوتی دارد مثل رشته، عدد و بولین.
در واقع هر چیزی پس از شبه جمله (بطور مثال SELECT یا FROM) بیانگر یک عبارت است.
در مثال زیر amount یک عبارت است که مقدار ستون omount را بر میگرداند: SELECT amount FROM checks شرایط اگر بخشی از اقلام یا گروهی از اقلام را در پایگاه اطلاعاتی بخواهیم، به یک یا چند شرط احتیاج دارد.
شرایط در داخل شبه جمله WHERE میآیند.
شرایط' امکان پرس و جوهای انتخابیتر را میدهند.
در متداولترین فرم آنها، شرایط از یک متغیر، یک مقدار ثابت و یک عملگر مقایسهای تشکیل میشوند.
قاعده نگارش شبه جمله WHERE : SELECT column_name(s) FROM table_name WHERE condition عملگرها عملگرها عناصری هستند که برای بیان چگونگی شرایط مورد نظر جهت استخراج دادهها در داخل یک عبارت استفاده میشوند.
عملگردها به 6 گروه تقسیم میشوند: ریاضی، مقایسهای، کاراکتری، منطقی، مجموعهای و متفرقه.
¨ عملگرهای ریاضی عملگردهای ریاضی عبارتند از: جمع (+)، تفریق (-)، ضرب (*)، تقسیم (/) و باقیمانده صحیح (% یا MOD).
¨ عملگردهای مقایسهای عملگرهای مقایسهای، عبارات را مقایسه نموده و یکی از این سه مقدار را بر میگردانند: صحیح (True)، غلط (False) یا ناشناخته (Unknown).
در فرهنگ اصطلاحات پایگاه دادهها، هیچ (NULL) به معنای عدم حضور داده در یک فیلد است.
اما بدین مفهوم نیست که فیلد دارای مقدار صفر یا بلانک (blank) است.
صفر یا بلانک یک مقدار است در حالیکه هیچ یعنی آن فیلد چیزی ندارد.
اگر مقایسهای مثل field=9 را انجام دهیم و بدانیم تنها مقدار قابل قبول برای آن فیلد هیچ است، آنگاه نتیجه مقایسه ناشناخته است.
چون ناشناخته یک شرط نامناسب است، نسخههای مختلف SQL ، مقدار ناشناخته را با مقدار غلط جایگزین مینمایند و عملگر خاص IS NULL را برای آزمایش شرط NULL ارائه میدهند.
عملگرهای مقایسهای عبارتند از: مساوی (=)، بزرگتر از (> ) ، بزرگتر یا مساوی با (=>)، کوچکتر از ().
توجه برای پیدا کردن مقادیر فیلدهای کاراکتری باید از علامت کوتیشن در طرفین مقدار مورد نظر استفاده شود.
فیلدهای عددی نیازی به استفاده از علامت کوتیشن ندارند.
تذکر گرچه قاعده نگارش SQL به حروف بزرگ و کوچک حساس نیست، اما دادهها آن حساس میباشند.
اکثر شرکتها ترجیح میدهند که اطلاعات را به شکل حروف کوچک ذخیره کنند تا بدین وسیله جامعیت دادهها را تأمین نمایند.
پیشنهاد میشود که همه دادهها یا بصورت حروف بزرگ و یا بصورت حروف کوچک ذخیره شوند.
ترکیب حروف بزرگ و کوچک احتمالا موجب بروز مشکلاتی در بازاریابی دقیق دادهها خواهد شد.
توجه حروف بزرگ معمولا قبل از حروف کوچک ذخیره میشوند (ارزش کاراکتری حروف بزرگ کمتر از حروف کوچک است).
¨ عملگردهای کارکتری از عملگردهای کاراکتری برای پردازش رشتههای کاراکتری استفاده میشود (هم در خروجی دادهها و هم به منظور گذاشتن شرطی روی دادههایی که باید بازیابی گردند.) !
عملگر LIKE گاهی اوقات میخواهیم بخشی از اطلاعات پایگاه دادهها را که دارای الگوی خاصی است ولی کاملا یک داده خاص را نمیپوشاند، انتخاب و بازیابی نماییم.
یک روش طولانی و خسته کننده آن است که الگوی مورد نظر را در حالات مختلف ممکن در سرتاسر پایگاه دادهها به همراه علامت = استفاده کنیم.
راه حل بعدی استفاده از LIKE است.
SELECT coumn_name FROM table_name WHERE column_name LIKE pattern مثال/ SELECT * FROM customers WHERE LastName LIKE 'S%' با استفاده از عبارت فوق، رکورد تمام مشتریانی که نام خانوادگی آنها با حرف S شروع میشود به عنوان خروجی، برگردانده خواهد شد.
تذکر از علامت % میتوان در ابتدا، انتها و یا در هر دو طرف الگو (pattern) استفاده کرد.
اگر بخواهیم دادههایی را پیدا کنیم که یک یا چند کاراکتر از آن را در اختیار داریم، باید از نوع دیگری از wildcard، یعنی underscore (_ ) استفاده کنیم.
مثال/ SELECT * FROM friends Where phone LIKE '223_5_8_' همچنین میتوان از ترکیب این دو Wildcard نیز استفاده کرد.
مثال/ SELECT * FROM customers WHERE LastName LIKE '_b% ' با استفاده از این مثال تمام رکوردهایی که دومین کاراکتر نام خانوادگی آنها b است، پیدا میشوند.
عملگر «: عملگر» (لوله مضاعف) دو رشته را به هم متصل میکنند.
تذکر بعضی از نسخههای SQL جهت اتصال از علامت جمع استفاده میکنند.
عملگرهای منطقی عملگرهای منطقی، دو یا چند شرط را در شبه جمله WHERE از یک جمله SQL جدا میکنند.
!
عمگر AND : دو عبارت منطقی را ترکیب میکند.
باید هر دو شرط داده شده در طرفین AND صحیح باشند تا نتیجه AND صحیح گردد.
اگر یکی از شروط در طرفین AND غلط باشد، نتیجه AND غلط میگردد.
SELECT column_name(s) FROM table_name WHERE conditionl AND condition !
عملگر OR : از OR برای ارتباط شروط استفاده میشود.
کافی است که یکی از شرطهای دو سمت OR صحیح باشد تا نتیجه OR صحیح گردد و در صورتی نتیجه OR غلط است که هر دو شرط دو سمت OR غلط باشند.
SELECT column_name(s) FROM table_name WHERE conditionl OR condition2 !
عملگر NOT : شرط داده شده را منفی میکند.
به عبارتدیگر اگر شرط داده شده قبل از NOT غلط باشد، بعد از اعمال NOT صحیح میشود و بالعکس.
NOT همچنین میتواند با عملگر IS زمانیکه از NULL استفاده میکنیم، همراه شود.
¨ عملگرهای مجموعهای !
عملگرهای UNION و UNION ALL : UNION، اجتماع دو مجموعه پرس و جو را بدون تکرار برمیگرداند.
UNION ALL نیز شبیه UNION میباشد بجز آنکه تکراریها را حذف نمیکند.
SQL STATEMENT 1 UNION/UNION ALL SQL STATEMENT 2 !
عملگر INTERSECT : رکوردهایی را برمیگرداند که در هر دو پرس و جو وجود داشته باشند (مشترک باشند).
SQL STATEMENT 1 INTERSECT SQL STATEMENT 2 !
عملگر MINUS : کلیه ردیفهایی را ه در پرس و جوی اول هستند ولی در پرس و جوی دوم نیستند، برمیگرداند.
SQL STATEMENT 1 MINUS SQL STATEMENT 2 ¨ عملگرهای دیگر !
عملگر IN : از عملگر IN هنگامی استفاده میشود که مقدار دقیق آنچه را که میخواهیم برگردانده شود، را بدانیم.
SELECT column_name(s) FROM table_name WHERE column_name IN (value 1, value 2, …) مثال/ SELECTB * FROM customers WHERE LastName IN (¢Hansen ¢ / ¢ Pettersen¢) در مثال فوق مشخصات مشتریانی که نام خانوادگی آنها Hansen و یا Pettersen میباشد، برگردانده میشود.
s عملگر BETWEEN … AND : عملگر BETWEEN … AND، بازدهای از دادهها را که بین د و مقدار موردنظر قرار دارند را برمیگرداند.
(مقادیر موردنظر میتوانند عدد، متن و یا تاریخ باشند).
تذکر نتیجه عملگر BETWEEN … AND در پایگاه دادههای مختلف متفاوت است.
در بعضی از پایگاه دادهها، BETWEEN … AND تنها مقادیری را که بین دو مقدار موردنظر قرار دارند، برمیگرداند.
در بعضی از پایگاه دادهها مقادیری که بین دو مقدار موردنظر قرار دارند و شامل آن مقادیر نیز میباشند، برگردانده میشوند و در برخی دیگر مقادیر بین دو مقدار موردنظر به همراه یکی از مقادیر سمت چپ و یا سمت راست به عنوان نتیجه برگردانده میشوند.
توابع استفاده از توابع SQL این امکان را میدهد تا کارهای خارقالعادهای مثل جمع یک ستون یا تغییر تمام کاراکترهای یک رشته به حروف بزرگ را انجام دهیم.
توابع، بطور قابل ملاحظهای توانایی ما را در پردازش اطلاعاتی که بازیابی میکنیم، با استفاده از توابع اولیه SQL بالا میبرد.
SELECT function (column) FROM table – name WHERE condition s توابع جمعی این توابع گاهی اوقات تحت عنوان توابع گروهی نامیده میشوند.
نتیجه این توابع مقداری است که از مقادیر یک ستون حاصل میشود.
توجه نمیتوان از توابع جمعی (گروهی) در شبه جمله WHERE استفاده کرد.
s COUNT : این تابع تعداد ردیفهایی را برمیگرداند که شرایط موجود در جلوی شبه جمله WHERE را تامین میکنند.
s SUN : این تابع مجموع مقادیر یک ستون عددی را برمیگرداند.
s AVG : تابع AVG میانگین یک ستون را محاسبه میکند.
AVG نیز مانند تابع SUN فقط برای فیلدهای عددی بکار میرود.
s MAX : این تابع بزرگترین مقدار یک ستون را پیدا میکند.
تابع MAX هم با اعداد کار میکند و هم با رشتههای کاراکتری.
s MIN : تابع MIN شبیه تابع MAX است با این تفاوت که کوچکترین مقدار یک ستون را برمیگرداند.
این تابع نیز هم با اعداد کار میکند و هم با رشتههای کاراکتری.
s VARIANCE : مربع انحراف استاندارد را نشان میدهد که عددی حیاتی برای بیشتر محاسبات آماری است.
این تابع از توابعی است که فقط با فیلدهای عددی کار میکند.
s STDDEV : این تابع مقدار انحراف استاندارد یک ستون از اعداد را پیدا میکند.
این تابع نیز تنها با فیلدهای عددی کار میکند و وقتی با رشته کارکتری مواجه میشود، یک پیغام اشتباه میفرستد.
s توابع تاریخ و زمان ما در تمدنی زندگی میکنیم که توسط زمان و تاریخ اداره میشود و بیشتر کاربردهای SQL دارای توابعی برای فایق آمدن بر این مفاهیم هستند.
تذکر این توابع از نوع داده Date استفاده میکنند.
s ADD – MONTHS : این تابع تعدادی ماه به تاریخ مشخصی اضافه میکند.
بطور مثال ممکن است مطلب فوقالعادهای اتفاق افتاده باشد و پروژهای برای مدت دو ماه متوقف شده باشد و حالا اگر بخواهیم برنامهریزی جدیدی ارائه دهیم، از این تابع استفاده میکنیم.
s LAST – DAY : این تابع، آخرین روز یک ماه بخصوص را پیدا میکند.
s MONTHS – BETWEEN : اگر بخواهیم بدانیم که چند ماه بین ماههای x و y قرار میگیرد، از این تابع استفاده میکنیم.
این تابع به ترتیب قرار دادن ماهها حساس است بنابراین بطور مثال میتوان از یک نتیجه منفی برای تعیین اینکه آیا تاریخی قبل از تاریخ دیگری اتفاق افتاده است یا نه، استفاده کرد.
MONTHS – BETWEEN : اگر بخواهیم بدانیم که چند ماه بین ماههای x و y قرار میگیرد، از این تابع استفاده میکنیم.
این تابع به ترتیب قرار دادن ماهها حساس است بنابراین بطور مثــال میتوان از یک نتیجه منفی برای تعیین اینکه آیا تاریخی قبل از تاریخ دیگری اتفاق افتاده است یا نه، استفاده کرد.
NEW – TIME : اگر بخواهیم زمان را براساس زمان منطقهای تطبیق دهیم، باید از این تابع استفاده کنیم.
در جدول صفحه بعد، زمان مناطق موردنظر که با این تابع قابل استفاده هستند، آورده شده است: NEXT – DAY : این تابع نام اولین روز هفته که مساوی با تاریخ بخصوصی است و یا بعد از تاریخ معینی میآید را بدست میآورد.
SYSDATE : این تابع تاریخ و زمان سیستم را برمیگرداند.
توابع ریاضی بسیاری از اطلاعات که از پایگاه دادهها بازیابی میکنیم نیاز به محاسبات ریاضی دارند.
نمونههایی از توابع ریاضی عبارتند از: ABS, CEIL, DLOOR, SIN, COS, TAN, SINH, COSH, EXP, LN, LOG, MOD, POWER, SIGN, SQRT, و ...
توابع کاراکتری بسیاری از نسخههای SQL امکان استفاده از توابع کاراکتری و رشتهای را فراهم میآورند.
CHR : این تابع، کاراکتر معادل عدد داده شده در آرگومان را برمیگرداند.
کاراکتری که برگردانده میشود بستگی به مجموعه کاراکترهای پایگاه داده مورد استفاده (مثلاً ASCII و ...) دارد.
CONCAT : این تابع همان عمل عملگر || را انجام میدهد.
(دو رشته را به هم متصل میکند).
INITCAR : این تابع اولین حرف یک کلمه را به حرف بزرگ و سایر حروف کلمه را به حروف کوچک تبدیل میکند.
LOWER : این تابع تمام کاراکترها را به حروف کوچک تبدیل میکند.
UPPER : این تابع عکس تابع LOWER عمل میکند.
(تمام کاراکترها را به حروف بزرگ تبدیل میکند).
RPAD , LPAD : حداقل 2 و حداکثر 3 آرگومان رشته کاراکتری است که عملیات روی آن انجام میشود.
آرگومان دوم، تعداد کاراکتری است که باید اضافه شود و آرگومان سوم که اختیاری نیز میباشد، نشان دهنده کاراکتری است که باید اضافه شود.
پیش فرض سومین آرگومان بلانک (blank) یا میتواند یک کاراکتر تنها و یا رشتهای از کاراکترها باشد.
RTRIM , LTRIM : حداقل یک و حداکثر دو آرگومان دارند.
اولین آرگومان یک رشته کاراکتری است و دومین آرگومان که اختیاری نیز میباشد یا یک کاراکتر است یا یک رشته کاراکتری و یا پیش فرضاش یک بلانک (blank) است.
اگر از آرگومان دوم استفاده کنیم و بلانک نیز نباشد، توابع TRIM کاراکترها را میاندازند.
(حذف میکنند) REPLACE : کاراکتری را به جای کارکتر دیگری در یک رشته کاراکتری جایگزین میکند.
این تابع سه آرگومان دارد.
اولین آرگومان، رشته مورد جستجو را مشخص میکند.
دومین آرگومان کلید جستجو است و آخرین آرگومان، رشته جایگزین اختیاری است.
اگر سومین آرگومان نوشته نشود و یا بلانک (blank) درنظر گرفته شود، هر نمونه از کلید جستجو که در داخل رشته جستجو میشود، برداشته شده و به جای آن چیزی جایگزین نمیگردد.
اگر آرگومان سوم را داشته باشیم، این آرگومان به جای هر نمونه از کلید جستجو در رشته موردنظر جایگزین خواهد شد.
اگر دومین آرگومان خالی باشد، رشته موردنظر بدون تغییر باقی خواهد ماند.
SUBSTR : این تابع سه آرگومان این امکان را میدهد که قطعهای از یک رشته را بتوان انتخاب نمود.
اولین آرگومان، رشته موردنظر است.
دومین آرگومان امکان اولین کاراکتر رشته را مشخص میکند.
سومین آرگومان تعداد کاراکتری را که باید انتخاب شود را نشان میدهد.
اگر در دومین آرگومان از عدد منفی استفاده کنیم، نقطه شروع با شمردن از انتها شروع میشود.
اگر آرگومان سوم را نداشته باشیم، باقیمانده رشته برگردانده میشود.
TRANSLATE : این تابع سه آرگومان دارد: رشته موردنظر، رشته FROM و رشته TO.
عناصر رشته موردنظر که در رشته FROM رخ میدهد، به عناصر وابسته در رشته TO تبدیل میشود.
INSTR : با استفاده از این تابع، محل وجود یک رشته کاراکتری در داخل رشتهای دیگر مشخص میشود.
اولین آرگومان، رشته موردنظر میباشد.
آرگومان دوم، الگوی موردنظر است.
سومین و چهارمین آرگومان اعدادی هستند که شروع جستجو و تعداد کاراکتر مورد جستجو را نشان میدهد.
تذکر ـ پیش فرض سومین و چهارمین آرگومان یک است.
اگر سومین آرگومان منفی باشد، شروع جستجو از انتهای رشته انجام خواهد شد.
LENGTH : این تابع طول یک رشته کاراکتری را برمیگرداند.
توابع تبدیلی این توابع، راههای سادهای برای تبدیل یک نوع داده به نوع دیگری از داده را ارائه میدهند.
TO – CHAR : این تابع، یک عدد را به کاراکتر تبدیل میکند.
توجه ـ ممکن است برخی از نسخههای SQL از این تابع جهت تبدیل سایر انواع داده به نوع کاراکتری استفاده کنند (مثل Date به کاراکتر) و یا از فرمت دیگری برای این تابع و آرگومانهای آن استفاده نمایند.
TO – NUMBER : این تابع یک رشته عددی را به یک عدد تبدیل میکند.
جملات پردازش دادهها تا این مرحله یاد گرفتیم که چگونه دادهها را از پایگاه دادهای با استفاده از دستور SELECT بازیابی کنیم.
بعد از اینکه دادهها بازیابی شد، آن را میتوانیم در یک برنامه کاربردی بکار برده و یا آن را تصحیح کنیم.
جملات زیر این امکان را به ما میدهند تا دادههای داخل یک جدول پایگاه اطلاعاتی را پردازش کنیم: جمله INSERT (درج) جمله UPDATE (بهنگام سازی) جمله DELETE (حذف) محصولاتی مثل اکسس، dBase IV یا فاکس پرو به شکل بسته نرمافزاری دارای ابزار مناسبی برای ورود، تصحیح و حذف رکوردهای پایگاه دادهای میباشند.
یکی از دلایلی که SQL جملات پردازش دادهها را تهیه کرده است این است که SQL در درجه اول به همراه برنامههای کاربردی استفاده میشود و این امکان را فراهم میآورد تا با استفاده از ابزار کاربردی خود دادهها را تصحیح کنید و برنامه نویس SQL نیاز دارد که دادهها را با استفاده از SQL به پایگاه دادهای برگرداند.
به علاوه، بیشتر سیستمهای بزرگ پایگاه دادهها برای این طراحی نشدهاند که فقط ذهنیات طراح و برنامهنویس را دربرگیرند، بلکه این سیستمها برای این طراحی شدهاند که در حجم بالا و در محیطهای چند کاربره کار نمایند.
طراحی اولیه در چنین سیستمهایی متکی به پرس و جوی بهینه و موتورهای بازیابی دادههاست.
بیشتر سیستمهای پایگاه دادهای رابطهای ابزاری برای صدور و ورود دادهها تهیه کردهاند.
این دادهها معمولا به شکل یک فایل متن محدود شدهای ذخیره میشوند.
اغلب یک ساختار فایل ذخیره شده شامل اطلاعاتی درباره جدولی است که وارد شده است.
ابزاری مثل SQL * Loader در اوراکل BCP در SQL Seever، Import / Export در اکسس مایکروسافت.
درج دادهها با استفاده از جمله INSERT جمله INSERT این امکان را به ما میدهد تا دادهها را وارد پایگاه دادهای کنیم.
این جمله میتواند به دو جمله تقسیم شود: INSERT … VALUES INSERT … SELECT در یک رکورد با استفاده از INSERT … VALUES نحوه نگارش جمله INSERT … VALUES دادهها را به داخل یک جدول به شکل یک رکورد درج میکند.
این جمله برای عملیات کوچکی که درگیر چند رکورد است، مناسب میباشد.
نحوه نگارش این جمله به شکل زیر است: INSERT INTO table – name (column – namel, column – name2, …) VALUES (nalue1 , value2, …) فرمت اصلی جمله INSERT … VALUES با استفاده از ستونهایی که مشخص نمودهایم یک رکورد به جدول اضافه میکند و مقادیر مربوطه را به داخل این ستونها اضافه مینماید.
در هنگام استفاده از این جمله سه قاعده را باید در موقع اضافه نمودن دادهها به جدول درنظر بگیریم: 1) باید نوع داده مقادیر بکار رفته با نوع داده فیلدهایی که اضافه شدهاند یکسان باشد.
2) اندازه دادهها باید در قالب ستون گنجانده شوند.
مثلا یک رشته 80 کاراکتری نمیتواند در داخل یک ستون 40 کاراکتری اضافه شود.
3) مکان داده در VALUES باید مطابق مکان ستونی باشد که باید داده به آن ستون اضافه شود.
(یعنی اولین مقدار باید به داخل اولین ستون و دومین مقدار به دومین ستون و ...
اضافه شود).
توجه ـ در جمله INSERT، نام ستون الزامی نیست و اگر نام ستون قید نشده باشد SQL مقادیر را بر طبق شماره ستونهای آنها قرار میدهد.
به عبارت دیگر، SQL اولین مقدار را در اولین ستون و دومین ستون را در دومین ستون و الی آخر درج میکند.
INSERT INTO table – name VALUES (value1, value2, …) درج چندین رکورد با استفاده از جمله INSERT … SELECT : جمله INSERT … SELECT هنگامی کاربرد دارد که بخواهیم رکوردهای زیادی را به یک جدول اضافه کنیم.
در چنین حالتی جمله INSERT … SELECT خیلی مفید است و این امکان را به برنامه نویس میدهد تا اطلاعاتی را از جدولی یا گروهی از جدولها به داخل جدول دیگر منتقل کند.
نحوه نگارش جمله INSERT … SELECT بصورت زیر است: INSERT INTO table – name (column – namel, column – name2, …) SELECT column – namel column – name2, … FROM table – name WHERE seaech – condition در جمله INSERT … SELECT قواعد زیر وجود دارد: 1) جمله SELECT نمیتواند ردیفهایی از جدول را انتخاب کند که در حال درج در آن هستیم.
2) تعداد ستونهای جمله INSERT INTO باید مساوی با تعداد ستونهای برگشتی از جمله SELECT باشد.
3) نوعت دادهها در جمله INSERT INTO باید مساوی با نوع دادههای ستونهای برگشتی از جمله SELECT باشد.
استفاده دیگر جمله INSERT … SELECT بازگرداندن جدولی است که شما آن را حذف و یا ایجاد کردهاید.
(تهیه Back Up) SELECT * INTO new – table – name FROM original – table – name و یا: INSERT INTO new – table – name SELECT * FROM original – table – name حال میتوانیم تغییرات موردنظر را در جدول اصلی با خیالی راحت اعمال نماییم.
تغییر نوع دادههای موجود با استفاده از جمله UPDATE هدف از جمله UPDATE تغییر مقادیر موجود رکوردهاست.
نحوه نگارش این جمله به شکل زیر است: UPDATE table – name SET column – namel = new – valuel [ , column – name2 = new – value2, …] WHERE search – condition این جمله شبه جمله WHERE را کنترل میکند.
برای تمام رکوردهای جدول داده شده شبه جمله WHERE به مقدار TRUE ارزیابی میشود و بهنگام میگردد.
توجه ـ اگر شبه جمله WHERE را از جمله UPDATE حذف کنیم، تمام رکوردهای داده شده با مقدار داده شده بهنگام میشوند.
حذف اطلاعات به کمک جمله DELETE علاوه بر اضافه کردن اطلاعات به پایگاه دادهای، میتوانیم آنها را از پایگاه اطلاعاتی حذف کنیم.
نحوه نگارش حذف به شکل زیر است: DELETE FROM table – name WHERE condition حذف تمام سطرها: DELETE FROM table – name و یا: DELETE * FROM table – name بسته به استفاده از جمله WHERE در جمله DELETE، SQL میتواند کارهای زیر را انجام دهد: ـ یک ردیف را حذف کند.
ـ چندین ردیف را حذف کند.
ـ تمام ردیفها را حذف کند.
ـ هیچ ردیفی را حذف نکند.
در اینجا به چند نکته اشاره میشود.
وقتی از جمله DELETE استفاده میکنیم: جمله DELETE نمیتواند یک فیلد را حذف کند.
(به جای آن از UPDATE استفاده میکنیم) جمله DELETE تمام رکورد را از یک جدول حذف میکند.
توجه ـ شبه UPDATE, INSERT، حذف رکوردها از یک جدول ممکن است باعث بروز مشکلات جامعیت در داخل جداول دیگر گردد.
این مطلب مهم را وقتی در داخل یک پایگاه دادهای مشغول تغییر هستیم، باید درنظر داشته باشیم.
با استفاده از جمله DELETE فقط رکوردها حذف میشوند نه جدول.
(از جمله DROP TABLE برای حذف کامل جدول استفاده میکنیم) توجه ـ شبیه جمله UPDATE، اگر از شبه جمله WHERE در جمله DELETE استفاده نکنیم، تمام ردیفهای جدول خاص حذف خواهد شد.
ورود و صدور دادهها از منابع خارجی جمله DELETE , UPDATE, INSE RT در داخل یک برنامه پایگاه اطلاعاتی بسیار مفید هستند.
این جملات به همراه جمله SELECT به عنوان پایهای برای سایر عملیات پایگاه دادهای به کار میروند.
گرچه SQL یک زبان میباشد ولی راهی برای ورود و صدور دادهها به منابع دادههای خارجی ندارد.
بطور مثــال فرض کنید که شرکت شما سالیان سال است که از نرمافزار dBase برای کاربردهای خود استفاده میکند.
حال مدیریت میخواهد این برنامههای کاربردی را به کلاینت/ سرور تحت اوراکل تبدیل کند.
متاسفانه فایلهای dBase موجود شامل هزاران رکورد است که باید به فرمت دادههای پایگاه دادهای اوراکل تبدیل شود.
قطعاً دستورات UPDATE, INSERT و DELETE بعد از اینکه پایگاه دادهای اوراکل شما پر شد، به شما کمک خواهند کرد، اما شما باید 300000 رکورد را دوباره تایپ کنید.
خوشبختانه اوراکل و سایر سازندگان نرمافزارها ابزاری تهیه کردهاند که میتواند در این امر به شما کمک کند.
تقریباً تمام سیستمهای پایگاههای دادهای این امکان را میدهند تا با استفاده از فرمت فایل متن ASCII دادهها را وارد و صادر کنیم.
اما زبان SQL شامل این امر نمیشود و هنگامی که یک پایگاه دادهای خالی داریم خوب کار نمیکند.
سیستمهای پایگاه دادهای مدرن ابزار مختلفی برای پردازش دادهها بکار گرفتهاند.
بعضی از این ابزار طراحان را قادر میسازند تا دادهها را به منابع خارجی صادر یا وارد نمایند.
این امکان بخصوص وقتی اندازه پایگاه دادهای بزرگ یا کوچک شود، مفید است.
به عنوان مثــال Personal Oracle 8, SQL Server, MS ACCESS شامل امکانات ت زیادی هستند که از انتقال دادهها بین سیستمهای مختلف حمایت میکنند.
شبه جملات در پرس و جوهای SQL در این بخش، شبه جملات و کاربرد آنها در جمله SELECT مورد بررسی قرار میگیرد.
تعیین معیاری با شبه جمله WHERE همانطور که گفته شد WHERE باعث میشود تا پرس و جوهای ما با محدود نمودن تعداد ردیفهای برگردانده شده در خروجی انتخابیتر شوند.
استفاده تنها از FROM, SELECT، باعث میشود تا ما کنترلی روی ردیفهای بازگشتی جدول نداشته باشیم.
AS یک عملگر انتساب اختیاری است که یک نام مستعار را به نام یک ستون و یا نام یک جدول منتسب میکند.
SELECT column – name AS column – alias FROM table – name SELECT column – name FROM table – name AS table – alias شبه جمله STARTING WITH این شبه عبارت شبه LIKE عمل میکند.
(جستجو در داخل یک رشته) با استفاده از این شبه جمله، رکوردهایی که با pattern (الگوی) موردنظر شروع شده باشند برگردانده میشوند.
مثــال/ SELECT payee, amount, remarks FROM checks WHERE payee STARTING WITH (Ca) با استفاده از پرس و جوی فوق کلیه رکوردهایی که با Ca شروع میشوند، برگرداند خواهند شد.
شبه جمله ORDER BY گاهی اوقات ما نیاز داریم که نتیجه پرس و جوی ما بطور مرتب شده بدست آید.
SELECT FROM نیز به ما فهرستی می دهد که این فهرست مرتب شده نیست مگر اینکه کلید اولیه معرفی کرده باشیم.
کلمه کلیدی ORDER BY به منظور مرتب کردن نتیجه بکار برده میشود.
DESC در انتهای شبه عبارت ORDER BY سطرها را براساس ترتیب نزولی مرتب میکند.
پیش فرض این ترتیب، صعودی (ASC) است.
به عبارت دیگر ترتیب صعودی (ASC) اختیاری میباشد (نتیجه قرار دادن و قرار ندادن آن یکی است) SELECT column – name(S) FROM table – name ORDER BY column – name [ASC | DESC] شبه جمله GROUP BY SQL از ترکیب ستون طبیعی و تابع جمعی ایراد میگیرد.
این وضعیت نیاز به شبه جمله GROUP BY دارد.
GROUP BY تابع جمع آورده شده در جمله SELECT را برای هر گروه از ستونی که در جلوی GROUP BY آمده است، اجرا میکند.
(سطرهای هر ستون را برحسب نتیجه تابع جمعی بکار رفته شده مرتب میکند) این عمل، SQL را بطور فزایندهای مفید میکند.
GROUP BY همچنین مانند ORDER BY عمل میکند و در ضمن با استفاده از این شبه جمله میتوان بیشتر از یک ستون را نیز گروهبندی کرد.
SELECT column – name l, SUM (column – name 2) FROM table – name GROUP BY column – name l تذکر ـ به جای SUM در syntax فوق میتوان از دیگر توابع جمعی نظیر COUNT, AVG, MAX, MIN و ...
نیز استفاده کرد.
شبه جمله HAVING با استفاده از این شبه جمله میتوان دادههای مورد استفاده در شبه جمله FROUP BY را محدود کرد.
HAVING این امکان را میدهد که ما از توابع جمعی در یک جمله مقایسهای استفاده کنیم و در ضمن HAVING بر روی گروه اثر میکند؛ در حالیکه WHERE روی ردیفها اثر میگذارد.
HAVING با توابع غیر جمعی نیز کار میکند.
میتوان بیش از یک شرط در شبه جمله HAVING بکار برد.
همچنین میتوان از یک تابع جمعی در شبه جمله HAVING استفاده کرد که در جمله SELECT وجود نداشته باشد.
SELECT column – name l, SUM (column – name 2) FROM table – name GROUP BY column – name l HAVING SUM (column – name 2) condition value ایجاد و نگهداری جداول شروع کار با جمله ایجاد پایگاه دادهای (CREATE DATABASE) اولین قدم مدیریت دادهها در هر پروژه پایگاه دادهای، ایجاد پایگاه دادهها است.
این کار یک پایگاه دادهای، بسته به احتیاج ما و سیستم مدیریت پایگاه دادهای که انتخاب کردهایم میتواند محدودهای از ساده تا پیچیده را دربرگیرد.
بیشتر سیستمهای مدرن امروزی این امکان را به ما میدهند تا کاملاً با استفاده از موس یک پایگاه دادهای بسازیم.
با استفاده از این امکان در وقت صرفهجویی میشود.
نحوه نگارش CREATE DATABASE شبیه زیر است: CREATE DATABASE database – name این نحوه نگارش از سیستمی به سیستم دیگر به طور قابل ملاحظهای فرق میکند.
به هرحال تمام سیستمهای مدیریت پایگاه دادهای رابطهای (ROBMS) خیلی قوی و مشهور از این دستور استفاده میکنند.
راههای ایجاد پایگاه دادهای نحوه نگارش جمله CREATE DATABASE در نسخههای مختلف SQL تفاوت زیادی دارد.
بسیاری از SQLها از جمله CREATE DATABASE صرفنظر میکنند و مستقیماً به سراغ جمله CREATE TABLE میروند.
چون قبل از اینکه جدولی ایجاد شود، ما باید پایگاه دادهای ایجاد کنیم، این بخش روی بعضی از مفاهیمی که یک طراح هنگام ساخت یک پایگاه اطلاعاتی تکیه میکند، متمرکز شده است.
اولین مطلبی که باید درنظر گرفته شود، سطح دسترسی مجاز میباشد.
اگر از سیستم مدیریت پایگاه دادهای رابطهای (RDBMS) استفاده کنیم که از سطح دسترسی مجاز حمایت میکند، باید مطمئن باشیم که امکان تنظیم سطح دسترسی مجاز را داریم و یا اینکه اداره کننده سیستم به ما اجازه CREATE DATABASE را اعطا کرده است.
برای اطلاعات بیشتر راجع به این موضوع باید به مستندات RDBMS خود مراجعه کنیم.
بیشتر RDBMDها همچنین این امکان را به ما میدهند تا یک اندازه پیش فرض برای پایگاه اطلاعاتی مشخص کنیم (معمولاً برحسب فضای دیسک سخت (مثلاً مگابایت)).
بنابراین ما نیاز به دانستن این مطلب داریم که چگونه سیستم پایگاه دادهای، دادهها را بر روی دیسک به اندازه موردنظر ذخیره میکند.
مسئولیت درنظر گرفتن این فضا نیز به عهده اداره کنندگان سیستم میباشد.