View، Index و Subquery در SQL
Viewها در SQL
- Viewها در SQL بهعنوان یک جدول مجازی (Virtual Table) در نظر گرفته میشوند. یک View نیز دارای ردیفها و ستونها است.
- برای ایجاد View میتوان فیلدها را از یک یا چند جدول موجود در پایگاه داده انتخاب کرد.
- یک View میتواند بر اساس یک شرط مشخص فقط ردیفهای خاص یا همهٔ ردیفهای یک جدول را داشته باشد.
ایجاد View
یک View را میتوان با دستور CREATE VIEW ایجاد کرد. میتوان View را از یک جدول یا چند جدول ساخت.
Syntax
CREATE VIEW view_name AS
SELECT column1, column2.....
FROM table_name
WHERE condition;
ایجاد View از یک جدول
CREATE VIEW DetailsView AS
SELECT NAME, ADDRESS
FROM Student_Details
WHERE STU_ID < 4;
ایجاد View از چند جدول
View از چند جدول را میتوان با واردکردن چند جدول در دستور SELECT ایجاد کرد.
در مثال دادهشده، یک View با نام MarksView از دو جدول Student_Detail و Student_Marks ایجاد میشود.
CREATE VIEW MarksView AS
SELECT Student_Detail.NAME, Student_Detail.ADDRESS, Student_Marks.MARKS
FROM Student_Detail, Student_Mark
WHERE Student_Detail.NAME = Student_Marks.NAME;
SELECT * FROM MarksView;
DROP VIEW view_name;
SQL Index
- Indexها جدولهای جستوجوی ویژهای هستند. از آنها برای بازیابی بسیار سریع داده از پایگاه داده استفاده میشود.
- یک Index برای افزایش سرعت پرسوجوهای SELECT و Clauseهای WHERE استفاده میشود، اما ورود داده با دستورهای INSERT و UPDATE را کند میکند. Indexها را میتوان بدون تأثیر بر داده ایجاد یا حذف کرد.
- Index در پایگاه داده مانند نمایهای در انتهای یک کتاب است.
دستور Create Index
CREATE INDEX index_name
ON table_name (column1, column2, ...);
دستور Unique Index
Syntax
CREATE UNIQUE INDEX index_name ON table_name (column1, colum
n2, ...);
Example
CREATE UNIQUE INDEX websites_idx ON websites (site_name);
دستور Drop Index
Syntax
Example
SQL Sub Query
Subquery یک پرسوجو درون یک پرسوجوی دیگر SQL است و درون Clauseِ WHERE قرار میگیرد.
قواعد مهم:
- Subquery را میتوان در چند Clause از SQL مانند WHERE، FROM و HAVING قرار داد.
- میتوان Subquery را همراه با دستورهای SELECT، UPDATE، INSERT و DELETE و نیز عملگرهایی مانند =، <، >، >=، <=، IN، BETWEEN و غیره استفاده کرد.
- Subquery یک پرسوجو درون پرسوجوی دیگر است. پرسوجوی بیرونی، پرسوجوی اصلی (Main Query) و پرسوجوی درونی، Subquery نامیده میشود.
- Subqueryها در سمت راست عملگر مقایسه قرار میگیرند.
- Subquery داخل پرانتز قرار میگیرد.
- در Subquery نمیتوان از دستور ORDER BY استفاده کرد، اما میتوان از دستور GROUP BY برای انجام همان عملکرد ORDER BY استفاده کرد.
Subquery با دستور Select
Subqueryهای SQL بیشترین استفاده را همراه با دستور Select دارند.
Syntax:
SELECT column_name
FROM table_name
WHERE column_name expression operator
( SELECT column_name from table_name WHERE ... );
Example:
SELECT *
FROM EMPLOYEE
WHERE ID IN (SELECT ID
FROM EMPLOYEE
WHERE SALARY > 4500);
Subquery با دستور INSERT
- Subquery در SQL را میتوان همراه با دستور Insert نیز استفاده کرد. در دستور Insert، دادهای که Subquery برمیگرداند برای درج در جدول دیگری استفاده میشود.
- در Subquery، دادهٔ انتخابشده را میتوان با هر یک از توابع کاراکتری و تاریخ تغییر داد.
Syntax:
INSERT INTO table_name (column1, column2, column3....)
SELECT * FROM table_name WHERE VALUE OPERATOR
Example:
INSERT INTO EMPLOYEE_BKP
SELECT * FROM EMPLOYEE
WHERE ID IN (SELECT ID
FROM EMPLOYEE);
Subquery با دستور UPDATE
Subquery در SQL را میتوان همراه با دستور Update استفاده کرد. هنگامی که Subquery با دستور Update استفاده میشود، یک یا چند ستون در یک جدول قابل بهروزرسانی است.
Syntax:
UPDATE table SET column_name = new_value WHERE VALUE OPERATOR
(SELECT COLUMN_NAME FROM TABLE_NAME WHERE condition);
Example:
فرض کنید جدول EMPLOYEE_BKP در دسترس است و نسخهٔ پشتیبان جدول EMPLOYEE است. مثال دادهشده، SALARY را برای همهٔ کارکنانی که AGE آنها بزرگتر یا مساوی 29 است در جدول EMPLOYEE به اندازهٔ 0.25 برابر بهروزرسانی میکند.
UPDATE EMPLOYEE
SET SALARY = SALARY * 0.25
WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP
WHERE AGE >= 29);
Subquery با دستور DELETE
Subquery در SQL را میتوان مانند سایر دستورهای ذکرشده همراه با دستور Delete استفاده کرد.
Syntax:
DELETE FROM TABLE_NAME WHERE VALUE OPERATOR
(SELECT COLUMN_NAME FROM TABLE_NAME WHERE condition);
Example:
فرض کنید جدول EMPLOYEE_BKP در دسترس است و نسخهٔ پشتیبان جدول EMPLOYEE است. مثال دادهشده، رکوردهای جدول EMPLOYEE را برای همهٔ کارکنانی که AGE آنها بزرگتر یا مساوی 29 است حذف میکند.
DELETE FROM EMPLOYEE
WHERE AGE IN (SELECT AGE FROM EMPLOYEE_BKP
WHERE AGE >= 29 );