بایگانی نویسنده

الگوریتم های مرتب سازی آرایه ها

دی ۳م, ۱۳۸۷

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

۱٫ الگوریتم مرتب سازی انتخابی (Selection Sort): در این روش، برنامه کوچکترین مقدار را یافته و آنرا در اولین خانه ی آرایه قرار می دهد. حال که کوچکترین عضو یافت شده است، برنامه به سراغ یافتن دومین عنصر کوچک در میان اعداد باقی مانده که از ۲ تا n هستند می رود و دومین عدد کوچک را در خانه دوم قرار میدهد. حال به سراغ سومین عدد کوچک می رود و این رویه را تا یافتن آخر عدد و قرار دادن آن در جای خودش تکرار میکند. با توجه به اینکه برنامه باید n عدد را n بار با هم مقایسه کند مرتبه ی پیچیدگی این الگوریتم O(n^2) است.
۲٫ مرتب سازی حبابی (Bubble Sort): در این روش هر عنصر با عنصر بعدی اش مقایسه میشود. در صورتی که عنصر دومی کوچکتر از عنصر اولی باشد، جای دو عنصر با هم عوض میشود. برنامه به کارش ادامه میدهد و عناصر دوم و سوم را با هم مقایسه میکند و این کار را تا اخر آرایه ادامه میدهد. دوباره الگوریتم ، پویش را از اول آرایه شروع میکند و مراحل قبل را تکرار میکند و این مراحل آنقدر تکرار میشوند تا آرایه کاملا مرتب شده باشد. مرتبه ی پیچیدگی این الگوریتم O(n^2) است.
۳٫ مرتب سازی درجی (Insertion Sort): در این روش عنصر اول و دوم با هم مقایسه شده و در صورت نیاز مرتب میشوند و سپس سومین عنصر با عناصر اول و دوم مقایسه میشود. در صورتی که عنصر سوم از اولی کوچکتر باشد به جای اولین عنصر می نشیند و عناصر قبلی به سمت راست هل داده میشوند. اگر عنصر سوم از اولی بزرگتر و از دومی کوچکتر باشد، بین آنها درج میشود و عنصر دوم به بعد یکی به سمت راست هل داده میشود. (پس در این روش همیشه عناصر ِ قبل از عنصری که میخواهیم مرتبش کنیم، مرتب هشتند.) این روال برای بقیه عناصر نیز اجرا میشود و هر عنصر در جای خودش قرار می گیرد تا تمام عناصر مرتب شوند. مرتبه ی پیچیدگی این الگوریتم O(n^2) است.
۴٫ مرتب سازی سریع(Quick Sort) : در این الگوریتم یک عنصر را بعنوان محور (pilot) مرتب سازی انتخاب میکنیم. و تمام عناصر کوچکتر از آن را به سمت چپ آن برده و عناصر بزرگتر را به سمت راست اش می‌بریم. حالا بخش چپ خودش یک بخش جدید است که با الگوریتمی که گفتیم آنرا مرتب میکنیم و سمت راست را نیز همینطور. یعنی در سمت چپی ها دوباره یک عنصر را بعنوان pilot در نظر میگیریم و عناصر کوچکتر از pilot را به سمت چپ آن و عناصر بزرگتر از pilot این قسمت را ، به سمت راست pilot می بریم. دوباره الگوریتم را روی یک چهارم های به وجود آمده اجرا میکنیم و اینکار را آنقدر ادامه میدهیم تا کل آرایه مرتب شود. مرتبه پیچیدگی این الگوریتم در بدترین حالت O(n^2) است. اما در حال نرمال O(n log n) است که کمترین مرتبه پیچیدگی برای مرتب سازی اعداد به حساب می آید.
۵٫ مرتب سازی ادغام (Merge Sort): این الگوریتم به روش بازگشتی (Recursive) عمل میکند و آرایه را به چند آرایه ی دو عنصری تقسیم میکند و آنها را مرتب میکند. سپس آرایه های کوچک را دوبه‌دو با هم ادغام میکند تا آرایه های مرتب ۴ عنصری ایجاد شوند و بعد آرایه های ۸ عنصری و به همین ترتیب پیش می رود تا آرایه اصلی بصورت مرتب شده ظاهر شود. مرتبه پیچیدگی این الگوریتم O(n log n) است.
۶٫ مرتب سازی هرمی (Heap Sort): در این روش، برنامه از کل آرایه ی داده شده یک درخت MaxHeap می سازد. (درخت مکس هیپ درختی دودویی و کامل است که مقدار ذخیره شده در هر گره ، بزرگتر و یا مساوی مقدار ذخیره شده در گره فرزندانش است) سپس مقدار ماگزیمم را از درخت حذف میکند و آنرا در انتهای آرایه میگذارد و دوباره از بقیه اعداد یک درخت maxHeap میسازد و باز روش مذکور را روی آن نیز اعمال میکند تا دومین عدد بزرگ یافت شود. در این روش آرایه از آخر به اول مرتب میشود. مرتبه پیچیدگی این الگوریتم O(n log n) است.

