Professional Documents
Culture Documents
SQL Refrence-W3schools
SQL Refrence-W3schools
اول
ﭼﺎپ ﻋﻤﻮﻣﯽ ﻏﯿﺮ راﯾﮕﺎن اﯾﻦ ﮐﺘﺎب ﺑﻪ ﻫﺮ ﻧﺤﻮي ﻏﯿﺮ ﻣﺠﺎز اﺳﺖ
اﺳﺘﻔﺎده از ﻣﻄﺎﻟﺐ ﮐﺘﺎب ﺑﺎ ذﮐﺮ ﻣﻨﺒﻊ ﺑﻼﻣﺎﻧﻊ اﺳﺖ
ﻓﻬﺮﺳﺖ ﻣﻄﺎﻟﺐ
ﻓﺼﻞ اول
ﻓﺼﻞ دوم
ﻓﺼﻞ ﺳﻮم
ﺿﻤﯿﻤﻪ
ﺷﻤﺎ SQLرا آﻣﻮﺧﺘﯿﺪ ،ﺣﺎﻻ ﭼﮑﺎري ﺑﺎﯾﺪ اﻧﺠﺎم دﻫﯿﺪ؟ 97 ....................................................................................
ﭘﯿﺸﮕﻔﺘﺎر
در دﻫﻪ 70ﮔﺮوﻫﯽ از ﺷﺮﮐﺖ آيﺑﯽام ﺑﺮ روي ﺳﯿﺴﺘﻢ ﭘﺎﯾﮕﺎه دادهﻫﺎي ﺳﯿﺴﺘﻢ آر ﮐﺎر ﻣﯽﮐﺮدﻧﺪ و زﺑﺎن SQLرا ﺑﻪ ﻣﻨﻈﻮر ﻋﻤﻠﯿﺎت و
ﺑﺎزﯾﺎﺑﯽ اﻃﻼﻋﺎت ذﺧﯿﺮه ﺷﺪه در ﺳﯿﺴﺘﻢ آر اﯾﺠﺎد ﮐﺮدﻧﺪ.
زﺑﺎن ﺳﺎﺧﺖ ﯾﺎﻓﺘﻪ ﭘﺮس و ﺟﻮ ) SQLﮐﻪ ﺳﯽﮐﻮال ﺧﻮاﻧﺪه ﻣﯽ ﺷﻮد( زﺑﺎﻧﯽ اﺳﺖ ﺳﻄﺢ ﺑﺎﻻ ﻣﺒﺘﻨﯽ ﺑﺮ زﺑﺎن ﺳﻄﺢ ﭘﺎﯾﯿﻦ و رﯾﺎﺿﯽ ﺟﺒﺮ
راﺑﻄﻪاي ﮐﻪ ﺑﺮاي اﯾﺠﺎد ،ﺗﻐﯿﯿﺮ و ﺑﺎزﯾﺎﺑﯽ دادهﻫﺎ و ﻧﯿﺰ ﻋﻤﻠﯿﺎت ﺑﺮ روي آﻧﻬﺎ ﺑﻪﮐﺎر ﻣﯽرود .زﺑﺎن SQLﺑﻪ ﺳﻤﺖ ﻣﺪل ﺷﯽﮔﺮا -
راﺑﻄﻪاي ﻧﯿﺰ ﭘﯿﺸﺮﻓﺖ ﮐﺮده اﺳﺖ SQL .ﺑﺮاي ﮐﺎرﻫﺎي وﯾﮋه و ﻣﺤﺪودي )ﮔﺰارش ﮔﯿﺮي از دادهﻫﺎ در ﭘﺎﯾﮕﺎه دادهﻫﺎي راﺑﻄﻪاي( ﻃﺮاﺣﯽ
ﺷﺪه اﺳﺖ .ﺑﺮ ﺧﻼف زﺑﺎﻧﻬﺎي دﺳﺘﻮري ﻣﺜﻞ ﺑﯿﺴﯿﮏ ﯾﺎ ﺳﯽ ﮐﻪ ﺑﺮاي ﺣﻞ ﻣﺴﺎﺋﻞ ﻃﺮاﺣﯽ ﺷﺪه SQL ،زﺑﺎﻧﯽ ﺑﺮ ﭘﺎﯾﻪ اﻋﻼن اﺳﺖ.
اﯾﻦ ﮐﺘﺎب در ﻣﻮرد ﺑﯿﺸﺘﺮ ﺳﯿﺴﺘﻢ ﻫﺎي ﻣﺪﯾﺮﯾﺖ ﭘﺎﯾﮕﺎه داده راﺑﻄﻪ اي ﻣﻌﺮوف ﻣﺜﻞ MySQL ،MS SQL Server ،MS Access
ﺗﻮﺿﯿﺢ داده اﺳﺖ و ﺑﺮاي ﻫﺮ ﮐﺪام دﺳﺘﻮرات و ﻣﺜﺎﻟﻬﺎي ﻣﺮﺑﻮﻃﻪ را آورده اﺳﺖ .ﻣﺜﺎﻟﻬﺎي ﺿﻤﯿﻤﻪ ﺷﺪه ﻣﺮﺑﻮط ﺑﻪ SQL Server
2008ﻫﺴﺘﻨﺪ ﮐﻪ در ﻣﺤﯿﻂ Management Studioو ﺑﺎ ﭘﺎﯾﮕﺎه داده آﻣﻮزﺷﯽ NorthWindﺗﺴﺖ ﺷﺪه اﻧﺪ .ﭘﺎﯾﮕﺎه داده
NorthWindرا ﻧﯿﺰ ﻣﯽ ﺗﻮاﻧﯿﺪ از اﯾﻨﺠﺎ درﯾﺎﻓﺖ ﮐﻨﯿﺪ.
ﻣﻄﺎﻟﺐ اﯾﻦ ﮐﺘﺎب ،ﺗﺮﺟﻤﻪ دوره آﻣﻮزﺷﯽ SQLاز ﺳﺎﯾﺖ W3Schoolsﻣﯽ ﺑﺎﺷﺪ .ﻫﺮﭼﻨﺪ ﺗﻼش ﮐﺮدﯾﻢ ﺗﺎ ﺣﺪ اﻣﮑﺎن ﻣﻄﻠﺐ را ﺳﺎده و
روان ﺑﯿﺎن ﮐﻨﯿﻢ اﻣﺎ ﺑﯽ ﺷﮏ اﺷﮑﺎﻻﺗﯽ در اﻣﺮ ﺗﺮﺟﻤﻪ اﯾﻦ ﮐﺘﺎب وﺟﻮد دارد ﮐﻪ از ﺧﻮاﻧﻨﺪﮔﺎن ﻣﺤﺘﺮم ﺗﻘﺎﺿﺎ ﻣﯽ ﮐﻨﯿﻢ ﺑﺎ ارﺳﺎل ﻧﻈﺮات
ﺧﻮد ﻣﺎ را در ﺑﻬﺒﻮد ﺑﺨﺸﯿﺪن اﯾﻦ ﮐﺘﺎب ﯾﺎري ﮐﻨﻨﺪ.
ﻣﺘﺮﺟﻤﺎن:
ﺑﻬﺎر 91
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﻣﻘﺪﻣﻪ اي ﺑﺮ SQL
SQLﯾﮏ زﺑﺎن اﺳﺘﺎﻧﺪارد ﺑﺮاي دﺳﺘﺮﺳﯽ و دﺳﺘﮑﺎري ﭘﺎﯾﮕﺎه ﻫﺎي داده اﺳﺖ.
SQLﭼﯿﺴﺖ؟
SQLﻣﺨﻔﻒ Structured Query Languageﯾﺎ زﺑﺎن ﭘﺮس و ﺟﻮي ﺳﺎﺧﺖ ﯾﺎﻓﺘﻪ اﺳﺖ ·
SQLﺑﻪ ﺷﻤﺎ اﺟﺎزه دﺳﺘﺮﺳﯽ و دﺳﺘﮑﺎري ﺑﻪ ﭘﺎﯾﮕﺎه ﻫﺎي داده را ﻣﯽ دﻫﺪ ·
SQLﯾﮏ اﺳﺘﺎﻧﺪارد ) ANSIﻣﻮﺳﺴﻪ اﺳﺘﺎﻧﺪارد ﻣﻠﯽ آﻣﺮﯾﮑﺎ( اﺳﺖ ·
SQLﯾﮏ ﭘﺮس و ﺟﻮ را در ﺑﺮاﺑﺮ ﯾﮏ ﭘﺎﯾﮕﺎه داده ﻣﯽ ﺗﻮاﻧﺪ ﺳﺮﯾﻊ اﺟﺮا ﮐﻨﺪ ·
SQLﻣﯽ ﺗﻮاﻧﺪ داده را از ﯾﮏ ﭘﺎﯾﮕﺎه داده واﮐﺸﯽ ﮐﻨﺪ ·
SQLﻣﯽ ﺗﻮاﻧﺪ رﮐﻮردﻫﺎﯾﯽ را در ﭘﺎﯾﮕﺎه داده درج ﮐﻨﺪ ·
SQLﻣﯽ ﺗﻮاﻧﺪ رﮐﻮردﻫﺎﯾﯽ را در ﭘﺎﯾﮕﺎه داده ﺑﻪ روز ﮐﻨﺪ ·
SQLﻣﯽ ﺗﻮاﻧﺪ رﮐﻮردﻫﺎي ﯾﮏ ﭘﺎﯾﮕﺎه داده را ﺣﺬف ﮐﻨﺪ ·
SQLﻣﯽ ﺗﻮاﻧﺪ ﭘﺎﯾﮕﺎه داده ﻫﺎي ﺟﺪﯾﺪي ﺑﻮﺟﻮد آورد ·
SQLﻣﯽ ﺗﻮاﻧﺪ ﺟﺪوﻟﻬﺎي ﺟﺪﯾﺪي را در ﭘﺎﯾﮕﺎه داده ﺑﻮﺟﻮد آورد ·
SQLﻣﯽ ﺗﻮاﻧﺪ روﯾﻪ ﻫﺎي ذﺧﯿﺮه ﺷﺪه در ﭘﺎﯾﮕﺎه داده ﺑﺴﺎزد ·
SQLﻣﯽ ﺗﻮاﻧﺪ ﻧﻤﺎﻫﺎﯾﯽ را در ﭘﺎﯾﮕﺎه داده ﺑﻮﺟﻮد آورد ·
SQLﻣﯽ ﺗﻮاﻧﺪ ﺑﺮاي ﺟﺪاول ،روﯾﻪ ﻫﺎي ذﺧﯿﺮه ﺷﺪه و ﻧﻤﺎﻫﺎ ﻣﺠﻮز ﺗﻨﻈﯿﻢ ﮐﻨﺪ ·
اﮔﺮﭼﻪ SQLﯾﮏ ANSIاﺳﺘﺎﻧﺪارد اﺳﺖ اﻣﺎ ﻧﺴﺨﻪ ﻫﺎي ﻣﺨﺘﻠﻔﯽ از زﺑﺎن SQLوﺟﻮد دارﻧﺪ.
،INSERT ،DELETE ،UPDATE ،SELECT ﺑﺎ اﯾﻦ ﺣﺎل ،ﺑﺮاي ﻣﻮاﻓﻘﺖ ﺑﺎ ،ANSIﻫﻤﻪ آﻧﻬﺎ دﺳﺖ ﮐﻢ از ﻓﺮﻣﺎﻧﻬﺎي اﺻﻠﯽ )ﻣﺜﻞ
(WHEREﺑﻪ روش ﻣﺸﺎﺑﻬﯽ ﭘﺸﺘﯿﺒﺎﻧﯽ ﻣﯽ ﮐﻨﻨﺪ.
1
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﻧﮑﺘﻪ :ﺑﯿﺸﺘﺮ ﺑﺮﻧﺎﻣﻪ ﻫﺎي ﭘﺎﯾﮕﺎه داده SQLﻧﯿﺰ ﺿﻤﯿﻤﻪ ﻫﺎي اﺧﺘﺼﺎﺻﯽ ﺧﻮدﺷﺎن را ﻋﻼو ه ﺑﺮ اﺳﺘﺎﻧﺪاردﻫﺎي SQLدارﻧﺪ!
ﺑﺮاي ﺳﺎﺧﺘﻦ ﯾﮏ وب ﺳﺎﯾﺖ ﮐﻪ ﺑﻌﻀﯽ داده را از ﯾﮏ ﭘﺎﯾﮕﺎه داده ﻧﻤﺎﯾﺶ دﻫﺪ ،ﺑﻪ ﻣﻮارد زﯾﺮ ﻧﯿﺎز ﺧﻮاﻫﯿﺪ داﺷﺖ:
ﯾﮏ ﺑﺮﻧﺎﻣﻪ ﭘﺎﯾﮕﺎه داده ) RDBMSﻣﺜﻞ (MySQL ،SQL Server ،MS Access ·
ﯾﮏ زﺑﺎن اﺳﮑﺮﯾﭙﺘﯽ ﺳﻤﺖ ﺳﺮور ،ﻣﺜﻞ phpﯾﺎ ASP ·
SQL ·
HTML / CSS ·
RDBMS
RDBMSﻣﺨﻔﻒ Relational Database Management Systemﯾﺎ ﺳﯿﺴﺘﻢ ﻣﺪﯾﺮﯾﺖ ﭘﺎﯾﮕﺎه داده راﺑﻄﻪ اي اﺳﺖ.
RDBMSﭘﺎﯾﻪ اي ﺑﺮاي SQLو ﺑﺮاي ﻫﻤﻪ ﺳﯿﺴﺘﻤﻬﺎي ﭘﺎﯾﮕﺎه داده ﺟﺪﯾﺪ از ﻗﺒﯿﻞ ،Oracle ،IBM DB2 ،MS SQL Server
MySQLو Microsoft Accessاﺳﺖ.
داده در RDBMSدر اﺷﯿﺎء ﭘﺎﯾﮕﺎه داده ﮐﻪ ﺟﺪاول ﻧﺎﻣﯿﺪه ﻣﯽ ﺷﻮد ،ذﺧﯿﺮه ﻣﯽ ﺷﻮﻧﺪ.
ﯾﮏ ﺟﺪول ﻣﺠﻤﻮع داده ﯾﮑﭙﺎرﭼﻪ ﻣﺮﺗﺒﻂ اﺳﺖ و ﺷﺎﻣﻞ ﺳﺘﻮن ﻫﺎ و ﺳﻄﺮﻫﺎ ﻣﯽ ﺷﻮد.
ﮔﺮاﻣﺮ SQL
ﯾﮏ ﭘﺎﯾﮕﺎه داده اﻏﻠﺐ ﺷﺎﻣﻞ ﯾﮏ ﯾﺎ ﭼﻨﺪ ﺟﺪول اﺳﺖ .ﻫﺮ ﺟﺪول ﺑﻮﺳﯿﻠﻪ ﯾﮏ ﻧﺎم )ﻣﺜﻞ " "Ordersﯾﺎ "("Customers
ﺷﻨﺎﺳﺎﯾﯽ ﻣﯽ ﺷﻮد .ﺟﺪاول ﺷﺎﻣﻞ رﮐﻮردﻫﺎ )ﺳﻄﺮﻫﺎ( ﻫﻤﺮاه داده ﻫﺴﺘﻨﺪ.
2
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﺟﺪول ﺑﺎﻻ ﺷﺎﻣﻞ ﺳﻪ رﮐﻮرد )ﺑﺮاي ﻫﺮ ﺷﺨﺺ( و ﭘﻨﺞ ﺳﺘﻮن ) Address ،FirstName ،LastName ،P_Idو (Cityاﺳﺖ.
ﻋﺒﺎرات SQL
ﺑﯿﺸﺘﺮ ﻋﻤﻠﯿﺎﺗﯽ ﮐﻪ ﻧﯿﺎز دارﯾﺪ در ﯾﮏ ﭘﺎﯾﮕﺎه داده اﻧﺠﺎم دﻫﯿﺪ ،ﺑﺎ ﻋﺒﺎرات SQLاﻧﺠﺎم ﻣﯽ ﺷﻮﻧﺪ.
در اﯾﻦ آﻣﻮزﺷﯽ ،ﻫﻤﻪ ﻋﺒﺎرات ﻣﺨﺘﻠﻒ SQLرا ﺑﻪ ﺷﻤﺎ درس ﺧﻮاﻫﯿﻢ داد.
ﺑﯿﺸﺘﺮ ﺳﯿﺴﺘﻢ ﻫﺎي ﭘﺎﯾﮕﺎه داده ﯾﮏ ﺳﻤﯿﮑﺎﻟﻮن در اﻧﺘﻬﺎي ﻫﺮ ﺟﻤﻠﻪ SQLرا ﻻزم ﻣﯽ داﻧﺪ.
ﺳﻤﯿﮑﺎﻟﻮن ﯾﮏ روش اﺳﺘﺎﻧﺪارد ﺑﺮاي ﺟﺪا ﺳﺎزي ﻫﺮ ﻋﺒﺎرت SQLدر ﺳﯿﺴﺘﻢ ﻫﺎي ﭘﺎﯾﮕﺎه داده اﺳﺖ ﮐﻪ اﺟﺎزه اﺟﺮاي ﺑﯿﺶ از ﯾﮏ
ﻋﺒﺎرت SQLرا در درﺧﻮاﺳﺖ ﺳﺮور را ﻣﯽ دﻫﺪ.
ﻣﺎ از MS Accessو SQL Server 2000اﺳﺘﻔﺎده ﻣﯽ ﮐﻨﯿﻢ و ﻣﺠﺒﻮر ﻧﯿﺴﺘﻢ ﯾﮏ ﺳﻤﯿﮑﺎﻟﻮن ﺑﻌﺪ از ﻫﺮ ﻋﺒﺎرت SQLﻗﺮار دﻫﯿﻢ اﻣﺎ
ﺑﻌﻀﯽ ﺑﺮﻧﺎﻣﻪ ﻫﺎي ﭘﺎﯾﮕﺎه داده ﺷﻤﺎ را ﻣﺠﺒﻮر ﺑﻪ اﺳﺘﻔﺎده آن ﻣﯽ ﮐﻨﻨﺪ.
SQLﻣﯽ ﺗﻮاﻧﺪ ﺑﻪ دو ﺑﺨﺶ ﺗﻘﺴﯿﻢ ﺷﻮد :زﺑﺎن دﺳﺘﮑﺎري داده ) (DMLو زﺑﺎن ﺗﻌﺮﯾﻒ داده ).(DDL
3
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﺑﺨﺶ DDLاز SQLﺑﻪ ﺟﺪاول ﭘﺎﯾﮕﺎه داده اﺟﺎزه ﺳﺎﺧﺖ ﯾﺎ ﺣﺬف را ﻣﯽ دﻫﺪ .ﻫﻤﭽﻨﯿﻦ ﮐﻠﯿﺪﻫﺎي ﻓﻬﺮﺳﺖ را ﺗﻌﺮﯾﻒ ﻣﯽ ﮐﻨﺪ ،ارﺗﺒﺎط
ﺑﯿﻦ ﺟﺪاول را ﺗﻌﯿﯿﻦ ﻣﯽ ﮐﻨﺪ و ﻣﺤﺪودﯾﺖ ﻫﺎ ﺑﯿﻦ ﺟﺪاول را اﻋﻤﺎل ﻣﯽ ﮐﻨﺪ .ﻣﻬﻤﺘﺮﯾﻦ ﻋﺒﺎرات DDLدر SLQﻋﺒﺎرﺗﻨﺪ از:
)SELECT column_name(s
FROM table_name
و
ﺗﺬﮐﺮ SQL :ﺣﺴﺎس ﺑﻪ ﺣﺮوف ﺑﺰرگ و ﮐﻮﭼﮏ ﻧﯿﺴﺖ SELECT .ﻣﺜﻞ selectاﺳﺖ.
4
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
:"Persons"ﺟﺪول
." را از ﺟﺪول اﻧﺘﺨﺎب ﮐﻨﯿﻢFirstName" " وLastName" اﮐﻨﻮن ﻣﯽ ﺧﻮاﻫﯿﻢ ﻣﺤﺘﻮاي ﺳﺘﻮن ﻫﺎﯾﯽ ﺑﺎ ﻧﺎم
LastName FirstName
Hansen Ola
Svendson Tove
Pettersen Kari
SELECT * ﻣﺜﺎل
5
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﺑﯿﺸﺘﺮ ﺳﯿﺴﺘﻢ ﻫﺎي ﻧﺮم اﻓﺰاري ﭘﺎﯾﮕﺎه داده اﺟﺎزه ﭘﯿﻤﺎﯾﺶ ﺑﺎ ﺗﻮاﺑﻊ ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ را در ﺟﺪول ﻧﺘﯿﺠﻪ ﻣﯽ دﻫﻨﺪ؛ ﻣﺜﻞ Move-To-
Move-To-Next-Record ،Get-Record-Content ،First-Recordو ﻏﯿﺮه
ﺗﻮاﺑﻊ ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ از اﯾﻦ ﻗﺒﯿﻞ ﺑﻪ ﻋﻨﻮان ﻗﺴﻤﺘﯽ از اﯾﻦ آﻣﻮزش ﻧﯿﺴﺘﻨﺪ .ﺑﺮاي ﯾﺎدﮔﯿﺮي در ﻣﻮرد دﺳﺘﺮﺳﯽ ﺑﻪ داده ﺑﺎ ﻓﺮاﺧﻮاﻧﯽ ﺗﺎﺑﻊ،
ﻟﻄﻔﺎ از دروه آﻣﻮزﺷﯽ ADOﯾﺎ دوره آﻣﻮزﺷﯽ PHPﻣﺎ ﺑﺎزدﯾﺪ ﮐﻨﯿﺪ.
ﺑﺮﺧﯽ از ﺳﺘﻮن ﻫﺎي ﯾﮏ ﺟﺪول ﻣﻤﮑﻦ اﺳﺖ ﻣﻘﺪار ﻣﺤﺘﻮاي ﺗﮑﺮاري داﺷﺘﻪ ﺑﺎﺷﺪ .اﯾﻦ ﯾﮏ ﻣﺸﮑﻞ ﻧﯿﺴﺖ اﻣﺎ ﮔﺎﻫﯽ اوﻗﺎت ﻣﯽ ﺧﻮاﻫﯿﺪ
ﻓﻘﻂ ﻣﻘﺎدﯾﺮ ﻣﺨﺘﻠﻔﯽ )ﻣﺘﻤﺎﯾﺰ( ﮐﻪ در ﯾﮏ ﺟﺪول ﻫﺴﺘﻨﺪ را ﻟﯿﺴﺖ ﮐﻨﯿﺪ.
ﮐﻠﻤﻪ ﮐﻠﯿﺪي DISTINCTﻣﯽ ﺗﻮاﻧﺪ ﻓﻘﻂ ﺑﺮاي ﺑﺮﮔﺮداﻧﺪن ﻣﻘﺎدﯾﺮ ﻣﺘﻤﺎﯾﺰ )ﻣﺘﻔﺎوت( اﺳﺘﻔﺎده ﺷﻮد.
ﺟﺪول":"Persons
6
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﺣﺎل ﻣﯽ ﺧﻮاﻫﯿﻢ در ﺟﺪول ﺑﺎﻻ ﺗﻨﻬﺎ ﻣﻘﺎدﯾﺮ ﻣﺘﻔﺎوت از ﺳﺘﻮﻧﯽ ﺑﻨﺎم " "Cityرا اﻧﺘﺨﺎب ﮐﻨﯿﻢ.
City
Sandnes
Stavanger
ﻋﺒﺎرت WHEREﻓﻘﻂ ﺑﺮاي اﺳﺘﺨﺮاج آن رﮐﻮردﻫﺎﯾﯽ ﮐﻪ ﯾﮏ ﻣﻌﯿﺎر ﺧﺎﺻﯽ را اﻧﺠﺎم ﻣﯽ دﻫﻨﺪ ،اﺳﺘﻔﺎده ﻣﯽ ﺷﻮد.
)SELECT column_name(s
FROM table_name
WHERE column_name operator value
ﺟﺪول":"Persons
اﮐﻨﻮن ﻣﯽ ﺧﻮاﻫﯿﻢ ﻓﻘﻂ اﺷﺨﺎﺻﯽ ﮐﻪ در ﺷﻬﺮ ” “Sandnesزﻧﺪﮔﯽ ﻣﯽ ﮐﻨﻨﺪ را از ﺟﺪول ﺑﺎﻻ اﻧﺘﺨﺎب ﮐﻨﯿﻢ.
SQLﻧﻘﻞ ﻗﻮل ﻫﺎي ﺗﮑﯽ در ﻣﻮرد ﻣﻘﺎدﯾﺮ ﻣﺘﻨﯽ ﺑﮑﺎر ﻣﯽ ﺑﺮد )ﺑﯿﺸﺘﺮ ﺳﯿﺴﺘﻤﻬﺎي ﭘﺎﯾﮕﺎه داده ﻧﻘﻞ ﻗﻮل ﻫﺎي دوﺗﺎﯾﯽ ﻣﯽ ﭘﺬﯾﺮﻧﺪ(.
This is correct:
This is wrong:
This is correct:
This is wrong:
ﺗﻮﺿﯿﺤﺎت ﻋﻤﻠﮕﺮ
ﻣﺴﺎوي =
ﻧﺎﺑﺮاﺑﺮ ><
8
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﻧﮑﺘﻪ :در ﺑﯿﺸﺘﺮ ﻧﺴﺨﻪ ﻫﺎي SQLﻋﻤﻠﮕﺮ >< ﻣﻤﮑﻦ اﺳﺖ ﺑﻪ ﻋﻨﻮان =! ﻧﻮﺷﺘﻪ ﺷﻮد.
ﻋﻤﻠﮕﺮ ANDﯾﮏ رﮐﻮرد را ﻧﻤﺎﯾﺶ ﻣﯽ دﻫﺪ؛ اﮔﺮ ﻫﺮ دو ﺷﺮط اوﻟﯽ و دوﻣﯽ درﺳﺖ ﺑﺎﺷﻨﺪ.
ﻋﻤﻠﮕﺮ ORﯾﮏ رﮐﻮرد را ﻧﻤﺎﯾﺶ ﻣﯽ دﻫﺪ؛ اﮔﺮ ﯾﮑﯽ از دو ﺷﺮط اوﻟﯽ ﯾﺎ دوﻣﯽ درﺳﺖ ﺑﺎﺷﺪ.
ﺟﺪول ":"Persons
اﮐﻨﻮن ﻣﯽ ﺧﻮاﻫﯿﻢ ﻓﻘﻂ اﺷﺨﺎﺻﯽ ﮐﻪ ﻧﺎﻣﺸﺎن ” “Toveو ﻧﺎم ﺧﺎﻧﻮادﮔﯽ ﺷﺎن ” “Svendsonاﺳﺖ را اﻧﺘﺨﺎب ﮐﻨﯿﻢ.
9
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
OR ﻣﺜﺎﻟﯽ از ﻋﻤﻠﮕﺮ
.“ اﺳﺖ را اﻧﺘﺨﺎب ﮐﻨﯿﻢOla” “ ﯾﺎTove” اﮐﻨﻮن ﻣﯽ ﺧﻮاﻫﯿﻢ ﻓﻘﻂ اﺷﺨﺎﺻﯽ ﮐﻪ ﻧﺎﻣﺸﺎن
OR وAND ﺗﺮﮐﯿﺐ
.( را ﺗﺮﮐﯿﺐ ﮐﻨﯿﺪ )از ﭘﺮاﻧﺘﺰﻫﺎ ﺑﺮاي ﻋﺒﺎرات ﭘﯿﭽﯿﺪه اﺳﺘﻔﺎده ﮐﻨﯿﺪOR وAND ﻫﻤﭽﻨﯿﻦ ﻣﯽ ﺗﻮاﻧﯿﺪ
.“ اﺳﺖ را اﻧﺘﺨﺎب ﮐﻨﯿﻢOla” “ ﯾﺎTove” “ و ﻧﺎﻣﺸﺎنSvendson” اﮐﻨﻮن ﻣﯽ ﺧﻮاﻫﯿﻢ ﻓﻘﻂ اﺷﺨﺎﺻﯽ ﮐﻪ ﻧﺎم ﺧﺎﻧﻮادﮔﯽ ﺷﺎن
10
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﮐﻠﻤﻪ ﮐﻠﯿﺪي ORDER BYﺑﺮاي ﻣﺮﺗﺐ ﮐﺮدن ﺟﺪول ﻧﺘﯿﺠﻪ اﺳﺘﻔﺎده ﻣﯽ ﺷﻮد.
ﮐﻠﻤﻪ ﮐﻠﯿﺪي ORDER BYﺑﺮاي ﻣﺮﺗﺐ ﮐﺮدن ﺟﺪول ﻧﺘﯿﺠﻪ ﺗﻮﺳﻂ ﯾﮏ ﺳﺘﻮن ﻣﺸﺨﺺ ،اﺳﺘﻔﺎده ﻣﯽ ﺷﻮد.
ﮐﻠﻤﻪ ﮐﻠﯿﺪي ORDER BYﺑﻪ ﺻﻮرت ﭘﯿﺶ ﻓﺮض رﮐﻮردﻫﺎ را ﺻﻌﻮدي ﻣﺮﺗﺐ ﻣﯽ ﮐﻨﺪ.
اﮔﺮ ﻣﯽ ﺧﻮاﻫﯿﺪ رﮐﻮردﻫﺎ را ﻧﺰوﻟﯽ ﻣﺮﺗﺐ ﮐﻨﯿﺪ ،ﻣﯽ ﺗﻮاﻧﯿﺪ از ﮐﻠﻤﻪ ﮐﻠﯿﺪي DESCاﺳﺘﻔﺎده ﮐﻨﯿﺪ.
)SELECT column_name(s
FROM table_name
ORDER BY column_name(s) ASC|DESC
ﺟﺪول ":"Persons
ﺣﺎل ﻣﯽ ﺧﻮاﻫﯿﻢ ﻫﻤﻪ اﺷﺨﺎص را در ﺟﺪول ﺑﺎﻻ اﻧﺘﺨﺎب ﮐﻨﯿﻢ؛ اﻣﺎ ﻣﯽ ﺧﻮاﻫﯿﻢ آﻧﻬﺎ را ﺑﻮﺳﯿﻠﻪ ﻧﺎم ﺧﻮاﻧﻮادﮔﯽ ﺷﺎن ﻣﺮﺗﺐ ﮐﻨﯿﻢ.
11
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
ﺣﺎل ﻣﯽ ﺧﻮاﻫﯿﻢ ﻫﻤﻪ اﺷﺨﺎص را در ﺟﺪول ﺑﺎﻻ اﻧﺘﺨﺎب ﮐﻨﯿﻢ؛ اﻣﺎ ﻣﯽ ﺧﻮاﻫﯿﻢ اﻧﻬﺎ را ﺑﻮﺳﯿﻠﻪ ﻧﺎم ﺧﻮاﻧﻮادﮔﯽ ﺷﺎن ﺑﻪ ﺻﻮرت ﻧﺰوﻟﯽ
.ﻣﺮﺗﺐ ﮐﻨﯿﻢ
12
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
: ﻓﻘﻂ ﻣﻘﺎدﯾﺮﺷﺎن را ﻣﺸﺨﺺ ﻣﯽ ﮐﻨﺪ،ﺷﮑﻞ اول اﺳﺎﻣﯽ ﺳﺘﻮﻧﻬﺎﯾﯽ ﮐﻪ داده در آﻧﺠﺎ درج ﺧﻮاﻫﺪ ﺷﺪ را ﻣﺸﺨﺺ ﻧﻤﯽ ﮐﻨﺪ
13
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
.ﻫﻤﭽﻨﯿﻦ ﻣﻤﮑﻦ اﺳﺖ ﻓﻘﻂ داده ﻫﺎ را در ﺳﺘﻮن ﻫﺎي ﻣﺸﺨﺺ اﺿﺎﻓﻪ ﮐﻨﯿﺪ
"FirstName" " وLastName" ،"P_Id" زﯾﺮ ﺳﻄﺮﺟﺪﯾﺪي را اﺿﺎﻓﻪ ﺧﻮاﻫﺪ ﮐﺮد؛ اﻣﺎ ﻓﻘﻂ داده را ﺑﻪ ﺳﺘﻮن ﻫﺎيSQL ﻋﺒﺎرت
.اﺿﺎﻓﻪ ﻣﯽ ﮐﻨﺪ
UPDATE ﻋﺒﺎرت
UPDATE ﻋﺒﺎرت
14
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
ﺗﻌﯿﯿﻦ ﻣﯽ ﮐﻨﺪ ﮐﻪ رﮐﻮرد ﯾﺎ رﮐﻮردﻫﺎﯾﯽ ﺑﺎﯾﺪ ﺑﻪ روزWHERE ﻋﺒﺎرت. ﺗﻮﺟﻪ ﮐﻨﯿﺪUPDATE در ﮔﺮاﻣﺮWHERE ﺑﻪ ﻋﺒﺎرت:ﻧﮑﺘﻪ
! را ﺣﺬف ﮐﻨﯿﺪ ﻫﻤﻪ ﮐﻮردﻫﺎ ﺑﺮوز ﺧﻮاﻫﻨﺪ ﺷﺪWHERE اﮔﺮ ﻋﺒﺎرت.ﺷﻮﻧﺪ
:"Persons"ﺟﺪول
UPDATE Persons
SET Address='Nissestien 67', City='Sandnes'
WHERE LastName='Tjessem' AND FirstName='Jakob'
15
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
: ﻣﺜﻞ اﯾﻦ، را در ﻣﺜﺎل ﺑﺎﻻ ﺣﺬف ﮐﺮده ﺑﺎﺷﯿﻢWHERE اﮔﺮ ﻣﺎ ﻋﺒﺎرت. دﻗﺖ ﮐﻨﯿﺪ،زﻣﺎﻧﯿﮑﻪ رﮐﻮردﻫﺎ را ﺑﺮوز ﻣﯽ ﮐﻨﯿﺪ
UPDATE Persons
SET Address='Nissestien 67', City='Sandnes'
DELETE ﻋﺒﺎرت
DELETE ﻋﺒﺎرت
ﺗﻌﯿﯿﻦ ﻣﯽ ﮐﻨﺪ ﮐﻪ رﮐﻮردﻫﺎ ﯾﺎ رﮐﻮردﻫﺎﯾﯽ ﺑﺎﯾﺪ ﺣﺬفWHERE ﻋﺒﺎرت. ﺗﻮﺟﻪ ﮐﻨﯿﺪDELETE در ﮔﺮاﻣﺮWHERE ﺑﻪ ﻋﺒﺎرت:ﻧﮑﺘﻪ
. را ﺣﺬف ﮐﻨﯿﺪ ﻫﻤﻪ رﮐﻮردﻫﺎ ﺣﺬف ﺧﻮاﻫﻨﺪ ﺷﺪWHERE اﮔﺮ ﺷﻤﺎ ﻋﺒﺎرت.ﺷﻮﻧﺪ
:"Persons" ﺟﺪول
16
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
وﯾﮋﮔﯽ ﻫﺎ و ﻓﻬﺮﺳﺖ ﻫﺎي ﺟﺪول، ﺑﻪ اﯾﻦ ﻣﻌﻨﯽ ﮐﻪ ﺳﺎﺧﺘﺎر.ﺣﺬف ﮐﺮدن ﻫﻤﻪ ﺳﻄﺮﻫﺎ در ﯾﮏ ﺟﺪول ﺑﺪون ﺣﺬف ﺟﺪول ﻣﻤﮑﻦ اﺳﺖ
.دﺳﺖ ﻧﺨﻮرده ﺑﺎﻗﯽ ﺧﻮاﻫﻨﺪ ﻣﺎﻧﺪ
or
! اﯾﻦ ﻋﺒﺎرت را ﻧﻤﯽ ﺗﻮاﻧﯿﺪ ﺧﻨﺜﯽ ﮐﻨﯿﺪ. وﻗﺘﯽ رﮐﻮردﻫﺎ را ﺣﺬف ﻣﯽ ﮐﻨﯿﺪ ﺧﯿﻠﯽ ﻣﺮاﻗﺐ ﺑﺎﺷﯿﺪ:ﻧﮑﺘﻪ
17
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﻋﺒﺎرت TOPدر SQLﺑﺮاي ﺗﻌﯿﯿﻦ ﺗﻌﺪادي از رﮐﻮردﻫﺎ ﺑﺮاي ﺑﺮﮔﺮداﻧﺪن ،اﺳﺘﻔﺎده ﻣﯽ ﺷﻮد .
ﻋﺒﺎرت TOPدر ﺟﺪول ﻫﺎي ﺑﺰرگ ﺑﺎ ﻫﺰاران رﮐﻮرد ﻣﯽ ﺗﻮاﻧﺪ ﺑﺴﯿﺎر ﻣﻔﯿﺪ ﺑﺎﺷﺪ .ﺑﺮﮔﺮداﻧﺪن ﺗﻌﺪاد زﯾﺎدي از رﮐﻮردﻫﺎ ﻣﯽ ﺗﻮاﻧﺪ
ﻋﻤﻠﮑﺮد را ﺗﺤﺖ ﻓﺸﺎر ﻗﺮار دﻫﺪ.
ﻧﮑﺘﻪ :ﻫﻤﻪ ي ﺳﯿﺴﺘﻢ ﻫﺎي ﭘﺎﯾﮕﺎه داده از ﻋﺒﺎرت TOPﭘﺸﺘﯿﺒﺎﻧﯽ ﻧﻤﯽ ﮐﻨﻨﺪ.
ﮔﺮاﻣﺮ MySQL
)SELECT column_name(s
FROM table_name
LIMIT number
ﻣﺜﺎل :
* SELECT
FROM Persons
LIMIT 5
ﮔﺮاﻣﺮ Oracle
)SELECT column_name(s
FROM table_name
WHERE ROWNUM <= number
ﻣﺜﺎل :
18
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
SELECT *
FROM Persons
WHERE ROWNUM <=5
:"Persons" ﺟﺪول
:“Persons” ﺟﺪول
19
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﻋﻤﻠﮕﺮ LIKEدر ﯾﮏ ﻋﺒﺎرت ،WHEREﻋﺒﺎرﺗﯽ اﺳﺖ ﮐﻪ ﺑﺮاي ﺟﺴﺘﺠﻮي ﯾﮏ اﻟﮕﻮي ﺗﻌﯿﯿﻦ ﺷﺪه در ﯾﮏ ﺳﺘﻮن اﺳﺘﻔﺎده ﻣﯽ
ﺷﻮد.
ﻋﻤﻠﮕﺮ LIKE
ﻋﻤﻠﮕﺮ LIKEﺑﺮاي ﺟﺴﺘﺠﻮي ﯾﮏ اﻟﮕﻮي ﺗﻌﯿﯿﻦ ﺷﺪه در ﯾﮏ ﺳﺘﻮن اﺳﺘﻔﺎده ﻣﯽ ﺷﻮد .
)SELECT column_name(s
FROM table_name
WHERE column_name LIKE pattern
ﺟﺪول ”:“Persons
اﮐﻨﻮن ﻣﯽ ﺧﻮاﻫﯿﻢ از ﺟﺪول ﺑﺎﻻ اﺷﺨﺎﺻﯽ را ﮐﻪ ﺷﻬﺮ زﻧﺪﮔﯽ آن ﻫﺎ ﺑﺎ " "sﺷﺮوع ﻣﯽ ﺷﻮد را اﻧﺘﺨﺎب ﮐﻨﯿﻢ.
ﻋﻼﻣﺖ " "%ﻣﯽ ﺗﻮاﻧﺪ ﺑﺮاي ﺗﻌﺮﯾﻒ ﮐﺎراﮐﺘﺮﻫﺎي ﺟﺎﯾﮕﺰﯾﻦ ﺷﻮﻧﺪه ) ﺣﺮوف ﻧﺎﭘﯿﺪا در اﻟﮕﻮ ( ﻗﺒﻞ و ﺑﻌﺪ از اﻟﮕﻮ اﺳﺘﻔﺎده ﺷﻮد .
20
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
." ﭘﺎﯾﺎن ﻣﯽ ﯾﺎﺑﺪs" " اﺷﺨﺎﺻﯽ را اﻧﺘﺨﺎب ﮐﻨﯿﻢ ﮐﻪ ﺷﻬﺮ زﻧﺪﮔﯽ آﻧﻬﺎ ﺑﺎpersons" ﺳﭙﺲ ﻣﯽ ﺧﻮاﻫﯿﻢ از ﺟﺪول
." ﺑﺎﺷﺪtav" " اﺷﺨﺎﺻﯽ را اﻧﺘﺨﺎب ﮐﻨﯿﻢ ﮐﻪ ﺷﻬﺮ زﻧﺪﮔﯽ آﻧﻬﺎ ﺷﺎﻣﻞ اﻟﮕﻮيpersons" ﺳﭙﺲ ﻣﯽ ﺧﻮاﻫﯿﻢ از ﺟﺪول
“ اﺷﺨﺎﺻﯽ ﮐﻪ ﺷﻬﺮ زﻧﺪﮔﯽ آﻧﻬﺎ ﺷﺎﻣﻞ اﻟﮕﻮيPersons” ﻣﯽ ﺗﻮاﻧﯿﻢ از ﺟﺪولNOT ﻫﻤﭽﻨﯿﻦ ﺑﺎ اﺳﺘﻔﺎده از ﮐﻠﻤﻪ ﮐﻠﯿﺪي
.“ ﻧﯿﺴﺖ را اﻧﺘﺨﺎب ﮐﻨﯿﻢtav”
21
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﮐﺎراﮐﺘﺮﻫﺎي ﺟﺎﯾﮕﺰﯾﻦ ﺷﻮﻧﺪه ،SQLﻫﻨﮕﺎم ﺟﺴﺘﺠﻮي داده در ﯾﮏ ﭘﺎﯾﮕﺎه داده ﻣﯽ ﺗﻮاﻧﺪ ﯾﮏ ﯾﺎ ﭼﻨﺪ ﮐﺎراﮐﺘﺮ را ﺟﺎﯾﮕﺰﯾﻦ ﮐﻨﺪ.
ﯾﺎ
][!charlist
اﮐﻨﻮن ﻣﯽ ﺧﻮاﻫﯿﻢ از ﺟﺪول" "personsاﺷﺨﺎﺻﯽ را اﻧﺘﺨﺎب ﮐﻨﯿﻢ ﮐﻪ ﺷﻬﺮ زﻧﺪﮔﯽ آﻧﻬﺎ ﺑﺎ " "saﺷﺮوع ﻣﯽ ﺷﻮد.
22
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﺳﭙﺲ ﻣﯽ ﺧﻮاﻫﯿﻢ از ﺟﺪول " "personsاﺷﺨﺎﺻﯽ را اﻧﺘﺨﺎب ﮐﻨﯿﻢ ﮐﻪ ﺷﻬﺮ زﻧﺪﮔﯽ آﻧﻬﺎ ﺷﺎﻣﻞ اﻟﮕﻮي " "nesﺑﺎﺷﺪ .
اﮐﻨﻮن ﻣﯽ ﺧﻮاﻫﯿﻢ از ﺟﺪول " "Personsاﺷﺨﺎﺻﯽ ﮐﻪ ﻧﺎم آﻧﻬﺎ ﺑﺎ ﻫﺮ ﮐﺎراﮐﺘﺮي ﺷﺮوع ﻣﯽ ﺷﻮد و ﺑﺎ " "laاداﻣﻪ ﻣﯽ ﯾﺎﺑﺪ را
اﻧﺘﺨﺎب ﮐﻨﯿﻢ.
ﺳﭙﺲ ﻣﯽ ﺧﻮاﻫﯿﻢ از ﺟﺪول " "personsاﺷﺨﺎﺻﯽ را اﻧﺘﺨﺎب ﮐﻨﯿﻢ ﮐﻪ ﻧﺎم ﺧﺎﻧﻮادﮔﯽ آن ﻫﺎ ﺑﺎ " "sﺷﺮوع ﻣﯽ ﺷﻮد و ﺑﺎ ﻫﺮ
ﮐﺎراﮐﺘﺮ ،"end" ،ﻫﺮ ﮐﺎراﮐﺘﺮ و " "onاداﻣﻪ ﻣﯽ ﯾﺎﺑﺪ را اﻧﺘﺨﺎب ﮐﻨﯿﻢ.
23
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
اﮐﻨﻮن ﻣﯽ ﺧﻮاﻫﯿﻢ از ﺟﺪول " "personsاﺷﺨﺎﺻﯽ را اﻧﺘﺨﺎب ﮐﻨﯿﻢ ﮐﻪ ﻧﺎم ﺧﺎﻧﻮادﮔﯽ آن ﻫﺎ ﺑﺎ ""sﯾﺎ " "bﯾﺎ " "pﺷﺮوع ﻣﯽ
ﺷﻮد.
ﺳﭙﺲ ﻣﯽ ﺧﻮاﻫﯿﻢ از ﺟﺪول " "personsاﺷﺨﺎﺻﯽ را اﻧﺘﺨﺎب ﮐﻨﯿﻢ ﮐﻪ ﻧﺎم ﺧﺎﻧﻮادﮔﯽ آن ﻫﺎ ﺑﺎ " "sﯾﺎ " "bﯾﺎ " "pﺷﺮوع
ﻧﻤﯽ ﺷﻮد .
ﻋﻤﻠﮕﺮ INﺑﻪ ﺷﻤﺎ اﺟﺎزه ﻣﯽ دﻫﺪ ﻣﻘﺎدﯾﺮ ﭼﻨﺪﮔﺎﻧﻪ در ﻋﺒﺎرت WHEREﺗﻌﯿﯿﻦ ﮐﻨﯿﺪ .
24
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...)
IN ﻣﺜﺎﻟﯽ از ﻋﻤﻠﮕﺮ
:"Persons" ﺟﺪول
" اﺳﺖ را اﻧﺘﺨﺎبpettersen" " ﯾﺎHansen" اﮐﻨﻮن ﻣﯽ ﺧﻮاﻫﯿﻢ از ﺟﺪول ﺑﺎﻻ اﺷﺨﺎﺻﯽ را ﮐﻪ ﻧﺎم ﺧﺎﻧﻮادﮔﯽ آن ﻫﺎ ﺑﺮاﺑﺮ ﺑﺎ
.ﮐﻨﯿﻢ
. ﺑﺮاي اﻧﺘﺨﺎب ﯾﮏ داﻣﻨﻪ از داده ﺑﯿﻦ ﻣﻘﺪار اﺳﺘﻔﺎده ﻣﯽ ﺷﻮد،WHERE در ﯾﮏ ﻋﺒﺎرتBETWEEN ﻋﻤﻠﮕﺮ
BETWEEN ﻋﻤﻠﮕﺮ
. ﻣﺘﻦ ﯾﺎ داده ﺑﺎﺷﺪ، ﻣﻘﺎدﯾﺮ ﻣﯽ ﺗﻮاﻧﻨﺪ اﻋﺪاد. داﻣﻨﻪ اي از داده ﻫﺎ را از ﺑﯿﻦ دو ﻣﻘﺪار اﻧﺘﺨﺎب ﻣﯽ ﮐﻨﺪBETWEEN ﻋﻤﻠﮕﺮ
25
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
)SELECT column_name(s
FROM table_name
WHERE column_name
BETWEEN value1 AND value2
ﺟﺪول ":"Persons
اﮐﻨﻮن ﻣﯽ ﺧﻮاﻫﯿﻢ از ﺟﺪول ﺑﺎﻻ اﺷﺨﺎﺻﯽ را ﮐﻪ ﻧﺎم ﺧﺎﻧﻮادﮔﯽ آن ﻫﺎ ﺑﻪ ﺻﻮرت ﺣﺮوف اﻟﻔﺒﺎ ﺑﯿﻦ " "Hansenو ""pettersen
اﺳﺖ را اﻧﺘﺨﺎب ﮐﻨﯿﻢ.
ﺗﺬﮐﺮ :ﻋﻤﻠﮕﺮ BETWEENدر ﭘﺎﯾﮕﺎه داده ﻫﺎي ﻣﺨﺘﻠﻒ ﺑﻪ ﻃﻮر ﻣﺘﻔﺎوت ﻋﻤﻞ ﻣﯽ ﮐﻨﺪ.
در ﺑﻌﻀﯽ از ﭘﺎﯾﮕﺎه داده ﻫﺎ ،اﺷﺨﺎﺻﯽ ﺑﺎ ﻧﺎم ﺧﺎﻧﻮادﮔﯽ " "Hansenﯾﺎ " "Pettersenﻟﯿﺴﺖ ﻧﻤﯽ ﺷﻮﻧﺪ؛ زﯾﺮا
ﻋﻤﻠﮕﺮ BETWEENﻓﻘﻂ ﻓﯿﻠﺪﻫﺎﯾﯽ ﮐﻪ ﺑﯿﻦ آن ﻫﺎ ﻫﺴﺘﻨﺪ )ﺑﺎﺳﺘﺜﻨﺎي ﻣﻘﺎدﯾﺮ ﺗﺴﺖ( را اﻧﺘﺨﺎب ﻣﯽ ﮐﻨﺪ.
در دﯾﮕﺮ ﭘﺎﯾﮕﺎه داده ﻫﺎ ،اﺷﺨﺎﺻﯽ ﺑﺎ ﻧﺎم ﺧﺎﻧﻮادﮔﯽ " "Hansenﯾﺎ " "pettersenﻟﯿﺴﺖ ﻣﯽ ﺷﻮﻧﺪ ،زﯾﺮا ﻋﻤﻠﮕﺮ BETWEEN
ﻓﯿﻠﺪﻫﺎﯾﯽ ﮐﻪ ﺑﯿﻦ و ﺷﺎﻣﻞ آن ﻫﺎ ﻫﺴﺘﻨﺪ را اﻧﺘﺨﺎب ﻣﯽ ﮐﻨﺪ.
و در ﺑﺮﺧﯽ دﯾﮕﺮ ،اﺷﺨﺎﺻﯽ ﺑﺎ ﻧﺎم ﺧﺎﻧﻮادﮔﯽ " "Hansenدر ﻟﯿﺴﺖ ﻫﺴﺘﻨﺪ اﻣﺎ " "pattersenدر ﻟﯿﺴﺖ ﻧﯿﺴﺖ )ﺷﺒﯿﻪ ﻣﺜﺎل
ﺑﺎﻻ( ،زﯾﺮا ﻋﻤﻠﮕﺮ BETWEENﻓﯿﻠﺪﻫﺎي ﺑﯿﻦ ﻣﻘﺎدﯾﺮ ﺗﺴﺖ و اوﻟﯿﻦ ﻣﻘﺪار ﺗﺴﺖ را اﻧﺘﺨﺎب ﻣﯽ ﮐﻨﺪ )ﺑﺎﺳﺘﺜﻨﺎي ﻣﻘﺪار آﺧﺮ ﺗﺴﺖ(.
ﻣﺜﺎل 2
26
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﺑﺮاي ﻧﻤﺎﯾﺶ اﺷﺨﺎﺻﯽ ﮐﻪ ﺑﯿﺮون از داﻣﻨﻪ ﻣﺜﺎل ﻗﺒﻞ ﻫﺴﺘﻨﺪ ،از NOT BETWEENاﺳﺘﻔﺎده ﮐﻨﯿﺪ:
Aliasدر SQL
Aliasدر SQL
ﻣﯽ ﺗﻮاﻧﯿﺪ ﯾﮏ ﺟﺪول ﯾﺎ ﯾﮏ ﺳﺘﻮن را ﺑﺎ ﻧﺎم دﯾﮕﺮ ،ﺑﺎ اﺳﺘﻔﺎده از ) Aliasﻧﺎم ﻣﺴﺘﻌﺎر( ﻣﻌﯿﻦ ﮐﻨﯿﺪ .اﯾﻦ ﻣﯽ ﺗﻮاﻧﺪ ﯾﮏ ﭼﯿﺰ ﺧﻮب
ﺑﺮاي ﻧﺎم ﺟﺪول ﭘﯿﭽﯿﺪه ﯾﺎ ﻧﺎم ﺳﺘﻮن ﻃﻮﻻﻧﯽ ﺑﺎﺷﺪ.
ﯾﮏ ﻧﺎم Aliasﻫﺮ ﭼﯿﺰي ﻣﯽ ﺗﻮاﻧﺪ ﺑﺎﺷﺪ اﻣﺎ ﻣﻌﻤﻮﻻ ﮐﻮﺗﺎه اﺳﺖ.
)SELECT column_name(s
FROM table_name
AS alias_name
ﻣﺜﺎل Alias
ﻓﺮض ﮐﻨﯿﺪ ﯾﮏ ﺟﺪول ﺑﻨﺎم " "personsو ﺟﺪوﻟﯽ دﯾﮕﺮ ﺑﻨﺎم " "Product_Ordersدارﯾﻢ Alias .ﺟﺪول را ﺑﻪ ﺗﺮﺗﯿﺐ ""p
و " "poﻣﻌﯿﻦ ﻣﯽ ﮐﻨﯿﻢ.
اﮐﻨﻮن ﻣﯽ ﺧﻮاﻫﯿﻢ ﻫﻤﻪ ﺳﻔﺎرﺷﺎﺗﯽ ﮐﻪ " "Ola Hansenﻣﺴﺌﻮل آن ﻫﺴﺖ را ﻟﯿﺴﺖ ﮐﻨﯿﻢ.
27
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﻫﻤﺎﻧﻄﻮر ﮐﻪ از دو ﻋﺒﺎرت SELECTﺑﺎﻻ ﻣﯽ ﺑﯿﻨﯿﺪ ،ﻧﺎم ﻣﺴﺘﻌﺎر ﻣﯽ ﺗﻮاﻧﺪ ﭘﺮس و ﺟﻮ را ﻫﻢ ﺑﺮاي ﻧﻮﺷﺘﻦ و ﻫﻢ ﺑﺮاي ﺧﻮاﻧﺪن
آﺳﺎﻧﺘﺮ ﮐﻨﺪ.
JOINﻫﺎ در SQL
JOINﻫﺎ در SQLﺑﺮاي ﭘﺮس و ﺟﻮي داده از دو ﯾﺎ ﭼﻨﺪ ﺟﺪول ،ﻣﺒﻨﯽ ﺑﺮ ﯾﮏ راﺑﻄﻪ ﺑﯿﻦ ﺑﺮﺧﯽ ﺳﺘﻮن ﻫﺎ در اﯾﻦ ﺟﺪول ﻫﺎ
اﺳﺘﻔﺎده ﻣﯽ ﺷﻮد.
JOINدر SQL
ﮐﻠﻤﻪ ﮐﻠﯿﺪي JOINﺑﺮاي ﭘﺮس و ﺟﻮي داده از دو ﯾﺎ ﭼﻨﺪ ﺟﺪول در ﯾﮏ ﻋﺒﺎرت ،SQLﻣﺒﻨﯽ ﺑﺮ ﯾﮏ راﺑﻄﻪ ﺑﯿﻦ ﺑﺮﺧﯽ ﺳﺘﻮن ﻫﺎ
در اﯾﻦ ﺟﺪول ﻫﺎ اﺳﺘﻔﺎده ﻣﯽ ﺷﻮد.
ﮐﻠﯿﺪ اﺻﻠﯽ ) (Primary Keyﯾﮏ ﺳﺘﻮن )ﯾﺎ ﺗﺮﮐﯿﺒﯽ از ﺳﺘﻮن ﻫﺎ( ﺑﺎ ﯾﮏ ﻣﻘﺪار ﻣﻘﺪار ﻣﻨﺤﺼﺮ ﺑﺮاي ﻫﺮ ﺳﻄﺮ اﺳﺖ .ﻫﺮ ﻣﻘﺪار
ﮐﻠﯿﺪ اﺻﻠﯽ ﺑﺎﯾﺪ در داﺧﻞ ﺟﺪول ،ﻣﻨﺤﺼﺮ ﺑﻪ ﻓﺮد ﺑﺎﺷﺪ .ﻫﺪف ﭼﺴﺒﺎﻧﺪن داده ﻫﺎ ﺑﻪ ﯾﮑﺪﯾﮕﺮ ،در ﺳﺮاﺳﺮ ﺟﺪول ﻫﺎ ،ﺟﻠﻮﮔﯿﺮي از
ﺗﮑﺮار ﻫﻤﻪ داده ﻫﺎ در ﻫﺮ ﺟﺪول اﺳﺖ.
28
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﺗﻮﺟﻪ ﮐﻨﯿﺪ ﮐﻪ ﺳﺘﻮن " "P_Idﯾﮏ ﮐﻠﯿﺪ اﺻﻠﯽ در ﺟﺪول " "personsاﺳﺖ .ﺑﻪ اﯾﻦ ﻣﻌﻨﺎ ﮐﻪ دو ﺳﻄﺮ ،ﻣﻘﺪار " "P_Idﯾﮑﺴﺎن
ﻧﻤﯽ ﺗﻮاﻧﻨﺪ داﺷﺘﻪ ﺑﺎﺷﻨﺪ P_Id .دو ﺷﺨﺺ را ﻣﺘﻤﺎﯾﺰ ﻣﯽ ﻧﻤﺎﯾﺪ؛ ﺣﺘﯽ اﮔﺮ آن ﻫﺎ ﻧﺎم ﯾﮑﺴﺎﻧﯽ داﺷﺘﻪ ﺑﺎﺷﻨﺪ.
ﺗﻮﺟﻪ ﮐﻨﯿﺪ ﮐﻪ ﺳﺘﻮن ""O-Idﯾﮏ ﮐﻠﯿﺪ اﺻﻠﯽ در ﺟﺪول" "Ordersاﺳﺖ و ﺳﺘﻮن " "p-Idرا ﺑﻪ ﺟﺪول " "Personsﺑﺪون
اﺳﺘﻔﺎده از ﻧﺎم آﻧﻬﺎ ارﺟﺎع ﻣﯽ دﻫﺪ.
ﻗﺒﻞ از اﯾﻨﮑﻪ ﺑﺎ ﻣﺜﺎل ﻫﺎ اداﻣﻪ دﻫﯿﻢ ،اﻧﻮاع JOINﻫﺎﯾﯽ ﮐﻪ ﻣﯽ ﺗﻮاﻧﯿﺪ اﺳﺘﻔﺎده ﮐﻨﯿﺪ و ﺗﻔﺎوت ﺑﯿﻦ آن ﻫﺎ را ﻟﯿﺴﺖ ﻣﯽ ﮐﻨﯿﻢ.
:LEFT JOINﺗﻤﺎم ﺳﻄﺮﻫﺎي ﺟﺪول ﭼﭗ را ﺑﺮﻣﯽ ﮔﺮداﻧﺪ؛ ﺣﺘﯽ اﮔﺮ ﻧﻈﯿﺮ آن در ﺟﺪول راﺳﺖ ﻧﺒﺎﺷﺪ.
:RIGHT JOINﺗﻤﺎم ﺳﻄﺮﻫﺎي ﺟﺪول راﺳﺖ را ﺑﺮﻣﯽ ﮔﺮداﻧﺪ؛ ﺣﺘﯽ اﮔﺮ ﻧﻈﯿﺮ آن در ﺟﺪول ﭼﭗ ﻧﺒﺎﺷﺪ.
ﮐﻠﻤﻪ ﮐﻠﯿﺪي INNER JOINﺳﻄﺮ ﻫﺎ را زﻣﺎﻧﯽ ﮐﻪ ﺣﺪاﻗﻞ ﯾﮏ ﺗﻄﺎﺑﻖ در دو ﺟﺪول وﺟﻮد داﺷﺘﻪ ﺑﺎﺷﺪ ،ﺑﺮ ﻣﯽ ﮔﺮداﻧﺪ.
)SELECT column_name(s
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
29
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
:"Persons" ﺟﺪول
:"Orders" ﺟﺪول
اﮔﺮ ﺳﻄﺮﻫﺎﯾﯽ در. ﺑﺮ ﻣﯽ ﮔﺮداﻧﺪ، ﺳﻄﺮ ﻫﺎ را زﻣﺎﻧﯽ ﮐﻪ ﺣﺪاﻗﻞ در دو ﺟﺪول ﻧﻈﯿﺮ ﻫﺴﺘﻨﺪINNER JOIN ﮐﻠﻤﻪ ﮐﻠﯿﺪي
. آن ﺳﻄﺮﻫﺎ ﻟﯿﺴﺖ ﻧﻤﯽ ﺷﻮﻧﺪ،" ﻧﯿﺴﺖOrders" " ﻫﺴﺘﻨﺪ ﮐﻪ ﻧﻈﯿﺮﺷﺎن درPersons"
30
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
(؛ ﺣﺘﯽ اﮔﺮ ﻧﻈﯿﺮش در ﺟﺪول راﺳﺖtable_name1) ﺗﻤﺎم ﺳﻄﺮﻫﺎي ﺟﺪول ﭼﭗ را ﺑﺮﻣﯽ ﮔﺮداﻧﺪLEFT JOIN ﮐﻠﻤﻪ ﮐﻠﯿﺪي
.( وﺟﻮد ﻧﺪاﺷﺘﻪ ﺑﺎﺷﺪtable_name2)
SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
. ﻧﺎﻣﯿﺪه ﻣﯽ ﺷﻮدLEFT OUTER JOIN ،LEFT JOIN در ﺑﻌﻀﯽ از ﭘﺎﯾﮕﺎه داده ﻫﺎ:ﭘﺎﻧﻮﺷﺘﻪ
:"Persons" ﺟﺪول
:"Orders" ﺟﺪول
.اﮐﻨﻮن ﻣﯽ ﺧﻮاﻫﯿﻢ از ﺟﺪول ﺑﺎﻻ ﻫﻤﻪ اﺷﺨﺎص را ﺑﺎ ﺳﻔﺎرﺷﺎﺗﺸﺎن )در ﺻﻮرت وﺟﻮد( ﻟﯿﺴﺖ ﮐﻨﯿﻢ
31
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
(؛ ﺣﺘﯽ اﮔﺮ ﻧﻈﯿﺮش درﺟﺪول راﺳﺖpersons) ﺗﻤﺎم ﺳﻄﺮﻫﺎي ﺟﺪول ﭼﭗ را ﺑﺮﻣﯽ ﮔﺮداﻧﺪLEFT JOIN ﮐﻠﻤﻪ ﮐﻠﯿﺪي
.( وﺟﻮد ﻧﺪاﺷﺘﻪ ﺑﺎﺷﺪorders)
(؛ ﺣﺘﯽ اﮔﺮ ﻧﻈﯿﺮش درﺟﺪولtable_name2) ﺗﻤﺎم ﺳﻄﺮﻫﺎي ﺟﺪول راﺳﺖ را ﺑﺮﻣﯽ ﮔﺮداﻧﺪRIGHT JOIN ﮐﻠﻤﻪ ﮐﻠﯿﺪي
.( وﺟﻮد ﻧﺪاﺷﺘﻪ ﺑﺎﺷﺪtable_name1) ﭼﭗ
SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
. ﻧﺎﻣﯿﺪه ﻣﯽ ﺷﻮدRIGHT OUTER JOIN، RIGHT JOIN در ﺑﻌﻀﯽ از ﭘﺎﯾﮕﺎه داده ﻫﺎ:ﭘﺎﻧﻮﺷﺘﻪ
:"Persons" ﺟﺪول
32
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
: "Orders" ﺟﺪول
.اﮐﻨﻮن ﻣﯽ ﺧﻮاﻫﯿﻢ از ﺟﺪول ﺑﺎﻻ ﻫﻤﻪ ﺳﻔﺎرﺷﺎت ﺑﺎ ﻣﺸﺨﺼﺎت اﺷﺨﺎص )در ﺻﻮرت وﺟﻮد( را ﻟﯿﺴﺖ ﮐﻨﯿﻢ
(؛ ﺣﺘﯽ اﮔﺮ ﻧﻈﯿﺮش در ﺟﺪول ﭼﭗOrders) ﺗﻤﺎم ﺳﻄﺮﻫﺎي ﺟﺪول راﺳﺖ را ﺑﺮﻣﯽ ﮔﺮداﻧﺪRIGHT JOIN ﮐﻠﻤﻪ ﮐﻠﯿﺪي
.( وﺟﻮد ﻧﺪاﺷﺘﻪ ﺑﺎﺷﺪPersons)
. ﺑﺮﻣﯽ ﮔﺮداﻧﺪ، ﺳﻄﺮﻫﺎ را زﻣﺎﻧﯽ ﮐﻪ ﻧﻈﯿﺮﺷﺎن در ﯾﮑﯽ از ﺟﺪول ﻫﺎ ﺑﺎﺷﺪFULL JOIN ﮐﻠﻤﻪ ﮐﻠﯿﺪي
33
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name
:"Persons" ﺟﺪول
:"Orders" ﺟﺪول
.اﮐﻨﻮن ﻣﯽ ﺧﻮاﻫﯿﻢ ﻫﻤﻪ اﺷﺨﺎص ﺑﺎ ﺳﻔﺎرﺷﺎﺗﺸﺎن و ﻫﻤﻪ ﺳﻔﺎرﺷﺎت ﺑﺎ اﺷﺨﺎص را ﻟﯿﺴﺖ ﮐﻨﯿﻢ
34
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﮐﻠﻤﻪ ﮐﻠﯿﺪي FULL JOINﻫﻤﻪ ﺳﻄﺮﻫﺎ را از ﺟﺪول ﭼﭗ) (personsو ﻫﻤﻪ ﺳﻄﺮﻫﺎ از ﺟﺪول راﺳﺖ) (ordersﺑﺮ ﻣﯽ ﮔﺮداﻧﺪ.
اﮔﺮ ﺳﻄﺮﻫﺎﯾﯽ در" "Personsوﺟﻮد دارد ﮐﻪ ﻧﻈﯿﺮش در" "Ordersﻧﯿﺴﺖ ،ﯾﺎ اﮔﺮ ﺳﻄﺮﻫﺎﯾﯽ در " "Ordersوﺟﻮد دارد ﮐﻪ
ﻧﻈﯿﺮش در " "Personsﻧﯿﺴﺖ ،آن ﺳﻄﺮﻫﺎ ﻧﯿﺰ ﻟﯿﺴﺖ ﻣﯽ ﺷﻮﻧﺪ.
ﻋﻤﻠﮕﺮ UNIONﺑﺮاي ﺗﺮﮐﯿﺐ ﺟﺪول ﻧﺘﯿﺠﻪ ،از دو ﯾﺎ ﭼﻨﺪ ﻋﺒﺎرت SELECTاﺳﺘﻔﺎده ﻣﯽ ﺷﻮد.
ﺗﻮﺟﻪ ﮐﻨﯿﺪ ﮐﻪ ﻫﺮ ﻋﺒﺎرت SELECTدر داﺧﻞ UNIONﺑﺎﯾﺪ ﺗﻌﺪاد ﯾﮑﺴﺎﻧﯽ از ﺳﺘﻮن ﻫﺎ را داﺷﺘﻪ ﺑﺎﺷﺪ .ﻫﻤﭽﻨﯿﻦ ﺳﺘﻮن ﻫﺎ ﺑﺎﯾﺪ
ﻫﻤﺎﻧﻨﺪ اﻧﻮاع داده ﻫﺎي ﻣﺸﺎﺑﻪ داﺷﺘﻪ ﺑﺎﺷﻨﺪ .ﻫﻤﭽﻨﯿﻦ ﺳﺘﻮن ﻫﺎ در ﻫﺮ ﻋﺒﺎرت ﻣﺸﺎﺑﻪ ﺑﺎﯾﺪ ﺗﺮﺗﯿﺐ ﯾﮑﺴﺎن داﺷﺘﻪ ﺑﺎﺷﻨﺪ.
ﺗﻮﺟﻪ :ﻋﻤﻠﮕﺮ UNIONﺑﻪ ﺻﻮرت ﭘﯿﺶ ﻓﺮض ﻓﻘﻂ ﻣﻘﺎدﯾﺮ ﻣﺘﻤﺎﯾﺰ را اﻧﺘﺨﺎب ﻣﯽ ﮐﻨﺪ .از UNION ALLﺑﺮاي اﺟﺎزه دادن ﺑﻪ
ﻣﻘﺎدﯾﺮ ﺗﮑﺮاري اﺳﺘﻔﺎده ﮐﻨﯿﺪ.
ﭘﺎﻧﻮﺷﺘﻪ :ﻧﺎم ﺳﺘﻮﻧﻬﺎ در ﺟﺪول ﻧﺘﯿﺠﻪ UNIONﻫﻤﯿﺸﻪ ﺑﺮاﺑﺮ ﺑﺎ ﻧﺎم ﺳﺘﻮﻧﻬﺎ در اوﻟﯿﻦ ﻋﺒﺎرت SELECTدر UNIONاﺳﺖ.
"Employees_Norway":
35
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
E_ID E_Name
01 Hansen, Ola
02 Svendson, Tove
03 Svendson, Stephen
04 Pettersen, Kari
"Employees_USA":
E_ID E_Name
01 Turner, Sally
02 Kent, Clark
03 Svendson, Stephen
04 Scott, Stephen
E_Name
Hansen, Ola
Svendson, Tove
Svendson, Stephen
Pettersen, Kari
Turner, Sally
Kent, Clark
Scott, Stephen
در ﻣﺜﺎل ﺑﺎﻻ ﮐﺎرﻣﻨﺪ ﺑﺎ ﻧﺎم. اﺳﺘﻔﺎده ﺷﻮدUSA وNorway اﯾﻦ دﺳﺘﻮر ﻧﻤﯽ ﺗﻮاﻧﺪ ﺑﺮاي ﻟﯿﺴﺖ ﮐﺮدن ﻫﻤﻪ ﮐﺎرﻣﻨﺪﻫﺎي:ﺗﻮﺟﻪ
. ﻓﻘﻂ ﻣﻘﺎدﯾﺮ ﻣﺘﻤﺎﯾﺰ را اﻧﺘﺨﺎب ﻣﯽ ﮐﻨﺪUNION دﺳﺘﻮر.ﻫﺎي ﯾﮑﺴﺎن ﻗﺮار دارﻧﺪ و ﻓﻘﻂ ﯾﮑﯽ از آﻧﻬﺎ در ﻟﯿﺴﺖ اﺳﺖ
36
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
:ﻧﺘﯿﺠﻪ
E_Name
Hansen, Ola
Svendson, Tove
Svendson, Stephen
Pettersen, Kari
Turner, Sally
Kent, Clark
Svendson, Stephen
Scott, Stephen
. اﺳﺘﻔﺎده ﺷﻮد، ﻣﯽ ﺗﻮاﻧﺪ ﺑﺮاي ﺳﺎﺧﺖ ﮐﭙﯽ ﻫﺎي ﭘﺸﺘﯿﺒﺎن از ﺟﺪولSQL درSELECT INTO ﻋﺒﺎرت
. داده ﻫﺎ را از ﯾﮑﯽ از ﺟﺪول ﻫﺎ اﻧﺘﺨﺎب ﻣﯽ ﮐﻨﺪ و آن را درون ﯾﮏ ﺟﺪول ﻣﺘﻔﺎوت درج ﻣﯽ ﮐﻨﺪSELECT INTO ﻋﺒﺎرت
. ﺑﯿﺸﺘﺮ اوﻗﺎت ﺑﺮاي ﮐﭙﯽ ﻫﺎي ﭘﺸﺘﯿﺒﺎن از ﺟﺪول اﺳﺘﻔﺎده ﻣﯽ ﺷﻮدSELECT INTO ﻋﺒﺎرت
SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename
: ﯾﺎ ﻣﯽ ﺗﻮاﻧﯿﻢ ﻓﻘﻂ ﺳﺘﻮن ﻫﺎﯾﯽ را اﻧﺘﺨﺎب ﮐﻨﯿﻢ ﮐﻪ ﻣﯽ ﺧﻮاﻫﯿﻢ درون ﺟﺪول ﺟﺪﯾﺪ ﺑﺎﺷﻨﺪ
SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_tablename
37
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
." ﺑﺴﺎزﯾﻢpersons" اﮐﻨﻮن ﻣﯽ ﺧﻮاﻫﯿﻢ ﯾﮏ ﮐﭙﯽ دﻗﯿﻖ از داده ﻫﺎ در ﺟﺪول- ﺳﺎﺧﺘﻦ ﯾﮏ ﮐﭙﯽ ﭘﺸﺘﯿﺒﺎن
SELECT *
INTO Persons_Backup
FROM Persons
. اﺳﺘﻔﺎده ﮐﻨﯿﻢ، ﺑﺮاي ﮐﭙﯽ ﺟﺪول درون ﭘﺎﯾﮕﺎه داده ﻫﺎي دﯾﮕﺮIN ﻫﻤﭽﻨﯿﻦ ﻣﯽ ﺗﻮاﻧﯿﻢ از ﻋﺒﺎرت
SELECT *
INTO Persons_Backup IN 'Backup.mdb'
FROM Persons
:ﻫﻤﭽﻨﯿﻦ ﻣﯽ ﺗﻮاﻧﯿﻢ ﻓﻘﻂ ﭼﻨﺪ ﻓﯿﻠﺪ درون ﺟﺪول ﺟﺪﯾﺪ ﮐﭙﯽ ﮐﻨﯿﻢ
SELECT LastName,FirstName
INTO Persons_Backup
FROM Persons
" زﻧﺪﮔﯽsandnes" " ﻣﯽﺳﺎزد و ﻓﻘﻂ ﺷﺎﻣﻞ اﺷﺨﺎﺻﯽ اﺳﺖ ﮐﻪ در ﺷﻬﺮpersons-backup" زﯾﺮ ﯾﮏ ﺟﺪولSQL ﻋﺒﺎرت
.ﻣﯽ ﮐﻨﻨﺪ
SELECT LastName,Firstname
INTO Persons_Backup
FROM Persons
WHERE City='Sandnes'
." را ﻣﯽﺳﺎزدorders" " وpersons" " ﺷﺎﻣﻞ داده ﻫﺎ از دو ﺟﺪولPersons_Order_Backup" ﻣﺜﺎل زﯾﺮ ﯾﮏ ﺟﺪول
SELECT Persons.LastName,Orders.OrderNo
INTO Persons_Order_Backup
FROM Persons
INNER JOIN Orders
ON Persons.P_Id=Orders.P_Id
38
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﻧﻮع داده ﻣﺸﺨﺺ ﻣﯽ ﮐﻨﺪ ﭼﻪ ﻧﻮع داده اي در ﺳﺘﻮن ﻣﯽ ﺗﻮاﻧﺪ ﻧﮕﻪ داﺷﺘﻪ ﺷﻮد .ﺑﺮاي ﯾﮏ ﻣﺮﺟﻊ ﮐﺎﻣﻞ از اﻧﻮاع داده ﻣﻮﺟﻮد در
SQL Server ،MS Accessو MySQLﺑﻪ ﻣﺮﺟﻊ اﻧﻮاع داده ﻣﺎ ﺑﺮوﯾﺪ.
اﮐﻨﻮن ﻣﯽ ﺧﻮاﻫﯿﻢ ﯾﮏ ﺟﺪول ﺑﺎ ﻧﺎم " "personsاﯾﺠﺎد ﮐﻨﯿﻢ ﮐﻪ ﺷﺎﻣﻞ ﭘﻨﺞ ﺳﺘﻮن P_Id :و LastNameو FirstNameو
Addressو Cityاﺳﺖ.
39
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﺳﺘﻮن ﻫﺎي Address ،FirstName ،lastNameو Cityاز ﻧﻮع varcharو ﺑﺎﻃﻮل ﺑﯿﺸﺘﺮ از 255ﮐﺎراﮐﺘﺮ ﻫﺴﺘﻨﺪ.
ﻣﺤﺪودﯾﺖ ﻫﺎ
ﺑﺮاي ﻣﺤﺪود ﮐﺮدن ﺑﺮﺧﯽ از داده ﻫﺎ در ﯾﮏ ﺟﺪول ،از دﺳﺘﻮر Constraintاﺳﺘﻔﺎده ﻣﯽ ﺷﻮد.
ﻣﺤﺪودﯾﺘﻬﺎ را ﻣﯽ ﺗﻮان ﻣﻮﻗﻊ اﯾﺠﺎد ﺟﺪول )دﺳﺘﻮر (ALTER TABLEﯾﺎ ﺑﻌﺪ از اﯾﺠﺎد ﺟﺪول ﺗﻌﺮﯾﻒ ﮐﻨﯿﻢ )دﺳﺘﻮر ALTER
.(TABLE
ﺑﻪ ﻃﻮر ﭘﯿﺶ ﻓﺮض ،اﯾﻦ ﻋﺒﺎرت در ﯾﮏ ﺟﺪول ﻧﻤﯽ ﮔﺬارد ﯾﮏ ﺳﺘﻮن ﻣﻘﺪار ﺗﻬﯽ در ﻧﻈﺮ ﺑﮕﯿﺮد.
40
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﻣﺤﺪودﯾﺖ NOT NULLﺑﺎﻋﺚ ﻣﯽ ﺷﻮد ﺗﺎ ﻓﯿﻠﺪ ﻣﻮرد ﻧﻈﺮ ﻫﻤﯿﺸﻪ داراي ﻣﻘﺪار ﺑﺎﺷﺪ .اﯾﻦ ﺑﺪان ﻣﻌﻨﯽ اﺳﺖ ﮐﻪ ﺷﻤﺎ ﻧﻤﯽ ﺗﻮاﻧﯿﺪ
ﯾﮏ رﮐﻮرد ﺟﺪﯾﺪ را ﺑﺪون ﻣﻘﺪار وارد ﮐﻨﯿﺪ ،ﯾﺎ ﯾﮏ رﮐﻮرد را ﺑﺪون اﺿﺎﻓﻪ ﮐﺮدن ﯾﮏ ﻣﻘﺪار ﺑﻪ اﯾﻦ ﻓﯿﻠﺪ ،ﺑﺮوز رﺳﺎﻧﯽ ﮐﻨﯿﺪ.
در ﺗﮑﻪ ﺑﺮﻧﺎﻣﻪ SQLزﯾﺮ ﺳﺘﻮن " "P_Idو ﺳﺘﻮن " "LastNameﻧﻤﯽ ﺗﻮاﻧﻨﺪ ﺧﺎﻟﯽ از ﻣﻘﺪار ﺑﺎﺷﻨﺪ:
ﻣﺤﺪودﯾﺖ :UNIQUE
ﻣﺤﺪودﯾﺖ ﻫﺎي UNIQUEو PRIMARY KEYﻫﺮ دو ﺗﻀﻤﯿﻨﯽ ﻣﻨﺤﺼﺮ ﺑﻪ ﻓﺮد ﺑﺮاي ﯾﮏ ﺳﺘﻮن ﯾﺎ ﻣﺠﻤﻮﻋﻪ اي از ﺳﺘﻮن ﻫﺎ را
ﻓﺮاﻫﻢ ﻣﯽ ﮐﻨﻨﺪ.
ﻣﺤﺪودﯾﺖ PRIMARY KEYﺑﻪ ﻃﻮر ﺧﻮدﮐﺎر داراي ﻣﺤﺪودﯾﺖ UNIQUEﻣﯽ ﺑﺎﺷﺪ ﮐﻪ ﺑﺮ روي آن ﺗﻌﺮﯾﻒ ﺷﺪه اﺳﺖ.
ﺗﻮﺟﻪ داﺷﺘﻪ ﺑﺎﺷﯿﺪ ﮐﻪ ﻣﯽ ﺗﻮاﻧﯿﺪ ﻣﺤﺪودﯾﺖ ﻫﺎي ﺑﺴﯿﺎري از UNIQUEدر ﺟﺪول داﺷﺘﻪ ﺑﺎﺷﻨﺪ ،اﻣﺎ ﺗﻨﻬﺎ ﯾﮏ ﻣﺤﺪودﯾﺖ
PRIMARY KEYدر ﻫﺮ ﺟﺪول ﻣﯽ ﺗﻮاﻧﯿﺪ داﺷﺘﻪ ﺑﺎﺷﯿﺪ.
ﮐﺪ SQLزﯾﺮ ﯾﮏ ﻣﺤﺪودﯾﺖ UNIQUEزﻣﺎﻧﯽ ﮐﻪ ﺟﺪول " "Personsﺳﺎﺧﺘﻪ ﻣﯽ ﺷﻮد ﺑﻪ ﺳﺘﻮن" "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),
)UNIQUE (P_Id
)
41
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
: از ﮐﺪ زﯾﺮ اﺳﺘﻔﺎده ﻣﯽ ﮐﻨﯿﻢ، "P_Id" ﺑﺮاي اﯾﺠﺎد اﯾﻦ ﻣﺤﺪودﯾﺖ ﺑﺮ روي ﺳﺘﻮن
اﺳﺘﻔﺎده از دﺳﺘﻮر زﯾﺮ، و ﻫﻤﭽﻨﯿﻦ ﺑﺮاي ﺗﻌﺮﯾﻒ اﯾﻦ ﻣﺤﺪودﯾﺖ ﺑﺮ روي ﺳﺘﻮن ﻫﺎي ﻣﺘﻌﺪدUNIQUE ﺑﺮاي ﻧﺎﻣﮕﺬاري ﻣﺤﺪودﯾﺖ
: ﺟﺎﯾﺰ اﺳﺖSQL در
MySQL:
ALTER TABLE Persons
DROP INDEX uc_PersonID
.ﻣﺤﺪودﯾﺖ ﮐﻠﯿﺪ اﺻﻠﯽ ﻣﺴﺌﻮل ﺷﻨﺎﺳﺎﯾﯽ ﻣﻨﺤﺼﺮ ﺑﻪ ﻓﺮدي ﻫﺮ رﮐﻮرد در ﺟﺪول ﭘﺎﯾﮕﺎه داده اﺳﺖ
.ﻫﺮ ﺟﺪول ﺑﺎﯾﺪ ﯾﮏ ﮐﻠﯿﺪ اﺻﻠﯽ داﺷﺘﻪ ﺑﺎﺷﺪ و ﻫﺮ ﺟﺪول ﻣﯽ ﺗﻮاﻧﺪ ﻓﻘﻂ ﯾﮏ ﮐﻠﯿﺪ اﺻﻠﯽ داﺷﺘﻪ ﺑﺎﺷﻨﺪ
:" اﯾﺠﺎد ﻣﯽ ﺷﻮدPersons" " ﻣﯽ ﺳﺎزد؛ زﻣﺎﻧﯽ ﮐﻪ ﺟﺪولP_Id" ﺑﺮ روي ﺳﺘﻮنPRIMARY KEY ﮐﺪ زﯾﺮ ﯾﮏ ﻣﺤﺪودﯾﺖ
MySQL:
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
)
43
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﺑﺮاي اﺟﺎزه دادن ﺑﻪ ﻧﺎﻣﮕﺬاري ﻣﺤﺪودﯾﺖ ﮐﻠﯿﺪ اﺻﻠﯽ و ﺑﺮاي ﺗﻌﺮﯾﻒ ﻣﺤﺪودﯾﺖ ﮐﻠﯿﺪ اﺻﻠﯽ ﺑﺮ روي ﺳﺘﻮن ﻫﺎي ﻣﺘﻌﺪد ،از دﺳﺘﻮر
زﯾﺮ اﺳﺘﻔﺎده ﮐﻨﯿﺪ:
ﺗﻮﺟﻪ :در ﻣﺜﺎل ﺑﺎﻻ ﺗﻨﻬﺎ ﯾﮏ ﮐﻠﯿﺪ اﺻﻠﯽ ) (pk_PersonIDوﺟﻮد دارد .ﺑﺎ اﯾﻦ ﺣﺎل ،ﻣﻘﺪار pk_PersonIDاز دو ﺳﺘﻮن
) P_Idو (LastNameﺳﺎﺧﺘﻪ ﺷﺪه اﺳﺖ.
ﺑﺮاي اﯾﺠﺎد ﯾﮏ ﻣﺤﺪودﯾﺖ ﮐﻠﯿﺪ اﺻﻠﯽ ﺑﺮ روي ﺳﺘﻮن " "P_Idزﻣﺎﻧﯽ ﮐﻪ ﺟﺪول اﯾﺠﺎد ﻣﯽ ﺷﻮد ،از دﺳﺘﻮر SQLزﯾﺮ اﺳﺘﻔﺎده
ﮐﻨﯿﺪ:
ﺑﺮاي ﻧﺎﻣﮕﺬاري و ﻫﻤﭽﻨﯿﻦ ﺗﻌﺮﯾﻒ ﺑﺮ روي ﺳﺘﻮن ﻫﺎي ﻣﺘﻌﺪد ،ﺑﺎﯾﺪ از دﺳﺘﻮر زﯾﺮ اﺳﺘﻔﺎده ﮐﻨﯿﻢ:
ﺗﻮﺟﻪ :اﮔﺮ ﺑﺮاي اﺿﺎﻓﻪ ﮐﺮدن ﯾﮏ ﮐﻠﯿﺪ اﺻﻠﯽ ﺑﺎ اﺳﺘﻔﺎده از دﺳﺘﻮرات ﺟﺪول را ﺗﻐﯿﯿﺮ دﻫﯿﺪ ،ﮐﻠﯿﺪ اﺻﻠﯽ ﺳﺘﻮن ﻫﺎ ﺑﺎﯾﺪ ﺣﺘﻤﺎ
ﺷﺎﻣﻞ ﻣﻘﺪار NOT NULLﺑﺎﺷﺪ )ﻫﻨﮕﺎﻣﯽ ﮐﻪ ﺟﺪول ﺑﺮاي اوﻟﯿﻦ ﺑﺎر اﯾﺠﺎد ﺷﺪه اﺳﺖ(.
ﺑﺮاي ﺣﺬف ﮐﺮدن ﮐﻠﯿﺪ اﺻﻠﯽ از ﺗﮑﻪ ﺑﺮﻧﺎﻣﻪ زﯾﺮ اﺳﺘﻔﺎده ﻣﯽ ﮐﻨﯿﻢ:
44
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
MySQL:
ALTER TABLE Persons
DROP PRIMARY KEY
اﺟﺎزه دﻫﯿﺪ ﮐﻠﯿﺪ ﺧﺎرﺟﯽ را ﺑﺎ ذﮐﺮ ﯾﮏ ﻣﺜﺎل ﺗﻮﺿﯿﺢ دﻫﯿﻢ .ﺑﻪ دو ﺟﺪول زﯾﺮ ﻧﮕﺎه ﮐﻨﯿﺪ:
ﺗﻮﺟﻪ داﺷﺘﻪ ﺑﺎﺷﯿﺪ ﮐﻪ ﺳﺘﻮن " "P_Idدر ﺟﺪول "ﺳﻔﺎرﺷﺎت" ﺑﻪ ﺳﺘﻮن " "P_Idدر ﺟﺪول "اﻓﺮاد" اﺷﺎره ﻣﯽ ﮐﻨﺪ.
ﺳﺘﻮن " "P_Idدر ﺟﺪول "اﻓﺮاد" ﮐﻠﯿﺪ اﺻﻠﯽ ﺟﺪول "اﻓﺮاد" اﺳﺖ .ﺳﺘﻮن " "P_Idدر ﺟﺪول "ﺳﻔﺎرﺷﺎت" ﮐﻠﯿﺪ ﺧﺎرﺟﯽ در
ﺟﺪول "ﺳﻔﺎرﺷﺎت" اﺳﺖ.
ﻣﺤﺪودﯾﺖ ﮐﻠﯿﺪ ﺧﺎرﺟﯽ) (FOREIGN KEYدر واﻗﻊ از وارد ﺷﺪن اﻃﻼﻋﺎت ﻧﺎ ﻣﻌﺘﺒﺮ در ﺟﺪول و ﻫﻤﭽﻨﯿﻦ ﻫﺮ ﭼﯿﺰ ﮐﻪ ارﺗﺒﺎط
ﺑﯿﻦ دو ﺟﺪول را از ﺑﯿﻦ ﺑﺒﺮد ﺟﻠﻮﮔﯿﺮي ﻣﯽ ﮐﻨﺪ؛ زﯾﺮا ﮐﻪ ﺑﻪ ﻣﻘﺪار ﯾﮑﺘﺎﯾﯽ در ﺟﺪول اﺻﻠﯽ اﺷﺎره دارد.
ﮐﺪ زﯾﺮ ﺳﺘﻮن " "P_Idرا ﺑﻪ ﻋﻨﻮان ﮐﻠﯿﺪ ﺧﺎرﺟﯽ ﻣﯽ ﺳﺎزد؛ زﻣﺎﻧﯽ ﮐﻪ ﺟﺪول "ﺳﻔﺎرﺷﺎت" اﯾﺠﺎد ﻣﯽ ﺷﻮد:
45
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
MySQL:
: از دﺳﺘﻮر زﯾﺮ اﺳﺘﻔﺎده ﮐﻨﯿﺪ،ﺑﺮاي ﻧﺎﻣﮕﺬاري و ﻫﻤﭽﻨﯿﻦ ﺗﻌﺮﯾﻒ ﮐﻠﯿﺪ ﻫﺎي ﺧﺎرﺟﯽ ﺑﺮ روي ﺳﺘﻮن ﻫﺎي ﻣﺘﻌﺪد
: زﯾﺮ اﺳﺘﻔﺎده ﮐﻨﯿﺪSQL از دﺳﺘﻮر،" زﻣﺎﻧﯽ ﮐﻪ ﺟﺪول اﯾﺠﺎد ﺷﺪهP_Id" ﺑﺮاي اﯾﺠﺎد ﯾﮏ ﻣﺤﺪودﯾﺖ ﮐﻠﯿﺪ ﺧﺎرﺟﯽ ﺑﺮ روي ﺳﺘﻮن
: از دﺳﺘﻮرات زﯾﺮ اﺳﺘﻔﺎده ﮐﻨﯿﺪ،ﺑﺮاي ﻧﺎﻣﮕﺬاري و ﻫﻤﭽﻨﯿﻦ ﺗﻌﺮﯾﻒ ﺑﺮ روي ﺳﺘﻮن ﻫﺎي ﻣﺘﻌﺪد
46
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﺑﺮاي ﺣﺬف ﮐﺮدن ﮐﻠﯿﺪ ﺧﺎرﺟﯽ از ﺗﮑﻪ ﺑﺮﻧﺎﻣﻪ زﯾﺮ اﺳﺘﻔﺎده ﻣﯽ ﮐﻨﯿﻢ:
MySQL:
ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders
ﻣﺤﺪودﯾﺖ CHECK
ﻣﺤﺪودﯾﺖ CHECK
ﻣﺤﺪودﯾﺖ CHECKﺑﻪ ﻣﻨﻈﻮر ﻣﺤﺪود ﮐﺮدن داﻣﻨﻪ ﻣﻘﺪار ﮐﻪ ﻣﯽ ﺗﻮاﻧﺪ در ﯾﮏ ﺳﺘﻮن ﻗﺮار ﮔﯿﺮد اﺳﺘﻔﺎده ﻣﯽ ﺷﻮد.
اﮔﺮ ﻣﺤﺪودﯾﺖ CHECKرا ﺗﻨﻬﺎ ﺑﺮ روي ﯾﮏ ﺳﺘﻮن ﺗﻌﺮﯾﻒ ﻣﯽ ﮐﻨﯿﺪ اﺟﺎزه وارد ﮐﺮدن ﺑﺮﺧﯽ از ﻣﻘﺪار ﻫﺎ را ﺑﺮاي آن ﺳﺘﻮن دارﯾﺪ.
اﮔﺮ ﻣﺤﺪودﯾﺖ CHECKرا ﺑﺮاي ﯾﮏ ﺟﺪول ﺗﻌﺮﯾﻒ ﻣﯽ ﮐﻨﯿﺪ ،ﻣﯽ ﺗﻮاﻧﯿﺪ ﻣﻘﺎدﯾﺮ را در ﺳﺘﻮن ﻫﺎي ﺧﺎﺻﯽ ﻣﺒﻨﯽ ﺑﺮ ﻣﻘﺎدﯾﺮ ﺳﺘﻮن
ﻫﺎي دﯾﮕﺮ در ردﯾﻒ ﻣﺤﺪود ﮐﻨﯿﺪ.
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
)
47
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
: از دﺳﺘﻮر زﯾﺮ اﺳﺘﻔﺎده ﮐﻨﯿﺪ،" زﻣﺎﻧﯽ ﮐﻪ ﺟﺪول از ﻗﺒﻞ اﯾﺠﺎد ﺷﺪه اﺳﺖP_Id" در ﺳﺘﻮنCHECK ﺑﺮاي اﯾﺠﺎد ﻣﺤﺪودﯾﺖ
: از دﺳﺘﻮر زﯾﺮ اﺳﺘﻔﺎده ﮐﻨﯿﺪ،ﺑﺮاي ﻣﺤﺪود ﮐﺮدن ﭼﻨﺪ ﺳﺘﻮن ﺑﻪ ﻃﻮر ﻫﻤﺰﻣﺎن
MySQL:
ALTER TABLE Persons
DROP CHECK chk_Person
. اﺳﺘﻔﺎده ﻣﯽ ﺷﻮد، ﺑﺮاي ﻗﺮار دادن ﯾﮏ ﻣﻘﺪار ﺑﻪ ﻃﻮر ﭘﯿﺶ ﻓﺮض در ﯾﮏ ﺳﺘﻮنDEFAULT ﻣﺤﺪودﯾﺖ
. ﺑﻪ ﻫﻤﻪ رﮐﻮردﻫﺎي ﺟﺪﯾﺪ اﺿﺎﻓﻪ ﻣﯽ ﺷﻮد؛ اﮔﺮ ﻫﯿﭻ ﻣﻘﺪار دﯾﮕﺮي وارد ﻧﺸﻮدDEFAULT ﻣﻘﺪار
:" اﯾﺠﺎد ﻣﯽ ﮐﻨﺪPersons" " در ﺟﺪولCity" را ﺑﺮ روي ﺳﺘﻮنDEFAULT ﺗﮑﻪ ﺑﺮﻧﺎﻣﻪ زﯾﺮ ﻣﺤﺪودﯾﺖ
ﻣﻮردGETDATE() ﺑﺎ اﺳﺘﻔﺎده از ﺗﻮاﺑﻌﯽ ﻣﺎﻧﻨﺪ، ﻫﻤﭽﻨﯿﻦ ﻣﯽ ﺗﻮاﻧﺪ ﺑﺮاي وارد ﮐﺮدن ﻣﻘﺎدﯾﺮ ﺳﯿﺴﺘﻢDEFAULT ﻣﺤﺪودﯾﺖ
:اﺳﺘﻔﺎده ﻗﺮار ﮔﯿﺮد
49
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﺑﺮاي اﯾﺠﺎد ﻣﺤﺪودﯾﺖ DEFAULTدر ﺳﺘﻮن " "Cityﻫﻨﮕﺎﻣﯽ ﮐﻪ ﺟﺪول اﯾﺠﺎد ﺷﺪه ،از دﺳﺘﻮر زﯾﺮ اﺳﺘﻔﺎده ﮐﻨﯿﺪ:
MySQL:
ALTER TABLE Persons
'ALTER City SET DEFAULT 'SANDNES
ﺑﻪ ﻋﻨﻮان ﻣﺜﺎل ﺑﺮاي ﺣﺬف اﯾﻦ ﻣﺤﺪودﯾﺖ ﺑﺎﯾﺪ از دﺳﺘﻮر زﯾﺮ اﺳﺘﻔﺎده ﮐﻨﯿﻢ:
MySQL:
ALTER TABLE Persons
ALTER City DROP DEFAULT
ﺷﺎﺧﺺ ﻫﺎ ﺑﻪ ﺑﺮﻧﺎﻣﻪ اﺟﺎزه ﺟﺴﺘﺠﻮ در ﭘﺎﯾﮕﺎه داده را ﺑﺮاي ﭘﯿﺪا ﮐﺮدن ﺳﺮﯾﻊ اﻃﻼﻋﺎت را ﻣﯽ دﻫﺪ؛ ﺑﺪون آﻧﮑﻪ ﮐﻞ ﺟﺪول را
ﺑﮕﺮدد.
INDEXﻫﺎ
ﺷﺎﺧﺺ ﻣﯽ ﺗﻮاﻧﺪ ﺑﺮاي ﯾﺎﻓﺘﻦ ﺳﺮﯾﻌﺘﺮ و ﻣﻮﺛﺮﺗﺮ داده در ﯾﮏ ﺟﺪول اﺳﺘﻔﺎده ﺷﻮد.
ﮐﺎرﺑﺮان ﺷﺎﺧﺺ ﻫﺎ را ﻧﻤﯽ ﺗﻮاﻧﻨﺪ ﺑﺒﯿﻨﻨﺪ ،آﻧﻬﺎ ﻓﻘﻂ ﺑﺮاي ﺳﺮﻋﺖ ﺑﺨﺸﯿﺪن ﺑﻪ ﺟﺴﺘﺠﻮ اﺳﺘﻔﺎده ﻣﯽ ﺷﻮﻧﺪ.
50
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﺗﻮﺟﻪ :ﺑﺮوز رﺳﺎﻧﯽ ﯾﮏ ﺟﺪول ﺑﺎ ﺷﺎﺧﺺ زﻣﺎن ﺑﯿﺸﺘﺮي را ﻧﺴﺒﺖ ﺑﻪ ﺑﺮوز رﺳﺎﻧﯽ ﯾﮏ ﺟﺪول ﺑﺪون ﺷﺎﺧﺺ ﺗﻠﻒ ﻣﯽ ﮐﻨﺪ )ﭼﻮن
ﺷﺎﺧﺺ ﻧﯿﺰ ﻧﯿﺎز ﺑﻪ ﯾﮏ ﺑﺮوز رﺳﺎﻧﯽ دارد( .ﺑﻨﺎﺑﺮاﯾﻦ ﺷﻤﺎ ﺗﻨﻬﺎ ﺑﺎﯾﺪ ﺷﺎﺧﺺ را در ﺳﺘﻮن )و ﺟﺪول( اﯾﺠﺎد ﮐﻨﯿﺪ.
ﺗﻮﺟﻪ :ﮔﺮاﻣﺮ ﺳﺎﺧﺖ ﺷﺎﺧﺺ ﻫﺎ در ﭘﺎﯾﮕﺎه داده ﻫﺎي ﻣﺨﺘﻠﻒ ﻣﺘﻔﺎوت اﺳﺖ .ﺑﻨﺎﺑﺮاﯾﻦ ﮔﺮاﻣﺮ ﺳﺎﺧﺖ ﺷﺎﺧﺺ ﻫﺎ را در ﭘﺎﯾﮕﺎه داده
ﺧﻮد ﭼﮏ ﮐﻨﯿﺪ.
دﺳﺘﻮر زﯾﺮ ﯾﮏ ﺷﺎﺧﺺ ﺑﻪ ﻧﺎم " "PIndexﺑﺮ روي ﺳﺘﻮن " "LastNameدر ﺟﺪول " "Personsاﯾﺠﺎد ﻣﯽ ﮐﻨﺪ:
اﮔﺮ ﻣﯽ ﺧﻮاﻫﯿﺪ ﯾﮏ ﺷﺎﺧﺺ را ﺑﺮ روي ﺗﺮﮐﯿﺒﯽ از ﺳﺘﻮن ﻫﺎ اﯾﺠﺎد ﮐﻨﯿﺪ ﺑﺎﯾﺪ ﻧﺎم ﺳﺘﻮن ﻫﺎ را داﺧﻞ ﭘﺮاﻧﺘﺰ ﻧﻮﺷﺘﻪ و ﺑﺎ ﮐﺎﻣﺎ از ﻫﻢ
ﺟﺪا ﮐﻨﯿﺪ:
ﺷﺎﺧﺺ ﻫﺎ ،ﺟﺪاول ،و ﭘﺎﯾﮕﺎه داده ﻫﺎ ﺑﺮاﺣﺘﯽ ﻣﯽ ﺗﻮاﻧﻨﺪ ﺑﺎ دﺳﺘﻮر DROPﺣﺬف ﺷﻮﻧﺪ.
51
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
MS Access:
MS SQL Server:
DB2/Oracle:
MySQL:
و ام اﮔﺮ ﺑﺨﻮاﻫﯿﻢ ﻓﻘﻂ اﻃﻼﻋﺎت داﺧﻞ ﺟﺪول را ﭘﺎك ﮐﻨﯿﻢ؛ ﻧﻪ ﺧﻮد ﺟﺪول را ﺑﺎﯾﺪ ﭼﮑﺎر ﮐﺮد؟
52
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
دﺳﺘﻮر ALTER TABLEﺑﺮاي اﺿﺎﻓﻪ ﮐﺮدن ،ﺣﺬف ،ﯾﺎ ﺗﻐﯿﯿﺮ ﺳﺘﻮن در ﺟﺪول ﻣﻮﺟﻮد اﺳﺘﻔﺎده ﻣﯽ ﺷﻮد.
ﺑﺮاي اﺿﺎﻓﻪ ﮐﺮدن ﯾﮏ ﺳﺘﻮن در ﯾﮏ ﺟﺪول ،از دﺳﺘﻮر زﯾﺮ اﺳﺘﻔﺎده ﮐﻨﯿﺪ:
ﺑﺮاي ﺣﺬف ﯾﮏ ﺳﺘﻮن در ﯾﮏ ﺟﺪول ،از دﺳﺘﻮر زﯾﺮ اﺳﺘﻔﺎده ﮐﻨﯿﺪ )ﺗﻮﺟﻪ داﺷﺘﻪ ﺑﺎﺷﯿﺪ ﮐﻪ ﺑﺮﺧﯽ از ﺳﯿﺴﺘﻢ ﻫﺎي ﭘﺎﯾﮕﺎه داده
اﺟﺎزه ﺣﺬف ﯾﮏ ﺳﺘﻮن را ﻧﻤﯽ دﻫﻨﺪ(:
ﺑﺮاي ﺗﻐﯿﯿﺮ ﻧﻮع داده ﯾﮏ ﺳﺘﻮن در ﯾﮏ ﺟﺪول ،از ﮔﺮاﻣﺮ زﯾﺮ اﺳﺘﻔﺎده ﮐﻨﯿﺪ:
ﺣﺎﻻ ﻣﯽ ﺧﻮاﻫﯿﻢ ﯾﮏ ﺳﺘﻮن ﺑﻪ ﻧﺎم " "DateOfBirthرا در ﺟﺪول " "Personsاﺿﺎﻓﻪ ﮐﻨﯿﻢ.
ﺗﻮﺟﻪ ﮐﻨﯿﺪ ﮐﻪ در ﺳﺘﻮن ﺟﺪﯾﺪ " "DateOfBirthﻧﻮﻋﯽ از ﺗﺎرﯾﺦ اﺳﺖ و ﺑﺮاي ﻧﮕﻪ داﺷﺘﻦ داده اي از ﻧﻮع ﺗﺎرﯾﺦ اﺳﺘﻔﺎده ﻣﯽ
ﺷﻮد .ﻧﻮع داده ﻣﺸﺨﺺ ﻣﯽ ﮐﻨﺪ ﮐﻪ ﭼﻪ ﻧﻮع ،داده ﻫﺎي در ﺳﺘﻮن ﻣﯽ ﺗﻮاﻧﻨﺪ وارد ﺷﻮﻧﺪ.
53
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
. " را ﺗﻐﯿﯿﺮ دﻫﯿﻢPersons " " در ﺟﺪولDateOfBirth" ﺣﺎﻻ ﻣﯽ ﺧﻮاﻫﯿﻢ ﻧﻮع داده ﻫﺎي ﺳﺘﻮن
." در ﺣﺎل ﺣﺎﺿﺮ ﻣﻘﺪار ﯾﮏ ﺳﺎل در ﻗﺎﻟﺐ دو رﻗﻢ ﯾﺎ ﭼﻬﺎر رﻗﻢ را در ﺧﻮد ﻧﮕﻪ ﻣﯽ داردDateOfBirth" ﺗﻮﺟﻪ ﮐﻨﯿﺪ ﮐﻪ ﺳﺘﻮن
. " را ﺣﺬف ﮐﻨﯿﻢPersons" " در ﺟﺪولDateOfBirth" در ﮔﺎم ﺑﻌﺪي ﻣﯽ ﺧﻮاﻫﯿﻢ ﺳﺘﻮن
اﺟﺎزه ﻣﯽ دﻫﺪ ﯾﮏ ﻣﻘﺪار ﻣﻨﺤﺼﺮ ﺑﻪ ﻓﺮد ﺗﻮﻟﯿﺪ ﺷﻮد؛ زﻣﺎﻧﯽ ﮐﻪ ﯾﮏ رﮐﻮرد ﺟﺪﯾﺪ در ﺟﺪول واردAuto-increment ﻓﯿﻠﺪ
.ﺷﻮد
54
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﺧﯿﻠﯽ اوﻗﺎت ﻣﯽ ﺧﻮاﻫﯿﻢ ﻣﻘﺪاري را ﺑﺮاي primary keyﺗﻌﺮﯾﻒ ﮐﻨﯿﻢ ﮐﻪ ﺑﺘﻮاﻧﺪ ﺑﺮاي ﻫﺮ رﮐﻮرد ﯾﮏ ﻣﻘﺪار ﺟﺪﯾﺪ را ﺑﻪ ﻃﻮر
ﺧﻮدﮐﺎر ﺗﻮﻟﯿﺪ ﮐﻨﺪ.
ﮔﺮاﻣﺮ MySQL
دﺳﺘﻮرات زﯾﺮ ﺳﺘﻮن " "P_Idرا در ﺟﺪول" "Personsﺑﻪ ﻋﻨﻮان ﮐﻠﯿﺪ اﺻﻠﯽ و ﺑﺎ ﺧﺎﺻﯿﺖ Auto-incrementﺗﻌﺮﯾﻒ ﻣﯽ
ﮐﻨﻨﺪ:
ﺑﻪ ﻃﻮر ﭘﯿﺶ ﻓﺮض ،ﻣﻘﺪار ﺷﺮوع ﺑﺮاي ﺧﺎﺻﯿﺖ AUTO_INCREMENTﻣﻘﺪار ﯾﮏ اﺳﺖ ،و آن را ﺑﺎ ﯾﮏ ﮔﺎم ﺑﺮاي ﻫﺮ رﮐﻮرد
ﺟﺪﯾﺪ اﻓﺰاﯾﺶ ﻣﯽ دﻫﺪ.
ﺑﺮاي ﺗﻌﺮﯾﻒ ﻣﻘﺪار اوﻟﯿﻪ ﺷﺮوع ﺗﺮﺗﯿﺐ ، AUTO_INCREMENTاز دﺳﺘﻮر زﯾﺮ اﺳﺘﻔﺎده ﮐﻨﯿﺪ:
ﺑﺮاي درج ﯾﮏ رﮐﻮرد ﺟﺪﯾﺪ ﺑﻪ ﺟﺪول " ،"Personsﻣﺠﺒﻮر ﻧﺨﻮاﻫﯿﻢ ﺷﺪ ﮐﻪ ﻣﻘﺪاري ﺑﺮاي ﺳﺘﻮن " "P_Idﻣﺸﺨﺺ ﮐﻨﯿﻢ )ﯾﮏ
ﻣﻘﺪار ﻣﻨﺤﺼﺮ ﺑﻪ ﻓﺮد ﺑﻪ ﻃﻮر ﺧﻮدﮐﺎر اﺿﺎﻓﻪ ﺧﻮاﻫﺪ ﺷﺪ( :
دﺳﺘﻮر SQLﻓﻮق ﯾﮏ رﮐﻮرد ﺟﺪﯾﺪ ﺑﻪ ﺟﺪول " "Personsاﺿﺎﻓﻪ ﻣﯽ ﮐﻨﺪ .ﺑﻪ ﺳﺘﻮن " "P_Idﯾﮏ ﻣﻘﺪار ﻣﻨﺤﺼﺮ ﺑﻪ ﻓﺮد
اﺧﺘﺼﺎص داده ﺷﺪه اﺳﺖ .ﺳﺘﻮن " "FirstNameﻣﻘﺪار " "Larsو ﺳﺘﻮن " "LastNameﻣﻘﺪار""Monsenرا ﺑﻪ ﺧﻮد
اﺧﺘﺼﺎص ﻣﯽ دﻫﻨﺪ.
55
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
دﺳﺘﻮرات SQLزﯾﺮ ﺳﺘﻮن " "P_Idدر ﺟﺪول" "Personsرا ﺑﻪ ﻋﻨﻮان ﮐﻠﯿﺪ اﺻﻠﯽ و ﺑﺎ ﺧﺎﺻﯿﺖ AUTO_INCREMENT
ﺗﻌﺮﯾﻒ ﻣﯽ ﮐﻨﺪ :
MS SQL Serverاز ﮐﻠﻤﻪ ﮐﻠﯿﺪي IDENTITYﺑﺮاي اﻧﺠﺎم ﮐﺎر ﺧﺎﺻﯿﺖ auto-incrementاﺳﺘﻔﺎده ﻣﯽ ﮐﻨﺪ.
ﺑﻪ ﻃﻮر ﭘﯿﺶ ﻓﺮض ،ﻣﻘﺪار ﺷﺮوع ﺑﺮاي ﺧﺎﺻﯿﺖ IDENTITYﻣﻘﺪار ﯾﮏ اﺳﺖ و آن را ﺑﺎ ﯾﮏ ﮔﺎم ﺑﺮاي ﻫﺮ رﮐﻮرد ﺟﺪﯾﺪ اﻓﺰاﯾﺶ
ﻣﯽ دﻫﺪ.
ﺑﺮاي ﺗﻌﺮﯾﻒ ﺳﺘﻮن " "P_Idﮐﻪ ﺑﺎ ﻣﻘﺪار 10ﺷﺮوع و ﺑﺎ ﻣﻘﺪار 5اﻓﺰاﯾﺶ ﯾﺎﺑﺪ ،ﺑﺎﯾﺪ identityرا ﺑﻪ ) IDENTITY(10,5ﺗﻐﯿﯿﺮ
دﻫﯿﺪ.
ﺑﺮاي درج ﯾﮏ رﮐﻮرد ﺟﺪﯾﺪ ﺑﻪ ﺟﺪول " ،"Personsﻣﺠﺒﻮر ﻧﺨﻮاﻫﯿﻢ ﺷﺪ ﮐﻪ ﻣﻘﺪاري ﺑﺮاي ﺳﺘﻮن " "P_Idوارد ﮐﻨﯿﻢ )ﯾﮏ
ﻣﻘﺪار ﻣﻨﺤﺼﺮ ﺑﻪ ﻓﺮد ﺑﻪ ﻃﻮر ﺧﻮدﮐﺎر اﺿﺎﻓﻪ ﺧﻮاﻫﺪ ﺷﺪ(:
دﺳﺘﻮر SQLﻓﻮق ﯾﮏ رﮐﻮرد ﺟﺪﯾﺪ ﺑﻪ ﺟﺪول " "Personsاﺿﺎﻓﻪ ﻣﯽ ﮐﻨﺪ .ﺑﻪ ﺳﺘﻮن " "P_Idﯾﮏ ﻣﻘﺪار ﻣﻨﺤﺼﺮ ﺑﻪ ﻓﺮد
اﺧﺘﺼﺎص داده ﺷﺪه اﺳﺖ .ﺳﺘﻮن " "FirstNameﻣﻘﺪار " "Larsو ﺳﺘﻮن " "LastNameﻣﻘﺪار""Monsenرا ﺑﻪ ﺧﻮد
اﺧﺘﺼﺎص ﻣﯽ دﻫﻨﺪ.
ﮔﺮاﻣﺮ Access
دﺳﺘﻮرات SQLزﯾﺮ ﺳﺘﻮن " "P_Idدر ﺟﺪول" "Personsرا ﺑﻪ ﻋﻨﻮان ﮐﻠﯿﺪ اﺻﻠﯽ و ﺑﺎ ﺧﺎﺻﯿﺖ AUTO_INCREMENT
ﺗﻌﺮﯾﻒ ﻣﯽ ﮐﻨﺪ :
ﺑﻪ ﻃﻮر ﭘﯿﺶ ﻓﺮض ،ﻣﻘﺪار ﺷﺮوع ﺑﺮاي ﺧﺎﺻﯿﺖ AUTO_INCREMENTﻣﻘﺪار ﯾﮏ اﺳﺖ ،و آن را ﺑﺎ ﯾﮏ ﮔﺎم ﺑﺮاي ﻫﺮ رﮐﻮرد
ﺟﺪﯾﺪ اﻓﺰاﯾﺶ ﻣﯽ دﻫﺪ.
ﺑﺮاي ﺗﻌﺮﯾﻒ ﺳﺘﻮن " "P_Idﮐﻪ ﺑﺎ ﻣﻘﺪار 10ﺷﺮوع و ﺑﺎ ﻣﻘﺪار 5اﻓﺰاﯾﺶ ﯾﺎﺑﺪ ،ﺑﺎﯾﺪ AUTOINCREMENTرا ﺑﻪ
) AUTOINCREMENT(10,5ﺗﻐﯿﯿﺮ دﻫﯿﺪ.
ﺑﺮاي درج ﯾﮏ رﮐﻮرد ﺟﺪﯾﺪ ﺑﻪ ﺟﺪول " ، "Personsﻧﻤﯽ ﺧﻮاﻫﺪ ﮐﻪ ﻣﻘﺪاري ﺑﺮاي ﺳﺘﻮن " "P_Idوارد ﮐﻨﯿﻢ )ﯾﮏ ﻣﻘﺪار
ﻣﻨﺤﺼﺮ ﺑﻪ ﻓﺮد ﺑﻪ ﻃﻮر ﺧﻮدﮐﺎر اﺿﺎﻓﻪ ﺧﻮاﻫﺪ ﺷﺪ(:
دﺳﺘﻮر SQLﻓﻮق ﯾﮏ رﮐﻮرد ﺟﺪﯾﺪ ﺑﻪ ﺟﺪول " "Personsاﺿﺎﻓﻪ ﻣﯽ ﮐﻨﺪ .ﺑﻪ ﺳﺘﻮن " "P_Idﯾﮏ ﻣﻘﺪار ﻣﻨﺤﺼﺮ ﺑﻪ ﻓﺮد
اﺧﺘﺼﺎص داده ﺷﺪه اﺳﺖ .ﺳﺘﻮن " "FirstNameﻣﻘﺪار " "Larsو ﺳﺘﻮن " "LastNameﻣﻘﺪار""Monsenرا ﺑﻪ ﺧﻮد
اﺧﺘﺼﺎص ﻣﯽ دﻫﻨﺪ.
ﮔﺮاﻣﺮ Oracle
ﺷﻤﺎ ﻣﺠﺒﻮر ﺧﻮاﻫﯿﺪ ﺷﺪ ﯾﮏ ﻓﯿﻠﺪ auto-incrementﺑﺎ ﺷﯽ ﺗﺮﺗﯿﺒﯽ )اﯾﻦ ﺷﯽ ﺷﻤﺎره ﺗﺮﺗﯿﺒﯽ ﺗﻮﻟﯿﺪ ﻣﯽ ﮐﻨﺪ( ﺑﺴﺎزﯾﺪ.
ﮐﺪ ﺑﺎﻻ ﺑﺎﻋﺚ اﯾﺠﺎد ﯾﮏ ﺗﻮاﻟﯽ ﺑﺎ ﻧﺎم ،seq_personﮐﻪ ﺑﺎ 1ﺷﺮوع ﻣﯽ ﺷﻮد و ﺗﻮﺳﻂ 1اﻓﺰاﯾﺶ ﺧﻮاﻫﺪ ﮐﺮد .ﻣﻘﺪار آن ﻧﯿﺰ ﺗﺎ
،10ﺑﺮاي ﻋﻤﻠﮑﺮد ﺑﺎﻻ ذﺧﯿﺮه ﮔﺎه ) (Cacheﺗﻌﺮﯾﻒ ﮐﺮده اﺳﺖ .ﮔﺰﯾﻨﻪ Cacheﻣﺸﺨﺺ ﻣﯽ ﮐﻨﺪ ﮐﻪ ﭼﻨﺪ ﻣﻘﺪار دﻧﺒﺎﻟﻪ اي ﺑﺮاي
دﺳﺘﺮﺳﯽ ﺳﺮﯾﻊ ﺗﺮ ،در ﺣﺎﻓﻈﻪ ذﺧﯿﺮه ﻣﯽ ﺷﻮﻧﺪ.
ﺑﺮاي درج ﯾﮏ رﮐﻮرد ﺟﺪﯾﺪ ﺑﻪ ﺟﺪول " ،"Personsﺑﺎﯾﺪ از ﺗﺎﺑﻊ nextvalاﺳﺘﻔﺎده ﮐﻨﯿﻢ )اﯾﻦ ﺗﺎﺑﻊ ﻣﻘﺪار ﺑﻌﺪي از دﻧﺒﺎﻟﻪ
seq_personرا ﺑﺎزﯾﺎﺑﯽ ﻣﯽ ﮐﻨﺪ(:
57
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
)'VALUES (seq_person.nextval,'Lars','Monsen
دﺳﺘﻮر SQLﻓﻮق ﯾﮏ رﮐﻮرد ﺟﺪﯾﺪ ﺑﻪ ﺟﺪول " "Personsاﺿﺎﻓﻪ ﻣﯽ ﮐﻨﺪ .ﺑﻪ ﺳﺘﻮن " "P_Idﯾﮏ ﻣﻘﺪار ﻣﻨﺤﺼﺮ ﺑﻪ ﻓﺮد
اﺧﺘﺼﺎص داده ﺷﺪه اﺳﺖ .ﺳﺘﻮن " "FirstNameﻣﻘﺪار " "Larsو ﺳﺘﻮن " "LastNameﻣﻘﺪار""Monsenرا ﺑﻪ ﺧﻮد
اﺧﺘﺼﺎص ﻣﯽ دﻫﻨﺪ.
Viewﻫﺎ در SQL
اﯾﻦ ﻓﺼﻞ ﻧﺸﺎن ﻣﯽ دﻫﺪ ﮐﻪ ﭼﮕﻮﻧﻪ ﯾﮏ Viewرا اﯾﺠﺎد ،ﺑﺮوز رﺳﺎﻧﯽ و ﭘﺎك ﮐﻨﯿﺪ.
در ،SQLﯾﮏ viewﯾﮏ ﺟﺪول ﻣﺠﺎزي اﺳﺖ ﮐﻪ ﺑﺮ اﺳﺎس ﻧﺘﯿﺠﻪ ﻣﺠﻤﻮﻋﻪ اي از دﺳﺘﻮرات SQLﺑﻪ وﺟﻮد ﻣﯽ آﯾﺪ.
ﯾﮏ viewﺷﺎﻣﻞ ﺳﻄﺮ و ﺳﺘﻮن ،درﺳﺖ ﻣﺜﻞ ﯾﮏ ﺟﺪول واﻗﻌﯽ اﺳﺖ .ﻓﯿﻠﺪ ﻫﺎ در ﯾﮏ ،viewﻫﻤﺎن ﻓﯿﻠﺪ ﻫﺎ از ﯾﮏ ﯾﺎ ﭼﻨﺪ
ﺟﺪول واﻗﻌﯽ در ﭘﺎﯾﮕﺎه داده ﻫﺴﺘﻨﺪ.
ﺷﻤﺎ ﻣﯽ ﺗﻮاﻧﯿﺪ ﺗﻮاﺑﻊ WHERE ،SQLو دﺳﺘﻮرات JOINرا ﺑﻪ ﯾﮏ viewاﺿﺎﻓﻪ ﮐﻨﯿﺪ و داده را اراﺋﻪ دﻫﯿﺪ؛ در ﺻﻮرﺗﯽ ﮐﻪ
اﻃﻼﻋﺎت از ﯾﮏ ﺟﺪول واﺣﺪ ﺑﺎﺷﻨﺪ.
ﺗﻮﺟﻪ :ﯾﮏ viewﻫﻤﻮاره اﻃﻼﻋﺎت ﺑﺮوز را ﻧﺸﺎن ﻣﯽ دﻫﺪ! ﻣﻮﺗﻮر ﭘﺎﯾﮕﺎه داده داده ﻫﺎ را ﺑﺎزﺳﺎزي ﻣﯽ ﮐﻨﺪ و ﺑﺎ اﺳﺘﻔﺎده از دﺳﺘﻮر
، view's SQLﻫﺮ ﺑﺎر ﮐﻪ ﯾﮏ ﮐﺎرﺑﺮ ﻧﻤﺎﯾﺶ داده ﺷﺪ ﯾﮏ viewاﺳﺖ.
اﮔﺮ ﺷﻤﺎ ﭘﺎﯾﮕﺎه داده Northwindرا دارﯾﺪ ،ﻣﯽ ﺗﻮاﻧﯿﺪ ﺑﺒﯿﻨﯿﺪ ﮐﻪ ﭼﻨﺪﯾﻦ viewﻧﺼﺐ ﺷﺪه ﺑﻪ ﻃﻮر ﭘﯿﺶ ﻓﺮض دارد.
ﻧﻤﺎ ) (viewﺑﺎ ﻧﺎم " ،"Current Product Listﺗﻤﺎم ﻣﺤﺼﻮﻻت ﻓﻌﺎل )ﻣﺤﺼﻮﻻﺗﯽ ﮐﻪ ﻣﻮﻗﻮف ﻧﺸﺪه اﻧﺪ( از ﺟﺪول
" "Productsﻟﯿﺴﺖ ﻣﯽ ﮐﻨﺪ .اﯾﻦ viewﺑﺎ دﺳﺘﻮرات SQLزﯾﺮ اﯾﺠﺎد ﺷﺪه:
58
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
" ﺑﺎ ﯾﮏ ﻗﯿﻤﺖ واﺣﺪProducts" ﺑﻤﻨﻈﻮر اﻧﺘﺨﺎب ﻫﺮ ﻣﺤﺼﻮل در ﺟﺪولNorthwind ﻫﺎ در ﭘﺎﯾﮕﺎه دادهview ﯾﮑﯽ دﯾﮕﺮ از
: ﺑﺎﻻﺗﺮ از ﻣﯿﺎﻧﮕﯿﻦ ﻗﯿﻤﺖ واﺣﺪ اﺳﺖ،
ﺗﻮﺟﻪ. اﺳﺖ1997 ﻣﺤﺎﺳﺒﻪ ﮐﻞ ﻓﺮوش ﺑﺮاي ﻫﺮ دﺳﺘﻪ ﺑﻨﺪي در ﺳﺎلNorthwind ﻫﺎ در ﭘﺎﯾﮕﺎه دادهview ﯾﮑﯽ دﯾﮕﺮ از
:" اﻧﺘﺨﺎب ﻣﯽ ﮐﻨﺪProduct Sales for 1997" دﯾﮕﺮي ﺑﻪ ﻧﺎمview اﻃﻼﻋﺎت ﺧﻮد را ازview داﺷﺘﻪ ﺑﺎﺷﯿﺪ ﮐﻪ اﯾﻦ
:" را ﻣﯽ ﺧﻮاﻫﯿﻢBeverages" ﺣﺎﻻ ﮐﻞ ﻓﺮوش ﻓﻘﻂ در دﺳﺘﻪ.ﻫﻤﭽﻨﯿﻦ ﻣﯽ ﺗﻮاﻧﯿﻢ ﯾﮏ ﺷﺮط ﺑﻪ ﭘﺮس و ﺟﻮ اﺿﺎﻓﻪ ﮐﻨﯿﻢ
59
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﺣﺎﻻ ﻣﯽ ﺧﻮاﻫﯿﻢ ﺳﺘﻮن " "Categoryرا ﺑﻪ ﻧﻤﺎي " "Current Product Listاﺿﺎﻓﻪ ﮐﻨﯿﻢ .اﯾﻦ ﻧﻤﺎ را ﺑﺎ اﺳﺘﻔﺎده از دﺳﺘﻮرات
SQLزﯾﺮ ﺑﺮوز رﺳﺎﻧﯽ ﺧﻮاﻫﯿﻢ ﮐﺮد:
ﺗﺎرﯾﺦ در SQL
ﺗﻮﺟﻪ داﺷﺘﻪ ﺑﺎﺷﯿﺪ ﺳﺨﺖ ﺗﺮﯾﻦ ﺑﺨﺶ در ﻫﻨﮕﺎم ﮐﺎر ﺑﺎ ﺗﺎرﯾﺦ اﯾﻦ اﺳﺖ ﮐﻪ اﻃﻤﯿﻨﺎن ﺣﺎﺻﻞ ﮐﻨﯿﺪ ﮐﻪ ﻓﺮﻣﺖ ﺗﺎرﯾﺦ ﺷﻤﺎ زﻣﺎن وارد
ﮐﺮدن ،ﻣﻄﺎﺑﻖ ﺑﺎ ﻓﺮﻣﺖ ﺳﺘﻮن ﺗﺎرﯾﺦ در ﭘﺎﯾﮕﺎه داده ﺑﺎﺷﺪ.
ﺗﺎ زﻣﺎﻧﯽ ﮐﻪ ﻣﺤﺘﻮﯾﺎت ﺷﺎﻣﻞ ﺑﺨﺶ ﺗﺎرﯾﺦ ﺑﺎﺷﺪ ،اﻧﺘﻈﺎر ﻣﯽ رود ﮐﻪ در ﭘﺮس و ﺟﻮ ﺗﺎن ﮐﺎر ﮐﻨﺪ .اﻣﺎ اﮔﺮ ﯾﮏ ﺑﺨﺶ ﻫﻢ درﮔﯿﺮ
ﺷﻮد ،آن را ﭘﯿﭽﯿﺪه ﻣﯽ ﮐﻨﺪ.
ﻗﺒﻞ از ﺻﺤﺒﺖ ﮐﺮدن در ﻣﻮرد ﻋﻮارض ﻧﺎﺷﯽ از ﭘﺮس و ﺟﻮ ﺑﺮاي ﺗﺎرﯾﺦ ،ﺑﻪ ﻣﻬﻢ ﺗﺮﯾﻦ ﺗﻮاﺑﻊ داﺧﻠﯽ در راﺑﻄﻪ ﺑﺎ ﺗﺎرﯾﺦ ﻧﮕﺎﻫﯽ
ﺑﯿﻨﺪازﯾﺪ.
ﺟﺪول زﯾﺮ ﻟﯿﺴﺖ ﻣﻬﻢ ﺗﺮﯾﻦ ﺗﻮاﺑﻊ داﺧﻠﯽ در راﺑﻄﻪ ﺑﺎ ﺗﺎرﯾﺦ در MySQLﻫﺴﺘﻨﺪ:
60
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﺗﻮﺿﯿﺤﺎت ﺗﺎﺑﻊ
ﺟﺪول زﯾﺮ ﻟﯿﺴﺘﯽ از ﻣﻬﻢ ﺗﺮﯾﻦ ﺗﻮاﺑﻊ ﺗﺎرﯾﺦ داﺧﻠﯽ در SQL Serverﻫﺴﺘﻨﺪ:
ﺗﻮﺿﯿﺤﺎت ﺗﺎﺑﻊ
MySQLﺑﺎ اﻧﻮاع داده ﻫﺎي زﯾﺮ ،ﺑﺮاي ذﺧﯿﺮه ﺳﺎزي ﯾﮏ ﻣﻘﺪار ﺗﺎرﯾﺦ ﯾﺎ ﯾﮏ ﺗﺎرﯾﺦ /زﻣﺎن در ﭘﺎﯾﮕﺎه داده ﻣﯽ آﯾﺪ:
ﺑﺮاي ﻣﺮور ﺑﺮ ﻫﻤﻪ ﻧﻮع داده ﻫﺎي ﻣﻮﺟﻮد ،ﺑﻪ ﻣﺮﺟﻊ ﮐﺎﻣﻞ داده ﻫﺎ رﺟﻮع ﮐﻨﯿﺪ.
ﺗﻮﺟﻪ داﺷﺘﻪ ﺑﺎﺷﯿﺪ ﻣﯽ ﺗﻮاﻧﯿﺪ دو ﺗﺎرﯾﺦ را ﺑﻪ راﺣﺘﯽ ﻣﻘﺎﯾﺴﻪ ﮐﻨﯿﺪ؛ اﮔﺮ ﻫﯿﭻ ﻋﻨﺼﺮ زﻣﺎن ﻣﺒﻬﻤﯽ وﺟﻮد ﻧﺪاﺷﺘﻪ ﺑﺎﺷﺪ!
ﺣﺎﻻ ﻣﯽ ﺧﻮاﻫﯿﻢ از ﺟﺪول ﺑﺎﻻ در ﺳﺘﻮن OrderDateرﮐﻮرد " "2008-11-11را اﻧﺘﺨﺎب ﮐﻨﯿﻢ.
ﺣﺎل ،ﻓﺮض ﮐﻨﯿﻢ ﮐﻪ ﺟﺪول " "Ordersﺑﻪ اﯾﻦ ﺻﻮرت ﺑﺎﺷﺪ )ﺑﻪ ﻋﻨﺼﺮ زﻣﺎن در ﺳﺘﻮن" "OrderDateﺗﻮﺟﻪ ﮐﻨﯿﺪ(:
62
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﻫﯿﭻ ﻧﺘﯿﺠﻪ اي ﺣﺎﺻﻞ ﻧﻤﯽ ﺷﻮد ،اﯾﻦ ﺑﺨﺎﻃﺮ اﺳﺖ ﮐﻪ ﭘﺮس و ﺟﻮ ﻓﻘﻂ ﻓﺮﻣﺖ ﺗﺎرﯾﺦ ﺑﺪون ﺑﺨﺶ زﻣﺎن را ﺟﺴﺘﺠﻮ ﻣﯽ ﮐﻨﺪ.
ﻧﮑﺘﻪ :اﮔﺮ ﻣﯽ ﺧﻮاﻫﯿﺪ ﭘﺮس و ﺟﻮ ﺗﺎن را ﺳﺎده و آﺳﺎن ﻧﮕﻬﺪاري ﮐﻨﯿﺪ ،ﺑﻪ ﻋﻨﺼﺮ زﻣﺎن در ﺗﺎرﯾﺦ ﺗﺎن اﺟﺎزه ورود ﻧﺪﻫﯿﺪ!
ﻣﻘﺪار NULL
ﺑﻪ ﻃﻮر ﭘﯿﺶ ﻓﺮض ،ﯾﮏ ﺳﺘﻮن ﺟﺪول ﻣﯽ ﺗﻮاﻧﺪ ﻣﻘﺪار NULLرا ﻧﮕﻪ دارد.
اﮔﺮ ﯾﮏ ﺳﺘﻮن در ﯾﮏ ﺟﺪول اﺧﺘﯿﺎري ﺑﺎﺷﺪ ،ﻣﯽ ﺗﻮاﻧﯿﻢ ﺑﺪون اﺿﺎﻓﻪ ﮐﺮدن ﯾﮏ ﻣﻘﺪار ﺑﻪ اﯾﻦ ﺳﺘﻮن ﯾﮏ رﮐﻮرد ﺟﺪﯾﺪ ﺳﺎﺧﺘﻪ ﯾﺎ
ﺑﺮوز رﺳﺎﻧﯽ ﮐﻨﯿﻢ .اﯾﻦ ﺑﺪان ﻣﻌﻨﯽ اﺳﺖ ﮐﻪ اﯾﻦ ﻓﯿﻠﺪ ﺑﺎ ﯾﮏ ﻣﻘﺪار NULLﭘﺮ ﺧﻮاﻫﺪ ﺷﺪ.
ﺟﺪول ":"Persons
63
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﻓﺮض ﮐﻨﯿﺪ ﮐﻪ ﺳﺘﻮن " "Addressدر ﺟﺪول " "Personsاﺧﺘﯿﺎري اﺳﺖ .اﯾﻦ ﺑﻪ اﯾﻦ ﻣﻌﻨﯽ اﺳﺖ ﮐﻪ اﮔﺮ ﻫﯿﭻ ﻣﻘﺪاري ﺑﺮاي
اﯾﻦ ﺳﺘﻮن وارد ﻧﮑﻨﯿﺪ ﺑﺎ ﻣﻘﺪار NULLرا ﭘﺮ ﻣﯽ ﺷﻮد.
ﻣﻤﮑﻦ ﻧﯿﺴﺖ اﯾﻦ ﮐﺎر را ﺑﺎ ﻋﻤﻠﮕﺮ ﻫﺎي راﺑﻄﻪ ﻣﺎﻧﻨﺪ = ،> ،و ﯾﺎ > < اﻧﺠﺎم دﻫﯿﺪ.
ﭼﮕﻮﻧﻪ ﻣﯽ ﺗﻮاﻧﻢ ﺗﻨﻬﺎ رﮐﻮرد ﻫﺎﯾﯽ ﺑﺎ ﻣﻘﺎدﯾﺮ NULLرا در ﺳﺘﻮن " "Addressاﻧﺘﺨﺎب ﮐﻨﯿﻢ؟
ﭼﮕﻮﻧﻪ ﻣﯽ ﺗﻮاﻧﻢ ﺗﻨﻬﺎ رﮐﻮردﻫﺎي ﺑﺎ ﻣﻘﺎدﯾﺮ NOT NULLرا در ﺳﺘﻮن " "Addressاﻧﺘﺨﺎب ﮐﻨﻢ؟
64
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
. ﻧﮕﺎه ﺧﻮاﻫﯿﻢ ﮐﺮدCOALESCE() ،IFNULL() ،NVL() ،ISNULL() در ﻗﺴﻤﺖ ﺑﻌﺪ ﺑﻪ ﺗﻮاﺑﻊ
SELECT ProductName,UnitPrice*(UnitsInStock+UnitsOnOrder)
FROM Products
. اﺳﺖNULL ﻧﺘﯿﺠﻪ، ﺑﺎﺷﺪNULL " ﻣﻘﺪارUnitsOnOrder" اﮔﺮ ﻫﺮ ﯾﮏ از ﻣﻘﺎدﯾﺮ ﺳﺘﻮن،در ﻣﺜﺎل ﺑﺎﻻ
اﺳﺘﻔﺎده ﻣﯽ، رﻓﺘﺎر ﮐﻨﻨﺪNULL ﺑﺮاي ﻣﺸﺨﺺ ﮐﺮدن اﯾﻨﮑﻪ ﭼﮕﻮﻧﻪ ﻣﯽ ﺧﻮاﻫﯿﻢ ﻣﻘﺎدﯾﺮAccess ﻣﻮﺟﻮد درISNULL() ﺗﺎﺑﻊ
.ﺷﻮد
. ﻧﯿﺰ ﻣﯽ ﺗﻮاﻧﺪ ﺑﺮاي رﺳﯿﺪن ﺑﻪ ﻫﻤﺎن ﻧﺘﯿﺠﻪ ﻣﻮرد اﺳﺘﻔﺎده ﻗﺮار ﮔﯿﺮدCOALESCE() وNVL() ,IFNULL() ﺗﻮاﺑﻊ
ﺗﺎﺑﻊ، ﺑﺎﺷﺪNULL زﯾﺮا اﮔﺮ ﻣﻘﺪار،" ﺧﺎﻟﯽ ﺑﺎﺷﺪ در ﻣﺤﺎﺳﺒﻪ ﻫﯿﭻ ﺻﺪﻣﻪ اي ﻧﻤﯽ زﻧﺪUnitsOnOrder" اﮔﺮ ﺳﺘﻮن،در زﯾﺮ
: ﺻﻔﺮ را ﺑﺮ ﻣﯽ ﮔﺮداﻧﺪISNULL()
SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
FROM Products
65
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
Oracle
اوراﮐﻞ ﺗﺎﺑﻊ )( ISNULLﻧﺪارد .ﺑﺎ اﯾﻦ ﺣﺎل ،ﻣﯽ ﺗﻮاﻧﯿﻢ ﺑﺮاي رﺳﯿﺪن ﺑﻪ ﻧﺘﯿﺠﻪ ﻣﺸﺎﺑﻪ از ﺗﺎﺑﻊ )( NVLاﺳﺘﻔﺎده ﮐﻨﯿﻢ:
))SELECT ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0
FROM Products
MySQL
MySQLﯾﮏ ﺗﺎﺑﻊ )( ISNULLدارد .اﻣﺎ ﮐﻤﯽ ﻣﺘﻔﺎوت از ﺗﺎﺑﻊ)( ISNULLﻣﻮﺟﻮد در ﻣﺎﯾﮑﺮوﺳﺎﻓﺖ ﮐﺎر ﻣﯽ ﮐﻨﺪ.
))SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0
FROM Products
))SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0
FROM Products
ﺑﺮاي ﻣﻘﺎدﯾﺮ ﺑﺰرﮔﺘﺮ از ﻣﺘﻦ اﺳﺘﻔﺎده ﻣﯽ ﺷﻮد .ﺗﺎ 65536ﮐﺎراﮐﺘﺮ ذﺧﯿﺮه ﻣﯽ ﮐﻨﺪ.
2 bytes Memo
ﺗﻮﺟﻪ :ﺷﻤﺎ ﯾﮏ Memoرا ﻧﻤﯽ ﺗﻮاﻧﯿﺪ ﻣﺮﺗﺐ ﮐﻨﯿﺪ .ﻫﺮ ﭼﻨﺪ ﻗﺎﺑﻞ ﺟﺴﺘﺠﻮ ﻫﺴﺘﻨﺪ.
4 bytes ﺗﺎ اﻋﺪاد ﺻﺤﯿﺢ ﺑﯿﻦ -32768و 32767اﺟﺎزه ﻣﯽ دﻫﺪ. Integer
8 bytes ﯾﮏ دﻗﺖ ﻣﻤﯿﺰ ﺷﻨﺎور .رﻗﻢ اﻋﺸﺎر ﺑﯿﺸﺘﺮ را ﺗﺤﻤﻞ ﻣﯽ ﮐﻨﺪ. Single
66
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
4 bytes دو دﻗﺖ اﻋﺸﺎري .رﻗﻢ اﻋﺸﺎر ﺑﯿﺸﺘﺮ را ﺗﺤﻤﻞ. Double
ﺑﺮاي ﭘﻮل اﺳﺘﻔﺎده ﻣﯽ ﺷﻮد .ﺗﺎ 15رﻗﻢ ﮐﺎﻣﻞ دﻻر ،ﺑﻪ ﻋﻼوه 4رﻗﻢ اﻋﺸﺎر را ﻧﮕﻪ ﻣﯽ دارد.
8 bytes Currency
ﻧﮑﺘﻪ :ﺷﻤﺎ ﻣﯽ ﺗﻮاﻧﯿﺪ ارز ﮐﺸﻮر ﺧﻮد را اﻧﺘﺨﺎب ﮐﻨﯿﺪ.
در زﻣﯿﻨﻪ ﻫﺎي ﻣﻨﻄﻘﯽ ﻣﯽ ﺗﻮاﻧﺪ ﺑﻪ ﻋﻨﻮان ﺑﻠﻪ /ﺧﯿﺮ ،درﺳﺖ /ﻏﻠﻂ ،و ﯾﺎ روﺷﻦ /ﺧﺎﻣﻮش
ﻧﻤﺎﯾﺶ داده ﺷﻮد.در ﮐﺪ ،اﺳﺘﻔﺎده از ﺛﺎﺑﺖ ﻫﺎي )Yes/Noﻣﻌﺎدل -1و .(0ﺗﻮﺟﻪ :ﻣﻘﺪار Yes/No
NULLدر Yes/Noﻣﺠﺎز ﻧﯿﺴﺖ.
4 byte ﺗﺼﺎوﯾﺮ ،ﺻﺪا ،وﯾﺪﺋﻮ ،ﯾﺎ ) BLOBsاﺷﯿﺎء ﺑﺎﯾﻨﺮي ﺑﺰرگ(را ﻣﯽ ﺗﻮاﻧﺪ ذﺧﯿﺮه ﮐﻨﺪ. Ole Object
ﺷﺎﻣﻞ ﭘﯿﻮﻧﺪﻫﺎﯾﯽ ﺑﻪ ﻓﺎﯾﻞ ﻫﺎي دﯾﮕﺮ ،از ﺟﻤﻠﻪ ﺻﻔﺤﺎت وب. Hyperlink
ﯾﮏ ﻟﯿﺴﺖ از ﮔﺰﯾﻨﻪ ﻫﺎ اﺳﺖ ﮐﻪ ﻣﯽ ﺗﻮاﻧﯿﺪ از ﻟﯿﺴﺖ ﮐﺸﻮﯾﯽ اﻧﺘﺨﺎب وارد ﮐﻨﯿﺪ. Lookup Wizard
در MySQLﺳﻪ ﻧﻮع داده اﺻﻠﯽ وﺟﻮد دارد :ﻣﺘﻦ ،ﺷﻤﺎره و ﺗﺎرﯾﺦ /زﻣﺎن.
اﻧﻮاع ﻣﺘﻦ:
داراي ﯾﮏ رﺷﺘﻪ ﺑﺎ ﻃﻮل ﺛﺎﺑﺖ اﺳﺖ)ﻣﯽ ﺗﻮاﻧﺪ ﺷﺎﻣﻞ ﺣﺮوف ،اﻋﺪاد و ﮐﺎراﮐﺘﺮﻫﺎي ﺧﺎص ﺑﺎﺷﺪ( .اﻧﺪازه ﺛﺎﺑﺖ در ﭘﺮاﻧﺘﺰ
)CHAR(size
ﻣﺸﺨﺺ ﻣﯽ ﺷﻮد .ﺗﻮاﻧﺎﯾﯽ ذﺧﯿﺮه ﺳﺎزي ﺗﺎ 255ﮐﺎراﮐﺘﺮ را دارد.
داراي ﯾﮏ رﺷﺘﻪ ﺑﺎ ﻃﻮل ﻣﺘﻐﯿﺮ اﺳﺖ)ﻣﯽ ﺗﻮاﻧﺪ ﺷﺎﻣﻞ ﺣﺮوف ،اﻋﺪاد و ﮐﺎراﮐﺘﺮﻫﺎي ﺧﺎص ﺑﺎﺷﺪ( .ﺣﺪاﮐﺜﺮ اﻧﺪازه در ﭘﺮاﻧﺘﺰ
ﻣﺸﺨﺺ ﻣﯽ ﺷﻮد .ﺗﻮاﻧﺎﯾﯽ ذﺧﯿﺮه ﺳﺎزي ﺗﺎ 255ﮐﺎراﮐﺘﺮ را دارد. )VARCHAR(size
ﺗﻮﺟﻪ :اﮔﺮ ﺷﻤﺎ ﯾﮏ ﻣﻘﺪار ﺑﺰرﮔﺘﺮ از 255ﻗﺮار دﻫﯿﺪ آن را ﺗﺒﺪﯾﻞ ﺑﻪ ﻧﻮع ﻣﺘﻦ ﻣﯽ ﮐﻨﺪ.
ﺑﺮاي )BLOBsاﺷﯿﺎء ﺑﺎﯾﻨﺮي ﺑﺰرگ( .ﺗﺎ 65535ﺑﺎﯾﺖ از داده ﻫﺎ را ﻧﮕﻪ ﻣﯽ دارد. BLOB
67
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﺑﺮاي )BLOBsاﺷﯿﺎء ﺑﺎﯾﻨﺮي ﺑﺰرگ( .ﺗﺎ 16777215ﺑﺎﯾﺖ از داده ﻫﺎ را ﻧﮕﻪ ﻣﯽ دارد. MEDIUMBLOB
ﺑﺮاي )BLOBsاﺷﯿﺎء ﺑﺎﯾﻨﺮي ﺑﺰرگ( .ﺗﺎ 4294967295ﺑﺎﯾﺖ از داده ﻫﺎ را ﻧﮕﻪ ﻣﯽ دارد. LONGBLOB
اﺟﺎزه ﻣﯽ دﻫﺪ ﯾﮏ ﻟﯿﺴﺖ از ﻣﻘﺎدﯾﺮ ﻣﻤﮑﻦ را وارد ﮐﻨﯿﺪ .ﺷﻤﺎ ﻣﯽ ﺗﻮاﻧﯿﺪ در اﯾﻦ ﻟﯿﺴﺖ ﺗﺎ 535،65ﻣﻘﺪار ذﺧﯿﺮه ﮐﻨﯿﺪ.
اﮔﺮ ﻣﻘﺪار درج ﺷﺪه در ﻟﯿﺴﺖ ﻧﯿﺴﺖ ،ﯾﮏ ﻣﻘﺪار ﺧﺎﻟﯽ ﺑﻪ ﺟﺎي آن ﻗﺮار ﺧﻮاﻫﺪ ﮔﺮﻓﺖ.
)ENUM(x, y, z, etc.
ﺗﻮﺟﻪ داﺷﺘﻪ ﺑﺎﺷﯿﺪ :ﻣﻘﺎدﯾﺮ وارد ﺷﺪه در آن ﻣﺮﺗﺐ ﺷﺪه اﻧﺪ.
ﻣﻘﺎدﯾﺮ ﻣﻤﮑﻦ را ﺑﺎﯾﺪ ﺑﺎ اﯾﻦ ﻓﺮﻣﺖ وارد ﮐﻨﯿﺪ ENUM('X','Y','Z') :
ﺷﺒﯿﻪ ﺑﻪ ENUMاﺳﺖ اﻟﺒﺘﻪ ﺑﻪ ﺟﺰ آن ﻣﺠﻤﻮﻋﻪ ﻣﻤﮑﻦ اﺳﺖ ﺷﺎﻣﻞ ﺑﯿﺶ از 64اﻗﻼم ﻟﯿﺴﺖ و ﻣﯽ ﺗﻮاﻧﺪ ﺑﯿﺶ از ﯾﮏ
SET
اﻧﺘﺨﺎب داﺷﺘﻪ ﺑﺎﺷﺪ.
ﺗﻮﺿﯿﺤﺎت
ﻧﻮع داده
-128ﺗﺎ 127ﻧﺮﻣﺎل .از 0ﺗﺎ 255ﺑﺪون ﻋﻼﻣﺖ*.ﺣﺪاﮐﺜﺮ ﺗﻌﺪاد ارﻗﺎم ﻣﻤﮑﻦ اﺳﺖ در داﺧﻞ ﭘﺮاﻧﺘﺰ ﻣﺸﺨﺺ ﺷﻮد.
)TINYINT(size
-32768ﺗﺎ 32767ﻧﺮﻣﺎل 0 .ﺗﺎ 65535ﺑﺪون ﻋﻼﻣﺖ*.ﺣﺪاﮐﺜﺮ ﺗﻌﺪاد ارﻗﺎم ﻣﻤﮑﻦ اﺳﺖ در داﺧﻞ ﭘﺮاﻧﺘﺰ ﻣﺸﺨﺺ ﺷﻮد
. )SMALLINT(size
-8388608ﺗﺎ 8388607ﻋﺎدي 0 .ﺗﺎ 16777215ﺑﺪون ﻋﻼﻣﺖ*.ﺣﺪاﮐﺜﺮ ﺗﻌﺪاد ارﻗﺎم ﻣﻤﮑﻦ اﺳﺖ در داﺧﻞ ﭘﺮاﻧﺘﺰ
ﻣﺸﺨﺺ ﺷﻮد. )MEDIUMINT(size
-2147483648ﺗﺎ 2147483647ﻋﺎدي 0 .ﺗﺎ 4294967295ﺑﺪون ﻋﻼﻣﺖ*.ﺣﺪاﮐﺜﺮ ﺗﻌﺪاد ارﻗﺎم ﻣﻤﮑﻦ اﺳﺖ در
داﺧﻞ ﭘﺮاﻧﺘﺰ ﻣﺸﺨﺺ ﺷﻮد. )INT(size
68
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﺗﻌﺪاد ﮐﻤﯽ ازاﻋﺪاد ﺑﺎ ﻧﻘﻄﻪ اﻋﺸﺎر ﺷﻨﺎور ﻣﯽ آﯾﻨﺪ .ﺣﺪاﮐﺜﺮ ﺗﻌﺪاد ارﻗﺎم ﻣﻤﮑﻦ اﺳﺖ در ﭘﺎراﻣﺘﺮ sizeﻣﺸﺨﺺ ﺷﺪه
ﺑﺎﺷﺪ.ﺣﺪاﮐﺜﺮ ﺗﻌﺪاد ارﻗﺎم را در ﺳﻤﺖ راﺳﺖ ﻧﻘﻄﻪ اﻋﺸﺎر ﺑﺎ ﭘﺎراﻣﺘﺮ dﻣﺸﺨﺺ ﻣﯽ ﮐﻨﯿﻢ. )FLOAT(size,d
ﺗﻌﺪاد زﯾﺎدي ازاﻋﺪاد ﺑﺎ ﻧﻘﻄﻪ اﻋﺸﺎر ﺷﻨﺎور ﻣﯽ آﯾﻨﺪ .ﺣﺪاﮐﺜﺮ ﺗﻌﺪاد ارﻗﺎم ﻣﻤﮑﻦ اﺳﺖ در ﭘﺎراﻣﺘﺮ sizeﻣﺸﺨﺺ ﺷﺪه
ﺑﺎﺷﺪ.ﺣﺪاﮐﺜﺮ ﺗﻌﺪاد ارﻗﺎم را در ﺳﻤﺖ راﺳﺖ ﻧﻘﻄﻪ اﻋﺸﺎر ﺑﺎ ﭘﺎراﻣﺘﺮ dﻣﺸﺨﺺ ﻣﯽ ﮐﻨﯿﻢ. )DOUBLE(size,d
DOUBLEﺑﻪ ﻋﻨﻮان ﯾﮏ رﺷﺘﻪ ذﺧﯿﺮه ﻣﯽ ﺷﻮد و ﺑﺮاي ﯾﮏ ﻧﻘﻄﻪ ﺛﺎﺑﺖ اﻋﺸﺎري اﺟﺎزه ﻣﯽ دﻫﺪ.ﺣﺪاﮐﺜﺮ ﺗﻌﺪاد ارﻗﺎم
ﻣﻤﮑﻦ اﺳﺖ در ﭘﺎراﻣﺘﺮ sizeﻣﺸﺨﺺ ﺷﺪه ﺑﺎﺷﺪ .ﺣﺪاﮐﺜﺮ ﺗﻌﺪاد ارﻗﺎم را در ﺳﻤﺖ راﺳﺖ ﻧﻘﻄﻪ اﻋﺸﺎر ﺑﺎ ﭘﺎراﻣﺘﺮ d
)DECIMAL(size,d
ﻣﺸﺨﺺ ﻣﯽ ﮐﻨﯿﻢ.
*اﻧﻮاع داده ﻫﺎي ﺻﺤﯿﺢ ﮔﺰﯾﻨﻪ اﺿﺎﻓﯽ ﺑﻪ ﻧﺎم ) UNSIGNEDﺑﺪون ﻋﻼﻣﺖ(دارﻧﺪ .ﺑﻪ ﻃﻮر ﻣﻌﻤﻮل ،ﻋﺪد ﺻﺤﯿﺢ را از ﻣﻨﻔﯽ ﺑﻪ ﻣﺜﺒﺖ ﺗﺒﺪﯾﻞ
ﻣﯽ ﮐﻨﺪ .اﺿﺎﻓﻪ ﮐﺮدن اﯾﻦ وﯾﮋﮔﯽ ﻣﺤﺪوده را ﺑﺪون ﻋﻼﻣﺖ ﺧﻮاﻫﺪ ﮐﺮد و ﻣﺤﺪوده را ﺑﺎ ﺣﺮﮐﺖ از ﺻﻔﺮ )ﺑﻪ ﺟﺎي ﯾﮏ ﻋﺪد ﻣﻨﻔﯽ(ﺷﺮوع ﻣﯽ
ﮐﻨﺪ.
ﻧﻮع ﺗﺎرﯾﺦ:
ﺗﻮﺿﯿﺤﺎت
ﻧﻮع داده
*ورودي ﺗﺮﮐﯿﺒﯽ از ﺗﺎرﯾﺦ و زﻣﺎن اﺳﺖ .ﺑﺎ ﻓﺮﻣﺖ YYYY-MM-DD HH:MM:SS :
ﺗﻮﺟﻪ :اﯾﻦ ﻧﻮع داده از داﻣﻨﻪ ' '1000-01-01 00:00:00ﺗﺎ ' '9999-12-31 23:59:59ﭘﺸﺘﯿﺒﺎﻧﯽ ﻣﯽ ﮐﻨﺪ.
)(DATETIME
*ورودي زﻣﺎن اﺳﺖ .ﺗﻌﺪادي از ﺛﺎﻧﯿﻪ ﻫﺎي ﺑﻌﺪ از ﻣﺒﺪا ﺗﺎرﯾﺦ ﯾﻮﻧﯿﮑﺲ ) ('1970-01-01 00:00:00' UTCرا ذﺧﯿﺮه
ﻣﯽ ﮐﻨﺪ .ﺑﺎ ﻓﺮﻣﺖ YYYY-MM-DD HH:MM:SS :
ﺗﻮﺟﻪ :اﯾﻦ ﻧﻮع داده از داﻣﻨﻪ '1970-01-01 00:00:01' UTCﺗﺎ '2038-01-09 03:14:07' UTCﭘﺸﺘﯿﺒﺎﻧﯽ
)(TIMESTAMP
ﻣﯽ ﮐﻨﺪ.
69
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
*ﻓﺮﻣﺖ دو ﺗﺎﺑﻊ )( DATETIMEو )( TIMESTAMPﺷﺒﯿﻪ ﺑﻪ ﻫﻢ اﺳﺖ وﻟﯽ از ﻧﻈﺮ ﮐﺎرﮐﺮد ﺑﺴﯿﺎر ﺑﺎ ﻫﻢ ﻣﺘﻔﺎوت ﻫﺴﺘﻨﺪ .در ﭘﺮس و ﺟﻮي
INSERTو ﯾﺎ ،UPDATEداده TIMESTAMPﺑﻪ ﻃﻮر ﺧﻮدﮐﺎر ﺧﻮد را ﺑﻪ ﺗﺎرﯾﺦ و زﻣﺎن ﻓﻌﻠﯽ ﻣﯽ ﭼﺴﺒﺎﻧﺪ .ﺑﺮﭼﺴﺐ زﻣﺎن ﻓﺮﻣﺖ ﻫﺎي
ﻣﺨﺘﻠﻔﯽ ﻣﯽ ﭘﺬﯾﺮد ﻣﺎﻧﻨﺪ ،YYYYMMDD ،YYMMDDHHMMSS ،YYYYMMDDHHMMSSﯾﺎ .YYMMDD
n رﺷﺘﻪ ﮐﺎراﮐﺘﺮي ﺑﺎ ﻃﻮل ﺛﺎﺑﺖ اﺳﺖ .ﺣﺪاﮐﺜﺮ 8000ﮐﺎراﮐﺘﺮ اﺳﺖ. )char(n
رﺷﺘﻪ ﮐﺎراﮐﺘﺮي ﺑﺎ ﻃﻮل ﻣﺘﻐﯿﺮ .ﺣﺪاﮐﺜﺮ GB2داده ﻫﺎي ﻣﺘﻨﯽ . text
داده ﻫﺎي ﯾﻮﻧﯿﮑﺪ ﺑﺎ ﻃﻮل ﺛﺎﺑﺖ اﺳﺖ .ﺣﺪاﮐﺜﺮ 4000ﮐﺎراﮐﺘﺮ اﺳﺖ. )nchar(n
70
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
داده ﻫﺎي ﯾﻮﻧﯿﮑﺪ ﺑﺎ ﻃﻮل ﻣﺘﻐﯿﺮاﺳﺖ .ﺣﺪاﮐﺜﺮ GB2داده ﻫﺎي ﻣﺘﻨﯽ . ntext
ﻧﻮع دودوﯾﯽ:
داده ﻫﺎي دودوﯾﯽ ﺑﺎ ﻃﻮل ﺛﺎﺑﺖ اﺳﺖ .ﺣﺪاﮐﺜﺮ 8000ﺑﺎﯾﺖ اﺳﺖ. )binary(n
داده ﻫﺎي دودوﯾﯽ ﺑﺎ ﻃﻮل ﻣﺘﻐﯿﺮ اﺳﺖ .ﺣﺪاﮐﺜﺮ 8000ﺑﺎﯾﺖ اﺳﺖ. )varbinary(n
71
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﺳﻤﺖ راﺳﺖ ﻧﻘﻄﻪ اﻋﺸﺎر اﺳﺖ S .ﺑﺎﯾﺪ ﯾﮏ ﻣﻘﺪار را از 0ﺑﻪ Pداﺷﺘﻪ ﺑﺎﺷﺪ .ﻣﻘﺪار ﭘﯿﺶ
ﻓﺮض 0اﺳﺖ .
4 bytes اﻃﻼﻋﺎت دﻗﯿﻖ اﻋﺪاد از ﺷﻤﺎره -3.40E + 38ﺗﺎ 3.40E + 38 real
ﻧﻮع ﺗﺎرﯾﺦ:
8 bytes از ﺗﺎرﯾﺦ 1ژاﻧﻮﯾﻪ 1753ﺗﺎ 31دﺳﺎﻣﺒﺮ 9999 ،ﺑﺎ دﻗﺖ 3.33ﻣﯿﻠﯽ ﺛﺎﻧﯿﻪ اﺳﺖ. datetime
6-8 bytes از ﺗﺎرﯾﺦ 1ژاﻧﻮﯾﻪ 0001 ،ﺗﺎ 31دﺳﺎﻣﺒﺮ 9999 ،ﺑﺎ دﻗﺖ 100ﻧﺎﻧﻮ ﺛﺎﻧﯿﻪ اﺳﺖ . datetime2
4 bytes از ﺗﺎرﯾﺦ 1ژاﻧﻮﯾﻪ ﺳﺎل 1900ﺗﺎ 6ژوﺋﻦ ،2079 ،ﺑﺎ دﻗﺖ 1دﻗﯿﻘﻪ اﺳﺖ . smalldatetime
3 bytes ﻓﻘﻂ ذﺧﯿﺮه ﺗﺎرﯾﺦ .از 1ژاﻧﻮﯾﻪ 0001 ،ﺗﺎ 31دﺳﺎﻣﺒﺮ.9999 ، date
3-5 bytes ﻓﻘﻂ ذﺧﯿﺮه زﻣﺎن ﺑﺎ دﻗﺖ 100ﻧﺎﻧﻮ ﺛﺎﻧﯿﻪ اﺳﺖ . time
8-10 bytes ﻫﻤﺎن date me2اﺳﺖ ﻋﻼوه ﺑﺮ اﯾﻦ از ﯾﮏ اﻓﺴﺖ ﻣﻨﻄﻘﻪ زﻣﺎﻧﯽ. datetimeoffset
ﯾﮏ ﺷﻤﺎره ﻣﻨﺤﺼﺮ ﺑﻪ ﻓﺮد ذﺧﯿﺮه ﻣﯽ ﺷﻮد در زﻣﺎﻧﯽ ﮐﻪ ﯾﮏ ردﯾﻒ اﯾﺠﺎد ﻣﯽ ﺷﻮد و ﯾﺎ ﺑﺎ
ﺗﻐﯿﯿﺮ ﺑﺮوز رﺳﺎﻧﯽ ﻣﯽ ﺷﻮد .ﻣﻘﺪار timestampزﻣﺎن را ﺑﺮ اﺳﺎس ﯾﮏ ﺳﺎﻋﺖ داﺧﻠﯽ
timestamp
ﺗﻨﻈﯿﻢ ﻣﯽ ﮐﻨﺪ و ﺑﻪ زﻣﺎن واﻗﻌﯽ ﻣﻄﺎﺑﻘﺖ ﻧﺪارد .ﻫﺮ ﺟﺪول ،ﻣﻤﮑﻦ اﺳﺖ ﻓﻘﻂ ﯾﮏ زﻣﺎن
ﻣﺘﻐﯿﺮ داﺷﺘﻪ ﺑﺎﺷﺪ.
72
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ذﺧﯿﺮه ﺑﯿﺸﺘﺮ از 8000ﺑﺎﯾﺖ از داده ﻫﺎ را از اﻧﻮاع داده ﻫﺎي ﻣﺨﺘﻠﻒ ،ﺑﻪ ﺟﺰ ﻣﺘﻦ ،ntext ،و زﻣﺎن . sql_variant
ذﺧﯿﺮه ﻣﺮﺟﻊ ﺑﺎ ﯾﮏ اﺷﺎره ﮔﺮ ﺑﺮاي ﻋﻤﻠﯿﺎت ﭘﺎﯾﮕﺎه داده اﺳﺘﻔﺎده ﻣﯽ ﺷﻮد. cursor
73
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﺗﻮاﺑﻊ SQL
ﺗﻮاﺑﻊ ﺟﻤﻌﯽ SQLﯾﮏ ﻣﻘﺪار ﺗﮑﯽ ﻣﺤﺎﺳﺒﻪ ﺷﺪه از ﻣﻘﺎدﯾﺮ ﯾﮏ ﺳﺘﻮن را ﺑﺮﻣﯽ ﮔﺮداﻧﻨﺪ.
ﺗﻮاﺑﻊ اﺳﮑﺎﻟﺮ SQLﯾﮏ ﻣﻘﺪار ﺗﮑﯽ ﻣﺒﻨﯽ ﺑﺮ ﻣﻘﺪار ورودي را ﺑﺮﻣﯽ ﮔﺮداﻧﻨﺪ.
ﺗﺎﺑﻊ )(AVG
74
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
OrderAverage
950
.“ ﻣﯿﺎﻧﮕﯿﻦ دارﻧﺪ را ﭘﯿﺪا ﮐﻨﯿﻢOrderPrice” “ ﺑﺎﻻﺗﺮ از ﻣﻘﺪارOrderPrice” اﮐﻨﻮن ﻣﯽ ﺧﻮاﻫﯿﻢ ﻣﺸﺘﺮﯾﺎﻧﯽ ﮐﻪ )ﺣﺪاﻗﻞ( ﯾﮏ ﻣﻘﺪار
75
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
Customer
Hansen
Nilsen
Jensen
. ﺗﻌﺪادي ﺳﻄﺮ ﮐﻪ ﺑﺎ ﯾﮏ ﻣﻌﯿﺎرﻫﺎي ﻣﺸﺨﺺ ﺗﻄﺒﯿﻖ داده ﺷﺪه اﻧﺪ را ﺑﺮﻣﯽ ﮔﺮداﻧﺪSQL درCOUNT() ﺗﺎﺑﻊ
: ﺷﻤﺎرش ﻧﺨﻮاﻫﺪ ﺷﺪ( از ﺳﺘﻮن ﻣﺸﺨﺼﯽ را ﺑﺮﻣﯽ ﮔﺮداﻧﺪNULL ﺗﻌﺪادي ﻣﻘﺎدﯾﺮ )ﻣﻘﺎدﯾﺮCOUNT(column_name) ﺗﺎﺑﻊ
ﮐﺎر ﻧﻤﯽMicrosoft Access ﮐﺎر ﻣﯽ ﮐﻨﺪ و درMicrosoft SQL Server وORACLE درCOUNT(DISTINCT) :ﺗﻮﺟﻪ
.ﮐﻨﺪ
76
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
: ﺳﻔﺎرش دارد2 ﻣﺠﻤﻮﻋﺎNilsen ﺧﻮاﻫﺪ ﺷﺪ؛ ﭼﻮن ﻣﺸﺘﺮي2 ﺑﺎﻻSQL ﻧﺘﯿﺠﻪ دﺳﺘﻮر
CustomerNilsen
2
NumberOfOrders
6
77
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
NumberOfCustomers
3
ﮐﻪ ﺗﻌﺪاد ﻣﺸﺘﺮﯾﺎن ﻏﯿﺮ ﺗﮑﺮاري ) Hansen, Nilsenو (Jansenدر ﺟﺪول اﺳﺖ.
ﺗﺎﺑﻊ )(FIRST
78
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
FirstOrderPrice
1000
LAST() ﺗﺎﺑﻊ
79
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
LastOrderPrice
100
MAX() ﺗﺎﺑﻊ
80
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
LargestOrderPrice
2000
MIN() ﺗﺎﺑﻊ
81
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
SmallestOrderPrice
100
SUM() ﺗﺎﺑﻊ
82
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
OrderTotal
5700
دﺳﺘﻮر Group Byﺑﺎ ﺗﻮاﺑﻊ ﺟﻤﻌﯽ ،ﺑﺮاي دﺳﺘﻪ ﺑﻨﺪي ﮐﺮدن ﻧﺘﯿﺠﻪ ﺗﻮﺳﻂ ﯾﮏ ﯾﺎ ﭼﻨﺪ ﺳﺘﻮن اﺳﺘﻔﺎده ﻣﯽ ﺷﻮد.
ﻣﺎ ﻣﺠﺒﻮر ﺧﻮاﻫﯿﻢ ﺷﺪ از دﺳﺘﻮر Group Byﺑﺮاي دﺳﺘﻪ ﺑﻨﺪي ﮐﺮدن ﻣﺸﺘﺮﯾﺎن اﺳﺘﻔﺎده ﮐﻨﯿﻢ.
83
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
Customer )SUM(OrderPrice
Hansen 2000
Nilsen 1700
Jensen 2000
ﺑﮕﺬارﯾﺪ ﺑﺒﯿﻨﯿﻢ؛ اﮔﺮ از دﺳﺘﻮر Group Byﺻﺮف ﻧﻈﺮ ﻣﯽ ﮐﺮدﯾﻢ ﭼﻪ اﺗﻔﺎﻗﯽ ﻣﯽ اﻓﺘﺎد:
Customer )SUM(OrderPrice
Hansen 5700
Nilsen 5700
Hansen 5700
Hansen 5700
Jensen 5700
Nilsen 5700
ﺗﺸﺮﯾﺢ اﯾﻨﮑﻪ ﭼﺮا دﺳﺘﻮر SELECTﺑﺎﻻ ﻧﻤﯽ ﺗﻮاﻧﺪ اﺳﺘﻔﺎده ﺷﻮد :دﺳﺘﻮر SELECTﺑﺎﻻ دو ﺳﺘﻮن ﻣﺸﺨﺺ ﺷﺪه دارد
) Customerو ) .(SUM(OrderPriceﻫﻨﮕﺎﻣﯿﮑﻪ " 6 "Customerﻣﻘﺪار ﺑﺮﻣﯽ ﮔﺮداﻧﺪ )ﯾﮏ ﻣﻘﺪار ﺑﺮاي ﻫﺮ در ﺳﻄﺮ ﺟﺪول
" "SUM(OrderPrice)" ،("Ordersﯾﮏ ﻣﻘﺪار واﺣﺪ ﺑﺮﻣﯽ ﮔﺮداﻧﺪ )آن ﻣﺠﻤﻮع ﺳﺘﻮن " "OrderPriceاﺳﺖ( .ﺑﻨﺎﺑﺮاﯾﻦ اﯾﻦ
ﻧﺘﯿﺠﻪ درﺳﺖ را ﺑﻪ ﻣﺎ ﻧﺨﻮاﻫﺪ داد .ﺑﺎ اﯾﻦ ﺣﺎل ،دﯾﺪﯾﺪ ﮐﻪ دﺳﺘﻮر Group Byاﯾﻦ ﻣﺸﮑﻞ را ﺣﻞ ﻣﯽ ﮐﻨﺪ.
ﻣﺎ ﻣﯽ ﺗﻮاﻧﯿﻢ از دﺳﺘﻮر Group Byﺑﺮاي ﺑﯿﺶ از ﯾﮏ ﺳﺘﻮن اﺳﺘﻔﺎده ﮐﻨﯿﻢ ،ﻣﺜﻞ اﯾﻦ:
84
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
Having ﻋﺒﺎرت
. ﻧﻤﯽ ﺗﻮاﻧﺪ ﺑﺮاي ﺗﻮاﺑﻊ ﺟﻤﻌﯽ اﺳﺘﻔﺎده ﺷﻮدWHERE اﺿﺎﻓﻪ ﺷﺪ؛ ﭼﻮن ﮐﻠﻤﻪ ﮐﻠﯿﺪيSQL ﺑﻪHaving ﻋﺒﺎرت
. دارد را ﭘﯿﺪا ﮐﻨﯿﻢ2000 اﮐﻨﻮن ﻣﯽ ﺧﻮاﻫﯿﻢ ﻫﺮ ﻣﺸﺘﺮي را ﮐﻪ ﺟﻤﻊ ﺳﻔﺎرش ﮐﻤﺘﺮ از
Customer SUM(OrderPrice)
Nilsen 1700
85
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
. دارﻧﺪ را ﭘﯿﺪا ﮐﻨﯿﻢ1500 " ﮐﻪ ﺟﻤﻊ ﺳﻔﺎرش ﺑﯿﺸﺘﺮ ازJensen" " ﯾﺎHansen" اﮐﻨﻮن ﻣﯽ ﺧﻮاﻫﯿﻢ ﻣﺸﺘﺮﯾﺎﻧﯽ ﺑﺎ ﻧﺎم
Customer SUM(OrderPrice)
Hansen 2000
Jensen 2000
UCASE() ﺗﺎﺑﻊ
. ﻣﻘﺪار ﯾﮏ رﺷﺘﻪ را ﺑﻪ ﺣﺮوف ﺑﺰرگ ﺗﺒﺪﯾﻞ ﻣﯽ ﮐﻨﺪUCASE() ﺗﺎﺑﻊ
UCASE() ﮔﺮاﻣﺮ
SELECT UCASE(column_name) FROM table_name
“ را ﺑﻪLastName” “ ﺑﺎﻻ را اﻧﺘﺨﺎب ﮐﻨﯿﻢ و ﺳﺘﻮنFirstName” “ وLastName” اﮐﻨﻮن ﻣﯽ ﺧﻮاﻫﯿﻢ ﻣﺤﺘﻮاي ﺳﺘﻮﻧﻬﺎي
.ﺣﺮوف ﺑﺰرگ ﺗﺒﺪﯾﻞ ﮐﻨﯿﻢ
86
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
LastName FirstName
HANSEN Ola
SVENDSON Tove
PETTERSEN Kari
LCASE() ﺗﺎﺑﻊ
. ﻣﻘﺪار ﯾﮏ رﺷﺘﻪ را ﺣﺮوف ﮐﻮﭼﮏ ﺗﺒﺪﯾﻞ ﻣﯽ ﮐﻨﺪLCASE() ﺗﺎﺑﻊ
LCASE() ﮔﺮاﻣﺮ
SELECT LCASE(column_name) FROM table_name
" را ﺑﻪLastName" " ﺳﺘﻮن ﻫﺎي ﺑﺎﻻ را اﻧﺘﺨﺎب ﮐﻨﯿﻢ و ﺳﺘﻮنFirstName" " وLastName" اﮐﻨﻮن ﻣﯽ ﺧﻮاﻫﯿﻢ ﻣﺤﺘﻮاي
.ف ﮐﻮﭼﮏ ﺗﺒﺪﯾﻞ ﮐﻨﯿﻢ.ﺣﺮو
87
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
LastName FirstName
hansen Ola
svendson Tove
pettersen Kari
ﺗﺎﺑﻊ )(MID
ﺗﻮﺿﯿﺤﺎت ﭘﺎراﻣﺘﺮ
ﻻزم .رﺷﺘﻪ ﻣﻮرد ﻧﻈﺮ ﺑﺮاي اﺳﺘﺨﺮاج ﮐﺎراﮐﺘﺮﻫﺎ column_name
ﻻزم .ﻣﻮﻗﻌﯿﺖ ﺷﺮوع را ﻣﺸﺨﺺ ﮐﻨﯿﺪ )ﺷﺮوع از (1 start
اﺧﺘﯿﺎري .ﺗﻌﺪاد ﮐﺎراﮐﺘﺮﻫﺎ ﺑﺮاي ﺑﺎزﮔﺸﺖ .اﮔﺮ ﺻﺮﻓﻨﻈﺮ ﺷﻮد ،ﺗﺎﺑﻊ )( MIDﺑﻘﯿﻪ ﻣﺘﻦ را ﺑﺮﻣﯽ ﮔﺮداﻧﺪ. length
اﮐﻨﻮن ﻣﯽ ﺧﻮاﻫﯿﻢ ﭼﻬﺎر ﮐﺎراﮐﺘﺮ اول از ﺳﺘﻮن " "Cityﺑﺎﻻ را اﺳﺘﺨﺮاج ﮐﻨﯿﻢ.
88
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
SmallCity
Sand
Sand
Stav
LEN() ﺗﺎﺑﻊ
LengthOfAddress
12
9
89
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
ﺗﺎﺑﻊ )(ROUDN
ﺗﺎﺑﻊ )( ROUDNﺑﺮاي ﮔﺮد ﮐﺮدن ﯾﮏ ﻓﯿﻠﺪ ﻋﺪدي ﺑﻪ ﺗﻌﺪاد ﻋﺪد اﻋﺸﺎري ﻣﺸﺨﺺ.
ﺗﻮﺿﯿﺤﺎت ﭘﺎراﻣﺘﺮﻫﺎ
column_nameﻻزم .ﻓﯿﻠﺪي ﮐﻪ ﺑﺎﯾﺪ ﮔﺮد ﺷﻮد.
ﻻزم .ﺗﻌﺪاد اﻋﺸﺎر ﺑﺮاي ﮔﺮد ﺷﺪن را ﺗﻌﯿﯿﻦ ﻣﯽ ﮐﻨﺪ. decimals
اﮐﻨﻮن ﻣﯽ ﺧﻮاﻫﯿﻢ ﻧﺎم ﻣﺤﺼﻮﻻت و ﻗﯿﻤﺖ ﮔﺮد ﺷﺪه ﺑﻪ ﻧﺰدﯾﮑﺘﺮﯾﻦ ﻋﺪد ﻧﻤﺎﯾﺶ دﻫﯿﻢ.
ProductName UnitPrice
Jarlsberg 10
Mascarpone 33
Gorgonzola 16
ﺗﺎﺑﻊ )(NOW
90
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
NOW() ﻣﺜﺎل
FORMAT() ﺗﺎﺑﻊ
91
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
ﺗﻮﺿﯿﺤﺎت ﭘﺎراﻣﺘﺮ
. ﻓﯿﻠﺪي ﮐﻪ ﺑﺎﯾﺪ ﻓﺮﻣﺖ دﻫﯽ ﺷﻮد.ﻻزم column_name
. ﻓﺮﻣﺖ را ﺗﻌﯿﯿﻦ ﻣﯽ ﮐﻨﺪ.ﻻزم format
."( را ﻧﻤﺎﯾﺶ دﻫﯿﻢYYYY-MM-DD" اﮐﻨﻮن ﻣﯽ ﺧﻮاﻫﯿﻢ ﻣﺤﺼﻮﻻت و ﻗﯿﻤﺖ در ﺗﺎرﯾﺦ اﻣﺮوز )ﺑﺎ ﻓﺮﻣﺖ
92
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
ﺿﻤﯿﻤﻪ
AS (alias) ﯾﺎ
SELECT column_name
FROM table_name AS table_alias
SELECT column_name(s)
FROM table_name
BETWEEN
WHERE column_name
BETWEEN value1 AND value2
CREATE DATABASE CREATE DATABASE database_name
CREATE TABLE table_name
(
column_name1 data_type,
CREATE TABLE column_name2 data_type,
column_name2 data_type,
...
)
CREATE INDEX index_name
ON table_name (column_name)
CREATE INDEX
ﯾﺎ
٩٣
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
ﯾﺎ
٩۴
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
ﯾﺎ
٩۵
91 ﺑﻬﺎر SQL راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات
SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_table_name
SELECT TOP number|percent column_name(s)
SELECT TOP
FROM table_name
TRUNCATE TABLE TRUNCATE TABLE table_name
SELECT column_name(s) FROM table_name1
UNION UNION
SELECT column_name(s) FROM table_name2
SELECT column_name(s) FROM table_name1
UNION ALL UNION ALL
SELECT column_name(s) FROM table_name2
UPDATE table_name
UPDATE SET column1=value, column2=value,...
WHERE some_column=some_value
SELECT column_name(s)
WHERE FROM table_name
WHERE column_name operator value
وب ﺳﺮور ﺗﺎن ﺑﺎﯾﺪ ﺑﻪ ﯾﮏ ﺳﯿﺴﺘﻢ،اﮔﺮ ﻣﯽ ﺧﻮاﻫﯿﺪ وب ﺳﺎﯾﺖ ﺗﺎن ﻗﺎدر ﺑﻪ دﺧﯿﺮه ﮐﺮدن و ﻧﻤﺎﯾﺶ داده ﻫﺎ از ﯾﮏ ﭘﺎﯾﮕﺎه داده ﺑﺎﺷﺪ
. اﺳﺘﻔﺎده ﻣﯽ ﮐﻨﺪSQL ﭘﺎﯾﮕﺎه داده دﺳﺘﺮﺳﯽ داﺷﺘﻪ ﺑﺎﺷﺪ ﮐﻪ از زﺑﺎن
ﻧﮕﺎهSQL ( ﻣﯿﺰﺑﺎن ﺧﻮاﻫﺪ ﺷﺪ؛ ﺑﺎﯾﺪ ﺑﻪ ﻃﺮح ﻫﺎي ﻫﺎﺳﺘﯿﻨﮓISP) اﮔﺮ وب ﺳﺮور ﺷﻤﺎ ﺗﻮﺳﻂ ﯾﮏ ﻓﺮاﻫﻢ ﮐﻨﻨﺪه ﺳﺮوﯾﺲ اﯾﻨﺘﺮﻧﺖ
.ﮐﻨﯿﺪ
. ﻫﺴﺘﻨﺪMS Access وMS SQL Server ،MySQL راﯾﺞ ﺗﺮﯾﻦ ﭘﺎﯾﮕﺎه داده ﻫﺎي ﻫﺎﺳﺘﯿﻨﮓ
.ﯾﻮﻧﯿﮑﺲ داﺷﺘﻪ ﺑﺎﺷﯿﺪ/ را در ﻫﺮ دو ﺳﯿﺴﺘﻢ ﻋﺎﻣﻞ وﯾﻨﺪوز و ﻟﯿﻨﻮﮐﺲSQL ﺷﻤﺎ ﻣﯽ ﺗﻮاﻧﯿﺪ ﭘﺎﯾﮕﺎه داده ﻫﺎي
: آﻣﺪه اﺳﺖ،در زﯾﺮ ﯾﮏ ﻧﻤﺎي ﮐﻠﯽ از اﯾﻨﮑﻪ ﮐﺪام ﺳﯿﺴﺘﻢ ﭘﺎﯾﮕﺎه داده روي ﮐﺪام ﺳﯿﺴﺘﻢ ﻋﺎﻣﻞ اﺟﺮا ﻣﯽ ﺷﻮد
My SQL Server
٩۶
ﺑﻬﺎر 91 راﻫﻨﻤﺎي ﺟﺎﻣﻊ دﺳﺘﻮرات SQL
MySQL
MS Access
ﺑﺮاي آﻣﻮزش ﺑﯿﺸﺘﺮ درﺑﺎره وب ﻫﺎﺳﺘﯿﻨﮓ ،ﻟﻄﻔﺎ از دوره آﻣﻮزش ﻫﺎﺳﺘﯿﻨﮓ ﻣﺎ ﺑﺎزدﯾﺪ ﮐﻨﯿﺪ.
ﺧﻼﺻﻪ SQL
اﯾﻦ دوره SQLﺑﻪ ﺷﻤﺎ آﻣﻮﺧﺖ ﮐﻪ SQLزﺑﺎن اﺳﺘﺎﻧﺪارد ﮐﺎﻣﭙﯿﻮﺗﺮ ﺑﺮاي دﺳﺘﺮﺳﯽ و دﺳﺘﮑﺎري ﺳﯿﺴﺘﻢ ﻫﺎي ﭘﺎﯾﮕﺎه داده اﺳﺖ.
ﺷﻤﺎ آﻣﻮﺧﺘﯿﺪ ﮐﻪ ﭼﮕﻮﻧﻪ ﺑﺎ SQLدر ﯾﮏ ﭘﺎﯾﮕﺎه داده ﭘﺮس و ﺟﻮ را اﺟﺮا ﮐﻨﯿﺪ ،داده را ﺑﺎزﯾﺎﺑﯽ ﮐﻨﯿﺪ ،رﮐﻮردﻫﺎي ﺟﺪﯾﺪ درج ﮐﻨﯿﺪ،
رﮐﻮردﻫﺎ را ﺣﺬف و ﺑﺮوز رﺳﺎﻧﯽ ﮐﻨﯿﺪ.
ﺷﻤﺎ ﻫﻤﭽﻨﯿﻦ آﻣﻮﺧﺘﯿﺪ ﮐﻪ ﭼﮕﻮﻧﻪ ﭘﺎﯾﮕﺎه ﻫﺎي داده ،ﺟﺪاول و ﻓﻬﺮﺳﺖ ﻫﺎ را ﺑﺎ SQLﺑﺴﺎزﯾﺪ ،و ﭼﮕﻮﻧﻪ آﻧﻬﺎ را ﺣﺬف ﮐﻨﯿﺪ.
اﮐﻨﻮن ﻣﯽ داﻧﯿﺪ ﮐﻪ SQLزﺑﺎن اﺳﺘﺎﻧﺪاردي اﺳﺖ ﮐﻪ ﺑﺎ ﻫﻤﻪ ﺳﯿﺴﺘﻢ ﻫﺎي ﭘﺎﯾﮕﺎه داده ﻣﻌﺮوف ﻣﺜﻞ ،IBM DB2 ،MS SQL Server
MySQL ،Oracleو MS Accessﺑﺨﻮﺑﯽ ﮐﺎر ﻣﯽ ﮐﻨﺪ.
اﮔﺮ ﻣﯽ ﺧﻮاﻫﯿﺪ در ﻣﻮرد ADOﺑﯿﺸﺘﺮ ﺑﯿﺎﻣﻮزﯾﺪ ،ﻟﻄﻔﺎ دوره آﻣﻮزش ADOﻣﺎ را ﺑﺎزدﯾﺪ ﮐﻨﯿﺪ.
اﮔﺮ ﻣﯽ ﺧﻮاﻫﯿﺪ در ﻣﻮرد MySQLﺑﯿﺸﺘﺮ ﺑﯿﺎﻣﻮزﯾﺪ ،ﻟﻄﻔﺎ دوره آﻣﻮزش PHPﻣﺎ را ﺑﺎزدﯾﺪ ﮐﻨﯿﺪ.
٩٧