تبليغاتX
دانلودمستقیم فیلم آموزشی،کتاب،جزوه،مقاله
دانلودمستقیم فیلم آموزشی،کتاب،جزوه،مقاله
دانلود مستقیم فیلم آموزشی ، کتاب ، جزوه ، مقاله ، هک

اولين سايت فارسي ارائه دهنده فيلم هاي آموزشي با لينك مستقيم دانلود

SELECT stno,Avg(grade) FROM grade GROUP BY  stno HAVING count(*)>2
دستور فوق باعث ميشود كه
1. فيلد يا ستون يا همان خصيصه كه هر سه يكي هستند كه براي راحتي كار از نام فيلد استفاده ميكنيم . بنابراين فيلد stno را از جدول grade انتخاب ميكند .
2. avg(grade) يكي از توابع جمعي است وظيفه اين تابع خروجي دادن ميانگين مقداريست كه درون اين تابع قرار ميگيرد در صورت بالا داخل اين تابع از grade استفاده كرده ايم يعني ميانگين نمرات يا grade ها را حساب كن .
3. با استفاده از group by كه در اين دستور استفاده از ان بدليل حضور يك تابع جمعي و نام فيلد با يكديگر گروه بندي بايد بر اساس Stno قرار بگيرد . بنابراين ميانگين بر اساس شماره دانشجويي كه همان stno است انجام ميپذيرد .


ادامه مطلب...
Subscribe
ارسال در تاريخ سه شنبه دوازدهم خرداد 1388 توسط سعيد
نويسنده مقاله : پويا عبادالهي واحد
زبان SQL تنها زبان استاندارد و جامع پياده‌سازي، مديريت، نگهداري و كار با بانكهاي اطلاعاتي مي‌باشد كه تقريباً توسط تمام بانكهاي اطلاعاتي كوچك و بزرگ مانند Access، SQL Server، Oracle و DB2 پشتيباني مي‌شود. طراحان و افرادي كه بنوعي با بانكهاي اطلاعاتي سروكار دارند و همچنين برنامه نويساني كه از اين بانكها استفاده مي‌كنند هركدام بايد تا اندازه‌‌اي با اين زبان آشنايي داشته باشند. اين مقاله كه در سه قسمت تهيه شده است مي‌كوشد تا مفاهيم زبان SQL را در قالب يك مثال كاربردي بيان كند. هرچند كه مفاهيم بكار رفته در اين مقاله در تمامي بانكهاي اطلاعاتي قابل پياده‌سازي مي‌باشند ولي مثالهاي ارائه شده در 2000 SQL Server مورد تست قرار گرفته‌اند.

بانك اطلاعاتي كه در اين مقاله بعنوان مثال مورد استفاده قرار گرفته است بانك اطلاعاتي يك آموزشگاه مي‌باشد كه شامل دو جدول بنامهاي teachers و students مي‌باشد. جدول اول اطلاعات اساتيد و جدول دوم اطلاعات دانشجويان را در خود نگه مي‌دارد. جدول اول داراي چهار فيلد زير مي‌باشد: name يا نام از نوع text، family يا فاميل از نوع text، age يا سن از نوع عدد، salary يا حقوق از نوع عدد.

جدول دانشجويان نيز شامل چهار فيلد مي‌باشد، سه فيلد اول آن مشابه سه فيلد اول جدول اساتيد مي‌باشد و فيلد چهارم آن عبارتست از GPA يا معدل كه يك فيلد عددي است.



ادامه مطلب...
Subscribe
ارسال در تاريخ دوشنبه یازدهم خرداد 1388 توسط سعيد
این تابع به شما اجازه میدهد که مجموعه هایی را مشخص کنید که هر کدام از سطور نتایج متعلق به آنهاست. به عنوان ورودی شما تمام مشخصه هایی را که در هر مجموعه دسته بندی شرکت دارند مهیا میکند. تابع یک نتیجه integer که یک bitmap (نقشه بیتی) است را تولید میکند، که در آن هر بیت جایگزین یک مشخصه متفاوت میشود. در این راه تابع یک عدد صحیح یکه برای هر مجموعه دسته بندی تولید میکند.

Query زیر یک مثال از استفاده این تابع را نمایش میدهد:

 