در تصویر زیر میتوانید مقایسه ای بین سرعت سه الگوریتم که مرتبه پیچیدگی شان n log n است مشاهده کنید.

O(n log n) Sorts

روش هایی وجود دارند که حداقل مرتبه ی پیچیدگی هر الگوریتم را با روابطی اثبات میکنند. بطور مثال برای الگوریتم های مرتب سازی ، میزان O(n Log n) حداقل است و کمتر از این میزان ممکن نیست و همانطور که میدانیم الگوریتم های ادغام و هرمی و سریع هر سه با همین میزان پیچیدگی مرتب سازی را انجام میدهند. بنابراین الگوریتمی نمیتوان نوشت که سریعتر از این حالت عمل کند و الگوریتم های مینیمم پیچیدگی در این زمینه ،قبلا کشف و ایجاد شده اند . اما مواردی هستند مانند ضرب دو ماتریس n در n که مرتبه ی پیچیدگی شان O(n^3) است و روش های جدیدی مانند روش استراسن آنرا به O(n^2.81) کاهش داده است. طبق روشهای اثبات شده امکان کمتر شدن این میزان وجود دارد. اما هنوز الگوریتمی که هزینه ی پیچیدگی کمتری از الگوریتم استراسن داشته باشد کشف نشده است. بنابراین هنوز شما میتوانید وقت خود را روی کاهش مرتبه ی پیچیدگی این الگوریتم و یافتن الگوریتم بهینه تر بگذارید.

آموزش CSS – طراحی یک سایت بدون استفاده از جدول ها

آذر ۲۰م, ۱۳۸۷

بیایید به روزهای اولیه وب برگردیم . هیچ استانداردی نبود و هر مرورگر هر روز یه تگ جدید معرفی میکرد. بالاخره یه موسسه همه مرورگر ها رو سر یه میز جمع کرد و با هم استانداردی بنام W3C را تصویب کردند . در این زمان نیاز عمده ای حس میشد که محتویات سایت از طراحی جدا شود . در اینجا بود که سر و کله CSS پیدا شد و مسئولیت نمایش نمای صفحات را بعهده گرفت و XHTML نیز برای نمایش اطلاعات بگار گرفته شد .

چرا باید بجای جدول از کد CSS استفاده کرد ؟

اول اینکه کد شما خیلی کوتاه تر میشه ، حتی نصف !
دوم اینکه سرعت لودینگ سایت شما بیشتر میشه .
راحت تر تغییر مییابد : شما یک فایل CSS را تغییر می دهید و کل سایت شما تغییر می یابد .
مطالب از قالب سایت میشود .

در این مقاله شما یاد میگیرید چگونه بجای جداول از CSS وکلاس های آن استفاده کنید .

ساخت کلاسی برای عناصر تگ

: اولین قدم ساخت کلاس CSS است که المنت های تگ
از آن استفاده میکنند . بصورت زیر :

div.leftnav{

background: white;

color: black;

/* other display information here */

/* add Positioning information here */

}

این کلاس بسیار ساده است و در اصل الان کاری انجام نمیدهد . فقط متن سیاه را روی زمینه سفید تعریف میکند . شما باید از این المنت در جایی از صفحه استفاده کنید .

موقعیت یابی وابسته ساده :

