آموزش مفهومی sqlI

Ehsan HP

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

Ehsan HP

کاربر تازه وارد
تازه وارد
پاسخ : آموزش مفهومی sqlI

سلام
در اين مقاله قصد دارم طوری sql رو آموزش بدم که تا حالا نديدم کسی آموزش بده ؛يعنی مفهومی آموزش بدم .طوری که حتّی بتونيد دستورات ابتکاری بسازيد...
منبع:
www.w3schools.com/SQl/default.asp
en.wikipedia.org/wiki/SQL
dev.mysql.com/doc/mysql/en/index.html
----------------------------------------------------------------------------------------------------------------------------------
مقدّمه

sql چيست؟
sql مخفّف "Structured Query Language" است.
sql يک زبان استاندارد است که به شما اجازه ی دسترسی و دستکاری در منابع اطّلاعاتی سايت تان را می دهد.

sql چه کار می کند؟
sql می تواند منابع اطّلاعاتی جديدی برای شما ايجاد کرده و جدول های جديدی در آن ايجاد کند.
sql می تواند دستورات شما را (مانند نمايش محتويات منابع اطّلاعاتی سايت شما ،تغيير آنها ،اضافه کردن اطّلاعات ،به روز کردن اطّلاعات ،حذف اطّلاعات و ...) در منابع اطّلاعاتی سايت تان اجرا کند و تغييرات حاصل را به شما نمايش دهد.
sql می تواند سطح دسترسی اطّلاعات را برای کاربران مختلف (از جمله کاربران ناشناس اينترنت) تغيير دهد و جلوی دسترسی های غير مجاز را گرفته و در نهايت امنيت اطّلاعات محرمانه ی سايت شما را تامين نمايد.

sql استاندارد است ولی ...
sql تحت استاندرد ملّی ايالات متّحد (ANSI) است ولی نسخه های متفاوتی از آن وجود دارد (مانند MySql ,MsSql Server ,oracle ,IBM DB2 ,...).
البته تعداد زيادی از دستورات آن (از جمله دستورات اوّليه اين مقاله) مشترک است ( مانند SELECT, UPDATE, DELETE, INSERT, WHERE) .
___________________________________________________________________________________________
 

Ehsan HP

کاربر تازه وارد
تازه وارد
پاسخ : آموزش مفهومی sqlI

قبل از شروع بهتر است که مفهوم تعدادی از لغات مورد استفاده در در اين مقاله را شرح دهم:
database = منبع اطّلاعات - هر سايت می تواند از تعداد نامحدودی منبع اطّلاعات تشکيل شده باشد که هر کدام بخشی از اطّلاعات سايت را که به يک موضوع مشخص مربوط است را شامل می شود.
table = جدول - هر منبع اطّلاعاتی شامل تعداد نامحدودی جدول است.
column = ستون - هر جدول از تعداد نامحدودی ستون تشکيل شده است.
record = سطر ،رکورد ، row - در جدول ها اطّلاعات را در سطر ها نمايش می دهند ؛ در حقيقت sql فقط بين اطّلاعات ستون ها ارتباط برقرار می کند.
برای فهم بهتر يک مثال ملموس ميزنم ؛جدول برنامه ی هفتگی !
اين جدول (معمولا) 5 ستون دارد (روز ،زنگ اوّل ،زنگ دوّم ،زنگ سوّم و زنگ چهارم) و معمولاً 6 سطر دارد.

