0

آموزش SQL

 
parisaexp
parisaexp
کاربر نقره ای
تاریخ عضویت : مهر 1392 
تعداد پست ها : 888
محل سکونت : اصفهان

پاسخ به:آموزش SQL

آموزش SQL-محدودیت Check

محدودیت CHECK

 

Wiki

محدودیت CHECK داده هایی را که در ستون ها وارد می شوند، به دامنه ای از مقادیر محدود می کند.

اگر محدودیت CHECK را روی یک ستون مجزا تعریف می کنید تنها مقادیر خاصی را برای این ستون می توانید وارد کنید.

اگر محدودیت CHECK را روی یک جدول (ستون های ترکیبی) تعریف کنید این محدودیت می تواند ستون های خاصی از جدول را بسته به مقادیر موجود در دیگر ستون ها در همان سطر محدود کند.


محدودیت CHECK در دستور CREATE TABLE

 

Wiki

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

در MySQL:

CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (P_Id>0)
)

در SQL Server / Oracle / MS Access:

CREATE TABLE Persons
(
P_Id int NOT NULL CHECK (P_Id>0),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

برای تعریف محدودیت CHECK روی ستون های ترکیبی (ترکیب دو یا چند ستون) از دستور زیر استفاده کنید. (منظور این است که داده های چند ستون با هم چک شوند)

در MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes')
)

محدودیت CHECK در دستور ALTER TABLE

 

Wiki

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

در MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Persons
ADD CHECK (P_Id>0)

برای اضافه کردن محدودیت CHECK روی ستون های ترکیبی( ترکیب دو یا چند ستون) از دستور زیر استفاده کنید(منظور این است که داده های چند ستون با هم چک شوند)

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Persons
ADD CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes')

حذف محدودیت CHECK

 

Wiki

برای حذف محدودیت CHECK از دستور زیر استفاده می کنیم.

در SQL Server / Oracle / MS Access:

ALTER TABLE Persons
DROP CONSTRAINT chk_Person

در MySQL:

ALTER TABLE Persons
DROP CHECK chk_Person

 

لِکُلِّ شَیْ‏ءٍ زَکَاةٌ وَ زَکَاةُ الْعَقْلِ احْتِمَالُ الْجُهَّال‏

برای هر چیزی زکاتیست و زکات عقل تحمّل نادانان است.

دوشنبه 10 آذر 1393  10:03 PM
تشکرات از این پست
parisaexp
parisaexp
کاربر نقره ای
تاریخ عضویت : مهر 1392 
تعداد پست ها : 888
محل سکونت : اصفهان

پاسخ به:آموزش SQL

آموزش SQL-محدودیت Default

محدودیت DEFAULT

 

Wiki

محدودیت DEFAULT برای وارد کردن مقداری به صورت پیش فرض در یک ستون استفاده می شود.

مقدار DEFAULT به تمام رکوردهای جدید اضافه می شود، البته اگر هیچ مقدار دیگری به جای آن درج نشود.


محدودیت DEFAULT در دستور CREATE TABLE

 

Wiki

دستور زیر در ستون City هنگامی که جدول Persons ایجاد می شود مقدار پیش فرضی را وارد می کند.

در My SQL / SQL Server / Oracle / MS Access:

CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)

همچنین محدودیت DEFAULT می تواند برای درج کردن مقادیری که مقدار خود را از سیستم می گیرند نیز استفاده شود، با استفاده از توابعی همچون ()GETDATE:

CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
OrderDate date DEFAULT GETDATE()
)

محدودیت DEFAULT در دستور ALTER TABLE

 

Wiki

برای ایجاد محدودیت DEFAULT روی ستون City هنگامی که جدول، قبلا ایجاد شده از دستور زیر استفاده می کنیم.

درMySQL:

ALTER TABLE Persons
ALTER City SET DEFAULT 'SANDNES'

درSQL Server / Oracle / MS Access:

ALTER TABLE Persons
ALTER COLUMN City SET DEFAULT 'SANDNES'

حذف محدودیت DEFAULT

 

Wiki

برای حذف محدودیت DEFAULT از دستور زیر استفاده می کنیم.

درMySQL:

ALTER TABLE Persons
ALTER City DROP DEFAULT

درSQL Server / Oracle / MS Access:

ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT

 

لِکُلِّ شَیْ‏ءٍ زَکَاةٌ وَ زَکَاةُ الْعَقْلِ احْتِمَالُ الْجُهَّال‏

برای هر چیزی زکاتیست و زکات عقل تحمّل نادانان است.

دوشنبه 10 آذر 1393  10:03 PM
تشکرات از این پست
parisaexp
parisaexp
کاربر نقره ای
تاریخ عضویت : مهر 1392 
تعداد پست ها : 888
محل سکونت : اصفهان

پاسخ به:آموزش SQL

آموزش SQL-دستور Create Index

دستور CREATE INDEX برای ایجاد INDEX (شاخص) در جداول استفاده می شود.

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


INDEX

 

Wiki

یک شاخص می تواند در یک جدول برای پیدا کردن آسانتر و مؤثرتر داده ها ایجاد شود.

کاربران نمی توانند INDEXها را ببینند ، آنها تنها برای سریعتر کردن جستجوها کاربرد دارند.

توجه: به روز رسانی (Update) یک جدول با INDEX زمان بیشتری نسبت به جدول بدون INDEX می برد. (زیرا INDEXها خود نیاز به، به روز رسانی دارند) بنابراین تنها روی ستونهایی (و جداولی) INDEX ایجاد کنید که به تناوب روی آن ها جستجو انجام خواهد شد.

فرم دستور CREATE INDEX:

ایجاد یک شاخص در یک جدول، تکرار داده ها مجاز است.

CREATE INDEX index_name
ON table_name (column_name)

فرم دستور CREATE UNIQUE INDEX:

ایجاد شاخص یکتا در جدول، تکرار داده ها مجاز نمی باشد.

CREATE UNIQUE INDEX index_name
ON table_name (column_name)

توجه: فرم دستور ایجاد INDEX در پایگاه داده های مختلف با یکدیگر تفاوت دارد . بنابراین فرم این دستور را در پایگاه داده خود چک کنید.


مثال:

 

Wiki

دستور زیر یک شاخص با نام PIndex را روی ستون LastName در جدول Persons ایجاد می کند.

CREATE INDEX PIndex
ON Persons (LastName)

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

CREATE INDEX PIndex
ON Persons (LastName, FirstName)

 

لِکُلِّ شَیْ‏ءٍ زَکَاةٌ وَ زَکَاةُ الْعَقْلِ احْتِمَالُ الْجُهَّال‏

برای هر چیزی زکاتیست و زکات عقل تحمّل نادانان است.

دوشنبه 10 آذر 1393  10:04 PM
تشکرات از این پست
parisaexp
parisaexp
کاربر نقره ای
تاریخ عضویت : مهر 1392 
تعداد پست ها : 888
محل سکونت : اصفهان

پاسخ به:آموزش SQL

آموزش SQL-دستور Drop

شاخص ها، جداول و پایگاه داده ها به آسانی می توانند با دستور DROP حذف شوند.


دستور  DROP INDEX

 

Wiki

دستور DROP INDEX برای حذف index از یک جدول استفاده می شود.

فرم دستور DROP INDEX در MS Access:

DROP INDEX index_name ON table_name

فرم دستور DROP INDEX در MS SQL Server:

DROP INDEX table_name.index_name

فرم دستور DROP INDEX در DB2/Oracle:

DROP INDEX index_name

 فرم دستور DROP INDEX در MySQL:

ALTER TABLE table_name DROP INDEX index_name

دستور DROP TABLE

 

Wiki

دستور DROP TABLE برای حذف یک جدول استفاده می شود.

DROP TABLE table_name

دستور DROP DATABASE

 

Wiki

دستور  DROP DATABASE برای حذف یک پایگاه داده استفاده می شود.

DROP DATABASE database_name

دستور TRUNCATE TABLE

 

Wiki

فرض کنید می خواهیم داده های درون یک جدول را (نه خود جدول را) حذف کنیم.

در این صورت، از دستور TRUNCATE TABLE استفاده می کنیم:

TRUNCATE TABLE table_name

 

لِکُلِّ شَیْ‏ءٍ زَکَاةٌ وَ زَکَاةُ الْعَقْلِ احْتِمَالُ الْجُهَّال‏

برای هر چیزی زکاتیست و زکات عقل تحمّل نادانان است.

دوشنبه 10 آذر 1393  10:05 PM
تشکرات از این پست
parisaexp
parisaexp
کاربر نقره ای
تاریخ عضویت : مهر 1392 
تعداد پست ها : 888
محل سکونت : اصفهان

پاسخ به:آموزش SQL

آموزش SQL-دستور Alter

دستور ALTER TABLE :

 

Wiki

دستور ALTER TABLE برای اضافه کردن(Add) ، حذف کردن(Drop Column)، یا تغییر ستون ها (Alter Column)در جدول موجود استفاده می شود.

فرم دستور ALTER TABLE :

برای اضافه کردن یک ستون به یک جدول ، از دستور زیر استفاده می کنیم :

ALTER TABLE table_name
ADD column_name datatype

برای حذف کردن یک ستون از یک جدول از دستور زیر استفاده می کنیم ( توجه داشته باشید که بعضی از پایگاه داده ها اجازه پاک کردن ستون را نمی دهند )

ALTER TABLE table_name
DROP COLUMN column_name

برای تغییر data type (نوع داده ) یک ستون در یک جدول ، از دستور زیر استفاده می کنیم :

ALTER TABLE table_name
ALTER COLUMN column_name datatype

مثال :

 

Wiki

در جدول Persons:

P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger

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

از دستور زیر استفاده می کنیم:

ALTER TABLE Persons
ADD DateOfBirth date

توجه کنید که ستون جدید DateOfBirth از نوع date می باشد و تاریخ را در خود نگه می دارد.

data type تعیین می کند که چه نوع داده ای را در یک ستون می توان وارد کرد. برای اینکه لیست کاملی از data type های موجود در MS Access, MySQL, SQL Server را ببینید به لینک SQL Data Types مراجعه کنید.

حال جدول Persons به شکل زیر نمایش داده خواهد شد :

P_Id LastName FirstName Address City DateOfBirth
1 Hansen Ola Timoteivn 10 Sandnes  
2 Svendson Tove Borgvn 23 Sandnes  
3 Pettersen Kari Storgt 20 Stavanger  

مثال( تغییر Data Type) :

 

Wiki

می خواهیم data type  ستون DateOfBirth در جدول Persons را تغییر دهیم.

از دستور زیر استفاده می کنیم:

ALTER TABLE Persons
ALTER COLUMN DateOfBirth year

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


مثال DROP COLUMN :

 

Wiki

می خواهیم تا ستون DateOfBirth را از جدول Persons حذف کنیم.

از دستور زیر استفاده می کنیم:

ALTER TABLE Persons
DROP COLUMN DateOfBirth

جدول Persons به شکل زیر خواهد شد:

P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stava

 

لِکُلِّ شَیْ‏ءٍ زَکَاةٌ وَ زَکَاةُ الْعَقْلِ احْتِمَالُ الْجُهَّال‏

برای هر چیزی زکاتیست و زکات عقل تحمّل نادانان است.

دوشنبه 10 آذر 1393  10:05 PM
تشکرات از این پست
parisaexp
parisaexp
کاربر نقره ای
تاریخ عضویت : مهر 1392 
تعداد پست ها : 888
محل سکونت : اصفهان

پاسخ به:آموزش SQL

آموزش SQL-افزایش خودکار فیلد

Auto-increment یا افزایش خودکار، اجازه می دهد که یک شماره منحصر به فرد، برای سطر جدیدی که درجدول وارد می شود، تولید شود.


AUTO INCREMENT (افزایش خودکار یک فیلد)

 

Wiki

خیلی اوقات می خواهیم زمانی که رکورد جدیدی وارد می شود، مقدار فیلد primary key (کلید اصلی) به طور خودکار ایجاد شود.

در این صورت از فیلد auto-increment در جدول استفاده می کنیم.


فرم دستور در MySQL

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

CREATE TABLE Persons
(
P_Id int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
)

MySQL از کلید واژه AUTO_INCREMENT برای اعمال حالت افزایش خودکار استفاده می کند.

به طور پیش فرض، مقدار شروع برای AUTO_INCREMENT عدد یک می باشد و مقدار آن برای رکورد جدید، یک عدد افزایش می یابد.

برای اینکه مقدار شروع AUTO_INCREMENT را مقداری غیر از یک تعیین کنیم از دستور زیر استفاده می کنیم:

ALTER TABLE Persons AUTO_INCREMENT=100

برای وارد کردن یک رکورد جدید در جدول Persons دیگر نباید مقداری برای ستون P_Id تعیین کنیم (مقداری منحصر به فرد، به صورت خودکار در این فیلد وارد می شود)

INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars','Monsen')

دستور بالا سطر جدیدی را در جدول Persons وارد می کند. برای ستون P_Id یک مقدار منحصر به فرد تعیین می شود. در ستون FirstName مقدار Lars و در ستون LastName مقدار Monsen می آید.


فرم دستور در SQL Server

 

Wiki

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

