پرس و جوهای SQL زیر به موضوع خاصی از SQL مربوط نمی شود . اما دانش این پرس و جوها می تواند برخی از وظایف پیچیده را حل کند و ممکن است در بسیاری از سناریوها مورد استفاده قرار گیرد.
اجازه دهید شروع به خواندن این سوالات کنیم.
استفاده از CTE چندگانه در بیانیه انتخاب منفرد
CTE به عنوان Common Table Expression شناخته می شود و به عنوان یک مجموعه نتایج موقتی عمل می کند که در محدوده اجرای یک عبارت SELECT، INSERT، UPDATE، DELETE یا CREATE VIEW تعریف می شود. CTE به عنوان یک شی ذخیره نمی شود و فقط برای مدت زمان پرس و جو دوام می آورد. اکنون یاد می گیریم که چگونه از چند CTE در یک کوئری یا چند CTE در دستور SELECT استفاده کنیم.
مثال:
- WITH CTE1 AS (SELECT e.Id, e.Name as Name FROM dbo.Emp e),
- CTE2 AS (SELECT e.Id, e.Age as Age FROM dbo.Emp e)
- SELECT c2.Name, c1.Age FROM CTE1 AS c2
- CROSS JOIN CTE2 c1
- WHERE c2.Id=c1.Id;
خروجی:
فعال و غیرفعال کردن محدودیت چک
گاهی اوقات از ما خواسته می شود که محدودیت چک را برای پرس و جوها غیرفعال کنیم و پس از تکمیل پرس و جو باید محدودیت چک را در حالت قبلی تنظیم کنیم. چنین عملیاتی زمانی مورد نیاز است که دادهها را به صورت انبوه وارد میکنیم یا برای برخی از دادهها محدودیت بررسی لازم نیست. برای این کار می توانیم از کد اسکریپت زیر استفاده کنیم.
نحو:
//غیرفعال کردن محدودیت
تغییر جدول Table_Name NOCHECK محدودیت محدودیت_Name
//فعال کردن محدودیت
تغییر جدول Table_Name
با بررسی چک محدودیت محدودیت_Name
مثال:
- ALTER TABLE dbo.Emp
- NOCHECK CONSTRAINT CK_Employee_Age
- GO
- -- Enable the constraint
- ALTER TABLE dbo.Emp
- WITH CHECK CHECK CONSTRAINT CK_Employee_Age
مقدار گم شده را از یک ستون پیدا کنید
گاهی اوقات لازم است تمام مقادیر یک ستون را که در ستون وجود ندارد، پیدا کنیم. اجازه دهید جدول زیر را در نظر بگیریم.
می بینیم که مقدار در Col از 1 شروع می شود و آخرین مقدار در Col 15 است، اما مقادیری بین 1 و 15 وجود دارد که وجود ندارند. بنابراین اکنون میآموزیم که چگونه مقادیر گمشدهای را که در Col وجود ندارند، پیدا کنیم .
مثال:
- /*Find Minmum and Maximum vlaue From Column*/
- DECLARE @Min int;
- DECLARE @Max int;
- SET @Max=(SELECT max(Col) FROM dbo.Table_Demo td);
- SET @Min=(SELECT min(Col) FROM dbo.Table_Demo td);
- /*Findout Missing Values*/
- WITH Sequence_ AS (
- SELECT @Min AS num
- UNION ALL
- SELECT num+1 FROM Sequence_ WHERE num+1<=@Max
- )
- SELECT num FROM Sequence_ WHERE num NOT IN (SELECT td.Col FROM dbo.Table_Demo td);
خروجی:
پرس و جو برای درج مقدار در ستون Identity:
در جدول بالا: ستون Emp_IId ” Identity است. بیایید سعی کنیم مقداری را در جدول Employee وارد کنیم.
- Insert Into Employee(Emp_IId,First_Name,Last_Name,Salary,City) values(8,'Sonu', 'Singh',32basic-useful-sql-queriesbasic-useful-sql-queriesbasic-useful-sql-queries,'Delhi')
- Insert Into Employee(Emp_IId,First_Name,Last_Name,Salary,City) values(9,'Ravi', 'Singh',35basic-useful-sql-queriesbasic-useful-sql-queriesbasic-useful-sql-queries,'Delhi')