کد:
+------------+-----------+------------+-----------+-----------+ 
|     day    |    1st    |     2nd    |    3rd    |    4th    | 
+------------+-----------+------------+-----------+-----------+ 
|    0sh     | lesson01  |   lesson02 | lesson03  | lesson04  | 
+------------+-----------+------------+-----------+-----------+ 
|    1sh     | lesson05  |   lesson06 | lesson07  | lesson08  | 
+------------+-----------+------------+-----------+-----------+ 
|    2sh     | lesson03  |   lesson04 | lesson05  | lesson06  | 
+------------+-----------+------------+-----------+-----------+ 
|    3sh     | lesson07  |   lesson08 | lesson01  | lesson02  | 
+------------+-----------+------------+-----------+-----------+ 
|    4sh     | lesson05  |   lesson06 | lesson07  | lesson08  | 
+------------+-----------+------------+-----------+-----------+ 
|    5sh     | lesson01  |   lesson02 | lesson03  | lesson04  |
+------------+-----------+------------+-----------+-----------+
در اين مثال نام منبع اطّلاعات ما school ،نام جدول ما lessons ،نام ستون ها day ,1st ,2nd ,3rd ,4th است ؛همچنين نام روز های ما 0sh تا 5sh و نام درس ها lesson01 تا lesson08 است (در اين مثال برنامه ی 6 روز و 8 درس و 4 زنگ را در اين جدول قرار داده ام) .
نکته: sql به بزرگی و کوچکی حروف حسّاس نيست.
 

Ehsan HP

کاربر تازه وارد
تازه وارد
دستور Select

تا اينجا با مفاهيم اصولی sql آشنا شديد .حالا به دستورات ساده می پردازيم .البته در بعداّ با کاربرد اين فرامين در نفوذ به سايت ها آشنا می شويد.
------------------------------------------------------------------------------------------------------------------------------------------------------------
دستور Select:
اين دستور اطّلاعات يک جدول را نمايش می دهد و هم زمان به طور موقت در جدول result-set ثبت می کند.
کد:
syntax:
SELECT column_name(s) FROM table_name
نکته:
دستور : SELECT FROM table_name
نتيجه : تمام داده های جدول را برمی گرداند.

نکته: اگر بعد از عبارت select ،عبارت DISTINCT را قرار دهيم ،سطر های تکراری حذف می شوند.

نکته :موقع برنامه نويسی به اين زبان بايد آدرس کامل جدول رو ذکر کنيم ؛اينجوری:
کد:
select column_name from database_name.table_name
بعدها توضيح ميدم که اين نکته چه فايده اي در هک داره.

مثال:
دستور : select day from lessons
نتيجه : 0sh,1sh,3sh,4sh,5sh
 

Ehsan HP

کاربر تازه وارد
تازه وارد
دستور where:

دستور where:
اين دستور عمليات قبل از خود را ،محدود به سطر هايی می کند که شرط بعد از where برای شان صحيح باشد.
کد:
syntax:
SELECT column_name(s) FROM table_name WHERE column_name operator value
ليست operator ها:
= : مساوی.
<> : مخالف يا نا مساوی.
=< : کوچک تر مساوی.
=> : بزرگ تر مساوی.
< : کوچک تر.
> : بزرگ تر.
between : عبارت داخل ستون مشخص شده در يک رنج مشخص باشد.
like : در عبارت داخل ستون مشخص شده ، value را جستجو می کند.
in : اگر عبارت داخل ستون دقيقاً برابر value باشد.

نکته: اگر value عددی باشد نيازی به ' نيست ولی اگر از نوع char باشد بايد داخل ' قرار بگيرد.
نکته: می توانيد با استفاده از عبارت های or و and به طور هم زمان چند شرط را مورد پرسش قرار دهيد.مانند:
کد:
SELECT column_name(s) FROM table_name WHERE column_name1 operator value1 or column_name2 operator value2
همچنين برای مورد پرسش قرار دادن بيش از 2 شرط می توانيد از ( و ) استفاده کنيد.مانند:
کد:
SELECT column_name(s) FROM table_name WHERE column_name1 operator value1 or (column_name2 operator value2 and column_name3 operator value3)
مثال:
select * from lessons where day='2sh' : Query
نتيجه : تمام داده های ستری که محتوای ستون day آن 2sh است (درس های روز دوشنبه) .
 

Ehsan HP

کاربر تازه وارد
تازه وارد
توضيحات تکميلی operator های like, between, in :