SELECT 

  GROUPING_ID(



ادامه مطلب...
Subscribe
ارسال در تاريخ شنبه پنجم اردیبهشت 1388 توسط سعيد

شما محدود نشده اید که تنها از یک زیرعبارت در عبارت GROUP BY استفاده کنید. شما میتوانید چندین زیرعبارت را با استفاده از کاما مشخص کنید. کاما به عنوان اپراتور حاصلضرب استفاده میشود، بدین معنی که شما حاصلضرب دکارتی مجموعه ها را خواهید داشت. به عنوان مثال، کد زیر جایگزین حاصلضرب دکارتی بین دو مجموعه از زیرعبارات میشود:


GROUPING SETS ( (a, b), (c, d) ), GROUPING SETS ( (w, x), (y, z) )


این کد به صورت منطقی معادل است با :


GROUPING SETS ( (a, b, w, x), (a, b, y, z), (c, d, w, x), (c, d, y, z) )


شما میتوانید همچنین از زیرعبارات CUBE و ROLLUP به عنوان قسمتی از ضرب دکارتی استفاده نمایید.

Subscribe
ارسال در تاريخ شنبه پنجم اردیبهشت 1388 توسط سعيد

این نسخه از SQL Server چندین پسوند برای Group By معرفی کرده که به شما این امکان را میدهد که به صورت همزمان چندین عملیات Grouping روی یک query داشته باشید. این پسوندها عبارتند از Grouping Sets و CUBE و ROLLUP که زیرعبارتهایی از عبارت Group By و توابع GROUPING_ID هستند. پسوندهای جدید استاندارد هستند و نباید با option های غیراستاندارد و قدیمی CUBE و ROLLUP اشتباه گرفته شوند.

زیر عبارات GROUPING SETS  و CUBE و ROLLUP
برای نمایش و معرفی این عبارات اجازه دهید به چند تکه کد اشاره کنیم:

 



ادامه مطلب...
Subscribe
ارسال در تاريخ شنبه پنجم اردیبهشت 1388 توسط سعيد

این عبارت جدید یک عبارت استاندارد است که سه عمل INSERT و UPDATE و DELETE را ترکیب کرده و بر اساس یک منطق شرطی یک عملیات تجزیه ناپذیر را انجام میدهد. استفاده از این عملیات تجزیه ناپذیر بهینه تر از استفاده همزمان از سه عملیات بالا به صورت مجزاست.
عبارت به دو جدول اشاره میکند: یک جدول هدف که در عبارت MERGE INTO مشخص میشود و جدول دیگر که جدول منبع است و در عبارت USING استفاده میشود. جدول هدف، هدفیست برای تغییرات و اصلاحات، و جدول منبع میتواند برای اصلاح هدف مورد استفاده قرار بگیرد.
سیمنتیک عبارت merge شبیه یک outer join است. شما با استفاده عبارت ON مشخص میکنید که کدام سطر از جدول هدف با کدام جدول منبع مطابقت دارد و کدام مطابقت ندارد. شما یک عبارت برای هر مورد دارید که تعیین میکند کدام عملیات انجام شود :


WHEN MATCHED THEN
 WHEN NOT MATCHED [BY TARGET] THEN
WHEN NOT MATCHED BY SOURCE THEN


دقت کنید که شما احتیاج ندارید که هر سه عبارت را مشخص کنید، بلکه فقط یک مورد نیاز است.
به همان اندازه که دیگر عبارات تغییر، عبارت MERGE نیز عبارت OUTPUT را حمایت میکند،‌که به شما این امکان را میدهد که مقادیری را از سطرهای تغییر یافته باز گرداند. به عنوان قسمتی از عبارت OUTPUT شما میتوانید متد $action را فراخوانی کنید تا عملیاتی که باعث تغییر سطر شده را مشخص کنید.( 'INSERT', 'UPDATE', 'DELETE')
به عنوان مثال کد زیر طریقه استفاده از عبارت MERGE را مشخص میکند. این کد دو جدول Customers و CustomersStage را در tempdb ساخته و آنها را با داده هایی پر میکند:



ادامه مطلب...
Subscribe
ارسال در تاريخ شنبه پنجم اردیبهشت 1388 توسط سعيد

نسخه جدید SQL Server با معرفی این دو نوع پارامتر کدها را مختصر کرده و کارایی آن را نیز بالا میبرد. Table Type ها اجازه استفاده مجدد آسان تعریف جدول را با متغیر جداول مهیا میسازد و Table Valued اجازه پاس کردن یک table را با استفاده از پارامترها به stored procedure ها و function ها را به ما میدهد.

1- Table Type ها
این نوع اجازه میدهد که شما تعریف table را در پایگاه داده ذخیره نمایید و بعدا از آن برای تعریف متغیرهای table و پارامترها به stored procedure ها و function ها استفاده نمایید.به این دلیل که این نوع جدید به شما این امکان را میدهد که از تعریف table دوباره استفاده کنید، آنها پایداری (consistency) و کم کردن احتمال خطا را تامین میکنند.
شما باید از عبارت CREATE TYPE برای ساخت این نوع جدید استفاده کنید. به عنوان مثال کد زیر یک Table Type جدید بهپایگاه داده AdventureWork می افزاید :


USE AdventureWorks;
GO
CREATE TYPE dbo.OrderIDs AS TABLE
( pos INT NOT NULL PRIMARY KEY,
  orderid INT NOT NULL UNIQUE );
و در کد زیر از آن پس از تعریف استفاده شده است :
DECLARE @T AS dbo.OrderIDs;
INSERT INTO @T(pos, orderid) VALUES(1, 51480),(2, 51973),(3, 51819);
SELECT pos, orderid FROM @T ORDER BY pos;

برای دیدن اطلاعات metadata مربوط به table typeها روی view با نام sys.table_types یک Query بزنید.

2- پارامترهای Table-Valued



ادامه مطلب...
Subscribe
ارسال در تاريخ شنبه پنجم اردیبهشت 1388 توسط سعيد

شما میتوانید از چندین متد دیگر برای دستکاری در نوع داده HIERARCHYID استفاده کنید. از جمله Parse، GetReparentedValue،Read و Write.
با استفاده از متد HIERARCHYID::Parse میتوانید یک رشته با فرمت درست را به یک HIERARCHYID تبدیل کنید درست مثل تابع CAST.
با استفاده از متد GetReparentedValue میتواند گره والد یک گره تغییر داد. این متد دو آرگومان ورودی دارد، یکی @old_root و دیگری @new_root. فرض کنید مقدار منطقی و مسیر گره فعلی به صورت روبرو باشد /1/1/2/3/2/ و مقدار old_root /1/1/ باشد و مقدار new_root برابر /2/1/4/ باشد، در این صورت این متد مقدار /2/1/4/2/3/2/ را باز خواهد گرداند. دقت داشته باشید که این متد نیز تضمین نکرده که مقدار برگشتی یکه باشد.
متدهای Read و Write نیز فقط در CLR قابل استفاده است. از آنها برای خواندن از  BinaryReader و  نوشتن روی BinaryWriter استفاده کرد. شما میتوانید با استفاده از CAST حتی مقادیر رشته ای معادل HIERARCHYID را به آن تبدیل میکند و بالعکس.

Subscribe
ارسال در تاريخ شنبه پنجم اردیبهشت 1388 توسط سعيد

اگر شما روی hid جستجو کنید خروجی به صورت binary است و اطلاعات با معنایی برای شما ندارد. برای اینکه به شکل منطقی تری دست پیدا کنید از متد ToString استفاده کنید. اگر این کار را کنید مسیری از سطوح را به شما میدهد که با اسلش از هم جدا شده است. به عنوان مثال کد زیر هر دو نوع binary و معادل منطقی آن را به شما میدهد :


SELECT hid, hid.ToString() AS path, lvl, empid, empname, salary
FROM dbo.Employees
ORDER BY hid;


فراخوانی HIERARCHYID یک مرتب سازی topological را میسازد و از متد    



ادامه مطلب...
Subscribe
ارسال در تاريخ شنبه پنجم اردیبهشت 1388 توسط سعيد
رای وارد کردن یک گره در یک ساختار درختی ابتدا باید یک مقدار HIERARCHYID برای آن ساخته شود. از متد HIERARCHYID::GetRoot() برای تولید یک مقدار برای گره root استفاده کنید. از متد GetDescwndant برای تولید مقدار زیر یک گره داده شده استفاده کنید. این متد دو مقدار ورودی HIERARCHYID را به صورت اختیاری دریافت کرده  که این دو ورودی جایی را بین خودشان برای گره جدید مشخص میکنند.
توجه داشته باشید که متد بالا تضمین نمیکند که مقدار تولید شده برای HIERARCHYID یکه باشد. برای اجبار کردن تولید یکه باید حتما روی ستون مربوطه یک primary key ، unique constraint و یا unique index تعریف کنید.
به عنوان مثال کد زیر یک stored procedure برای اضافه کردن یک گره به ساختار درختی میسازد :

 



ادامه مطلب...
Subscribe
ارسال در تاريخ شنبه پنجم اردیبهشت 1388 توسط سعيد
این یک CLR UDT است که برای نگهداری و دستکاری سلسله مراتب و وراثت استفاده میشود. این نوع به صورت داخلی در مقدار VARBINARY ذخیره میشود که اطلاعات گره کنونی را در سلسله مراتب (به صورت پدر و فرزند و همچنین به صورت همنیا) نگهداری میکند. برای درک این مطلب باید استراتژی Indexing و Insert گره های جدید را متوجه شویم.

این مورد شامل چند بخش است :
١- استراتژی های Indexing :
کد زیر نحوه استفاده از نوع جدید HIERARCHYID را نمایش میدهد به ستون hid دقت کنید :


USE tempdb;
IF OBJECT_ID('dbo.Employees', 'U') IS NOT NULL DROP TABLE dbo.Employees;
CREATE TABLE dbo.Employees
(
  empid   INT NOT NULL,
  hid     HIERARCHYID NOT NULL,
  lvl AS hid.GetLevel() PERSISTED,
  empname VARCHAR(25) NOT NULL,
  salary  MONEY       NOT NULL,
  CONSTRAINT PK_Emploees PRIMARY KEY NONCLUSTERED(empid)
);


به استفاده از متد GetLevel() توجه کنید، دراین ستون یعنی lvl شماره سطح این گره در سلسله مراتب به دست آمده و نگهداری میشود. این تضمین میکند که تمام گره های فرزند پایینتر از گره های والد است. به این دلیل اگر از اندیس استفاده کنیم به صورت خودکار با افزایش صعودی اندیس، این سلسله مراتب هم به صورت خودکار افزایش میابد درست مثل درختی که شاخ و برگهای آن افزایش میابد. دو نوع استراتژی موجود است 1- عمقی اول (depth first) 2- ردیفی اول (breadth first)

در استراتژی دوم گره های هم سطح دارای اندیس نزدیک به هم هستند. در کد های زیر هر دو نوع اندیس گذاری معرفی شده :


CREATE UNIQUE CLUSTERED INDEX idx_depth_first ON dbo.Employees(hid);
CREATE UNIQUE INDEX idx_breadth_first ON dbo.Employees(lvl, hid);

 

Subscribe
ارسال در تاريخ شنبه پنجم اردیبهشت 1388 توسط سعيد
نسخه های قبلی انواع تعریف شده توسط کاربر (user defined type) دارای محدودیت از لحاظ طول بود یعنی CLR های با طول بیش از 8000 بایت نمیشد که ساخته شود ولی در نسخه جدید این محدودیت حذف شده است و این محدودیت تا 2 گیگابایت افزایش یافته است. دو نوع جدید GEOMETRY و GEOGRAPHY از این نوع هستند که در SQL Server 2008 به صورت built in افزوده شده اند. این دو برای نگهداری موقعیت جغرافیایی مناسبند. مشخصه ای برای تعیین طول موجود است که عبارت است از : SqlUserDefinedTypeAttribute.MaxByteSize اگر مقدار آن روی 1- تنظیم شده باشد یعنی تا 2 گیگا بایت میتواند افزایش حجم یابد. کلاینتهای قدیمی 2000 و 2005 این UDT های با حجم زیاد را با نوع VARBINARY(MAX) و IMAGEجایگزین میکند.

 

Subscribe
ارسال در تاريخ شنبه پنجم اردیبهشت 1388 توسط سعيد

یکی از مواردی که خیلی از طرف توسعه دهندگان مورد نیاز بود این بود که نوع DateTime در نسخه های قبل به صورت دو نوع مجزا در نسخه جدید آورده شودکه اینگونه هم شد. در نسخه جدید 4 نوع جدید برای این کار در نظر گرفته شده است که عبارتند از Date ،  Time، DateTime2 و DATETIMEOFFSET
در جدول زیر مشخصات این انواع جدید آورده شده است:

 



ادامه مطلب...
Subscribe
ارسال در تاريخ شنبه پنجم اردیبهشت 1388 توسط سعيد

توابع تبدیل نوعهای مختلف به یکدیگر ارتقا یافته است. شما میتوانید به عنوان سومین آرگومان سبک و شیوه تبدیل را تعیین کنید. شیوه 0 (صفر) همان چیزیست که در نسخه های قبل انجام میشد. این شیوه رشته ها را به کد اسکی باینری معادل ترجمه میکند و همچنین بالعکس.
شیوه های 1 و 2 انواع جدیدی هستند. این شیوه ها رشته های در مبنای 16 را به معادل مقدار باینری که معادل ارقام در مبنای 16 است تبدیل میکند و بالعکس. وقتی شما از شیوه 1 استفاده کنید رشته ورودی باید دارای پیشوند 0x باشد و اگر شیوه 2 را استفاده کنید نباید اینگونه باشد. این اتفاق در هنگامی که یک مقدار باینری را به کاراکتر تبدیل میکنید هم اتفاق می افتد. به مثالهای زیر دقت نمایید:


SELECT
  CONVERT(VARCHAR(12) , 0x49747A696B  , 1) AS [Bin to Char 1],
  CONVERT(VARBINARY(5), '0x49747A696B', 1) AS [Char to Bin 1],
  CONVERT(VARCHAR(12) , 0x49747A696B  , 2) AS [Bin to Char 2],
  CONVERT(VARBINARY(5), '49747A696B'  , 2) AS [Char to Bin 2];


این کد خروجی زیر را خواهد داشت:


Bin to Char 1 Char to Bin 1 Bin to Char 2 Char to Bin 2
------------- ------------- ------------- -------------
0x49747A696B  0x49747A696B  49747A696B    0x49747A696B

 
Subscribe
ارسال در تاريخ شنبه پنجم اردیبهشت 1388 توسط سعيد

در نسخه جدید SQL Server امکانات جدیدی به زبان T-SQL افزوده شده است که به بیان آن در زیر میپردازم، در هر پست یک مشخصه جدید را خواهم نوشت :

افزودن اینکه در یک سطر تمامی متغیرها و پارامترها را تعریف و به صورت Inline آن را مقداردهی کنید.


DECLARE @i AS INT = 0, @d AS DATETIME = CURRENT_TIMESTAMP;
SELECT @i AS [@i], @d AS [@d];

 

 
Subscribe
ارسال در تاريخ شنبه پنجم اردیبهشت 1388 توسط سعيد
دستور Delete

اين دستور تقاضايي را براي حذف ركوردهاي جدول ايجاد مي‌كند و به صورت زير استفاده مي‌شود :

Delete From Table-Name1

[Where Field1[(Select Field2 From Table-Name2]

; (]] شرط [Where   

   

در اين كاربرد، Table Name1،  نام جدولي است كه بايد ركوردهاي آن حذف شوند، Field1 ، فيلدي از Table Name1 است كه بايد با فيلد Field2 از Table Name2 مقايسه گردد و Table Name2، جدولي است كه شرط بر اساس آن تعريف مي‌گردد.

   

دستور  Create Table



ادامه مطلب...
Subscribe
ارسال در تاريخ جمعه یکم آذر 1387 توسط سعيد

در #C مي‌توان براي ايجاد تقاضا از زبان SQL استفاده نمود. با استفاده از دستورات SQL مي‌توان جدولي ايجاد كرد، جدولي را ويرايش نمود يا تقاضايي را بر روي جدولي اعمال كرد. براي اين منظور در اين بخش، دستورات SQL را به طور مختصر مي‌آموزيم . بعضي از دستورات SQL در زير آمده اند :

1- دستور SELECT

2- دستور SELECT…FROM

3- دستور INSERT…INTO

4- دستور UPDATE

5- دستور DELETE

6- دستورات CREATE INDEX,CREATE TABLE

7- دستور ALER TABLE

8- دستورات DROP INDEX,DROP TABLE

 

دستور SELECT  براي ايجاد تقاضا

اين دستور براي ايجاد تقاضاي SQL به كار مي‌رود و تمام ركوردها يا تعدادي از ركوردهاي جدول را بازيابي مي‌كند. اين دستور به صورت زير به كار مي‌رود:

Predicate مي‌تواند يكي از مقادير زير را بپذيرد :

All : تمام ركوردها را بازيابي مي‌كند.   

Distinct : ركوردهايي با داده هاي تكراري را حذف مي‌كند



ادامه مطلب...
Subscribe
ارسال در تاريخ جمعه یکم آذر 1387 توسط سعيد
ارائه تکنیکی بسیار ساده و موثر جهت انتخاب رکوردهای تصادفی از جدولی در دیتابیس

یکی از نیاز هایی که گاهی هنگام برنامه نویسی با آن روبرو می شویم، انتخاب تعدادی رکورد به صورت تصادفی از جدولی در دیتابیس می باشد. این مسئله جایی بیشتر اهمیت پیدا می کند که در آن جدول ستونی از نوع عددی (مثلا int) وجود نداشته باشد.
با استفاده از روشی که امروز به شما معرفی می شود، به راحتی می توانید این عمل را انجام دهید.
به قطعه کد زیر توجه فرمایید.



ادامه مطلب...
Subscribe
ارسال در تاريخ چهارشنبه بیست و نهم آبان 1387 توسط سعيد
قالب وبلاگ

CopyRight Of Unicomp.ir