این بدین معناست که ما فقط هر عنصر را در موقعیتش قرار میدهیم و بدین تعریف کردن جای دقیق آن در صفحه .

div.leftnav{

background: white;

color: black;

/* Other display information here */

width: 15%;

}

خوب . ما چه انجام دادیم ؟ ما گفتیم که هدایتگر چپ باید در سمت چپ باشه ، جاییکه در صفحه قرار میگیرد . این بد نیست ، اما برای انعطاف بیشتر ممکنه شما به موقعیت یابی مطلقی نیاز داشته باشید . همچنین این خیلی مهمه که بدونین که چیزی که شما تا حالا انجام دادید موقیت نمایی اصلی نیست . تمام چیزی که تعریف کردید Width بود . بنابرین یک المنت با پهنای ۱۵% ساخته خواهد شد .

موقعیت نمایی مطلق . اضافه کردن border و margin :

موقعیت نمایی مطلق به معنای این است که شما بگویید دقیقا المنت های شما کجای صفحه ظاهر شوند . اینکار با تعریف خاصیت های top , bottom, left , right امکان پذیر میشود :

div.content{

background: white;

color: black;

position: absolute; /* Says which positioning we are using */

left: 17%; /* 17% from the left side of the screen */

width: 69%; /* This is the width */

}

نکته اینجاست که در کد بالا فقط خاصیت left تعریف شده، این کافیه ! نیازی نیست که شما تمامی تمام خاصیت هایش را تعریف کنید . اما برای انعطاف پذیری بیشتر ممکنه خودتون بخواهید اینکارو بکنید . بطور مثال ممکنه شما بخواهید یک منو در سمت راست اضافه کنید:

div.rightnav{

background: white;

color: black;

position: absolute;

left: 83%;

width: 10%;

top: 80px; /* 80 pixels from the top */

}

اساسا در موقعیت نمایی مطلق این المنت ها معانی زیر را دارند:

Left : فاصله از چپ صفحه ، معمولا بر حسب درصد

Right : فاصله از راست صفحه ، معمولا بر حسب درصد

Top: فاصله از بالای صفحه ، معمولا بر حسب پیکسل

Bottom : فاصله از پایین صفحه ، معمولا بر حسب پیکسل

نکته اینکه bottom به ندرت استفاده میشود ، اما گاهی لازم میشود . اگر شما از ۴ یا ۳ تا پراپرتی با هم استفاده کنید ،باید قادر به قرار دادن تگ DIV در هر کجا که میخواهید باشید . همچنین در نظر داشتن این نکته مهم است که راه های بیشتری نیز برای موقعیت نمایی یک المنت در کنار موقعیت نمایی مطلق وجود دارد . اما تمام مرورگر های وب آن راه ها را پشتیبانی نمیکنند .

افزودن Border :

ممکنه شما بخواهید کمی عناصرصفحه را با لبه کنار صفحه یا هر چیز دیگر فاصله دهید ، border ها برای این امر مناسبند . اما صفحه خود را در مرورگر های مختلف تست کنید تا نتیجه درستی دریافت کنید . و حال طرز ساخت حاشیه ها:

div.rightnav{

background: white;

color: black;

position: absolute;

left: 83%;

width: 10%;

top: 80px; /* 80 pixels from the top */

border-color: white; /* Keep the border invisible */

border-style: solid; /* It is a solid invisible line which is fine */

border-bottom-width: 2px; /* These attributes are pretty self-explanatory */

border-top-width: 2px;

border-left-width: 3px;

border-right-width: 4px;

}

افزودن حاشیه یا margin :

Margin ها ابزار های قدرتمندی در سایت های css میباشند .در مقدمه میبینید که شما میتوانید چیزی را بکمک تعیین فاصله درصدی از طرفین margin ها در وسط قرار دهید .

div.content{

background: white;

color: black;

margin-left: 20%; /* 20% from the left side of the screen */

margin-right: 20%; /* 20% from the right side of the screen */

}

نقصان وجود پشتیبانی مرورگر ها :

پشتیبانی نشدن تمام دستورات css توسط تمامی مرورگر ها مشکلات زیادی را برای طراحان پیش آورده . Mozilla ( و مرورگر های زیر مجموعه آن مانند FireFox ) و Opera بروز رسانی بسیار خوبی در پشتیبانی دستورات css دارند . اما Internet Explorer کمی عقب مانده است . کد هایی که در این مقاله نوشتیم توسط تمامی مرورگر ها پشتیبانی میشود .