توضيحات تکميلی operator های like, between, in :
کد:
:SQL LIKE Syntax
SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern
اين operator در واقع عبارت pattern را در محتوای سطر های ستون مشخص شده جستجو مي کند .
نکته ی اصلی اين دستور در عبارت pattern است ؛ما ميتونيم از پيشوند ها و پسوند های (اصطلاحاً Wildcard) زير استفاده کنيم :
مثال ها:
کد:
% : 
SELECT * FROM school.lessons WHERE day LIKE '1sh%'
اين دستور برای وقتی هست که مثلاً ما نميدونيم که نام روز يکشنبه 1sh هست يا 1shanbe ؛در اين صورت اين علامت به جای بقيه ی اسم (که نمي دانيم چيست) می نشيند (بقيه ی اسم ميتواند خالی هم باشد).
کد:
_ : 
SELECT * FROM school.lessons WHERE day LIKE '_sh'
اين علامت جايگزين يک حرف در محتوای ستون می شود که ما نميدانيم چيست (اين حرف جا افتاده ميتواند اوّل، وسط يا آخر کلمه باشد). بنابراين اين دستور تمام جدول را برميگرداند.
کد:
[charlist] : 
SELECT * FROM school.lessons WHERE 1st LIKE '%[13]'
اين دستور به اين معناست که محتوای ستون زنگ اوّل از سطر مورد نظر با 1 يا 3 تمام می شود. پس اين دستور سطر هايی را برميگرداند که زنگ اوّل درس 1 يا 3 دارند.
کد:
[charlist] or [^charlist!] : 
SELECT * FROM school.lessons WHERE 1st LIKE '%[!53]'
کد:
SQL BETWEEN Syntax
SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2
اين دستور در 3 حالت کاربرد دارد:
عددی: سطری را برميگرداند که عدد ستون مورد نظر آن ميان value1 و value2 باشد.
حرفی: سطری را برميگرداند که محتوای ستون مورد نظر آن (بر اساس ترتيب حروف الفبا) ميان value1 و value2 باشد.
تاريخ: سطری را برميگرداند که تاريخ ستون مورد نظر آن ميان value1 و value2 باشد (بايد نوع ورودی آن ستون را date وارد کرده باشيم).

نکته: در برخی نسخه های sql ،اين اپراتور value1 و value2 را هم حساب مي کند ولی در برخی هيچ کدام را حساب نمي کند و در برخی هم دوّمی را حساب نمي کند!
کد:
SQL IN Syntax
SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...)
و در نهايت اپراتور IN هنگامی به کار مي رود که بخواهيم بگوئيم که محتوای ستون مورد نظر ،يکی از value های داخل پرانتز باشد يا اصلاً نباشد.
 

Ehsan HP

کاربر تازه وارد
تازه وارد
دستور order و insert:

دستور order:
وظيفه ی اين دستور مرتّب کردن جدول بر اساس يک ستون است.

کد:
کد:
syntax:
order by column_name|column_number asc|desc
اين دستور جدول را بر اساس ستونی با نام column_name يا بر اساس ستون شماره ی column_number مرتّب می*کند.البته با اضافه کردن desc به ترتيب معکوس مرتّب می*شود .
اين دستور در بيرون کشيدن اطّلاعات از جدول خيلی کمک می*کند ؛امّا کمی دندان روی جگر بگزاريد ... به آن هم می*رسيم.

مثال:
دستور : select * from lessons order by day یا select * from lessons order by 1
نتيجه : تمام داده های جدول ،که بر اساس ستون اوّل (روز) مرتّب شده اند.
--------------------------------------------------------------------------------------------------------------------------------------
دستور insert:
اين دستور يک سطر به جدول اضافه می*کند.

کد:
کد:
syntax:
INSERT INTO table_name VALUES (value1, value2, value3,...)
که در اين دستور يک سطر با جدول table_name اضافه کرده و مقدار تمام ستون*ها را به ترتيب برابر مقادير داخل پرانتز قرار می*دهد.
کد:

کد:
INSERT INTO table_name (column1, column3,...) VALUES (value1, value3,...)
تفاوت اين دستور با دستور قبلی در اين است که در دستور دوّم می*توانيد برخی ستون*ها را خالی بگزاريد و فقط تعدادی که برای تان مهم است را مقدار دهی کنيد.