CREATE TABLE Persons
(
P_Id int PRIMARY KEY IDENTITY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

MS SQL Server از کلید واژه IDENTITY برای اعمال حالت افزایش خودکار استفاده می کند.

به طور پیش فرض، مقدار شروع برای IDENTITY عدد یک می باشد و مقدار آن برای رکورد جدید، یک عدد افزایش می یابد.

برای اینکه تعیین کنیم که ستون P_Id با مقدار 10 شروع شود و 5 تا 5 تا افزایش یابد IDENTITY به ( IDENTITY(10,5 تغییر می یابد.

برای اینکه سطر جدیدی را در جدول Persons وارد کنیم، دیگر نیازی نیست مقداری برای ستون P_Id وارد کنیم. (مقداری منحصر به فرد، به طور خودکار در این ستون وارد می شود)

INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars','Monsen')

دستور بالا سطر جدیدی را در جدول Persons وارد می کند. به ستون P_Id یک مقدار منحصر به فرد داده می شود. در ستون FirstName مقدار Lars و در ستون LastName مقدار Monsen می آید.


فرم دستور در Access 

 

Wiki

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

CREATE TABLE Persons
(
P_Id PRIMARY KEY AUTOINCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

MS Access از کلید واژه AUTOINCREMENT برای اعمال حالت افزایش خودکار استفاده می کند.

به طور پیش فرض، مقدار شروع برای AUTOINCREMENT عدد یک می باشد و مقدار آن برای رکورد جدید، یک عدد افزایش می یابد.

برای اینکه تعیین کنیم که ستون P_Id با مقدار 10 شروع شود و 5 تا 5 تا افزایش یابد AUTOINCREMENT به ( AUTOINCREMENT(10,5 تغییر می یابد.

برای اینکه سطر جدیدی را در جدول Persons وارد کنیم، دیگر نیازی نیست مقداری برای ستون P_Id وارد کنیم. (مقدار منحصر به فردی به طور خودکار در این ستون وارد می شود)

INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars','Monsen')

دستور بالا سطر جدیدی را در جدول Persons وارد می کند. به ستون P_Id یک مقدار منحصر به فرد داده می شود. در ستون FirstName مقدار Lars و در ستون LastName مقدار Monsen می آید.


فرم دستور در Oracle

 

Wiki

در Oracle کار کمی پیچیده تر است.

 شما باید فیلد auto-increment را با یک شیء sequence ایجاد کنید. (این شیء، یک توالی از اعداد را تولید می کند)

برای تولید اعداد متوالی، از دستور CREATE SEQUENCE که در زیر آمده استفاده کنید. 

CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10

دستور بالا یک شی sequence با نام seq_person ایجاد می کند، که با عدد یک شروع و یک عدد یک عدد افزایش می یابد. همچنین برای کارآیی و سرعت دسترسی بیشتر تا 10 مقدار در حافظه نگهداشته می شود (Cache).

برای درج یک رکورد جدید در جدوف "Persons"، باید از تابع nextval استفاده کنیم. (این تابع، مقدار بعدی sequence تعریف شده در بالا را برمی گرداند)

INSERT INTO Persons (P_Id,FirstName,LastName)
VALUES (seq_person.nextval,'Lars','Monsen')

دستور بالا سطر جدیدی را در جدول Persons وارد می کند. به ستون P_Id یک مقدار منحصر به فرد داده می شود. در ستون FirstName مقدار Lars و در ستون LastName مقدار Monsen می آید.

لِکُلِّ شَیْ‏ءٍ زَکَاةٌ وَ زَکَاةُ الْعَقْلِ احْتِمَالُ الْجُهَّال‏

برای هر چیزی زکاتیست و زکات عقل تحمّل نادانان است.

دوشنبه 10 آذر 1393  10:06 PM
تشکرات از این پست
parisaexp
parisaexp
کاربر نقره ای
تاریخ عضویت : مهر 1392 
تعداد پست ها : 888
محل سکونت : اصفهان

پاسخ به:آموزش SQL

آموزش SQL-دیدگاه یا View

View یک جدول مجازی است.

این فصل نشان می دهد که چگونه یک View را ایجاد، حذف و یا تغییر دهیم.


دستور CREATE VIEW

 

Wiki

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

یک view شامل سطر و ستونهایی دقیقا شبیه یک جدول واقعی است. فیلدها در یک View فیلدهایی هستند که از یک یا چند جدول واقعی در پایگاه داده گرفته شده اند.

شما می توانید توابع موجود در SQL، عبارت WHERE و JOIN را به یک View اضافه کنید و داده های نتیجه را به همان صورت که داده ها در یک جدول آورده می شوند، نشان دهید.

فرم CREATE VIEW:

CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition

توجه: یک View همیشه داده های به روز شده (up-to-date) را نشان می دهد! موتور یک پایگاه داده، داده های یک View را هر زمانی که View فرا خوانی می شود ، به روز می کند.


مثال:

 

Wiki

اگر پایگاه داده Northwind را دارید شما می توانید چندین view را که به طور پیش فرض روی آن نصب شده است را ببینید.

View با نام Current Product List، لیست محصولات جاری (محصولاتی که تولید آنها متوقف نشده است) را از جدول Products نشان می دهد. این view توسط دستور زیر ایجاد می شود.

CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName
FROM Products
WHERE Discontinued=No

می توانیم View فوق را به صورت زیر فراخوانی کنیم:

SELECT * FROM [Current Product List]

مثال دیگری از View در پایگاه داده Northwind، تمام محصولاتی را که در جدول Products قیمت واحدشان بزرگتر از میانگین قیمت هاست را بر می گرداند:

CREATE VIEW [Products Above Average Price] AS
SELECT ProductName,UnitPrice
FROM Products
WHERE UnitPrice>(SELECT AVG(UnitPrice) FROM Products)

می توانیم view فوق را به صورت زیر فراخوانی کنیم:

SELECT * FROM [Products Above Average Price]

مثال دیگری از View در پایگاه داده Northwind، کل فروش را برای هر طبقه از محصولات در سال 1997 محاسبه می کند. توجه کنید که این view داده هایش را از view ی دیگری که Product Sales for 1997 نامیده می شود می گیرد.

CREATE VIEW [Category Sales For 1997] AS
SELECT DISTINCT CategoryName,Sum(ProductSales) AS CategorySales
FROM [Product Sales for 1997]
GROUP BY CategoryName

می توانیم view فوق را به صورت زیر اجرا کنیم:

SELECT * FROM [Category Sales For 1997]

همچنین می توان یک شرط روی Query فوق تعریف کرد. می خواهیم فروش کل محصولاتی که در گروه Beverages هستند را ببینیم.

SELECT * FROM [Category Sales For 1997]
WHERE CategoryName='Beverages'

تغییر (به روز رسانی) یک View

 

Wiki

می توانیم یک View را به وسیله دستور زیر به روز رسانی کنیم:

فرم دستور CREATE OR REPLACE VIEW:

CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition

می خواهیم ستون Category را به Current Product List اضافه کنیم. به وسیله دستور زیر view را تغییر می دهیم:

CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName,Category
FROM Products
WHERE Discontinued=No

حذف یک View

 

Wiki

می توانید یک view را به وسیله فرمان DROP VIEW حذف کنیم.

فرم DROP VIEW:

DROP VIEW view_name

 

لِکُلِّ شَیْ‏ءٍ زَکَاةٌ وَ زَکَاةُ الْعَقْلِ احْتِمَالُ الْجُهَّال‏

برای هر چیزی زکاتیست و زکات عقل تحمّل نادانان است.

دوشنبه 10 آذر 1393  10:07 PM
تشکرات از این پست
parisaexp
parisaexp
کاربر نقره ای
تاریخ عضویت : مهر 1392 
تعداد پست ها : 888
محل سکونت : اصفهان

پاسخ به:آموزش SQL

آموزش SQL-تاریخ ها در SQL

تاریخ در SQL

 

Wiki

سخت ترین قسمت کار با Date این است که مطمئن شویم فرمت تاریخی که شما سعی می کنید وارد کنید با فرمت ستون تاریخ در پایگاه داده هم خوانی داشته باشد.

تا زمانی که داده فقط شامل تاریخ باشد، Query شما همان طور که انتظار دارید کار خواهد کرد. اما اگر با بخش زمان درگیر شوید، کار کمی پیچیده خواهد شد.

قبل از صحبت درباره پیچیدگی های کار با تاریخ، توابع مهم آن را با هم مرور می کنیم:


توابع تاریخ در MySQL

 

Wiki

جدول زیر، لیستی از مهم ترین توابع تاریخ در MySQL است:

تابع توضیحات
NOW() تاریخ و زمان جاری را برمی گرداند
CURDATE() تاریخ جاری را برمی گرداند
CURTIME() زمان جاری را برمی گرداند
DATE() بخش تاریخ را از یک عبارت date/time بیرون می کشد
EXTRACT() یکی از بخش های عبارت date/time مانند سال، ماه، روز، ساعت و ... را برمی گرداند
DATE_ADD() یک فاصله زمانی مشخص را به تاریخ  اضافه می کند
DATE_SUB() یک فاصله زمانی مشخص را از تاریخ کم می کند
DATEDIFF() تعداد روز بین دو تاریخ را برمی گرداند
DATE_FORMAT() نمایش تاریخ و زمان در فرمت های مختلف

توابع تاریخ در SQL Server

 

Wiki

جدول زیر، لیستی از مهم ترین توابع تاریخ در SQL Server است:

تابع توضیحات
GETDATE() تاریخ و زمان جاری را برمی گرداند
DATEPART() یکی از بخش های عبارت date/time مانند سال، ماه، روز، ساعت و ... را برمی گرداند
DATEADD() یک فاصله زمانی مشخص را به تاریخ اضافه یا کم می کند
DATEDIFF() زمان بین دو تاریخ را برمی گرداند
CONVERT() نمایش تاریخ و زمان در فرمت های مختلف

انواع داده های تاریخ در SQL

 

Wiki

MySQL:

  • DATE - format YYYY-MM-DD
  • DATETIME - format: YYYY-MM-DD HH:MM:SS
  • TIMESTAMP - format: YYYY-MM-DD HH:MM:SS
  • YEAR - format YYYY or YY

SQL Server:

  • DATE - format YYYY-MM-DD
  • DATETIME - format: YYYY-MM-DD HH:MM:SS
  • SMALLDATETIME - format: YYYY-MM-DD HH:MM:SS
  • TIMESTAMP - format: a unique number

توجه: زمانی که یک جدول جدید تعریف می کنید باید برای هر ستون، Data Type آنرا مشخص کنید.

اگر مایل هستید کلیه ی انواع داده را مرور کنید به مطلب SQL Data Types مراجعه نمایید.


کار با تاریخ در SQL

 

Wiki

توجه: اگر خودتان را با بخش زمان درگیر نکنید، براحتی می توانید دو تاریخ مختلف را با هم مقایسه کنید!

فرض کنید جدول "Orders" را داریم:

OrderId ProductName OrderDate
1 Geitost 2008-11-11
2 Camembert Pierrot 2008-11-09
3 Mozzarella di Giovanni 2008-11-11
4 Mascarpone Fabioli 2008-10-29

حالا می خواهیم رکوردهایی با تاریخ "2008-11-11" را انتخاب کنیم.

از Query زیر استفاده می کنیم:

SELECT * FROM Orders WHERE OrderDate='2008-11-11'

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

OrderId ProductName OrderDate
1 Geitost 2008-11-11
3 Mozzarella di Giovanni 2008-11-11

حالا، فرض کنید که جدول "Orders" شبیه زیر باشد. (بخش زمان به فیلد OrderDate اضافه شده است)

OrderId ProductName OrderDate
1 Geitost 2008-11-11 13:23:44
2 Camembert Pierrot 2008-11-09 15:45:21
3 Mozzarella di Giovanni 2008-11-11 11:12:01
4 Mascarpone Fabioli 2008-10-29 14:56:59

اگر از Query بالا استفاده کنیم نتیجه ای نخواهیم داشت، بنابراین اگر می خواهید Queryی ساده ای داشته باشید، اجازه ندهید بخش زمان در تاریخ وارد شود.

توجه: در SQL Server با استفاده از تابع ()substring می توان قسمت تاریخ را بیرون کشید و سپس مقایسه کرد.

SELECT * FROM Orders WHERE substring(OrderDate,1,10)='2008-11-11'

 

لِکُلِّ شَیْ‏ءٍ زَکَاةٌ وَ زَکَاةُ الْعَقْلِ احْتِمَالُ الْجُهَّال‏

برای هر چیزی زکاتیست و زکات عقل تحمّل نادانان است.

دوشنبه 10 آذر 1393  10:08 PM
تشکرات از این پست
parisaexp
parisaexp
کاربر نقره ای
تاریخ عضویت : مهر 1392 
تعداد پست ها : 888
محل سکونت : اصفهان

پاسخ به:آموزش SQL

آموزش SQL-عبارت IS Null

مقدار NULL بیانگر داده ای است که مشخص نشده و فیلدی خالی است.

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

در این فصل می خواهیم، عملگرهای IS NULL  و IS NOT NULL را توضیح دهیم.


مقدار NULL

 

Wiki

اگر وارد کردن مقدار در ستونی در یک جدول، اختیاری باشد، می توانیم در رکورد جدید یا رکورد موجود بدون اضافه کردن مقداری در این ستون، مقدار NULL را در این فیلد داشته باشیم.

با مقدار NULL نسبت به مقادیر دیگر، رفتار متفاوتی می شود.

در فیلدهای نامشخص یا نامعلوم که مقداری وارد نمی شود، مقدار NULL وجود دارد.

توجه: NULL و صفر را نمی توان با هم یکی دانست، این دو معادل یکدیگر نیستند.


کار با NULL

 

Wiki

به جدول Persons در زیر نگاه کنید:

P_Id LastName FirstName Address City
1 Hansen Ola   Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari   Stavanger

فرض کنید که وارد کردن مقدار در ستون Address اختیاری باشد. این بدان معناست که اگر رکوردی را بدون وارد کردن مقداری در ستون Address درج کنیم، ستون Address با مقدار NULL ذخیره می شود.

چگونه می توانیم تست کنیم فیلدی مقدار NULL دارد؟

با عملگر های مقایسه ای مثل (=, <, >) نمی توان مقدار NULL را تست کرد.

بلکه باید از عملگرهای IS NULL و IS NOT NULL استفاده کنیم.


IS NULL

 

Wiki

چگونه می توان رکوردهایی را که در ستون Address مقدار NULL دارند را انتخاب کرد؟

باید از عملگر IS NULL برای این کار استفاده کرد:

SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NULL

نتیجه چنین خواهد بود:

LastName FirstName Address
Hansen Ola  
Pettersen Kari  

نکته: همیشه از IS NULL برای مشاهده فیلدهای حاوی مقدار NULL استفاده کنید.


IS NOT NULL

 

Wiki

چگونه رکوردهایی را که مقدارشان NULL نیست را از ستون Address انتخاب کنیم؟

باید از عملگر IS NOT NULL استفاده کنیم:

SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NOT NULL

نتیجه چنین خواهد شد:

LastName FirstName Address
Svendson Tove Borgvn 23

در فصل بعد به توابع () ISNULL() ,NVL() ,IFNULL() ,COALESCE نظری خواهیم داشت.

لِکُلِّ شَیْ‏ءٍ زَکَاةٌ وَ زَکَاةُ الْعَقْلِ احْتِمَالُ الْجُهَّال‏

برای هر چیزی زکاتیست و زکات عقل تحمّل نادانان است.

دوشنبه 10 آذر 1393  10:09 PM
تشکرات از این پست
parisaexp
parisaexp
کاربر نقره ای
تاریخ عضویت : مهر 1392 
تعداد پست ها : 888
محل سکونت : اصفهان

پاسخ به:آموزش SQL

آموزش SQL-تابع IsNull

توابع ISNULL و NVL و IFNULL و COALESCE  

 

Wiki

به جدول Products در زیر توجه فرمایید:

P_Id ProductName UnitPrice UnitsInStock UnitsOnOrder
1 Jarlsberg 10.45 16 15
2 Mascarpone 32.56 23  
3 Gorgonzola 15.67 9 20

فرض کنید که وارد کردن مقدار ستون UnitsOnOrder اختیاری باشد و ممکن است حاوی مقدار NULL باشد.

دستور SELECT زیر را داریم:

SELECT ProductName,UnitPrice*(UnitsInStock+UnitsOnOrder)
FROM Products

در مثال فوق، اگر هر یک از مقادیر ستون UnitsOnOrder حاوی NULL باشند نتیجه آن NULL خواهد بود.

از تابع ISNULL استفاده می شود تا مشخص کنیم چگونه می خواهیم با مقدار NULL رفتار کنیم.

توابع NVL و IFNULL و COALESCE نیز می توانند برای رسیدن به نتیجه ای مشابه استفاده شوند.

در این مورد می خواهیم تا مقدار NULL صفر در نظر گرفته شود.

در زیر، اگر UnitsOnOrder مقدار NULL داشت، دیگر مشکلی برای محاسبه وجود ندارد، زیرا تابع ISNULL آن را به صفر بر می گرداند.

SQL Server / MS Access

SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
FROM Products

Oracle

در Oracle تابع ISNULL وجود ندارد. اما می توانیم از تابع NVL برای رسیدن به نتیجه ای مشابه استفاده کنیم:

SELECT ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0))
FROM Products

MySQL

در MySQL تابع ISNULL وجود دارد. اما عملکرد آن کمی با تابع ISNULL در ماکروسافت (ACCESS,SQL SERVER) متفاوت است.

در MySQL از تابع IFNULL برای این امر استفاده می کنیم:

SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products

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

SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products

 

لِکُلِّ شَیْ‏ءٍ زَکَاةٌ وَ زَکَاةُ الْعَقْلِ احْتِمَالُ الْجُهَّال‏

برای هر چیزی زکاتیست و زکات عقل تحمّل نادانان است.

دوشنبه 10 آذر 1393  10:10 PM
تشکرات از این پست
parisaexp
parisaexp
کاربر نقره ای
تاریخ عضویت : مهر 1392 
تعداد پست ها : 888
محل سکونت : اصفهان

پاسخ به:آموزش SQL

آموزش SQL-انواع داده

انواع داده ها (Data type) و دامنه آن ها در Microsoft Access ,MySQL و SQL Server


انواع داده ها در Microsoft Access

 

Wiki

نوع داده توضیحات فضا
Text

متن یا ترکیب متن و اعداد، حداکثر 255 کاراکتر

 
Memo

متن های طولانی، حدکثر 65,536 کاراکتر

توجه: فیلدهای از نوع Memo را نمی توان مرتب (sort) کرد، اما قابل جستجو هستند

 
Byte

اجازه می دهد هرعددی از 0 تا 255 را وارد کرد

1 byte
Integer

اجازه می دهد هرعددی بین 32767 تا 32768- وارد شود

2 bytes
Long

اجازه می دهد هرعددی بین 2,147,483,647 تا 2,147,483,648- وارد شود

4 bytes
Single

اعداد اعشاری با دقت واحد 

4 bytes
Double

اعداد اعشاری با دقت مضاعف

8 bytes
Currency

از این نوع داده ها برای نگهداری مقادیر پولی یا ارزی استفاده می شود. اکسس تمامی مقادیر پولی/ارزی را با ۱۵ رقم در سمت چپ و چهار رقم در سمت راست نقطه اعشار نگه می دارد, لذا می توانید اعداد با دقت بالا را در فیلدهای پولی نگه دارید
توجه: می توانید کشوری که ارز مورد نظرتان در آن استفاده می شود را انتخاب نمایید

8 bytes
AutoNumber

وقتی که فیلدی را را از نوع داده Auto number تعریف می کنید، با هر رکوردی که به جدول اضافه شود اکسس به طور خودکار عددی را در این فیلد نگه می دارد

4 bytes
Date/Time

برای نگهداری داده های از نوع تاریخ و زمان استفاده می شود

8 bytes
Yes/No

فیلدی که از نوع Yes/No تعریف می شود به ازای Yes عدد ۱- و به ازای No عدد ۰ را دارا می شود. با استفاده از بخش Filed Properties در پنجره مذکور می توانید بسته به دلیل استفاده از فیلد, یکی از سه حالت Yes/No, True/False (درست یا غلط) یا On/Off (روشن و خاموش) را به کار ببرید.
توجه: مقدار NULL را نمی پذیرد

1 bit
Ole Object

OLE مخفف Object Linking and Embedding (اتصال و نشاندن شی) است. 
فیلدهای OLE برای نگه داری اشیایی از قبیل عکس, تصاویر ویدیوئی و صدا مناسب است.

up to 1GB
Hyperlink

شامل لینک هایی به دیگر فایل ها یا صفحات وب است

 
Lookup Wizard

هنگام تعریف این نوع داده، یک لیست از گزینه های انتخابی را مشخص می کنید و هنگام ورود اطلاعات یک لیست کشویی نمایش داده خواهد شد

4 bytes

انواع داده ها در MySQL

 

Wiki

در MySQL سه نوع اصلی داده وجود دارد: نوع متنی، نوع عددی و نوع تارخ/زمان

داده های متنی

نوع داده توضیحات
CHAR(size)

رشته ای با طول ثابت (می تواند شامل حروف، اعداد و کاراکترهای خاص باشد)
طول رشته در پرانتر مشخص می شود و حداکثر 255 کاراکتر است

VARCHAR(size)

رشته ای با طول متغییر (می تواند شامل حروف، اعداد و کاراکترهای خاص باشد)

حداکثر طول رشته در پرانتز مشخص می شود و حداکثر 255 کاراکتر است

توجه: اگر رشته ای با طول بیش از 255 کاراکتر را در آن قرار دهید، به نوع TEXT تبدیل خواهد شد

TINYTEXT

رشته ای با طول حداکثر 255 کاراکتر

TEXT

رشته ای با طول حداکثر 65,535 کاراکتر

BLOB

داده باینتری با طول حداکثر 65,535 بایت (Binary Large OBject)

MEDIUMTEXT

رشته ای با طول حداکثر 16,777,215 کاراکتر

MEDIUMBLOB

داده باینتری با طول حداکثر 16,777,215 بایت (Binary Large OBject)

LONGTEXT

رشته ای با طول حداکثر 4,294,967,295 کاراکتر

LONGBLOB

داده باینتری با طول حداکثر 4,294,967,295 بایت (Binary Large OBject)

ENUM(x,y,z,etc.)

فقط یکی از مقادیری که در پرانتز لیست شده است، اجازه ورود دارد. می توانید حداکثر 65535 کاراکتر در ENUM لیست کنید

اگر مقداری که در لیست وجود ندارد، درج شود، یک blank یا فضای خالی بجای آن در نظر گرفته می شود
توجه: مقادیر به ترتیبی که شما وارد کرده اید، مرتب می شوند

SET

مانند ENUM است با این تفاوت که، حداکثر 64 آیتم می توانید لیست کنید و همچنین بیشتر از یک انتخاب دارید

داده های عددی

نوع داده توضیحات فضا
TINYINT(size)

محدوده اعداد مجاز به صورت علامت دار: 128- تا 127
محدوده اعداد مجاز به صورت بدون علامت: 0 تا 255

1 byte

SMALLINT(size)

محدوده اعداد مجاز به صورت علامت دار: 32768- تا 32767
محدوده اعداد مجاز به صورت بدون علامت: 0 تا 65535

2 byte

MEDIUMINT(size)

محدوده اعداد مجاز به صورت علامت دار: 8388608- تا 8388607
محدوده اعداد مجاز به صورت بدون علامت: 0 تا 16777215

3 byte

INT(size)

محدوده اعداد مجاز به صورت علامت دار: 2147483648- تا 2147483647
محدوده اعداد مجاز به صورت بدون علامت: 0 تا 4294967295

4 byte

BIGINT(size)

محدوده اعداد مجاز به صورت علامت دار: 9223372036854775808- تا 9223372036854775807
محدوده اعداد مجاز به صورت بدون علامت: 0 تا 18446744073709551615

8 byte 

FLOAT(size,d)

از این دو نوع داده برای ذخیره اعداد اعشاری با ممیز شناور استفاده می شود
پارامتر size حداکثر تعداد ارقام و پارمتر d حداکثر تعداد ارقام سمت راست ممیز اعشار را مشخص می کند
پارامتر size نشان دهنده 4 byteی یا 8 byteی بودن فیلد است. اگر بین ا تا 24 باشد، 4 byteی است و اگر بین 25 تا 53 باشد، 8 byteی است

4 یا 8 byte
DOUBLE(size,d)

از این دو نوع داده برای ذخیره اعداد اعشاری با ممیز شناور استفاده می شود

پارامتر size حداکثر تعداد ارقام و پارمتر d حداکثر تعداد ارقام سمت راست ممیز اعشار را مشخص می کند

8 byte

DECIMAL(size,d)

از این نوع داده برای نگهداری اعداد اعشاری با ممیز ثابت استفاده می شود. این نوع داده برای هر ۹ رقم ، ۴ بایت فضا اشغال می کند
پارامتر size حداکثر تعداد ارقام و پارمتر d حداکثر تعداد ارقام سمت راست ممیز اعشار را مشخص می کند

 

- اگر هنگام تعریف فیلد از کلمه کلیدی UNSIGNED استفاده کنیم میتوانیم مقادیر بدون علامت را درون فیلد بریزیم، ولی بطور پشفرض فیلد ها مقادیر علامت دار (SIGNED) را می پذیرند.

- میتوان تعداد ارقامی که به نوع دادهٔ Integer نسبت داده می شود را محدود نمود، به عنوان مثال: (INT(5 یعنی فیلدی از جنس INT  که 5 رقم را در خود جای می دهد.

- وقتی از کلمه کلیدی ZEROFILL استفاده می کنیم، اگر مقدار نسبت داده شده به فیلد از تعداد ارقام مشخص شده کمتر باشد، با اضافه کردن 0 به سمت چپ عدد، آن مقدار را هم اندازه تعداد ارقام مشخص شده می کند.

داده های تاریخ/زمان

نوع داده توضیحات فضا
DATE()

این نوع داده برای نگهداری تاریخ (بدون ساعت)، با غالب 'YYYY-MM-DD' استفاده می شود
توجه:  محدوده تاریخی بصورت '01-01-1000' تا '31-12-9999' می باشد

3 byte

DATETIME()

این نوع داده برای نگهداری زمان (هم تاریخ و هم ساعت بصورت تفکیک شده و بدون توجه به منطقه زمانی)، با غالب 'YYYY-MM-DD HH:MM:SS' استفاده می شود
توجه: محدوده زمانی بصورت '00:00:00 01-01-1000' تا '23:59:59 31-12-9999' می باشد.

8 byte

TIMESTAMP()

هر زمان سطری ایجاد یا تغییر داده می شود، یک عدد یکتا بصورت اتوکاتیک در این فیلد ذخیره می شود. داده timestamp وابسته به ساعت داخلی سیستم می باشد و با زمان واقعی مطابقت ندارد. هر جدولی ممکن است یک timestamp متفاوت داشته باشد.

به عبارت دیگر در این فیلد ۸ بایتی، تایم لحظه‌ای اجرای دستور نگهداری می‌شود و کاربرد آن کنترل بروزرسانی همزمان (Concurrency) اطلاعات توسط چند کاربر است. البته در تعداد رکوردهای پایین به کار نمی‌آید و بیشتر زمانی مورد نیاز است که تعداد رکوردها خیلی زیاد باشد مثلاً ۱۰۰ میلیون رکورد!

توجه: محدوده زمانی بصورت  '00:00:00 01-01-1000' UTC  تا '23:59:59 31-12-9999' UTC می باشد. یعنی هنگام ذخیره سازی زمان ، آن را از زمان محلی (Time Zone) سیستم به زمان UTC (گیرینویچ) تبدیل می کند و هنگام بازیابی ، آنرا از UTC به زمان محلی سیستم تبدیل می کند.

4 byte

TIME()

این نوع داده برای نگهداری زمان (فقط ساعت ، بدون تاریخ)، با غالب 'HH:MM:SS' یا 'HHH:MM:SS' استفاده می شود
توجه: محدوده ساعتی بصورت '838:59:59-' تا '838:59:59' می باشد. علت پذیرش مقدار منفی در این نوع داده این است که می توان از این نوع داده برای ذخیره اختلاف دو زمان استفاده کرد

3 byte

YEAR()

ذخیره سال به فرمت: دو رقمی یا چهار رقمی
توجه: مقادیر چهار رقمی: از 1901 تا 2155 و مقادیر دو رقمی: از 70 تا 69 که نماینده 1970 و 2069 است

1 byte


انواع داده ها در SQL Server

 

Wiki

داده های متنی

نوع داده توضیحات فضا
char(n)

رشته ای با طول ثابت، حداکثر 8000 کاراکتر
مصرف فضای ابن نوع وابسته به تعداد کاراکترهای آن است هر کاراکتر یک بایت اشغال می کند

n می تواند عددی بین 1 تا 8000 باشد

توجه: اگر 5=n باشد و 2 کاراکتر وارد کنید، 3 کاراکتر باقی مانده با Space پر می شود

مزیت این نوع داده در جستجوی سریع آن است

n
varchar(n)

رشته ای با طول متغییر، حداکثر 8000 کاراکتر
از این نوع داده زمانی استفاده می کنیم که میزان فضایی که داده ها اشغال می کنند بسیار متغیر باشد 

توجه: اگر 5=n باشد و 2 کاراکتر وارد کنید، فقط به اندازه 2 کاراکتر فضا اشغال می شود (3 کاراکتر باقی مانده در نظر گرفته نمی شود)

مزیت این نوع داده در میزان فضای استفاده شده است

 
varchar(max)

رشته ای با طول متغییر، حداکثر 1,073,741,824 کاراکتر

به جای n در مورد قبلی می توان از عبارت max استفاده کرد تا حداکثر فضای امکان پذیر در دسترس باشد

 
text

رشته کاراکتر با طول متغییر، حداکثر 2GB داده متنی 

 

داده های متنی Unicode

نوع داده توضیحات فضا
nchar(n)

داده Unicode با طول ثابت، حداکثر 4,000 کاراکتر

میزان مصرف این نوع داده دو بایت به ازای هر کاراکتر است. بخاطر این موضوع، n باید بین یک تا چهار هزار تعیین شود

 
nvarchar(n)

داده Unicode با طول متغیر، حداکثر 4,000 کاراکتر 

 
nvarchar(max)

داده Unicode با طول متغیر، حداکثر 536,870,912 کاراکتر 

 
ntext

داده Unicode با طول متغیر، حداکثر 2GB داده متنی

 

داده های Binary

نوع داده توضیحات فضا
bit

0، 1 یا NULL 

 
binary(n)

داده باینری با طول ثابت حداکثر 8000 بایت

 
varbinary(n)

داده باینری با طول متغیر حداکثر 8000 بایت

 
varbinary(max)

داده باینری با طول متغیر حداکثر 2GB

 
image

داده باینری با طول متغیر حداکثر 2GB

 

داده های عددی

نوع داده توضیحات فضا
tinyint

اعداد صحیح بین 0 تا 255

1 byte
smallint

اعداد صحیح بین 32,767 تا 32,768-

2 bytes
int

اعداد صحیح بین 2,147,483,647 تا 2,147,483,648 -
معادل از منفی 231 تا 231 منهای یک است

4 bytes
bigint

اعداد صحیح بین 9,223,372,036,854,775,807 تا 9,223,372,036,854,775,808-

که معادل از منفی 263 تا 263 منهای یک است

8 bytes
decimal(p,s)

اعداد با مقیاس (scale) و دقت (precision) ثابت
از منفی 1038 بعلاوه یک تا 1038 منهای یک
پارامتر p ماکزیمم تعداد ارقام یک عدد را نشان می دهد (شامل هم ارقامی که سمت راست علامت اعشار می آیند و هم ارقامی که سمت چپ علامت اعشار می آیند) پارامتر p باید مقداری بین صفر تا 38 باشد. مقدار پیش فرض 18 می باشد.
پارامتر s ماکزیمم تعداد ارقامی که سمت راست علامت اعشار می آید را نشان می دهد. پارامتر s باید عددی بین صفر تا p باشد. مقدار پیش فرض عدد صفر است

5-17 bytes
numeric(p,s)

اعداد با مقیاس (scale) و دقت (precision) ثابت
از منفی 1038 بعلاوه یک تا 1038 منهای یک
پارامتر p ماکزیمم تعداد ارقام یک عدد را نشان می دهد (شامل هم ارقامی که سمت راست علامت اعشار می آیند و هم ارقامی که سمت چپ علامت اعشار می آیند) پارامتر p باید مقداری بین صفر تا 38 باشد. مقدار پیش فرض 18 می باشد.
پارامتر s ماکزیمم تعداد ارقامی که سمت راست علامت اعشار می آید را نشان می دهد. پارامتر s باید عددی بین صفر تا p باشد. مقدار پیش فرض عدد صفر است

5-17 bytes
smallmoney

داده های ارزی بین 214,748.3648- تا 214,748.3647 

4 bytes
money

داده های ارزی بین 922,337,203,685,477.5808- تا 922,337,203,685,477.5807

8 bytes
float(n)

برای نگهداری اعداد غیر صحیح با تعداد ارقام اعشار متغیر و یا تخمـینـی استفاده می‌شود (from -1.79E + 308 to 1.79E + 308)
پارامتر n نشان دهنده 4 byteی یا 8 byteی بودن فیلد است. اگر بین ا تا 24 باشد فیلد، 4 byteی است و اگر بین 25 تا 53 باشد فیلد، 8 byteی است. مقدار پیش فرض عدد 53 است. 

4 یا 8 bytes
real

 برای نگهداری اعداد غیر صحیح با تعداد ارقام اعشار متغیر و یا تخمـینـی استفاده می‌شود (from -3.40E + 38 to 3.40E + 38)

4 bytes

داده های تاریخ و زمان

این نوع فیلد‌ها برای نگهداری تاریخ میلادی و ساعت استفاده می‌شود و برای تاریخ شمسی کاربردی ندارد.

نوع داده توضیحات فضا
datetime

از تاریخ اول January سال 1753 تا سی ویکم December سال 9999 با دقت 3.33 میلی ثانیه 

8 bytes
datetime2

از تاریخ اول January سال 0001 (01/01/0001) تا سی ویکم December سال 9999 (31/12/9999)  با دقت 100 نانو ثانیه 

6-8 bytes
smalldatetime

از تاریخ  اول January سال 1900 تا ششم June سال 2079 با دقت یک دقیقه 

4 bytes
date

فقط تاریخ را ذخیره می کند. از تاریخ  اول January سال 0001 (01/01/0001) تا سی ویکم December سال 9999(31/12/9999) 

3 bytes
time

فقط زمان را ذخیره می کند با دقت 100 نانو ثانیه 

3-5 bytes
datetimeoffset

مشابه datetime2 می باشد به علاوه timeoffset را ذخیره می کند

8-10 bytes
timestamp

هر زمان سطری ایجاد یا تغییر داده می شود، یک عدد یکتا ذخیره می شود. داده timestamp وابسته به ساعت داخلی سیستم می باشد و با زمان واقعی مطابقت ندارد. هر جدولی ممکن است یک timestamp متفاوت داشته باشد.

به عبارت دیگر در این فیلد ۸ بایتی، تایم لحظه‌ای اجرای دستور نگهداری می‌شود و کاربرد آن کنترل بروزرسانی همزمان (Concurrency) اطلاعات توسط چند کاربر است. البته در تعداد رکوردهای پایین به کار نمی‌آید و بیشتر زمانی مورد نیاز است که تعداد رکوردها خیلی زیاد باشد مثلاً ۱۰۰ میلیون رکورد!

 

انواع داده ای دیگر

نوع داده توضیحات
sql_variant

این نوع فیلد، به جز داده های text, ntext, timestamp برای نگهداری انواع داده های دیگر استفاده می‌شود و نوع آن با توجه به اولین مقداری که در آن قرار می‌گیرد تعیین خواهد شد. (حداکثر 8000 بایت) چون نوع و حجم فیلد مشخص نیست، لذا تنها یک اشاره‌گر ۱۶ بایتی در آن قرار گرفته و داده اصلی در فایل جداگانه نگهداری می‌شود. استفاده از این نوع فیلد، توصیه نمی‌گردد.

uniqueidentifier

این فیلد ۱۶ بایتی، به ما کدی Unique یا یکتا می‌دهد که به اصطلاح GUID می‌گویند. یکی از کاربردهای آن در Replication است. 

xml

داده هایی با فرمت XML را ذخیره می کند. (حداکثر 2GB)

این فیلد بیشتر برای انتقال اطلاعات و دستورات تحت web استفاده می‌شود و شامل انواع MetaData های مختلف است. این فیلد در SQL 2005 معرفی گردید. 

cursor

این فیلد مربوط به كنترل Cursor است و مرجع یک Cursor در آن ذخیره می شود

table

نتیجه یک کوری را برای عملیاتهای بعدی ذخیره می کند. 

 

لِکُلِّ شَیْ‏ءٍ زَکَاةٌ وَ زَکَاةُ الْعَقْلِ احْتِمَالُ الْجُهَّال‏

برای هر چیزی زکاتیست و زکات عقل تحمّل نادانان است.

دوشنبه 10 آذر 1393  10:11 PM
تشکرات از این پست
parisaexp
parisaexp
کاربر نقره ای
تاریخ عضویت : مهر 1392 
تعداد پست ها : 888
محل سکونت : اصفهان

پاسخ به:آموزش SQL

آموزش توابع SQL

آموزش SQL-توابع در SQL

SQL توابع تعریف شده زیادی برای انجام محاسبات بر روی داده ها دارد.


توابع Aggregate:

 

Wiki

توابع Aggregate تنها یک مقدار را براساس داده های یک ستون برمی گردانند.

توابع پرکاربرد Aggregate:

  • AVG- میانگین مقادیر یک ستون را بر می گرداند.
  • COUNT- تعداد سطرهای یک ستون را برمی گرداند.
  • FIRST- اولین مقدار ستون را بر می گرداند.
  • LAST- آخرین مقدار ستون را بر می گرداند.
  • MAX- بزرگترین مقدار ستون را بر می گرداند.
  • MIN- کوچکترین مقدار ستون را بر می گرداند.
  • SUM- مجموع داده های ستون را بر می گرداند. 

توابع Scalar:

 

Wiki

توابع Scalar تنها یک مقدار را بر اساس داده ورودی برمی گردانند.

توابع پرکاربرد Scalar:

  • UCASE: یک فیلد را به حروف بزرگ (upper case) تبدیل می کند.
  • LCASE- یک فیلد را به حروف کوچک (lower case) تبدیل می کند.
  • MID- کاراکترهایی را از یک فیلد متنی بیرون می کشد.
  • LEN- طول یک فیلد متنی را بر می گرداند.
  • ROUND- یک فیلد عددی را به عددی با تعداد اعشار مشخص گرد می کند.
  • NOW- تاریخ و ساعت جاری سیستم را بر می گرداند.
  • FORMAT- مشخص می کند یک فیلد با چه فرمتی نمایش داده شود.
  • LEFT- این تابع از سمت چپ یک عبارت، به تعدادی مشخص، کاراکتر برمی گرداند.
  • RIGHT- این تابع از سمت راست یک عبارت، به تعدادی مشخص، کاراکتر برمی گرداند.
  • CONVERT & CAST- یک عبارت را به نوعی دیگر تبدیل می کند.

توابع Aggregate و Scalar به صورت کامل در فصل های بعد توضیح داده خواهند شد.

لِکُلِّ شَیْ‏ءٍ زَکَاةٌ وَ زَکَاةُ الْعَقْلِ احْتِمَالُ الْجُهَّال‏

برای هر چیزی زکاتیست و زکات عقل تحمّل نادانان است.

دوشنبه 10 آذر 1393  10:15 PM
تشکرات از این پست
parisaexp
parisaexp
کاربر نقره ای
تاریخ عضویت : مهر 1392 
تعداد پست ها : 888
محل سکونت : اصفهان

پاسخ به:آموزش SQL

آموزش SQL-تابع avg

تابع AVG:

 

Wiki

تابع AVG میانگین مقادیر یک ستون عددی را بر می گرداند.

نحوه استفاده:

SELECT AVG(column_name) FROM table_name

مثال:

 

Wiki

جدول Orders را در زیر داریم:

O_Id OrderDate OrderPrice Customer
1 2008/11/12 1000 Hansen
2 2008/10/23 1600 Nilsen
3 2008/09/02 700 Hansen
4 2008/09/03 300 Hansen
5 2008/08/30 2000 Jensen
6 2008/10/04 100 Nilsen

می خواهیم میانگین فیلد OrderPrice را به دست آوریم.

از دستور زیر استفاده می کنیم:

SELECT AVG(OrderPrice) AS OrderAverage FROM Orders

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

OrderAverage
950

می خواهیم مشتریانی را پیدا کنیم که مقدار سفارش آنها بزرگتر از میانگین باشد.

از دستور زیر استفاده می کنیم:

SELECT Customer FROM Orders
WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)

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

Customer
Hansen
Nilsen
Jensen
 

 

لِکُلِّ شَیْ‏ءٍ زَکَاةٌ وَ زَکَاةُ الْعَقْلِ احْتِمَالُ الْجُهَّال‏

برای هر چیزی زکاتیست و زکات عقل تحمّل نادانان است.

دوشنبه 10 آذر 1393  10:16 PM
تشکرات از این پست
parisaexp
parisaexp
کاربر نقره ای
تاریخ عضویت : مهر 1392 
تعداد پست ها : 888
محل سکونت : اصفهان

پاسخ به:آموزش SQL

آموزش SQL-تابع count

تابع COUNT تعداد سطرهایی را بر می گرداند که در شرط صدق می کنند.


فرم تابع (COUNT(column_name

 

Wiki

تابع (COUNT(column_name تعداد مقادیر ستون مشخص شده را بر می گرداند (مقدار NULL شمرده نمی شود.)

SELECT COUNT(column_name) FROM table_name

فرم تابع (*)COUNT

تابع (*)COUNT تعداد رکوردهای یک جدول را بر می گرداند.

SELECT COUNT(*) FROM table_name

فرم تابع ( COUNT(DISTINCT column_name

تابع (COUNT(DISTINCT column_name تعداد مقادیر متمایز (داده های تکراری را یک بار حساب می کند) از یک ستون را بر می گرداند.

SELECT COUNT(DISTINCT column_name) FROM table_name

تابع (COUNT(DISTINCT در ORACLE و Microsoft SQL Server کار می کند و در Microsoft Access کار نمی کند.


مثالی از ( COUNT(column_name

 

Wiki

جدول Orders را در زیر داریم:

O_Id OrderDate OrderPrice Customer
1 2008/11/12 1000 Hansen
2 2008/10/23 1600 Nilsen
3 2008/09/02 700 Hansen
4 2008/09/03 300 Hansen
5 2008/08/30 2000 Jensen
6 2008/10/04 100 Nilsen

می خواهیم تعداد سفارشات مشتری با نام Nilsen را بیابیم:

از دستور زیر استفاده می کنیم:

SELECT COUNT(Customer) AS CustomerNilsen FROM Orders
WHERE Customer='Nilsen'

نتیجه دستور فوق عدد 2 خواهد بود زیرا مشتری با نام Nilsen در کل دو سفارش داده است.

CustomerNilsen
2

مثالی از (*)COUNT

 

Wiki

اگر عبارت WHERE را از دستور بالا حذف کنیم، به این صورت:

SELECT COUNT(*) AS NumberOfOrders FROM Orders

نتیجه چنین خواهد بود:

NumberOfOrders
6

که تعداد کل سطرهای جدول را بر می گرداند.


مثالی از (COUNT(DISTINCT column_name

 

Wiki

می خواهیم تعداد مشتریان را در جدول Orders به دست آوریم (داده های تکراری یک بار شمرده شوند.)

از دستور زیر استفاده می کنیم:

SELECT COUNT(DISTINCT Customer) AS NumberOfCustomers FROM Orders

نتیجه چنین خواهد بود:

NumberOfCustomers
3

که تعداد مشتریان منحصر به فرد در جدول Orders می باشد.(Hansen, Nilsen, Jensen)

لِکُلِّ شَیْ‏ءٍ زَکَاةٌ وَ زَکَاةُ الْعَقْلِ احْتِمَالُ الْجُهَّال‏

برای هر چیزی زکاتیست و زکات عقل تحمّل نادانان است.

دوشنبه 10 آذر 1393  10:17 PM
تشکرات از این پست
parisaexp
parisaexp
کاربر نقره ای
تاریخ عضویت : مهر 1392 
تعداد پست ها : 888
محل سکونت : اصفهان

پاسخ به:آموزش SQL

آموزش SQL-تابع first

تابع FIRST

 

Wiki

تابع FIRST اولین داده را از ستون انتخابی بر می گرداند.

فرم دستور FIRST:

SELECT FIRST(column_name) FROM table_name

مثال:

 

Wiki

جدول Orders را در زیر داریم:

O_Id OrderDate OrderPrice Customer
1 2008/11/12 1000 Hansen
2 2008/10/23 1600 Nilsen
3 2008/09/02 700 Hansen
4 2008/09/03 300 Hansen
5 2008/08/30 2000 Jensen
6 2008/10/04 100 Nilsen

می خواهیم اولین مقدار از ستون OrderPrice را پیدا کنیم:

از دستور زیر استفاده می کنیم:

SELECT FIRST(OrderPrice) AS FirstOrderPrice FROM Orders

توجه: اگر دستور فوق جواب نداد از دستور زیر استفاده کنید:

SELECT OrderPrice FROM Orders ORDER BY O_Id LIMIT 1

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

FirstOrderPrice
1000
 

 

لِکُلِّ شَیْ‏ءٍ زَکَاةٌ وَ زَکَاةُ الْعَقْلِ احْتِمَالُ الْجُهَّال‏

برای هر چیزی زکاتیست و زکات عقل تحمّل نادانان است.

دوشنبه 10 آذر 1393  10:18 PM
تشکرات از این پست
دسترسی سریع به انجمن ها