آموزش SQL
آموزش SQL-نام مستعار-AS
در SQL می توان یک نام مستعار (Alias) به جدول یا ستون داد.
نام مستعار (Alias) در SQL
Wiki
شما می توانید به جدول یا ستون نام دیگری را با استفاده از تخصیص یک نام مستعار بدهید. این امکان می تواند هنگامی که شما ستون یا جدولی دارید که نام پیچیده یا طولانی ایی دارد قابلیت مفیدی باشد.
یک نام مستعار می تواند هر چیزی باشد اما معمولا کوتاه می باشد.
تخصیص یک نام مستعار برای جداول:
FROM table_name AS alias_name
تخصیص یک نام مستعار برای ستون ها:
FROM table_name
مثال Alias:
Wiki
فرض کنید یک جدول با نام Persons و جدولی دیگر با نام Product_Orders داریم. می خواهیم نام های مستعار P و po را به آنها بدهیم.
می خواهیم تمام سفارشاتی را که Ola Hansen مسئول آنها می باشد را لیست کنیم.
از دستور زیر استفاده می کنیم:
FROM Persons AS p,
Product_Orders AS po
WHERE p.LastName='Hansen' AND p.FirstName='Ola'
دستور مشابه بدون استفاده از Alias:
FROM Persons,
Product_Orders
WHERE Persons.LastName='Hansen' AND Persons.FirstName='Ola'
همانطور که در دستور های بالا می بینید نام مستعار، یک query را هم برای نوشتن و هم به لحاظ خواندن آسان تر می کند.
آموزش SQL-پیوندها یا Joinها
پیوندها برای فراخوانی داده ها از دو یا چند جدول با توجه به ارتباط بین ستون های خاصی از این جدول ها استفاده می شوند.
پیوند (JOIN) بین جداول در SQL
Wiki
کلید واژه JOIN در دستورات SQL برای ایجاد Query از دو یا چند جدول براساس ارتباط بین ستون های خاصی از جداول استفاده می شود.
جداول در پایگاه داده اغلب به وسیله کلیدها به یکدیگر مرتبط می شوند.
primary key یا کلید اصلی، ستونی(یا ترکیبی از ستون ها) با داده منحصر به فرد و یکتا برای هر سطراست. مقدار کلید اصلی باید یکتا باشد. هدف مرتبط کردن داده ها بین جداول است بدون اینکه داده ها در جداول تکرار شوند.
در جدول 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 |
توجه کنید که ستون P_Id در جدول فوق کلید اصلی است. این بدان معنی است که هیچ دو سطری نمی تواند مقدار یکسانی داشته باشد. ستون P_Id دو فرد را حتی اگر نام های یکسانی هم داشته باشند، متمایز می کند.
در جدول Orders:
| O_Id | OrderNo | P_Id |
|---|---|---|
| 1 | 77895 | 3 |
| 2 | 44678 | 3 |
| 3 | 22456 | 1 |
| 4 | 24562 | 1 |
| 5 | 34764 | 15 |
دقت کنید که ستون O_Id در جدول Orders کلید اصلی می باشد و ستون P_Id در اینجا به نفرات در جدول Persons بدون استفاده از نامشان اشاره دارد.
توجه کنید که ارتباط بین دو جدول به وسیله ستون P_Id می باشد.
تفاوت پیوندها
Wiki
قبل از اینکه بحث را ادامه دهیم انواع پیوندهایی که می توان استفاده کرد را به همراه تفاوت های آن ها بیان می کنیم:
- JOIN: سطرهایی را که در هر دو جدول تناظر دارند را بر می گرداند.
- LEFT JOIN: تمامی سطرها از جدول سمت چپ را برمی گرداند حتی اگر هیچ تناظری در جدول سمت راست نداشته باشد.
- RIGHT JOIN: تمامی سطرها از جدول سمت راست را برمی گرداند حتی اگر هیچ تناظری در جدول سمت چپ نداشته باشد.
- FULL JOIN: تمام ردیف های موجود در جداول را با وجود حتی یک همخوانی میان جداول بر می گرداند.
آموزش SQL-عبارت Inner Join
عبارت INNER JOIN
Wiki
عبارت کلیدی INNER JOIN سطرهایی را برمی گرداند که در هر دو جدول حداقل یک داده متناظر در ستون های مرتبط شده داشته باشد.
فرم عبارت INNER JOIN:
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
مثال:
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 |
جدول Orders:
| O_Id | OrderNo | P_Id |
|---|---|---|
| 1 | 77895 | 3 |
| 2 | 44678 | 3 |
| 3 | 22456 | 1 |
| 4 | 24562 | 1 |
| 5 | 34764 | 15 |
می خواهیم تمامی افراد را به همراه سقارشاتشان لیست کنیم.
از دستور زیر استفاده می کنیم:
FROM Persons
INNER JOIN Orders
ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName
نتیجه به شکل زیر خواهد بود:
| LastName | FirstName | OrderNo |
|---|---|---|
| Hansen | Ola | 22456 |
| Hansen | Ola | 24562 |
| Pettersen | Kari | 77895 |
| Pettersen | Kari | 44678 |
عبارت کلیدی INNER JOIN سطرهایی که حداقل یک تناظر در دو جدول داشته باشد را برمی گرداند. اگر فردی در جدول Persons وجود دارد که تناظری در جدول Orders ندارد،آن فرد لیست نمی شود.
آموزش SQL-عبارت Left Join
عبارت LEFT JOIN
Wiki
کلید واژه LEFT JOIN تمام سطرهای جدول سمت چپ (table_name1) را برمی گرداند حتی اگر هیچ داده متناظری برای آن در جدول سمت راست (table_name2) وجود نداشته باشد.
فرم عبارت LEFT JOIN:
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
در بعضی از پایگاه داده ها LEFT JOIN به شکل LEFT OUTER JOIN می باشد.
مثال:
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 |
جدول Orders:
| O_Id | OrderNo | P_Id |
|---|---|---|
| 1 | 77895 | 3 |
| 2 | 44678 | 3 |
| 3 | 22456 | 1 |
| 4 | 24562 | 1 |
| 5 | 34764 | 15 |
می خواهیم تمام افراد را لیست کنیم حتی اگر سفارشی در مقابل نام آن وجود نداشته باشد.
از دستور زیر استفاده می کنیم:
FROM Persons
LEFT JOIN Orders
ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName
نتیجه به شکل زیر خواهد شد:
| LastName | FirstName | OrderNo |
|---|---|---|
| Hansen | Ola | 22456 |
| Hansen | Ola | 24562 |
| Pettersen | Kari | 77895 |
| Pettersen | Kari | 44678 |
| Svendson | Tove |
کلید واژه LEFT JOIN تمام سطرهای جدول سمت چپ (Persons) را برمی گرداند حتی اگر هیچ داده متناظری برای آن در جدول سمت راست (Orders) وجود نداشته باشد.
آموزش SQL-عبارت Right Join
عبارت RIGHT JOIN
Wiki
کلید واژه RIGHT JOIN تمام سطرهای جدول سمت راست (table_name2) را برمی گرداند حتی اگر هیچ داده متناظری برای آن در جدول سمت چپ (table_name1) وجود نداشته باشد.
فرم عبارت RIGHT JOIN:
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
در بعضی از پایگاه داده ها RIGHT JOIN به شکل RIGHT OUTER JOIN می باشد.
مثال:
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 |
جدول Orders
| O_Id | OrderNo | P_Id |
|---|---|---|
| 1 | 77895 | 3 |
| 2 | 44678 | 3 |
| 3 | 22456 | 1 |
| 4 | 24562 | 1 |
| 5 | 34764 | 15 |
می خواهیم تمام سفارشات (orderها) را لیست کنیم حتی اگر نام فردی در مقابل آن سفارش وجود نداشته باشد.
از دستور زیر استفاده می کنیم:
FROM Persons
RIGHT JOIN Orders
ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName
جدول نتایج به شکل زیر خواهد بود:
| LastName | FirstName | OrderNo |
|---|---|---|
| Hansen | Ola | 22456 |
| Hansen | Ola | 24562 |
| Pettersen | Kari | 77895 |
| Pettersen | Kari | 44678 |
| 34764 |
کلید واژه RIGHT JOIN تمام سطرهای جدول سمت راست (Orders) را برمی گرداند حتی اگر هیچ داده متناظری برای آن در جدول سمت چپ (Persons) وجود نداشته باشد.
آموزش SQL-عبارت Full Join
کلید واژه FULL JOIN
Wiki
کلید واژه FULL JOIN تمام ردیف های موجود در جداول را با وجود حتی یک همخوانی میان جداول بر می گرداند.
فرم دستور FULL JOIN:
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name
مثال:
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 |
جدول Orders:
| O_Id | OrderNo | P_Id |
|---|---|---|
| 1 | 77895 | 3 |
| 2 | 44678 | 3 |
| 3 | 22456 | 1 |
| 4 | 24562 | 1 |
| 5 | 34764 | 15 |
می خواهیم تمام افراد و سفارش هایشان، و نیز تمام سفارش ها به همراه افراد مربوطه را لیست کنیم:
از دستور زیر استفاده می کنیم:
FROM Persons
FULL JOIN Orders
ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName
نتیجه به شکل زیر خواهد شد:
| LastName | FirstName | OrderNo |
|---|---|---|
| Hansen | Ola | 22456 |
| Hansen | Ola | 24562 |
| Pettersen | Kari | 77895 |
| Pettersen | Kari | 44678 |
| Svendson | Tove | |
| 34764 |
کلید واژه FULL JOIN تمام سطرهایی که در جدول چپ (Persons) و تمام سطرهای جدول راست (Orders) وجود دارد را بر می گرداند. اگر سطری در جدول Persons وجود دارد که تناظری در جدول Orders ندارد یا اگر سطری در جدول Orders وجود دارد که تناظری در جدول Persons ندارد این سطرها نیز در جدول نتیجه نمایش داده خواهند شد.
آموزش SQL-عبارت Union
عملگر UNION دو یا چند دستور SELECT را با یکدیگر ترکیب می کند.
عملگر UNION
Wiki
عملگر UNION برای ترکیب نتایج دو یا چند دستور SELECT استفاده می شود.
توجه داشته باشید که هر دستور SELECT در عملگر UNION باید تعداد ستونهای یکسانی را برگردانند. همچنین ستونها باید Data Type یکسانی داشته باشند. علاوه بر این ستونها در هر دستور SELECT باید به یک صورت مرتب شده باشند. (Order By)
فرم عملگر UNION:
UNION
SELECT column_name(s) FROM table_name2
فرم عملگر UNION ALL:
UNION ALL
SELECT column_name(s) FROM table_name2
نام ستون ها در جدول نتایج همیشه برابر نام ستونها در دستور SELECT اول در عملگر UNION می باشد.
مثال:
Wiki
به جداول زیر نگاه کنید:
1- جدول کارمندان نروژی:
| E_ID | E_Name |
|---|---|
| 01 | Hansen, Ola |
| 02 | Svendson, Tove |
| 03 | Svendson, Stephen |
| 04 | Pettersen, Kari |
2- جدول کارمندان آمریکایی:
| E_ID | E_Name |
|---|---|
| 01 | Turner, Sally |
| 02 | Kent, Clark |
| 03 | Svendson, Stephen |
| 04 | Scott, Stephen |
می خواهیم لیست اسامی کارمندان امریکایی و نروژی را به صورت متمایز ( بدون تکرار) داشته باشیم.
از دستور زیر استفاده می کنیم:
UNION
SELECT E_Name FROM Employees_USA
جدول نتایج به شکل زیر خواهد بود:
| E_Name |
|---|
| Hansen, Ola |
| Svendson, Tove |
| Svendson, Stephen |
| Pettersen, Kari |
| Turner, Sally |
| Kent, Clark |
| Scott, Stephen |
مثال:
Wiki
حال می خواهیم تمامی کارمندان آمریکایی و نروژی را لیست کنیم از دستور زیر استفاده می کنیم:
UNION ALL
SELECT E_Name FROM Employees_USA
نتیجه:
| E_Name |
|---|
| Hansen, Ola |
| Svendson, Tove |
| Svendson, Stephen |
| Pettersen, Kari |
| Turner, Sally |
| Kent, Clark |
| Svendson, Stephen |
|
Scott, Stephen |
آموزش SQL-دستور Select Into
دستور SELECT INTO می تواند برای backup گیری از جداول استفاده شود.
دستور SELECT INTO
Wiki
دستور SELECT INTO داده ها را از یک جدول بر می دارد و در جدولی دیگر وارد می کند.
دستور SELECT INTO اغلب برای backup گیری از جداول مورد استفاده قرار می گیرد.
فرم دستور SELECT INTO:
می توانیم تمام ستون ها را به یک جدول جدید وارد کنیم:
INTO new_table_name [IN externaldatabase]
FROM old_tablename
یا می توانیم تنها ستون های خاصی را به جدول جدیدی وارد کنیم:
INTO new_table_name [IN externaldatabase]
FROM old_tablename
مثال:
Wiki
Backup گیری: می خواهیم یک کپی از داده های جدول Persons بگیریم (گرفتن نسخه پشتیبان از یک جدول در پایگاه داده موجود)
از دستور زیر استفاده می کنیم:
INTO Persons_Backup
FROM Persons
همچنین می توانیم از عبارت IN برای کپی کردن جدول به پایگاه داده دیگر استفاده کنیم (گرفتن نسخه پشتیبان از یک جدول در پایگاه داده دیگر):
INTO Persons_Backup IN 'Backup.mdb'
FROM Persons
همچنین می توانیم از فیلدهای خاصی از یک جدول به جدول جدید دیگر کپی بگیریم (گرفتن نسخه پشتیبان ازفیلدهای خاصی از یک جدول در پایگاه موجود.)
INTO Persons_Backup
FROM Persons
SELECT INTO به همراه عبارت WHERE
Wiki
همچنین می توانیم عبارت WHERE را در دستور اضافه کنیم:
دستور زیر جدول Persons_Backup را حاوی افرادی برمی گرداند که در شهر Sandnes زندگی می کنند.
INTO Persons_Backup
FROM Persons
WHERE City='Sandnes'
SELECT INTO در ترکیب با دستورات Join
Wiki
انتخاب داده ها از بیش از یک جدول نیز امکان پذیر است.
مثال:
مثال زیر جدول Persons_Order_Backup را که حاوی داده های از دو جدول Persons و Orders می باشد را بر می گرداند.
INTO Persons_Order_Backup
FROM Persons
INNER JOIN Orders
ON Persons.P_Id=Orders.P_Id
آموزش SQL-دستور Create DB
دستور CREATE DATABASE
Wiki
دستور CREATE DATABASE برای ایجاد یک پایگاه داده استفاده می شود.
فرم دستور:
مثال:
Wiki
می خواهیم پایگاه داده ای با نام my_db ایجاد کنیم.
از دستور زیر استفاده می کنیم:
جداول پایگاه داده می توانند با دستور CREATE TABLE اضافه شوند.
آموزش SQL-دستور Create Table
دستور CREATE TABLE
Wiki
دستور CREATE TABLE برای ایجاد جدول در یک پایگاه داده استفاده می شود.
فرم دستور CREATE TABLE:
(
column_name1 data_type,
column_name2 data_type,
column_name3 data_type,
....
)
data type مشخص می کند چه نوع داده ای می تواند در ستون وارد شود. برای اینکه مرجع کاملی از data typeهای موجود در MS Access, MySQL و SQL Server را مشاهده کنید به قسمت SQL Data Typesمراجعه کنید.
مثال:
Wiki
می خواهیم جدولی با نام Persons با پنج ستون (P_Id, LastName, FirstName, Address, City) ایجاد کنیم:
از دستور زیر استفاده می کنیم:
(
P_Id int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
ستون P_Id از نوع int می باشد و اعداد را نگه می دارد. ستون های LastName, FirstName, Address, City از نوع varchar با طول حداکثر 255 کاراکتر می باشند.
جدول خالی Persons شبیه جدول زیر خواهد بود:
| P_Id | LastName | FirstName | Address | City |
|---|---|---|---|---|
جدول خالی می تواند با دستور INSERT INTO پر شود.
آموزش SQL-محدودیت-Constraint
محدودیت ها (Constraints)
Wiki
محدودیت ها برای محدود کردن داده های ورودی استفاده می شود.
محدودیت ها می توانند هنگام ایجاد یک جدول مشخص شوند (در دستور CREATE TABLE) یا بعد از اینکه جدول ایجاد شد (با دستور ALTER TABLE)
ما روی محدودیت های زیر تمرکز می کنیم:
- NOT NULL
- UNIQUE
- PRIMARY KEY
- FOREIGN KEY
- CHECK
- DEFAULT
فصل های بعد هر یک از این محدودیت ها را با جزئیات توضیح می دهد.
آموزش SQL-محدودیت Not Null
به طور پیش فرض یک ستون می تواند حاوی مقدار خالی (NULL) باشد.
محدودیت NOT NULL
Wiki
محدودیت NOT NULL یک ستون را مجبور می کند که مقدار خالی را قبول نکند.
محدودیت NOT NULL یک ستون را وادار می کند که همیشه حاوی مقداری باشد، این بدان معناست که شما نمی توانید رکورد جدیدی را وارد کنید یا تغییر دهید بدون اینکه مقداری را در آن اضافه کنید.
دستور زیر ستون P_Id و LastName را مجبور می کند که مقدار خالی را قبول نکند:
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
آموزش SQL-محدودیت Unique
محدودیت UNIQUE
Wiki
محدودیت UNIQUE تعیین می کند هر رکوردی در جدول یکتاست.
محدودیت های UNIQUE و PRIMARY KEY باهم یکتایی یک ستون یا مجموعه ای از ستون ها را تضمین می کنند.
محدودیت PRIMARY KEY به طور خودکار محدودیت UNIQUE را در خود دارد.
توجه داشته باشید که می توانید چندین محدودیت UNIQUE را در یک جدول داشته باشید اما تنها یک PRIMARY KEY در جدول می توانید داشته باشید.
محدودیت UNIQUE در دستور CREATE TABLE
Wiki
عبارت زیر یک محدودیت UNIQUE را روی ستون P_Id هنگام ایجاد جدول Persons به وجود می آورد.
در MySQL:
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (P_Id)
)
درSQL Server / Oracle / MS Access:
(
P_Id int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
برای تعریف محدودیت UNIQUE روی ستون های چندگانه (ترکیب دو یا چند ستون) از دستور زیر استفاده کنید (منظور داده های چند ستون روی هم رفته منحصر به فرد باشند):
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
)
محدودیت UNIQUE در دستور ALTER TABLE
Wiki
برای ایجاد محدودیت UNIQUE روی ستون P_Id هنگامی که جدول قبلا ایجاد شده از دستور زیر استفاده می کنیم.
در MySQL / SQL Server / Oracle / MS Access:
ADD UNIQUE (P_Id)
برای تعریف محدودیت UNIQUE روی ستون های ترکیبی (ترکیب دو یا چند ستون) از دستور زیر استفاده کنید (منظوراین است که داده های چند ستون روی هم رفته منحصر به فرد باشند):
در MySQL / SQL Server / Oracle / MS Access:
ADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
حذف محدودیت UNIQUE
Wiki
برای حذف محدودیت UNIQUE از دستور زیر استفاده می کنیم.
در MySQL:
DROP INDEX uc_PersonID
در SQL Server / Oracle / MS Access:
DROP CONSTRAINT uc_PersonID
آموزش SQL-کلید اصلی
محدودیت PRIMARY KEY (کلید اصلی):
Wiki
PRIMARY KEY هر رکورد در پایگاه داده را به طور منحصر به فردی مشخص می کند.
PRIMARY KEY باید دارای مقادیر منحصر به فردی باشند.
ستون PRIMARY KEY نمی تواند حاوی مقدار خالی باشد.
هر جدول باید حاوی یک PRIMARY KEY باشد و هر جدول تنها می تواند یک PRIMARY KEY داشته باشد.
محدودیت PRIMARY KEY در دستور CREATE TABLE
Wiki
دستور زیر در ستون P_Id هنگامی که جدول Persons ایجاد می شود کلید اصلی را تعیین می کند:
در MySQL:
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
)
در SQL Server / Oracle / MS Access:
(
P_Id int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
برای تعریف محدودیت PRIMARY KEY روی ستون های ترکیبی (ترکیب دو یا چند ستون) از دستور زیر استفاده کنید (منظور این است که چند ستون با هم به عنوان کلید اصلی باشند)
در MySQL / SQL Server / Oracle / MS Access:
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
)
محدودیت PRIMARY KEY در دستور ALTER TABLE
Wiki
برای ایجاد محدودیت PRIMARY KEY روی ستون P_Id هنگامی که جدول قبلا ایجاد شده از دستور زیر استفاده می کنیم.
در MySQL / SQL Server / Oracle / MS Access:
ADD PRIMARY KEY (P_Id)
برای اضافه کردن محدودیت PRIMARY KEY روی ستون های ترکیبی( ترکیب دو یا چند ستون) از دستور زیر استفاده کنید
در MySQL / SQL Server / Oracle / MS Access:
ADD CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
حذف محدودیت PRIMARY KEY
Wiki
برای حذف محدودیت PRIMARY KEY از دستور زیر استفاده می کنیم.
در MySQL:
DROP PRIMARY KEY
در SQL Server / Oracle / MS Access:
DROP CONSTRAINT pk_PersonID
آموزش SQL-کلید خارجی
محدودیت FOREIGN KEY (کلید خارجی)
Wiki
یک FOREIGN KEY (کلید خارجی) در یک جدول اشاره به PRIMARY KEY (کلید اصلی) در جدول دیگر دارد.
اجازه دهید تا FOREIGN KEY را با یک مثال توضیح دهیم، به دو جدول زیر نگاه کنید:
جدول 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 |
جدول Orders :
| O_Id | OrderNo | P_Id |
|---|---|---|
| 1 | 77895 | 3 |
| 2 | 44678 | 3 |
| 3 | 22456 | 2 |
| 4 | 24562 | 1 |
توجه کنید که ستون P_Id در جدول order اشاره به ستون P_Id در جدول person دارد.
ستون P_Id در جدول person کلید اصلی می باشد
ستون P_Id در جدول Orders کلید خارجی می باشد.
محدودیت کلید خارجی برای جلوگیری از اقداماتی که ارتباط بین دو جدول را خراب می کند استفاده می شود.
همچنین محدودیت کلید خارجی از ورود داده های نا معتبر به ستون کلید خارجی جلوگیری می کند، زیرا داده ها باید یکی از مقادیر جدولی باشند که کلید خارجی به آن ارجاع داده شده است.
محدودیت FOREIGN KEY در دستور CREATE TABLE
Wiki
دستور زیر در ستون P_Id هنگامی که جدول Persons ایجاد می شود کلید خارجی را تعیین می کند:
در MySQL:
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
)
در SQL Server / Oracle / MS Access:
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
)
برای تعریف محدودیت FOREIGN KEY روی ستون های ترکیبی (ترکیب دو یا چند ستون) از دستور زیر استفاده کنید.
در MySQL / SQL Server / Oracle / MS Access:
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
)
محدودیت FOREIGN KEY در دستور ALTER TABLE
Wiki
برای ایجاد محدودیت FOREIGN KEY روی ستون P_Id هنگامی که جدول قبلا ایجاد شده از دستور زیر استفاده می کنیم.
MySQL / SQL Server / Oracle / MS Access:
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
برای تعریف محدودیت FOREIGN KEY روی ستون های ترکیبی (ترکیب دو یا چند ستون) از دستور زیر استفاده کنید.
MySQL / SQL Server / Oracle / MS Access:
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
حذف محدودیت FOREIGN KEY
Wiki
برای حذف محدودیت FOREIGN KEY از دستور زیر استفاده می کنیم.
در MySQL:
DROP FOREIGN KEY fk_PerOrders
در SQL Server / Oracle / MS Access:
DROP CONSTRAINT fk_PerOrders