ناسازگاری بین مرورگر ها :

بیشتر مردم از آخرین نسخه مرورگرها استفاده می کنند. مرورگر های گوناگون کد css شما را بگونه های مختلف تفسیر میکنند . اصلی ترین مرورگر در این زمینه IE است که ممکنه کد های border را بگونه دیگری نشان دهد .

افزودن تگ DIV :

افزودن تگ DIV برای گره زدن تمام اطلاعات بسادگی زیر انجام پذیر است :

// Insert Links

همانطور که می بینید خیلی ساده اینکار انجام شد و بیشتر کار در فایل CSS انجام میشود . شما میتوانید از تگ DIV در هرجای صفحه استفاده کنید . در انتها اینجا یک صفحه XHTML ساده را می بینید که کد css آنرا سافته و نمای آن سه ستون دارد :

// Content

// Links

// Links

Join کردن بیش از ۲ جدول برای Database های Access

آذر ۱۸م, ۱۳۸۷
کتاب ColdFusion MX Bible برای Join کردن بیش از دو جدول یک بانک اطلاعاتی راه حل زیر را پیشنهاد می کند:

SELECT
c.CompanyID,
c.CompanyName,
e.LastName,
e.FirstName,
e.Salary,
d.FullName,
d.RelationShip
FROM
Company c INNER JOIN Employee e
ON c.CompanyID = e.CompanyID
INNER JOIN Dependant d
ON e.SSN = d.SSN

که در بیشتر برنامه های Database Server درست عمل می کند.
اما در بانکهای اطلاعاتی Microsoft Access پیغام خطایی با توضیح زیر می دهد :

Operator expected

من پس از یک کم جستجو در کتاب ها و پرسش از دیگران ، یک دوست آمریکایی من راه حل زیر را پیشنهاد داد. در اکسس در برخی قسمت ها وجو د پارانتز الزامی است با اینکه در انواع دیگر بانک های اطلاعاتی نیازی به آن پارانتز ها نیست.  یعنی کد مورد نظر را باید به صورت زیر باز نویسی کنیم :

SELECT
c.CompanyID,
c.CompanyName,
e.LastName,
e.FirstName,
e.Salary,
d.FullName,
d.RelationShip
FROM
(Company c INNER JOIN Employee e
ON c.CompanyID = e.CompanyID)
INNER JOIN Dependant d
ON e.SSN = d.SSN

و یک نمونه ی دیگر در اتصال ۴ جدول :

SELECT
cfarticle.id,
cfarticle.title,
cfarticle.description,
cfarticle.dateadded,
editorial.authorname as author,
categories.name,
levels.levelname
FROM
((cfarticle INNER JOIN categories ON cfarticle.category=categories.id)
INNER JOIN editorial ON cfarticle.author=editorial.id)
INNER JOIN levels ON cfarticle.skllevel=levels.id

آموزش ساخت فانکشن Query Command

آذر ۱۸م, ۱۳۸۷

این مقاله نحوه ایجاد قابلیتی را می آموزد که ; ضوابط فیلتر کردن را از طریق یک فرم جدولی اکسس ۲۰۰۰ وارد کنید و دکمه ای بنام Query داشته باشید تا فیلتر اعمال شود.

این فیلتر ۴ تکست باکس دارد بنام های txtFirstName, txtMiddleInitial, txtLastName, و txtSSN .جدول دیتابیس member نام دارد و فیلد هایی بنام های First, Mi,Last, و SSN دارد .

فانکشن AttachAnd برای ساخت جمله فیلتر کننده SQL استفاده میشود .

“First=’David’ and Last=’Nishimoto’”.

ساخت فانکشن :

Option Compare Database

Dim ssql

1- کاربر دکمه query را فشار داد

۲-یا اینکه شما میتوانید یک دکمه برای رویداد exit قرار دهید.

Private Sub cmdQuery_Click()

BuildQueryCommand

End Sub

3- فانکشن BuildQueryCommand یک فیلتر با ضوابطی که از تکست باکس ها دریافت کرده میسازد

