آموزش SQL بخش دوم (مفاهیم پایه جدول، ردیف، ستون و…)
SQL یک زبان برای کار با پایگاه داده است؛ SQL شامل ایجاد و حذف پایگاه داده، ، ایجاد،ویرایش و حذف ردیفها و غیره است. SQL یک استاندارد استاندارد ملی آمریکا (ANSI) است، اما نسخههای مختلفی از زبان SQL وجود دارد.
SQL مخفف Structured Query Language است که یک زبان رایانهای برای ذخیره، دستکاری و بازیابی اطلاعات ذخیره شده در یک پایگاه داده میباشد.
همچنین میتوانید آموزش SQL بخش اول را ببنید
RDBMS
سیستم مدیریت پایگاه داده رابطهای (RDBMS) یا Relational database management system یک سیستم مدیریت پایگاه داده (DBMS) است که بر مبنای مدل رابطهای که توسط Edgar F. Codd (از آزمایشگاه تحقیقاتی مشهور IBM در سن خوزه) ابداع شد عمل میکند.
بیشتر پایگاههای دادهای که امروزه به طور گسترده مورد استفاده قرار میگیرند بر مبنای مدل پایگاه داده رابطهای او طراحی شدهاند. ، بیشتر DBMS های رابطهای تجاری از SQL به عنوان زبان پرسمان خود استفاده میکنند.
جدول (table)
جداول محلی هستند که دادهها در RDBMS ذخیره میشوند . این جدول اساسا مجموعهای از ورودیهای مربوط به دادهها است و شامل ستونها (column) و ردیفهای (Row) متعدد است.
بر فرض یک جدول به نام CUSTOMERS به شکل زیر داریم:
+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Ramesh | 32 | Ahmedabad | 2000.00 | | 2 | Khilan | 25 | Delhi | 1500.00 | | 3 | kaushik | 23 | Kota | 2000.00 | | 4 | Chaitali | 25 | Mumbai | 6500.00 | | 5 | Hardik | 27 | Bhopal | 8500.00 | | 6 | Komal | 22 | MP | 4500.00 | | 7 | Muffy | 24 | Indore | 10000.00 | +----+----------+-----+-----------+----------+
رشته(field)
هر جدول به نهادهای کوچکتر به نام فیلدها شکسته میشود. در مثال بالا فیلد شامل ID، NAME، AGE، ADDRESS و SALARY میباشد.
فیلد یک ستون در یک جدول است که برای حفظ اطلاعات خاص در مورد هر رکورد در جدول طراحی شده است.
رکورد(Record ) و ردیف(Row)
رکورد نیز به عنوان یک ردیف داده میباشند و هر ورودی که در یک جدول وجود دارد. به عنوان مثال، در جدول بالا 7 رکورد وجود دارد. در زیر یک ردیف داده یا رکورد در جدول قرار دارد
رکورد به ردیف افقی در یک جدول میگویند.
در مثال بالا:
+----+----------+-----+-----------+----------+ | 1 | Ramesh | 32 | Ahmedabad | 2000.00 | +----+----------+-----+-----------+----------+
ستون (column)
ستون یک ردیف عمودی در یک جدول است که حاوی تمام اطلاعات مرتبط با یک فیلد خاص در یک جدول میباشد.
در مثال بالا ستون ADDRESS :
+-----------+ | ADDRESS | +-----------+ | Ahmedabad | | Delhi | | Kota | | Mumbai | | Bhopal | | MP | | Indore | +----+------+
مقدار خالی (NULL value)
یک مقدار NULL در یک جدول یک مقدار در یک فیلد است که ظاهرا خالی است، یعنی یک فیلد با مقدار NULL یک فیلد بدون مقدار است.
بسیار مهم است که بدانیم که یک مقدار NULL متفاوت از مقدار صفر یا مقدار فاصله(spaces) است. یک فیلد با مقدار NULL در زمان ایجاد یک رکورد خالی شده است.
Constraints در SQL
Constraints به مفهوم محدودیت میباشد، Constraints قوانینی است که در ستونهای داده روی یک جدول اجرا میشوند. Constraints ها برای محدود کردن نوع دادههایی که میتوانند در یک جدول قرار گیرند استفاده میشود و باعث میشود ذخیره دادهها در پایگاه داده با دقت و اطمینان انجام بگیرد .
Constraints ها میتوانند برای ستون یا جدول باشند. محدودیتهای ستون تنها به یک ستون اعمال میشود، در حالی که محدودیتهای جدول برای کل جدول اعمال میشود.
بعضی از محدودیتهای قابل استفاده در SQL است:
- NOT NULL Constraint − اطمینان حاصل میکند که یک ستون نمیتواند یک مقدار NULL داشته باشد.
- DEFAULT Constraint − یک مقدار پیشفرض برای ستونها در نظر میگیرد زمانی که هیچ مقداری مشخص نشده باشد.
- UNIQUE Constraint − اطمینان میدهد که تمام مقادیر در یک ستون متفاوت هستند.
- PRIMARY Key − هر ردیف / رکورد را در یک جدول پایگاه داده منحصر به فرد میکند.
- FOREIGN Key − یک ردیف / رکورد در یک جدول پایگاه داده را نسبت به جداول دیگر منحصر به فرد میکند .
- CHECK Constraint − تضمین میکند که تمام مقادیر در یک ستون شرایط خاصی که تعیین میکنید را برآورده کنند.
- INDEX − برای سرعت بخشیدن به ایجاد و بازیابی اطلاعات از پایگاه داده استفاده میشود.
در مطلب آموزش SQL بخش اول ( آشنایی مقدماتی و لیست دستورات) درباره T-SQL و چگونگی ایجاد یک Query توضیح دادم
در ادامه درباره Syntax و یا نحوه نوشتن دستورها بیشتر صحبت میکنیم
SQL از یکسری قواعد جهت نوشتن Syntax پیروی میکند
کلیه دستورات با یک کلمه کلیدی شروع میشود مانند SELECT, INSERT, UPDATE, DELETE, ALTER, DROP, CREATE, USE, SHOW و با نقطه و ویرگول (;) تمام میشود
SQL به حروف بزرگ و کوچک حساس نیست، یعنی دستور SELECT با select تفاوتی نمیکند، در حالی که MySQL در نام جدول به حروف حساس است بنابراین، اگر شما با MySQL کار میکنید، باید نام جدول را همانطور که در پایگاه داده وجود دارد، بدهید.
با مطالبی که خوانیدم به راحتی یک Syntax را میتوانید متوجه بشویم
در اینجا نحوه دستور ساده SELECT را میبینیم
SELECT column1, column2, ...
FROM table_name;
به راحتی متوجه می شویم که ابتدا با دستور SELECT شروع میکینم بعد ستونهای (column) مورد نظر جهت انتخاب و یا نمایش را مینویسیم
سپس با دستور FROM نام جدولی که میخواهم جستجو شود را وارد میکنیم و در انتخاب نقطه ویرگول دستور را میبنیدم
انواع داده در SQL
SQL Server انواع دادهها برای استفاده شما ارائه میدهد که در زیر آورده شدهاند:
داده های متنی
نوع داده | توضیحات | فضا |
---|---|---|
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 | نتیجه یک |
در مطالب بعدی شروع به توضیح در مورد دستورات پرکاربرد SQL می کنیم…