سلام
درسته
اين مطلب را بخوانيد توش Where را كامل با تركيبش نوشتم
دستورات SQL(قسمت اول)
SQL چيست؟
SQL مخفف زبان جستجوي ساخت يافته (Structured Query Language) است. كه در دهه 1970 توسط IBM به منظور استاندارد كردن روش هاي استخراج داده از پايگاه هاي داده مختلف» توسعه داده شده است.هدف از اختراع اين زبان ارايه وسيله اي مستقل از برگه اي برنامه نويسي بود.
دستورات SQL چيزي نيست جز دستورات ساده!اين دسترات را مي توان روي تمام اشيا پايگاه داده اجرا كرد.اكثر دستورات SQL تعدادي ركورد بر مي گردانند » كه معمولا به اين مجموعه نما(View) مي گويند.تمام برنامه هايي كه به نوعي با پايگا ه هاي داده رابطه اي سروكار دارند از SQL استفاده مي كنند.
شما براي امتحان دستورات SQL خود مي توانيد از برنامه Visdata استفاده كنيد كه در منوي Add-Ins است.شما براي ديدن نتيجه دستور بايد دستور را در قسمت SQLStatement بنويسيد و بر دكمه ي Execute كليك كنيد.و در پيغامي كه ظاهر مي شود بر روي No كليك كنيد.و بعد از آن نتيجه كار را مي بينيد.
در ويژال بيسيك هم مي توانيد براي ديدن و كار كردن روي نتايج خاصيت RecordSource كنترل خود را(براي مثال RecordSource) به دستور مورد نظر ست كنيد و دستور Refresh آن را اجرا كنيد تا دستور اجرا شود و براي ديدن نتيجه بهتر مي توانيد آن را به جدولي متصل كنيد(مثلا DataGrid).(كه در آخر مثالي را بيان مي كنم.)براي مثال:
Form1.Data1.RecordSource = "Select Name,Family From Moshakhasat"
Form1.Data1.Refresh
در زير براي كار با اين توابع مثالي را بيان مي كنيم:
ابتدا يك TextBox و يك CommandButtonو همچنين يك كنترل داده با نام هاي Text1,Command1,data1 به برنامه اضافه كنيد سپس با استفاده از برنامه Visdata پايگاه داده زير را درست كنيد.
نام جدول:Kharidaran
فيلدها:
نام نوع اندازه
Name Text 50
Family Text 50
Product Text 50
Phone Text 50
Date Date/Time 8
نام جدول : ProductSales
فيلدها:
نام نوع اندازه
Product Text 50
Price Currency 8
Tedad Double 8
Date Date/Time 8
و اين پايگاه داده را در جايي ذخيره كنيد.
سپس در ويژال بيسيك از منوي Project\Components گزينه Microsoft Data Bound Grid Control 5.0 را فعال كنيد. و آن را به فرم اضافه كنيد.سپس خاصيت DatabaseName
كنترل داده را به آدرسي كه پايگاه داده را ذخيره كرديد ست و خاصيت RecordSource به يك جدول ست كنيد و همچنين خاصيت DataSource كنترل را به Data1 ست كنيد.سپس در قسمت Command1_Click بنويسيد.
Private Sub Command1_Click()
Data1.RecordSource = Text1.Text
Data1.Refresh
End Sub
حالا براي اجراي دستورات Sql مي توانيد دستور را در Text1 نوشته و بر Command1 كليك كنيد مي بينيد كه نتيجه دستورات در جدول منعكس مي شود.و شما مي توانيد براي امتحان مثال ها از اين برنامه استفاده كنيد.
دستورات SQL
دستور SELECT_FROM
مهمترين و پركاربردترين دستور SQL است.با اين دستور مي توانيد ركوردهاي موردنظر را از يك يا چند جدول استخراج كنيد.
دستور SELECT_FROM در ساده ترين شكل خود دو قسمت دارد:
1.يك يا چند فيلد كه بايد از جدول خوانده شود.
2.يك يا چند جدول كه داده ها از آن ها خوانده مي شود.
براي مثال اگر شما يك جدول به نام Kharidaran داشته باشيد كه داراي فيلدهاي Name,Family,Product,Phone,Date باشد شما براي ديدن فقط فيلدهاي Name,Family مي توانيد از دستور زير استفاده كنيد.
Select Name,Family From Kharidaran
با دستور SELECT_FROM شما مي توانيد همه فيلدهاي يك جدول را برگردانيد،براي اين كار كافيست ليستي از همه فيلدها را در اين دستور قيد كنيد ولي اگر تعداد فيلدها زياد باشد اين كار خسته كننده مي شود براي اين كار مي توانيد به جاي نوشتن نام همه فيلدها از كاراكتر * استفاده كنيد.براي مثال
Select * From Kharidaran
كه تمام فيلدهاي جدول خريداران را نشان مي دهد.
شايد شما بخواهيد اسم فيلدهايي را كه نمايش داده مي شوند تغيير دهيد براي مثال در جدول Kharidaran به جاي نام Name و در جدول Nam بنويسد براي اينكار بايد از As استفاده كرد.براي مثال:
Select Name As Nam,Family As Namkhanevadegi From Kharidaran
كه در آن به جاي نام Name در جدول Nam و به جاي Family در جدول NamKhanevadegi نشان داده مي شود.
اين عبارات مي توانند فارسي باشند.
شرط ORDER By
وقتي از دستور SELECT_FROM استفاده مي كنيد . ركوردها به همان ترتيبي كه در جدول اصلي قرار گرفته اند برگردانده مي شوند.اما مي توان با استفاده از شرط ORDER BY ركوردها را به گونهاي دلخواه مرتب كرد.صعودي ونزولي مرتب كردن را مي توانيد با استفاده از شرطهاي ASC(صعودي) و DESC(نزولي) مشخص كرد.براي مثال به دستور زير توجه كنيد.
SELECT * FROM Kharidaran ORDER BY Name ASC
با اين دستور تمام فيلدهاي جدول Kharidaran به صورت مرتب شده براساس Name و به صورت صعودي نمايش داده مي شوند.
شرط ORDER By مي تواند چند فيلد بگيرد و مرتب سازي را براساس چند فيلد انجام دهد.براي مثال:
Select * From Kharidaran Order By Name,Family Desc
كه در آن اگر دو اسم يكسان وجود داشته باشد براساس فاميلي مرتب مي شوند.(به صورت نزولي)
شرط Where
يكي از قويترين جنبه هاي دستور SELECT_FROM توانايي آن در كنترل تعداد ركوردهاي برگشتي است كه با شرط Where انجام مي شود.از شرط Where به دو روش مي توان استفاده كرد.
1.محدود كردن ركوردها در يك جستجو.
2.لينك كردن دو يا چند جدول در يك نما.
1.استفاده از WHERE براي محدود كردن جستجو
شرط Where اجازه مي دهد تا روي فيلدها مقايسه هاي منطقي انجام دهيد.ساده ترين شكل اين شرط چنين است:
Where column = value
كه در آن column نام فيلد و Value مقداري است كه اين فيلد بايد داشته باشد تا جز ركوردهاي خروجي قرار گيرد.مثلا به دستور زير توجه كنيد.
Select Name,Family,Phone From Kharidaran Where Name= 'Ali'
با اين دستور ركوردهايي كه فيلد Name آن ها ali است نمايش داده مي شوند.
در اين دستور مي توان با استفاده از AND و OR چند شرط را با هم تركيب كرد.براي مثال:
Select * From Kharidaran Where Name='ali' OR Family='Ghasemi'
با اين دستور دستور ركوردهايي كه فيلد Name آن ها Ali يا فيلد Family آن ها Ghasemi باشند نمايش داده مي شوند.
توجه:شما براي اينكه كاراكترهاي متني را جستجو كنيد بايد كاراكتر را بين دو تا علامت نقل تكي (') قرار دهيد ولي براي فيلدهايي كه عدد هستند لازم به استفاده از آن نيست.براي مثال براي فيلد قيمت فقط مي توانيد عبارت زير را بنويسيد.
Select Product,Price,Tedad,Date From ProductSales Where Price=2000
كه برگشتي تمام محصولاتي را كه قيمت آن ها 2000 است نمايش مي دهد.
شما مي توانيد همچنين از عملگرهاي مقايسه اي(از قبيل =,<,>,<>,<=,>=) و همچنين از عملگرهاي BETWEEN_AND,IN,LIKE هم استفاده كنيد.
مثال1: در دستور زير از عملگر BETWEEN_AND استفاده كرده ايم.
SELECT Product,Price,Tedad,Date From ProductSales WHERE Price BETWEEN 2000 And 20000
كه خروجي فقط ركوردهايي است كه قيمت آن ها بين 2000و 20000 باشد.
مثال2:در دستور زير از عملگرIN استفاده كردم:
Select Name,Family,Phone,Product From Kharidaran Where Name IN('ali','soheil','mogtaba')
با اين دستور تمام ركوردهايي كه فيلد Name يكي از 3 اسم ali,Soheil,mogtaba باشد نمايش داده مي شود.
مثال 3: در دستور زير از عملگر Like استفاده كردم:
Select Name,Family,Phone from Kharidaran Where Name Like '*a*'
با اين دستور تمام ركوردهايي كه فيلد Name آن ها حرف a داشته باشد نمايش داده مي شود.
توجه: كاراكتر * به جاي كاراكترهاي ننوشته است.
استفاده از Where براي لينك كردن دو يا چند جدول
با استفاده از Where حتي مي توانيد فيلدهاي چند جدول را به يكديگر لينك كنيد روش كار چنين است:
Select table1.columnA,table2.ColumnA From table1,table2 Where table1.columnA=table2.ColumnA
براي مثال:
Select Kharidaran.Name,Kharidaran.Family,Kharidaran.Product,ProductSales.Price From Kharidaran,ProductSales Where Kharidaran.Product=ProductSales.Product
كه خروجي اين دستور تمامي خريداران با كالا خريداري شده و قيمت آن است كه در آن كالا ها فيلد مشترك است.
نمايي كه با شرط Where ايجاد مي شود قابل دستكاري نيست.اگر مي خواهيد كه دو جدول را تركيب كنيد و در ضمن توانايي دستكاري در آن ها را حفظ كنيد»بايد از شرط JOIN استفاده كنيد.(در اين باره بعدا توضيح مي دهيم)
با شرط Where مي توانيد بيش از دو جدول را با هم لينك كنيدو نيازي نيست فيلد ارتباط جدول هاي table1 و table2 با فيلد ارتباط جدول هاي table2 و table3 يكي باشد. فقط لازم است كه فيلدي از table1 با فيلدي از table2 و يك فيلد ديگر از table2 با يك فيلد از table3 برابر باشد.
توابع مجموع در SQL
توابع مجموع موتور Microsoft Jet عبارتند از:
AVG : كه متوسط مقادير يك ستون را بر مي گرداند.
COUNT : كه تعداد فيلد ها را بر مي گرداند و معمولا از آن براي شمارش ركوردها استفاده مي شود.
SUM : كه مجموع مقادير يك ستون را بر مي گرداند.
MAX : كه بيشترين مقدار يك ستون را برمي گرداند.
MIN : كه كمترين مقدار يك ستون را برمي گرداند.
در دستور زير از چند دستور استفاده شده است:
Select Count(Product) As CountProducts,Avg(Price) as AveragePrices,Sum(Tedad) as SumTedad From ProductSales
با اين دستور جدول خروجي تعداد كالاهاي فروخته شده و ميانگين قيمت كالاهاو همچنين مجموع كالاهاي خريداري شده را نشان مي دهد.شما مي توانيد در اين دستور ها براي اينكه ميانگين فيلدهاي خاصي را بيابيد از شرط Where استفاده كنيد.
توابع ويژال بيسيك در دستور Select
وقتي در يك برنامه ويژال بيسيك از موتور Microsoft Jet استفاده مي كنيد» مي توانيد از توابع ويژال بيسيك در دستورهاي SQL سود برد.در مثال زير با استفاده از دستور Left$ مي توانيم سه حرف اول فيلد Name را استخراج كنيم.
Select Left$(Name,3),Name From Kharidaran
همچنين مي توانيد با استفاده از اين دستورها فيلدهاي جدول را با هم تركيب كرد.در مثال زير نمونه اي مي بينيد:
Select Left$(Name,3) + "," + Left$(Family,3) As Shenaseh From Kharidaran
در اين دستور 3 حرف اول نام به علاوه سه حرف اول فاميلي را نشان مي دهد.
از اين دستورات مي توان در شرط Where بهره برد.
Select Name From Kharidaran Where Left(Name,1)="s"
با اين دستور تمام نام هايي كه حرف اول آن ها s باشد نمايش داده مي شوند.
توجه=تركيب دستورات ويژال بيسيك و Sql چند جنبه مخفي دارد.كه مهمترين آن ها » اختصاصي شدن اين قبيل دستورات است.اين قبيل دستورات در موتورهاي غيرقابل Jet قابل استفاده نيستند.
استفاده وسيع از توابع ويژال بيسيك در دستورات Sql سرعت اجراي آن را كاهش مي دهد.
|