۴ – قوانین فیلتر اعمال شد .

Private Function BuildQueryCommand()

sSQL = “”

Call AttachAnd(“First”, “‘” & txtFirstName & “‘”)

Call AttachAnd(“Mi”, “‘” & txtMiddleInitial & “‘”)

Call AttachAnd(“Last”, “‘” & txtLastName & “‘”)

Call AttachAnd(“SSN”, “‘” & txtSSN & “‘”)

Filter = sSQL

FilterOn = True

End Function

ضوابط چندگانه یا تکی را بررسی کنید
Single: “first=’David’”

Multiple:”First=’David’ and Last=’Nishimoto’”

Private Function AttachAnd(sField, sValue)

If sValue = “”” Or sValue = “” Then

Exit Function

End If

If Occurances(sSQL, “=”) = 0 Then

sSQL = sSQL & sField & “=” & sValue

Else

sSQL = sSQL & ” and ” & sField & “=” & sValue

End If

End Function

رخدادهای یک طرح را در عبارت sql بشمارید

Private Function Occurances(sSQL, sOperator)

Dim offset

Dim iCount

offset = 1

While offset <> 0

offset = InStr(offset + 1, sSQL, sOperator)

If offset > 1 Then

iCount = iCount + 1

End If

Wend

Occurances = iCount

End Function

دستکاری جدول های بانک اطلاعاتی SQL

آذر ۱۸م, ۱۳۸۷

CREATE TABLE: جداول ساختمان بندی پایه یک بانک اطلاعاتی اند که اطلاعات را در خود جای میدهند . برنامه های بسیاری هستند که بدون استفاده از کد های sql برای شما جدول میسازند . اما یادگیری این دستورات برای کسی که با جداول و دیتابیس کار میکند ضروری است.

قبل از یادگیری گرامر دستوری ساخت جدول ، باید منطق و اصول ساخت جدول را بیاموزید . جداول به سطرها (ROW) و ستون ها (COLUMN) تقسیم میشوند . هر سطر یک رکورد از اطلاعات را در خود جای داده است.هر سطر چند فیلد دارد .

مثال : مثلا کارنامه مدارس را در نظر بگیرید .مثلا ۳ ستون دروس ، نمره و تاریخ دارد و سطر های آن هر کدام شامل سه بخش هستند طبق دسته بندی ستون هایش .

سطر اول : ریاضی – ۱۲ – ۱۲/۳/۱۳۸۴

سطر دوم : فیزیک – ۱۴ – ۱۶/۳/۱۳۸۴

و بهمین ترتیب .پس هر سطر جدول را یک رکورد می نامیم . هر ستون جدول (فیلد) دارای یک نوع داده است . در مثال فوق ستون دروس از نوع string و ستون نمرات از نوع integer و ستون تاریخ از نوع date است . هنگام ساخت جدول که فیلد هایش را مشخص میکنید باید نوع داده ای فیلد ها نیز مشخص گردد. کد ساخت جدول بصورت زیر میباشد :

CREATE TABLE “table_name”
(“column 1″ “data_type_for_column_1″,
“column 2″ “data_type_for_column_2″,
… )

کد ساخت یک جدول نمونه :

CREATE TABLE customer
(First_Name char(50),
Last_Name char(50),
Address char(50),
City char(50),
Country char(25),
Birth_Date date)

DROP TABLE : گاهی ما دلمون میخواد که بهر دلیلی از دست یک جدول در پایگاه داده خود راحت شویم . SQL این امکان رو برای ما فراهم کرده و ما میتونیم برای پاک کردنش از کد زیر استفاده کنیم .

DROP TABLE “table_name”

مثال :

DROP TABLE customer.

TRUBCATE TABLE : گاهی ما میخواهیم که اطلاعات داخل یک جدول رو پاک کنیم . اما نمیخواهیم خود جدول پاک شود. برای اینکار ازین دستور کمک میگیریم

TRUNCATE TABLE “table_name”

مثال :

TRUNCATE TABLE customer.

