نويسنده مقاله : پويا عبادالهي واحد
زبان SQL تنها زبان استاندارد و جامع پيادهسازي، مديريت، نگهداري و كار با بانكهاي اطلاعاتي ميباشد كه تقريباً توسط تمام بانكهاي اطلاعاتي كوچك و بزرگ مانند Access، SQL Server، Oracle و DB2 پشتيباني ميشود. طراحان و افرادي كه بنوعي با بانكهاي اطلاعاتي سروكار دارند و همچنين برنامه نويساني كه از اين بانكها استفاده ميكنند هركدام بايد تا اندازهاي با اين زبان آشنايي داشته باشند. اين مقاله كه در سه قسمت تهيه شده است ميكوشد تا مفاهيم زبان SQL را در قالب يك مثال كاربردي بيان كند. هرچند كه مفاهيم بكار رفته در اين مقاله در تمامي بانكهاي اطلاعاتي قابل پيادهسازي ميباشند ولي مثالهاي ارائه شده در 2000 SQL Server مورد تست قرار گرفتهاند.
بانك اطلاعاتي كه در اين مقاله بعنوان مثال مورد استفاده قرار گرفته است بانك اطلاعاتي يك آموزشگاه ميباشد كه شامل دو جدول بنامهاي teachers و students ميباشد. جدول اول اطلاعات اساتيد و جدول دوم اطلاعات دانشجويان را در خود نگه ميدارد. جدول اول داراي چهار فيلد زير ميباشد: name يا نام از نوع text، family يا فاميل از نوع text، age يا سن از نوع عدد، salary يا حقوق از نوع عدد.
جدول دانشجويان نيز شامل چهار فيلد ميباشد، سه فيلد اول آن مشابه سه فيلد اول جدول اساتيد ميباشد و فيلد چهارم آن عبارتست از GPA يا معدل كه يك فيلد عددي است.
زبان SQL داراي دستورات متنوع و نسبتاً زيادي ميباشد. به اين دستورات Clause نيز گفته ميشود. در اين مقاله و قسمتهاي بعدي آن تعدادي از مهمترين Clauseهاي زبان SQL مورد بررسي قرار ميگيرند.
1 – دستورهاي SELECT و FROM :
هدف نهايي از دادن انبوه اطلاعات به كامپيوتر، جستجو و يافتن اطلاعات مفيد ميباشد. به اين عمل يعني جستجوي اطلاعات در بانك اطلاعاتي Query نيز گفته ميشود. اكثر دستورات زبان SQL نيز در همين راستا مورد استفاده قرار ميگيرند. در اين بين مهمترين و پركاربردترين دستور را ميتوان دستور SELECT قلمداد كرد.
اين دستور جهت انتخاب يك يا چند فيلد از يك يا چند جدول مختلف مورد استفاده قرار ميگيرد، فيلدهاي انتخاب شده پس از اجراي query روي صفحه نمايش داده خواهند شد.
بعنوان مثال اگر در بانك اطلاعاتي فرضي خودمان بخواهيم اسم و فاميل تمام دانشجويان را مشاهده كنيم بايد برنامهاي به شكل زير بنويسيم:
کد:
SELECT name, family
FROM students
FROM students
اين برنامه كه به زبان SQL استاندارد نوشته شده است از دو دستور SELECT و FROM استفاده شده است. دستور SELECT مشخص ميكند كه چه فيلدهايي از جدول بايد نمايش داده شوند و دستور FROM نيز مشخص كننده جدولي است كه قرار است اطلاعات از داخل آن استخراج شوند. حال اگر بخواهيم نام و فاميل تمام اساتيد را ببينيم برنامه بالا را بايد بصورت زير تغيير دهيم:
کد:
SELECT name, family
FROM teachers
FROM teachers
همان طوري كه از مثالهاي بالا نيز مشخص است جلوي دستور SELECT نام فيلدهايي نوشته ميشوند كه قرار است نمايش داده شوند و بعنوان جداكننده نيز بايد از كاراكتر كاما استفاده كرد. در صورتي كه بخواهيم تمام فيلدهاي يك جدول را ببينيم ميتوانيم بجاي نوشتن اسم تمام فيلدها فقط از يك كاراكتر ستاره استفاده كنيم. كاراكتر ستاره بمعني تمام فيلدهاي يك جدول ميباشد. مثلاً دو دستور زير با هم معادلند:
کد:
SELECT *
SELECT name, family, age, gpa
2 – دستور WHERE :
دستور SELECT همان طوري كه گفته شد جهت انتخاب و نمايش تعدادي از فيلدهاي جداول مورد استفاده قرار ميگيرد. در اين حالت تمام ركوردها نمايش داده خواهند شد، ولي در بيشتر موارد هدف از نوشتن Query نمايش ركوردهايي است كه داراي شرايط ويژهاي ميباشند مثلاً نمايش مشخصات اساتيدي كه بيش از پنجاه سال سن دارند. دستور WHERE براي گذاشتن يك يا چند شرط به دستور SELECT مورد استفاده قرار ميگيرد. با اضافه كردن شرط به دستور SELECT تعداد ركوردهاي خروجي (پاسخ) معمولاً محدودتر ميشود. بعنوان مثال اگر بخواهيم مشخصات اساتيدي كه بيش از چهل سال سن دارند را ببينيم بايد برنامهاي بصورت زير بنويسيم:
کد:
SELECT *
FROM teachers
WHERE age > 40
FROM teachers
WHERE age > 40
در اين برنامه شرط age > 40 با استفاده از دستور WHERE به Query اضافه شده و باعث شده است تا فقط مشخصات اساتيدي نمايش داده شوند كه در اين شرط صدق ميكنند يعني بيش از چهل سال سن دارند.
حال اگر بخواهيم مشخصات دانشجوياني را كه نام آنها علي ميباشد و سن آنها نيز كمتر از پانزده سال است را ببينيم بايد Query زير را اجرا كنيم:
کد:
SELECT *
FROM students
WHERE age < 15 AND name = 'ali'
در مثال بالا دو مطلب جديد وجود دارد نخست آنكه در زبان SQL رشته متني را بايد داخل كوتيشن (‘) قرارداد. بنابراين براي معرفي كلمهاي بنام علي بايد آنرا بصورت ‘ali’ نوشت، زيرا در اين حالت اين كلمه يك ثابت رشتهاي (متني) بحساب ميآيد. نكته ديگر آنكه ميتوان شرطهاي مختلف را توسط AND، OR و NOT با همديگر ادغام كرده و شرطهاي پيچيدهتري را بدست آورد. AND، OR و NOT هر سه از كلمات كليدي زبان SQL ميباشند. بعنوان يك مثال ديگر فرض كنيد ميخواهيم مشخصات تمام دانشجوياني را كه نام آنها، علي يا رضا نباشند را پيدا كنيم، برنامهاي كه اين Query را انجام ميدهد بصورت زير ميباشد:
کد:
SELECT *
FROM students
WHERE name NOT IN ('ali', 'reza')
در صورتي كه NOT را از برنامه بالا حذف كنيم مشخصات تمام دانشجوياني كه نام آنها علي يا رضا ميباشند نمايش داده خواهد شد.
در اين برنامه نيز يك كلمه كليدي جديد وجود دارد: IN كه براي تست عضويت در يك مجموعه بكار ميرود. مجموعهاي كه بادستور IN بكار ميرود ميتواند دهها عضو داشته باشد و نوع اعضا نيز ميتواند رشتهاي، عددي يا ... باشد. البته واضح است كه تمام اعضا بايد هم نوع باشند.
حال بعنوان يك مثال پيشرفتهتر ميخواهيم مشخصات دانشجوياني را ببينيم كه اسم فاميل آنها به ‘ زاده’ ختم ميشود مانند عليزاده، محمد زاده و ... براي اين منظور بايد Query زير را نوشته و اجرا كنيم:
کد:
SELECT *
FROM family LIKE '% zadeh'
FROM family LIKE '% zadeh'
كاربراني كه با Access كار ميكنند بايد سطر آخر را به صورت زير تغيير دهند:
WHERE family LIKE '*zadeh'
در اين مثال از Wildcardها استفاده شده است كه قبلاً با مفهوم آن در DOS و Windows يا حتي Unix آشنا شدهايم (ls a*) . در Wildcard ،SQL هايي به شرح زير وجود دارند:
% (در Access از * استفاده كنيد): اين Wild card نشانگر هر تعدادي از كاراكترها (هر كاراكتري) ميباشد.
- (در Access از ? استفاده كنيد): اين Wildcard نشانگر يك كاراكتر ميباشد كه اين كاراكتر ميتواند هر كدام از كاراكترهاي مجاز كامپيوتر باشد.
جهت جستجو كردن فيلدهايي كه داراي يك الگوي (Pattern) خاصي هستند بايد از دستور LIKE و Wildcardها استفاده كرد. در مثال زير نام و سن تمام اساتيدي كه اسم آنها با Pe شروع ميشود، نمايش داده خواهد شد.
کد:
SELECT name, age
FROM teachers
WHERE name LIKE 'Pe%'
FROM teachers
WHERE name LIKE 'Pe%'
بنابراين مشخصات افرادي كه نام آنها مثلاً پدرام يا پيمان باشد در خروجي ليست خواهد شد.



پیوند ها