primary key ترکیبی از فیلدها است که به طور منحصر به فرد یک ردیف را مشخص می کند و به طور ضمنی دارای محدودیت NOT NULL است. به این معنی که مقادیر primary key نمی توانند NULL باشند.
Unique Key هر رکورد را در پایگاه داده از بقیه متمایز می کند. این ویژگی، unique بودن را برای یک ستون یا مجموعه ستون ها فراهم می کند. Primary Key دارای محدودیت خودکار unique بودن است که بر روی آن تعریف شده است. می توان چندین Unique Key در هر جدول تعریف کرد ، اما تنها یک محدودیت Primary Key در هر جدول قابل تعریف است.
کلید خارجی یک فیلد از یک جدول است که می تواند مربوط به کلید اصلی یک جدول دیگر باشد. رابطه بین دو جدول با ارجاع کلید خارجی یک جدول به کلید اصلی یک جدول دیگر ایجاد شود.
یک کلمه کلیدی است که برای پرس و جو از داده های بیشتر از یک جدول بر اساس رابطه بین جداول استفاده می شود. هنگام استفاده از JOIN ، کلیدهای اصلی و خارجی نقش اصلی را ایفا می کنند. سینتکس کلی join به صورت زیر می باشد:
SELECT column_name(s) FROM table1 JOIN table2 ON table1.column_name = table2.column_name
این سوال از من پرسیده شده است  + 
انواع مختلفی از اتصال وجود دارد که می توانند برای بازیابی داده ها استفاده شوند و بستگی به رابطه بین جداول دارد. - inner join: ردیف های مشترک بین دو جدول بر اساس فیلد مشترک را بازیابی می کند. - right join: مشابه inner join است، با این تفاوت که همه سطرها را از جدول سمت راست باز می گرداند حتی اگر با جدول سمت چپ هیچ اشتراکی نداشته باشد. - left join: مشابه inner join است، با این تفاوت که همه سطرها را از جدول سمت چپ باز می گرداند حتی اگر با جدول سمت راست هیچ اشتراکی نداشته باشد. - full join: همه سطرها را از جدول سمت چپ و همه سطرها را از جدول سمت راست برمی گرداند. - self join: برای join کردن یک جدول با خودش مورد استفاده قرار میگیرد. این کار از طریق Alias ها انجام میشود. در واقع این امکان را به ما میدهد که داده های موجود در یک جدول را با داده های دیگری در همان جدول مقایسه و یا ترکیب کنیم.
View یک شیء در پایگاه داده است که هیچ مقداری ندارد. در واقع یک جدول مجازی است که شامل زیر مجموعه ای از داده های یک جدول است. View مانند یک جدول واقعی به نظر میرسد که حاوی سطرها و ستون هاست ، اما فضای کمتری را می گیرد زیرا از نظر فیزیکی وجود ندارد. یک View می تواند داده های یک یا چند جدول را داشته باشد. در صورت ایجاد هرگونه تغییر در جداول اصلی ، همان تغییرات در View ها نیز منعکس می شود. دلیل استفاده از View افزایش امنیت پایگاه داده است.View مانند یک شی قابل جستجو با یک کوئری عمل میکند. داده های برگشت داده شده توسط توسط کوئری محدود به داده هایی هستند که هنگام ایجاد View اعلام شده اند. با استفاده از سینتکس زیر می توان یک View ایجاد کرد:
CREATE VIEW view_name AS
SELECT column_lists FROM table_name
WHERE condition
این سوال از من پرسیده شده است  + 
Index یک روش بهبود عملکرد است که امکان بازیابی سریعتر رکوردها را از جدول فراهم می کند.
- unique index: زمانی که این نوع ایندکس روی فیلدی اعمال میشود به مقادیر تکراری اجازه ذخیره شدن در آن فیلد را نمی دهد. هنگامی که کلید اصلی تعریف می شود، unique index به طور خودکار اعمال می شود. - clustered index: این ایندکس ترتیب فیزیکی رکوردها را بر اساس مقادیر اصلی تغییر می دهد تا بازیابی اطلاعات بر اساس این مقدار سریعتر انجام گیرد. هر جدول تنها میتواند یک clustered index داشته باشد. - non-clustered index: این نوع ایندکس ترتیب فیزیکی جدول را تغییر نمی دهد و ترتیب منطقی داده ها را حفظ می کند. در هر جدول می توانید به تعداد نیاز non-clustered index تعریف کنید.
رابطه در پایگاه داده به ارتباط بین جداول موجود در پایگاه داده اطلاق می شود. روابط مختلف مبتنی بر داده وجود دارد که به شرح زیر است: رابطه یک به یک. رابطه یک به چند. رابطه چند به یک. رابطه خود ارجاع.
Stored Procedure یک تابع است که شامل بسیاری از دستورات SQL برای دسترسی به سیستم پایگاه داده است. چندین دستور SQL در یک Stored Procedure ادغام میکنیم و آنها را در هر زمان و هر جا که نیاز باشد اجرا می کنیم.
کد یا برنامه هایی هستند که به طور خودکار در پاسخ به برخی رویدادها در یک جدول یا view در پایگاه داده اجرا می شود. عمدتا ، تریگر به حفظ یکپارچگی پایگاه داده کمک می کند. برای مثال زمانی که در یک فروشگاه اینترنتی یک خرید انجام شد یک رکورد جدید به جدول فروش اضافه میشود. اکنون باید یک trigger جهت کم کردن از موجودی کالای فروخته شده در جدول Product اجرا گردد. نحوه کلی ایجاد یک Trigger به صورت زیر است:
CREATE TRIGGER trigger_name
(AFTER | BEFORE) (INSERT | UPDATE | DELETE)
ON table_name FOR EACH ROW BEGIN
-- variable declarations
-- trigger code END
این سوال از من پرسیده شده است  + 
می توان از Constraint برای تعیین محدودیت در نوع داده جدول استفاده کرد. Constraint را می توان هنگام ایجاد یا تغییر جدول مشخص کرد. نمونه Constraint ها در پایگاه داده به صورت زیر هستند: - NOT NULL - CHECK - DEFAULT - UNIQUE - PRIMARY KEY - FOREIGN KEY
Auto Increment به کاربر اجازه می دهد که هنگام ثبت یک رکورد جدید در جدول، یک شماره منحصر به فرد ایجاد شود. کلمه کلیدی AUTO INCREMENT را می توان در Oracle و کلید واژه IDENTITY را می توان در SQL SERVER استفاده کرد. بیشتر این کلمه کلیدی را می توان هر زمان که از کلید اصلی شد، استفاده کرد.
Clustered Index برای بازیابی آسان داده ها از پایگاه داده با تغییر نحوه ذخیره رکوردها استفاده می شود. پایگاه داده ردیف ها را بر اساس ستونی که ایندکس گذاری شده است مرتب می کند. یک Non-Clustered Index نحوه ذخیره سازی رکوردها را تغییر نمی دهد بلکه یک شی جداگانه کامل در جدول ایجاد می کند و پس از جستجو به ردیف های جدول اصلی رفرنس میدهد.
Self-join برای مقایسه مقادیر در یک ستون با مقادیر دیگر در همان ستون در همان جدول استفاده می شود.میتوان از ALIAS برای مقایسه جداول یکسان استفاده کرد. برای مثال میخواهیم مشتریانی را پیدا کنیم که همشهری هستند. برای این کار به صورت زیر عمل خواهیم کرد:
SELECT A.CustomerName AS CustomerName1, B.CustomerName AS CustomerName2, A.Cit
FROM Customers A, Customers B
WHERE A.CustomerID <> B.CustomerID
AND A.City = B.City
ORDER BY A.City
این سوال از من پرسیده شده است  + 
Cross-Join به صورت ضرب دکارتی تعریف می شود که تعداد سطرهای جدول اول در تعداد سطرهای جدول دوم ضرب می شود. اگر فرض کنیم ، از جمله WHERE در Cross-Join استفاده می شود ، پرس و جو مانند یک INNER JOIN کار می کند.
توابع تعریف شده توسط کاربر توابعی هستند که برای استفاده از آن در هر زمان که نیاز است نوشته شده اند. لازم نیست یک منطق را چندین بار بنویسید. در عوض ، تابع را می توان در هر زمان که نیاز باشد فراخوانی یا اجرا کرد.
توابع SQL قطعات کد ساده ای هستند که اغلب در سیستم های پایگاه داده برای پردازش و دستکاری داده ها استفاده می شوند. هنگام ایجاد توابع باید قوانین زیر را به خاطر بسپارید: - یک تابع باید دارای نام باشد و نام نمی تواند با یک کاراکتر خاص مانند @، $ ، #یا سایر کاراکترهای مشابه شروع شود. - توابع فقط می توانند با دستورات SELECT کار کنند. - هر بار که یک تابع فراخوانی می شود ، کامپایل می شود. - توابع باید مقدار یا نتیجه را برگردانند. - توابع همیشه با پارامترهای ورودی استفاده می شوند. توابع SQL برای اهداف زیر استفاده می شود: - برای انجام محاسبات بر روی داده ها - برای تغییر اقلام داده تکی - برای دستکاری خروجی - برای قالب بندی تاریخها و اعداد - برای تبدیل انواع داده ها
Stored Procedure را می توان به عنوان یک برنامه نویسی ماژولار مورد استفاده قرار داد - به این معنی که یک بار ایجاد می کنید ، هر زمان که لازم بود فراخوانی می کنید. Stored Procedure به جای اجرای چند کوئری به صورت جداگانه از اجرای یکجا و سریعتر پشتیبانی می کند. بنابراین باعث کاهش ترافیک شبکه و امنیت بهتر داده ها می شود. نقطه ضعف این است که می توان آن را فقط در پایگاه داده اجرا کرد و از حافظه بیشتری در سرور پایگاه داده استفاده می کند.
از عملگر UNION برای ترکیب نتایج دو کوئری استفاده می شود و سطرهای تکراری را از حذف می کند. از عملگر MINUS برای بازیابی سطرها از کوئری اول - به غیر از رکوردهای مشترک با کوئری دوم - استفاده میشود. عملگر INTERSECT برای بازیابی سطرهای مشترک بین هر دو کوئری استفاده می شود.
نام ALIAS را می توان به یک جدول یا ستون داد. در واقع یک نام مستعار است که می توان از آن برای شناسایی یک جدول یا ستون استفاده کرد. در مثال زیر St به نام مستعار برای جدول Student و Ex به نام مستعار برای جدول Exam اشاره می کند.
Select St.StudentID, Ex.Result from Student as St, Exam as Ex where St.StudentID = Ex. StudentID
این سوال از من پرسیده شده است  + 
TRUNCATE همه سطرها را از جدول حذف می کند و نمی توان آن را Rollback کرد. دستور DROP یک جدول را از پایگاه داده حذف می کند و عملیات را نمی توان Rollback کرد.
توابع Aggregate برای انجام محاسبه ریاضی و بازگشت مقادیر واحد استفاده می شود. این توابع میتوانند از ستون های یک جدول برای انجام محاسبات استفاده کنند، مانند AVG یا MAX. توابع Scalar یک مقدار واحد را بر اساس مقدار ورودی برمی گردانند، مثل LCASE.
SQL توابع را به دو نوع طبقه بندی می کند: - توابع تعریف شده توسط کاربر: توابع ایجاد شده توسط کاربر بر اساس نیازهای آنها ، توابع تعریف شده توسط کاربر نامیده می شوند. - توابع تعریف شده توسط سیستم: توابعی هستند که توسط سیستم تعریف شده اند. آنها توابع داخلی پایگاه داده هستند. SQL Server از دو نوع توابع تعریف شده توسط کاربر پشتیبانی می کند: - Table-Valued: یک جدول بر میگرداند مانند select گرفتن از چند ستون یک جدول. بنابراین شما میتوانید با خروجی این تابع مانند یک جدول برخورد کنید. - Scalar-Valued : فقط یک مقدار بر میگرداند مانند concatenate کردن سه مقدار از نوع nvarchar و ایجاد یک مقدار. توابع تعریف شده توسط سیستم نیز به دو نوع Scalar و Aggregate تقسیم میشوند. توابع Scalar ِک مقدار میگیرند و مقداری را برمیگردانند، مانند ROUND یا LEN ولی توابع Aggregate بر اساس داده های یک ستون مقداری را تولید میکنند، مانند AVG یا MAX.
با استفاده از کلمه کلیدی DISTINCT ، میتوانید رکورهای منحصر به فرد را از یک جدول انتخاب کنید. در مثال زیر اسامی غیرتکراری شهرها از جدول Customer بازیابی می شود:
SELECT DISTINCT Country FROM Customers;
این سوال از من پرسیده شده است  + 
Select SUBSTRING(StudentName,1,5) as studentname from student
این سوال از من پرسیده شده است  + 
از عملگر LIKE برای مطابقت الگو استفاده می شود. کاراکتر % نشان دهنده صفر یا بیشتر از صفر کاراکتر و _ نشان دهنده تنها یک کاراکتر می باشد. به مثال های زیر دقت کنید:
Select * from Student where studentname like 'a%'
Select * from Student where studentname like 'ami_'
این سوال از من پرسیده شده است  + 
Primary Key به عنوان یک شناسه منحصر به فرد برای هر رکورد در جدول عمل می کند. Unique Key نیز علاوه بر مشخص کردن رکوردها از ورودی های تکراری در یک ستون جلوگیری می کند. در صورتی که Primary Key در جدول وجود نداشته باشد ، Unique Key شناسه منحصر به فرد برای رکوردهاست. ما نمی توانیم مقادیر NULL را در ستون Primary Key ذخیره کنیم. درحالی که می توانیم فقط یک مقدار NULL را در ستون Unique Key ذخیره کنیم . ما نمی توانیم مقادیر ستون Primary Key را تغییر داده یا حذف کنیم. اما می توانیم مقادیر ستون Unique Key را تغییر دهیم.
عملگر IN به شما اجازه می دهد تا مقادیر متعددی را در یک بند WHERE مشخص کنید. عملگر IN خالاصه شده چند شرط OR شده است. عملگر BETWEEN مقادیر را در محدوده معینی انتخاب می کند. مقادیر می توانند اعداد ، متن یا تاریخ باشند.
IN Syntax:
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1, value2, ...);
BETWEEN Syntax:
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2
این سوال از من پرسیده شده است  + 
SELECT TOP 1 salary FROM (SELECT DISTINCT TOP 3 salary FROM employees ORDER BY salary DESC) AS Temp ORDER BY salary ASC
این سوال از من پرسیده شده است  + 
Transaction بمعنی تراکنش بوده و یک واحد منطقی کار است. Transaction در واقع مجموعه ای از چند دستور است که یا با هم با موفقیت اجرا می شوند و یا هیچکدام از آنها اجرا نخواهند شد. در صورتی که تراکنش با کلمه commit خاتمه یابد، دستورات موجود در بدنه با موفقیت انجام شده و نتیجه در دیتابیس قرار میگیرد. در صورتی که تراکنش با Rollback خاتمه پیدا کند. اثر تمام دستورات اجرا شده از بین میرود و دیتابیس به حالت قبل از اجرای دستورات برمیگردد. سینتکس کلی تراکنش به صورت زیر است:
Begin Transaction tansaction_name
statements--
Commit | RollBack Transaction transation_name
این سوال از من پرسیده شده است  + 
ویژگی های ACID قوانینی هستند که برای تراکنش ها در نظر گرفته شده اند تا به طور مطمئن تری در دیتابیس پردازش و اجرا گردند. ویژگی ACID مخفف Atomicity ، Consistence ، Isolation و Durability است. - Atomicity: این اطمینان می دهد که همه عملیات در ِیک تراکنش باید با موفقیت اجرا شود. اگر یک قسمت از معامله شکست بخورد ، کل معامله شکست می خورد و وضعیت پایگاه داده بدون تغییر باقی می ماند. ویژگی های اصلی آن COMMIT ، ROLLBACK و AUTO-COMMIT است. - Consistency: این ویژگی تضمین می کند که داده ها باید از تمام قوانین اعتبار سنجی برخوردار باشند. به عبارت ساده ، می توان گفت که پایگاه داده تنها زمانی تغییر وضعیت می دهد که یک تراکنش با موفقیت انجام شود. همچنین از داده ها در برابر خرابی محافظت می کند. - Isolation: این ویژگی تضمین می کند که اجرای همزمان چند تراکنش خللی در نتیجه آنها ایجاد نخوهد کرد. - Durability: این ویژگی تضمین می کند که هنگامی که یک تراکنش انجام شد ، حتی اگر سیستم خراب شود ویا برق قدرت قطع شود ، نتایج آن تراکنش به طور دائمی باقی می ماند.
تفاوت اصلی این است که بند WHERE برای فیلتر کردن رکوردها قبل از ایجاد هر نوع گروه بندی استفاده می شود ، در حالی که از بند HAVING برای فیلتر کردن مقادیر از یک گروه استفاده می شود. تفاوت های دیگر آنها را میتوان به صورت زیر خلاصه کرد: - WHERE در عملیات سطری اجرا می شود.HAVING در عملیات ستونِی اجرا می شود. - WHERE اجازه کار با توابع Aggregate را نمی دهد. HAVING می تواند با توابع Aggregate کار کند. - WHERE را می توان با دستورات SELECT ، UPDATE و DELETE استفاده کرد. HAVING فقط با دستور SELECT قابل استفاده است.
سوالی هست که اینجا نمیبینیش و از نظر تو مهمه؟ خودت سوالی داری که دنبال جوابشی؟ جواب بهتری واسه یکی از سوالای بالا داری؟ پس واسمون بفرست.