INSERT INTO : برای ورود اطلاعات داخل یک جدول دو راه وجود دارد. یکی اینکه رکورد ها را تک تک وارد کنیم (سطر به سطر) و یکی اینکه یکدفعه چندین سطر را وارد جدول کنیم . برای وارد کردن اطلاعات بصورت سطر به سطر با کد زیر عمل میکنیم .

INSERT INTO “table_name” (“column1″, “column2″, …)
VALUES (“value1″, “value2″, …)

فرض کنید جدول با ساختار زیر داریم .

Table Store_Information

نام ستون ها

نوع داده ستون

store_name

char(50)

Sales

float

Date

datetime

و حالا ما میخواهیم یک رکورد(سطر) اطلاعات وارد جدول فروش کنیم . با مشخصات ذیل : لوس آنجلس – ۱۰ ژانویه ۱۹۹۹ و فروش ۹۰۰$ . بنابرین کد زیر را استفاده میکنیم.

INSERT INTO Store_Information (store_name, Sales, Date)
VALUES (‘Los Angeles’, 900, ‘Jan-10-1999′)

نوع دوم از ورود اطلاعات وارد کردن چندین سطر با هم میباشد . بر خلاف بخش قبلی ، ما از کلمه SELECT برای مشخص کردن داده هایی که میخواهیم وارد جدول کنیم استفاده میکنیم . اگر فکر کرده اید که این اطلاعات از جدول دیگری در حال کپی در این جدول است درست فکر کرده اید.

INSERT INTO “table_name” (“column1″, “column2″, …)
SELECT “column1″, “column2″, …
FROM “table1″

توجه کنید که کد بالا ساده ترین حالت ممکن بود .جمله select شما می تواند دارای کلمات where , Group by , Having باشد .

بطور مثال اگر ما جدولی داشته باشیم که بخواهیم اطلاعات فروش سال ۱۹۹۸ را بگیرد و هم اکنون جدول دیگری دارید که اطلاعات تمام سال های ۱۹۹۵ تا ۲۰۰۰ را شامل میشود و اگر ساختار دو جدول یکسان باشد باید تایپ کنید :

INSERT INTO Store_Information (store_name, Sales, Date)
SELECT store_name, Sales, Date
FROM Sales_Information
WHERE Year(Date) = 1998

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

WHERE to_char(date,’yyyy’)=1998

UPDATE : گاهی ما در یک جدول اطلاعاتی داریم و میخواهیم مقداری را در جدول تغییر دهیم .برای اینکار از دستور UPDATE استفاده می کنیم .

UPDATE “table_name”
SET “column_1″ = [new value]
WHERE {condition}

مثال : ما جدول زیر را داریم .

Table Store_Information

store_name

Sales

Date

Los Angeles

$1500

Jan-05-1999

San Diego

$250

Jan-07-1999

Los Angeles

$300

Jan-08-1999

Boston

$700

Jan-08-1999

مثلا ما متوجه میشویم که مقدار فروش فروشگاه لوس آنجلس در تاریخ ۰۱/۰۸/۱۹۹۹ در اصل ۵۰۰$ بوده و باید این مقدار را در جدول تصحیح کنیم . برای اینکار از کد زیر استفاده میکنیم.

UPDATE Store_Information
SET Sales = 500
WHERE store_name = “Los Angeles”
AND Date = “Jan-08-1999″

بعد از اجرای کد بالا مقادیر جدول بصورت زیر در میاید .

Table Store_Information

store_name

Sales

Date

Los Angeles

$1500

Jan-05-1999

San Diego

$250

Jan-07-1999

Los Angeles

$500

Jan-08-1999

Boston

$700

Jan-08-1999

در جدول مذکور فقط یک رکورد بود که تاریخش Jan-08-1999 و نام فروشگاهش Los Angeles باشد . اگر لچند رکورد با این مشخصات وجود داشت نیز تمام آنها مقدارشان تغییر میکرد . در مثال فوق فوق یک رکورد وجود داشت با مشخصاتی که ما دادیم و فقط هم یک فیلدش را تغییر دادیم .

این امکان وجود دارد که مقدار چند فیلد را به یکباره تغییر دهیم . برای اینکار از گرامر کد زیر استفاده میشود .

UPDATE TABLE “table_name”
SET (“column_1″, “column_2″) = ([new value 1], [new value 2])
WHERE {condition}