نکته: اگر بخواهيم هم زمان چند سطر اضافه کنيم بايد بين صورت:
کد:

کد:
INSERT INTO table_name VALUES (value1, value2, value3,...) , (value4, value5, value6,...)
يا به اين صورت:
کد:

کد:
INSERT INTO table_name (column1, column2, column3,...) VALUES (value1, value2, value3,...) , (value4, value5, value6,...)
عمل کنيم.
نکته: در بعضی از نسخه های sql حتماً بايد به اين صورت:
کد:

کد:
INSERT INTO table_name (column1, column2, column3) VALUES (value1, value2, value3)
عمل کرد (همه ی ستون ها را نام ببريد) ،البته ميتوانيد ستون*هايی را که مي*خواهيد خالی بمانند را با '' پر کنيد (بين دو ' هيچ حرفی نگذاريد) ؛يعنی به جای :
کد:

کد:
INSERT INTO table_name (column1, column3,...) VALUES (value1, value3,...)
از :
کد:

کد:
INSERT INTO table_name (column1, column2, column3) VALUES (value1, '', value3)
استفاده کنيد.
 

Ehsan HP

کاربر تازه وارد
تازه وارد
دستور update و delete:

دستور update:
اين دستور مقادير يک يا چند ستون از يک سطر از جدول را تغيير می*دهد.


کد:
syntax:
UPDATE table_name SET column1=value, column2=value2,...
نکته: در اين دستور بهتر است از دستور where استفاده کنيد ولی در غير اين صورت مقادير تمام ستون*ها برابر همان مقدار*هايی می*شود که شما وارد کرده ايد ؛(يعنی مقدار تمام ستون*ها برابر می*شود) .

مثال:
UPDATE lessons SET 1st='lesson01' , 2st='lesson01' WHERE day='2sh' : query
نتيجه : دوشنبه زنگ اوّل و دوّم درس شماره ی 1 را داريم .
------------------------------------------------------------------------------------------------------------------------------------------
دستور delete:
اين دستور يک سطر را از جدول حذف می*کند.


کد:
syntax:
DELETE FROM table_name
اين دستور سطری از جدول را که شرط مشخص شده در آن درست است را حذف می*کند.
در اين دستور بهتر است از دستور where استفاده کنيد ولی در غير اين صورت مقادير تمام ستون*ها را حذف می*کند.
 

Ehsan HP

کاربر تازه وارد
تازه وارد
دستور top و limit :

قبل از اينکه دستور جديد رو توضيح بدم ،اين نکته رو بگم که من ترتيب موضوع ها رو بر اساس سايت w3schools.com انتخاب ميکنم ،بنابراين نگران نباشين که مثلاً چرا فلان دستور که اين قدر مهم هست رو آموزش ندادم و ...
در ضمن اينم بگم که از الان به بعد (طبق سايت w3schools.com) وارده دستورات يه خورده تخصصی تر ميشيم ... و بعضياشون در همه ی نسخه های sql وجود ندارند.
---------------------------------------------------------------------------------------------------------------------------------------------------
نکات کلّی:
دقت کنيد که نام منبع اطّلاعات يا جدول*ها يا ستون*ها ،نبايد در ' قرار بگيرد؛
در سطر*ها هم اگر ورودی از نوع char بود بايد داخل ' باشد ولی اگر عددی بود ،نبايد داخل ' باشد؛
همچنين توجه کنيد که معمولا در sql می*توان از " هم به جای ' استفاده کرد.

برای امتحان اين دستورات می*توانيد روی سيستم خود سرور راه بياندازيد يا آنکه در سايت زير دستورات را امتحان کنيد:
http://w3schools.com/sql/sql_tryit.asp
---------------------------------------------------------------------------------------------------------------------------------------------------
دستور TOP و LIMIT :
اين دستور برای محدود کردن تعداد سطر هايی که برگردانده ميشوند استفاده ميشود؛ مثلاً اگر جدول 1000 سطر داشته باشد که با شرط ما هماهنگ باشند ،در اين صورت ديدن همه ی آنها با هم ممکن است به server صدمه وارد کند ،يا به دليل پهنای باند کم نتوانيم آنها را مشاهده کنيم.


کد:
    SQL Server Syntax:
    SELECT TOP number|percent column_name(s) FROM table_name

    MySQL Syntax:
    SELECT column_name(s) FROM table_name LIMIT number

    Oracle Syntax
    SELECT column_name(s) FROM table_name WHERE ROWNUM <= number
مثال ها:

کد:
    SELECT TOP 2 * FROM school.lessons
    SELECT * FROM school.lessons LIMIT 2
    SELECT * FROM school.lessons WHERE ROWNUM <= 2
هر سه دستور دو سطر اوّل از جدول را برميگردانند .


کد:
    SELECT TOP 50 percent * FROM school.lessons
و اين دستور نصف سطر ها را برميگرداند.

ياد آوری: برای ديدن مثلاً دو سطر آخر مي توان از دستور order by استفاده کرد؛ اينجوری:


کد:
    SELECT day FROM school.lessons LIMIT 2 order by day desc
 

Ehsan HP

کاربر تازه وارد
تازه وارد
اسم مستعار و join:

سم مستعار (!) در sql:
در sql شما ميتوانيد برای کوچک تر کردن اسم جدول ها و ستون ها ، برای آنها نام مستعار انتخاب کنيد.
البته اين دستور در حمله به سايت ها کاربرد ندارد ؛ولی برای اينکه تاپيک از هر لحاظ کامل باشد ،اين را هم کوتاه توضيح ميدهم.


کد:
SQL Alias Syntax for Tables:
SELECT column_name(s) FROM table_name AS alias_name

SQL Alias Syntax for Columns:
SELECT column_name AS alias_name FROM table_name
مثال:


کد:
SELECT L.day, L.1st, L.4th FROM lessons AS L WHERE L.day='1sh'
بدون استفاده از نام مستعار:


کد:
SELECT Lessons.day, Lessons.1st, Lessons.4th FROM lessons WHERE Lessons.day='1sh'
------------------------------------------------------------------------------------------------------------------------
دستور JOIN:
اين دستور وقتی به کار ميره که ما ميخواهيم بين دو جدول که يک ستون مشترک دارند ارتباط برقرار کنيم و هر دو جدول رو با هم ببينيم.
مثلاً ما يک جدول ديگه داريم که برنامه ی کلاس های فوق برنامه رو نشون ميده ،توی اون هم يک ستون به نام روز هست با اين تفاوت که پنجشنبه نداره ولی جمعه داره ؛در اين مثال ما با ميتونيم از 4 دستور استفاده کنيم که يکی يکی توضيح ميدم:

کد:
SQL INNER JOIN Syntax
SELECT column_name(s) FROM table_name1 INNER JOIN table_name2 ON table_name1.column_name=table_name2.column_name
اين دستور سطر هايی رو برميگرداند که حداقل يک شباهت داشته باشند.
مثال:
کد:
کد:
select lessons.4th ,after_school.1st lessons inner join after_school on lessons.day=after_school.day order by day
اين دستور يک جدول با دو ستون (lessons.4st و after_school.1st) برميگرداند ؛ولی روز 5شنبه و جمعه را ندارد.

نکته: inner join با join برابر است.

کد:
SQL LEFT & RIGHT JOIN Syntax
SELECT column_name(s) FROM table_name1 RIGHT|LEFT JOIN table_name2 ON table_name1.column_name=table_name2.column_name
اين دستور تمام سطر های جدول سمت چپ یا راست را بر ميگرداند حتّی اگر مشابهی در جدول دیگر نداشته باشد باز هم سطر را برميگرداند ولی ستون های جدول دیگر را خالی ميگذارد.
نکته :در برخی از نسخه های sql اين دستور اين شکلی است:
کد:
SELECT column_name(s) FROM table_name1 RIGHT|LEFT OUTER JOIN table_name2 ON table_name1.column_name=table_name2.column_name
کد:
SQL FULL JOIN Syntax
SELECT column_name(s) FROM table_name1 FULL JOIN table_name2 ON table_name1.column_name=table_name2.column_name
اين دستور تمام سطر های دو جدول را بر ميگرداند ولی سطر های را که مشابهی در جدول ديگر ندارند را با ستون های خالی نمايش ميدهد.
 

Ehsan HP

کاربر تازه وارد
تازه وارد
Union + select into + create db & table:

SQL UNION Operator:
اين اپراتور دو يا چند دستور select رو به هم متّصل می کند. توجّه کنيد که هر دو دستور select بايد از لحاظ تعداد ،نام ، نوع داده ستون ها و ترتيب يکّی باشند.
در حقيقت اين دستور جداول result-set رو با هم ترکيب می کنه ؛البته باز هم تکرار ميکنم که نام ستون ها و ... بايد يکّی باشه .
نکته: دستور union تکراری ها رو حذف ميکنه ولی union all همه رو فهرست ميکند.
کد:
    SQL UNION Syntax:
    SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2
کد:
    SQL UNION ALL Syntax:
    SELECT column_name(s) FROM table_name1 UNION ALL SELECT column_name(s) FROM table_name2
مثال:


کد:
    select day from lessons union all select day from after_school
اين دستور يک جدول با يک ستون به نام روز ميسازد و محتوای آن را از 0sh تا 6sh پر ميکند.
----------------------------------------------------------------------------------------------------------------------------------------
دستور select into :

کد:
    SELECT column_name(s) INTO new_table_name FROM old_tablename
اين دستور يک کپی از ستون های منتخب از جدول مورد نظر رو در يک جدول ديگر ذخيره ميکند.
مثال:


کد:
    select day,1st into 1st_lessons from lessons where day in (0sh,2sh)
اين دستور يک کپی از جدول درس ها را تهيه ميکند که فقط ستون روز و زنگ اوّل را شامل ميشود آنهم فقط در روز های شنبه و دوشنبه.
----------------------------------------------------------------------------------------------------------------------------------------

کد:
    SQL CREATE DATABASE Syntax:
    CREATE DATABASE database_name
ديگه خجالت آوره اگه برای اين هم توضيح بدم و مثال بزنم ...
----------------------------------------------------------------------------------------------------------------------------------------
کد:
    SQL CREATE TABLE Syntax
    CREATE TABLE table_name (column_name1 data_type, column_name2 data_type, column_name3 data_type, ... )
تنها نکته ی قابل ذکر اين دستور در data_type هست که ميتونيد از سايت زير استفاده کنيد.
http://w3schools.com/sql/sql_datatypes.asp
 

Ehsan HP

کاربر تازه وارد
تازه وارد
دستور فهرست برداری و drop و alter:

دستور فهرست برداری:
فهرست برداری به مشاهده ی سريع جدول بدون نياز به خواندن کل آن کمک ميکند.
SQL CREATE INDEX Syntax:
با تکرار:


کد:
CREATE INDEX index_name ON table_name (column_name)
بدون تکرار:

کد:
CREATE UNIQUE INDEX index_name ON table_name (column_name)
--------------------------------------------------------------------------------------------------------------------------------
دستور drop و TRUNCATE:
اين دستور در حذف جدول ،منبع اطّلاعات و ايندکس به کار ميرود:
کد:
DROP INDEX Syntax for MS Access:
DROP INDEX index_name ON table_name

کد:
DROP INDEX Syntax for MS SQL Server:
DROP INDEX table_name.index_name
کد:
DROP INDEX Syntax for DB2/Oracle:
DROP INDEX index_name

کد:
DROP INDEX Syntax for MySQL:
ALTER TABLE table_name DROP INDEX index_name

کد:
DROP TABLE Synatx:
DROP TABLE table_name

کد:
DROP DATABASE Syntax:
DROP DATABASE database_name
امّا اگر بخواهيم محتويات يک جدول را حذف کنيم ولی خود جدول سر جايش باقی باشد:


کد:
TRUNCATE TABLE table_name
--------------------------------------------------------------------------------------------------------------------------------
دستور alter:
اين دستور برای اضافه يا حذف يا تغيير ستون ها ،بعد از ساخته شدن جدول بکار ميرود.

SQL ALTER TABLE Syntax:
برای اضافه کردن ستون:


کد:
ALTER TABLE table_name ADD column_name datatype
برای حذف ستون:


کد:
ALTER TABLE table_name DROP COLUMN column_name
برای تغيير نوع ورودی ستون:


کد:
ALTER TABLE table_name ALTER COLUMN column_name datatype
اين دستورات فکر ميکنم آنقدر ساده هستند که نيازی به مثال نداشته باشند.
 

Ehsan HP

کاربر تازه وارد
تازه وارد
محدوديت گذاری در sql:

حدوديت گذاری در sql:
شما ميتوانيد نوع اطّلاعاتی را که به جدول ها ميروند را محدود کنيد.
اين محدوديت ميتواند حالت های مختلفی داشته باشد ؛من در اينجا چند نوع رو توضيح ميدم:

NOT NULL
اين نوع محدوديت اجازه ی خالی ماندن آن ستون را در هيچ کدام از سطر های جدول نميدهد ؛به عبارت ديگر اگر بخواهيم سطر جديدی به جدول اضافه کنيم حتماً بايد ستون هايی را که به اين شکل محدود شده اند را مقدار دهی کنيم .
نحوه ی اعمال اين محدوديت هم به اين شکل است (در هنگام ساخت جدول):

کد:
create table table_name (column_name data_type not null)
UNIQUE
اين محدوديت دادن مقدار های تکراری را در ستون مشخص شده ممنوع ميکند ؛به عبارت ديگر شما نميتوانيد دو روز در هفته زنگ های اوّل يک درس داشته باشيد .
اعمال اين محدوديت در نسخه های مختلف sql متفاوت است:

کد:
MySQL:
CREATE TABLE table_name (column_name data_type, UNIQUE (column_name))

SQL Server / Oracle / MS Access:
CREATE TABLE table_name (column_name data_type UNIQUE)
برای اعمال اين محدوديت پس از ساخت جدول:


کد:
ALTER TABLE table_name ADD UNIQUE (column_name)

PRIMARY KEY
شما ميتوانيد اين محدوديت رو فقط در يک ستون از جدول اجرا کنيد و در اين صورت آن ستون به طور خودکار يکتا (unique) شده و علاوه بر اين به طور خودکار not null هم ميشود ؛فايده ی آن هم اين است که شما هر سطر جدول را توسط محتوای اين ستون معرّفی ميکنيد ؛مثلاً اگر ستون روز را ستون اصلی کنيد ميگوييد سطر شنبه (بجای اينکه بگوييد سطری که محتوای ستون روز آن شنبه است) .
کد:
MySQL:
CREATE TABLE table_name (column_name data_type, PRIMARY KEY (column_name))
کد:
SQL Server / Oracle / MS Access:
CREATE TABLE table_name (column_name data_type PRIMARY KEY)
برای اعمال اين محدوديت پس از ساخت جدول:


کد:
ALTER TABLE table_name ADD PRIMARY KEY (column_name)
FOREIGN KEY
اين يکی وقتی به کار ميره که دو ستون هم نام در دو جدول داريم ،و در يکی از جدول ها اين ستون ،ستون اصلی است ؛در اين صورت وقتی ما اين ستون رو (در اون جدولی که ستون اصلی نيست) به اين شکل محدود ميکنيم در واقع اشاره ميکند به اون ستون اصلی ؛فايده اش هم اينه که در اون جدولی که ستون اصلی نيست ،نميتونيم به اون ستون مقداری بديم که در اون ستون اصلی وجود نداره ؛مثل اينکه بگيم در ستون روز ها از جدول سرويس مدرسه ،نميتونيم روزی داشته باشيم که در جدول درس ها نيست!

کد:
MySQL:
CREATE TABLE table_name (column_name data_type, FOREIGN KEY (column_name) REFERENCES table_name2 (column_name))
کد:
SQL Server / Oracle / MS Access:
CREATE TABLE table_name (column_name data_type FOREIGN KEY REFERENCES table_name2 (column_name))
برای اعمال اين محدوديت پس از ساخت جدول:

کد:
ALTER TABLE table_name ADD FOREIGN KEY (column_name) REFERENCES table_name2 (column_name)
CHECK
شما با اين محدوديت ميتونيد شرط هايی رو در مورد محتوای ستون ها ايجاد کنيد ؛مثلاً ميتونيد شرط بگذاريد که محتوای ستون روز نبايد جمعه باشد!

کد:
My SQL:
CREATE TABLE table_name (column_name data_type, CHECK (column_name operator value))
کد:
SQL Server / Oracle / MS Access:
CREATE TABLE table_name (column_name data_type CHECK (column_name operator value))
برای اعمال اين محدوديت پس از ساخت جدول:
کد:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE table_name ADD CHECK (column_name operator value)
DEFAULT
اين محدوديت خيلی ساده است ؛فقط اگر هنگام اضافه کردن سطر ،آن ستون را خالی بگذاريد ،به طور خود کار مقدار پيش فرض را در آن مينويسد.
دستور:


کد:
CREATE TABLE table_name (column_name data_type DEFAULT value)
ميتونيد برای مقدار پيش فرض از function ها هم استفاده کنيد؛ مثال:


کد:
CREATE TABLE date (today date DEFAULT GETDATE())
برای اعمال اين محدوديت پس از ساخت جدول:

کد:
MySQL:
ALTER TABLE table_name ALTER column_name SET DEFAULT value
کد:
SQL Server / Oracle / MS Access:
ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT value
برای حذف مقدار پيش فرض:

کد:
MySQL:
ALTER TABLE table_name ALTER column_name DROP DEFAULT

SQL Server / Oracle / MS Access:
ALTER TABLE table_name ALTER COLUMN column_name DROP DEFAULT
 

Ehsan HP

کاربر تازه وارد
تازه وارد
دستور auto increment:

دستور AUTO INCREMENT:
اين دستور (گر چه نميشه بهش گفت دستور) را وقتی روی يک ستون اجرا ميکنيم ،هر سطر جديدی که اضافه کنيم ،به طور خودکار يک عدد (از يک شروع ميشود) غير تکراری و به ترتيب رو به اون ستون اختصاص ميده .

کد:
    Syntax for MySQL:
    CREATE TABLE table_name (column_name int AUTO_INCREMENT, PRIMARY KEY (column_name))
به طور پيش فرض عدد شروع 1 هست ،ولی ميتونيم با دستور زير اون رو تغيير بديم:


کد:
    ALTER TABLE table_name AUTO_INCREMENT=n
نکته: ستونی که خود کار عدد ميگيرد رو نبايد مقدار دهی کرد؛
data_type حتماً بايد int باشه .


کد:
    Syntax for SQL Server:
    CREATE TABLE table_name (column_name int PRIMARY KEY IDENTITY)
در sql server اگر بخواهيم از n شروع کنيم و m تا m تا جلو بريم بايد به شکل زير عمل کنيم:


کد:
    IDENTITY(n,m)

کد:
    Syntax for Access:
    CREATE TABLE table_name (column_name PRIMARY KEY AUTOINCREMENT)
در Access اگر بخواهيم از n شروع کنيم و m تا m تا جلو بريم بايد به شکل زير عمل کنيم:


کد:
    AUTOINCREMENT(n,m)
کد:
    Syntax for Oracle
    CREATE SEQUENCE some_name MINVALUE 1 START WITH 1 INCREMENT BY 1 CACHE 10
در oracle برای اضافه کردن سطر بايد به اين شکل عمل کنيم:


کد:
    INSERT INTO table_name (column_name) VALUES (some_name.nextval)
 
بالا