فصل دهم :
Data Query Language (SELECT)
حالا چگونه اطلاعات را از دل جداول بیرون بکشیم .
در TSQL برای واکشی اطلاعات از جداول دیتابیس از دستور select استفاده میشود . بوسیله select میتوان یک و یا چندین رکورد را از یک یا چند جدول بیرون کشید . همچنین اینکه هر رکورد واکشی شده شامل چه فیلد هایی باشد نیز قابل تنظیم است.
الگوی کلی دستور select بصورت ذیل است :
[ WITH <common_table_expression>]
SELECT select_list [ INTO new_table ]
[ FROM table_source ] [ WHERE search_condition ]
[ GROUP BY group_by_expression ]
[ HAVING search_condition ]
[ ORDER BY order_expression [ ASC | DESC ] ]
1 . می خواهیم نام و نام خانودگی کلیه دانش آموزان موجود را مشاهده کنیم .
ابتدا در محیط management studio از منو بالا ایتم New Query را کلیک میکنیم . shortcut این کلید Ctrl+N می باشد . در پنجره باز شده دستور ذیل را تایپ میکنیم.
select [FirstName],[LastName] from [Student]
select [نام فیلد ها] from [نام جدول]
یعنی فیلد های نام و نام خانوادگی را از جدول student انتخاب کن. فیلد های انتخابی با کاما "," از هم جدا می شوند.
سپس برای اجرا بروی کلید Execute از منو بالا کلیک کرده و یا کلید F5 را میزنیم .
در پایین پنجره Results باز میشود و نتایج بصورت لیست نمایش داده خواهند شد. در کنار آن پنجره Messages نیز وجود دارد که تعداد رکورد هایی که واکشی شده اند را نمایش میدهد و نیز اگر اجرای دستور با خطایی مواجه شود در این پنجره نمایش داده می شود .
2. می خواهیم تمامی فیلدهای موجود در جدول شاگردان را مشاهده کنیم.
select [FirstName],[LastName],[Age] ,[BirthDate]
,[TrainingCourses],[Salary],[WakeTime],[ContinuingEducation],[ID]
from [dbo].[Student]
تمامی فیلدهای یک جدول را بطریق دیگر هم می توان لیست کرد بجای نام تمامی ستو نها فقط علامت "*" میگذاریم
select * from [Student]
نکته : اگر به تمامی فیلد های یک رکورد احتیاجی ندارید هیچگاه از * استفاده نکنید. چون موتور پایگاه داده را مجبور به واکشی اطلاعاتی کرده ایید. که برای شما لازم نیستند. پس از منابع سیستم بی جهت استفاده نموده ایید.
در یک select می توانیم به هر کدام از فیلد ها و یا جداول نام مستعاری را اختصاص دهیم که به آن alias می گویند . فرض کنید نام فیلد ها و یا جداول بسیار طولانی هستند و تایپ چند با آنها وقتگیر است .
select FirstName as f from [Student]
همانطور که در پنجره result مشاهده میکنید نام ستون نمایش داده شده f می باشد و نه FirstName .
برای خود جدول Student نیز می توانیم یک alias تعریف کنیم.
select FirstName as f from [Student] as s
عبارت Order by
در SQL Server
3. می خواهیم لیست نام ، نام خانوادگی و سن دانش آموزن را بترتیب سن آنها نمایش دهیم بصورت صعودی . یعنی اول کم سن ها بعد مسن تر ها
select FirstName,LastName,Age from [Student] order by Age asc
عبارت order by جهت (Sort ) یعنی مرتب سازی و مشخص کردن ترتیب نمایش بکار میرورد. یعنی لیست را بترتیب فیلد سن sort کن .حال اگر بخواهیم این sorting صعودی باشد (کوچکتر ها در اول لیست و بعد بزرگتر ها) از ASC که مخفف ascending به معنای صعودی است استفاده میکنیم.
برای مرتب سازی نزولی از Desc که مخفف descending است استفاده میکنیم .
4 . می خواهیم لیست نام ، نام خانوادگی و سن دانش آموزن را بترتیب نام خانوادگی انها نمایش دهیم .بصورت صعودی (یعنی الف در اول و ی در آخر)
select FirstName,LastName,Age from [Student] order by FirstName asc
نکته : sorting در اس کیوال سرور بصورت پیشفرض صعودی است asc یعنی اگر درج نشود مرتب سازی بصورت صعودی خواهد بود.
نکته : می توانیم برحسب بیش از یک فیلد sort انجام دهیم فیلد ها را با کاما از هم جدا میکنیم . و اس کیو ال سرور ابتدا مرتب سازی را بر حسب فیلد اول انجام میدهد.در هنگامی که به دو مقدار مساوی رسید انگاه فیلد بعدی موثر خواهد بود.
select FirstName,LastName from [Student] order by FirstName,LastName asc
در این حالت هنگامی که به دو نام برابر رسید رکوردی که نام خانوادگی ان با در اولویت الفبایی قرار داشت اول خواهد امد.
عبارت Where در SQL Server
5 . کد ، نام و نام خانوادگی دانش اموزانی که نام آنها "علی" می باشد را نمایش دهد .
select ID,FirstName,LastName from Student where FirstName=N'علی'
• عبارت Where برای اعمال شرط بروی نتایج بکار میرود. اپراتور های گوناگون همانند :
مساوی ، بزرگتر ، کوچکتر ، مخالف ، بزرگتر مساوی ، کوچگتر مساوی
همچنین شروط گوناگون را می توان به کمک or و یا and با هم ترکیب کرد.
• AND : "و" منطقی. هنگامی کل عبارت شرط صحیح است که شروط موجود در آن همگی درست باشند
• OR : "یا" منطقی . اگر یک شرط از مجموعه شروط یک عبارت شرطی نیز صحیح باشد کل عبارت صحیح است
"کد ، نام و نام خانوادگی شاگردانی را نمایش بده که سن آنها بیشتر از 12 سال باشد"
select ID,FirstName,LastName from Student where Age>12
"کد ، نام و نام خانوادگی شاگردانی را نمایش بده که سن آنها بیشتر از 12 سال و کمتر از 14 سال باشد"
select ID,FirstName,LastName from Student where Age>12 and Age<14
یا
select ID,FirstName,LastName from Student where Age Between 12 and 14)
"کد ، نام و نام خانوادگی شاگردانی را نمایش بده که یا سن آنها بیشتر از 12 سال باشد و یاو کمتر از 14 سال باشد"
select ID,FirstName,LastName from Student where Age>12 and Age<14
"کد ، نام و نام خانودگی شاگردانی را نمایش بده که نام انها علی می باشد"
فیلد FirstName یک فیلد رشته است و با یک رشته مقایسه می شود، مثلا نام علی.
رشته ها در اس کیو ال سرور در single quotation نمایش داده می شوند . و هنگامی که یک فیلد رشته ایی از نوع nvarchar با یک مقدار ثابت مقایسه می شود قبل از اولین quotation بایستی N رضافه شود تا موتور پایگاه داده بداند که معیار مقایسه بر اساس استاندارد Unicode باشد.
select FirstName,LastName,Age from [Student] where FirstName=N'علی'
همانطور که میبینید افرادی با نامهای محمد علی و یا علیرضا شامل نتایج این جستجو نیستند .
نکته اگر بخواهیم یک الگوی خاصی را در مقادیر یک فیلد جستجو کنیم از اپراتور like استفاده میشود. مثلا لیست کسانی را بخواهیم که در اسم انها "علی" موجود باشد و نام هایی همانند" محمد علی" و یا "علیرضا" نیز جزو لیست ما باشند .
اپراتور LIKE در SQL Server
select FirstName,LastName,Age from [Student] where FirstName like N'%علی%'
N موتور پایگاه داده را مجبور به مقایسه یونیکدی میکند کلید % ابتدایی بمعنای آن است که قبل از کلمه “علی” هر رشته ایی می تواند موجود باشد. و % انتهایی یعنی هر رشته ایی بعد از کلمه "علی" می تواند وجود داشته باشد . حال اگر بخواهیم فقط کسانی را که نام آنها با "محمد" شروع میشود بیابیم
select FirstName,LastName,Age from [Student] where FirstName like N'علی%'
به این صورت خواهد شد. نام با محمد شروع شود و فرقی نمیکند در ادامه ان چه کلمه ایی باشد.
بسیاری از مفاهیم درفیلم اموزشی بطور مفصل شرح داده شده اند . لذا حتما فیلم آموزشی این فصل را ببینید .
مفاهیم و موضوعات این فصل عبارتند از :
-
Data Query Language (SELECT)
-
نوشتن یک سلکت در SQL Server
-
Order by
-
اپراتور های منطقی AND و OR
-
عبارت WHERE
-
اپراتور LIKE