UPDATE : برای پاک کردن یک رکورد از جدول ازین کد استفاده میکنیم .

DELETE FROM “table_name”
WHERE {condition}

مثال : جدول زیر را داریم .

Table Store_Information

store_name

Sales

Date

Los Angeles

$1500

Jan-05-1999

San Diego

$250

Jan-07-1999

Los Angeles

$300

Jan-08-1999

Boston

$700

Jan-08-1999

فرض کنید بخواهیم اطلاعات فروشگاه لوس آنجلس را پاک کنیم . برای اینکار از کد زیر استفاده میکنیم .

DELETE FROM Store_Information
WHERE store_name = “Los Angeles”

نتیجه:

Table Store_Information

store_name

Sales

Date

San Diego

$250

Jan-07-1999

Boston

$700

Jan-08-1999

آموزش SQL server – دستور MINUS

آذر ۱۸م, ۱۳۸۷

این دستور نیز با دو جمله SQL کار میکند. در ابتدا تمام نتایج query اول را میگیرد و سپس از میان نتایج ، آنهایی را که در query دوم هستند حذف میکند .

قالب دستوری :

[SQL Statement 1]
MINUS
[SQL Statement 2]

در اینجا میخواهیم تاریخ هایی را که در آنها فقط فروش در فروشگاه داشته این بیابیم.(فروش روی اینترنتی اصلا نمیخواهیم)

Table Store_Information

store_name

Sales

Date

Los Angeles

$1500

Jan-05-1999

San Diego

$250

Jan-07-1999

Los Angeles

$300

Jan-08-1999

Boston

$700

Jan-08-1999

Table Internet Sales

Date

Sales

Jan-07-1999

$250

Jan-10-1999

$535

Jan-11-1999

$320

Jan-12-1999

$750

SELECT Date FROM Store_Information
MINUS
SELECT Date FROM Internet_Sales

نتیجه :

Date

Jan-05-1999

Jan-08-1999

آموزش SQL server – دستور INTERSECT

آذر ۱۸م, ۱۳۸۷

مانند دستور union این دستور نیز با دو جمله SQL کار میکند . اما تفاوت اینجاست که دستور union در اصل مانند یک OR کار میکند و تمام رکوردهای غیر تکراری را بر میدارد . اما این دستور مانند AND کار میکند و رکورد های مشترک را بر میدارد .

قالب دستوری :

[SQL Statement 1]
INTERSECT
[SQL Statement 2]

مثال : جداول زیر را در نظر بگیرید . ما میخواهیم تمام تاریخ هایی را که در آن معامله ای انجام شده است استخراج کنیم . بنابرین از کد زیر استفاده میکنیم . تفاوت را با union مقایشه کنید .

Table Store_Information

store_name

Sales

Date

Los Angeles

$1500

Jan-05-1999

San Diego

$250

Jan-07-1999

Los Angeles

$300

Jan-08-1999

Boston

$700

Jan-08-1999

Table Internet Sales

Date

Sales

Jan-07-1999

$250

Jan-10-1999

$535

Jan-11-1999

$320

Jan-12-1999

$750

SELECT Date FROM Store_Information
INTERSECT
SELECT Date FROM Internet_Sales

نتیجه :

Date

Jan-07-1999

آموزش SQL server – دستور UNION ALL

آذر ۱۸م, ۱۳۸۷

هدف دستور Union all نیز ترکیب کردن نتایج حاصل از دو query با یکدیگر میباشد . اما فرقی که با union دارد این است که هنگام استفاده از union فقط مقادیر متمایز نشان داده میشود ، اما با union all تمام مقادیر برگردانده میشود.

قالب دستوری :

[SQL Statement 1]
UNION ALL
[SQL Statement 2]

مثال : جداول زیر را در نظر بگیرید . ما میخواهیم تمام تاریخ هایی را که در آن معامله ای انجام شده است استخراج کنیم . بنابرین از کد زیر استفاده میکنیم . تفاوت را با union مقایشه کنید .

Table Store_Information

store_name

Sales

Date

Los Angeles

$1500

Jan-05-1999

San Diego

$250

Jan-07-1999

Los Angeles

$300

Jan-08-1999

Boston

$700

Jan-08-1999

Table Internet Sales

Date

Sales

Jan-07-1999

$250

Jan-10-1999

$535

Jan-11-1999

$320

Jan-12-1999

$750

SELECT Date FROM Store_Information
UNION ALL
SELECT Date FROM Internet_Sales

نتیجه :

Date

Jan-05-1999

Jan-07-1999

Jan-08-1999

Jan-08-1999

Jan-07-1999

Jan-10-1999

Jan-11-1999

Jan-12-1999

آموزش SQL server – دستور UNION

آذر ۱۸م, ۱۳۸۷

هدف دستور Union ترکیب کردن نتایج حاصل از دو query با یکدیگر میباشد. در این رابطه میتوان گفت که union چیزی شبیه به join میباشد . چون هر دوی آنها برای ایجاد رابطه بین اطلاعات جداول مختلف استفاده میشوند . یکی از محدودیت های union این است که این ستون های متناظر با هم باید از یک نوع داده اطلاعات باشند. همچنین هنگام استفاده ار union فقط مقدار های متمایز انتخاب میشوند .(مانند select Distinct ) .

قالب دستوری :

[SQL Statement 1]
UNION
[SQL Statement 2]

مثال : جداول زیر را در نظر بگیرید . ما میخواهیم تمام تاریخ هایی را که در آن معامله ای انجام شده است استخراج کنیم . بنابرین از کد زیر استفاده میکنیم .

Table Store_Information

store_name

Sales

Date

Los Angeles

$1500

Jan-05-1999

San Diego

$250

Jan-07-1999

Los Angeles

$300

Jan-08-1999

Boston

$700

Jan-08-1999

Table Internet Sales

Date

Sales

Jan-07-1999

$250

Jan-10-1999

$535

Jan-11-1999

$320

Jan-12-1999

$750

SELECT Date FROM Store_Information
UNION
SELECT Date FROM Internet_Sales

نتیجه :

Date

Jan-05-1999

Jan-07-1999

Jan-08-1999

Jan-10-1999

Jan-11-1999

Jan-12-1999

توجه کنید که اگر ما از SELECT DISTINCT Date استفاده کنیم ، برای یکی یا هر دو عبارت، ما نتایج یکسانی را بدست خواهیم آورد .

آموزش SQL server – دستور OUTER JOIN

آذر ۱۸م, ۱۳۸۷

قبلا دیدیم که چطور اطلاعات را با ایجاد اتصال بین دو جدول استخراج کردیم . در این حالت می خواهیم اطلاعات را از جدولی انتخاب کنیم صرفنظر ازینکه آنها در جدول دیگر ارائه شده اند یا خیر . برای اینکار باید از outer join استفاده کنیم .

این دستور در دیتابیس ها ، وابسته به نوع دیتابیس است . بطور مثال در اوراکل ما باید یک علامت “(+)” در کلمه where قرار دهیم .

Table Store_Information

store_name

Sales

Date

Los Angeles

$1500

Jan-05-1999

San Diego

$250

Jan-07-1999

Los Angeles

$300

Jan-08-1999

Boston

$700

Jan-08-1999

Table Geography

region_name

store_name

East

Boston

East

New York

West

Los Angeles

West

San Diego

جداول بالا موجود است و ما میخواهیم فروش تمام فروشگاه ها را که در جدول Geography آمده بدست آوریم . اگر مااز حالت join معمولی استفاده کنیم اطلاعات درستی بدست نمی آوریم ، چون مقدار New York را در جدول دوم به ما نشان نخواهد داد . چرا ؟ چون این مقدار در جدول اولی موجود نیست .

SELECT A1.store_name, SUM(A2.Sales) SALES
FROM Georgraphy A1, Store_Information A2
WHERE A1.store_name = A2.store_name (+)
GROUP BY A1.store_name

توجه کنید که در کد بالا ما در حال استفاده از گرامر دستوری oracle هستیم .

نتیجه :

store_name

SALES

Boston

$700

New York

Los Angeles

$1800

San Diego

$250

نکته : وقتی که رکوردی در جدول دوم همتایش موجود نباشد NULL برگردانده میشود . در این حالت New York در جدول Store_Information موجود نمی باشد .