فصل سی و چهارم :
Sub Queries در SQLite
Subquery و یا INNER query و یا Nested query در واقع کوئری است داخل یک کوئری دیگر.
از ساب کوئری استفاده میکینم تا رکورد هایی را بیرون بکشیم که مورد استفاده در کوئری اصلی هستند.
ساب کوئری ها می توانند در select , insert , update و delete استفاده شوند.
برای استفاده از از ساب کوئری ها باید به قوانین ذیل توجه کنیم :
-
1. یک ساب کوئری باید در پرانتز محصور شود
-
2. در ساب کوئری در عبارت select بایستی فقط یک ستون داشته باشیم مگر بخواهیم چند ستون در ساب کوئری را با چند ستون از کوئری اصلی مقایسه کنیم .
-
3. داخل یک ساب کوئری نمی توانیم از Order by استفاده کنیم. ولیکن کوئری اصلی می تواند شامل آن باشد.
در ساب کوئری می توانیم از group by بجای order by استفاده کنیم
-
4. ساب کوئری هایی که چندین رکورد را باز میگردانند باید با اپراتور های چند مقداره همانند IN استفاده شوند
-
5. اپراتور BETWEEN نمی تواند در ساب کوئری ها استفاده شود ولیکن منعی از استفاده از آن در کوئری اصلی نیست.
Subqueries with the SELECT Statement
ساب کوئری ها اغلب در سلکت استفاده میشوند و فرمت کلی انها بشکل ذیل است :
SELECT column_name [, column_name ]
FROM table1 [, table2 ]
WHERE column_name OPERATOR
(SELECT column_name [, column_name ]
FROM table1 [, table2 ]
[WHERE])
در جدول COMPANY با رکورد های ذیل:
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0
حالا یک ساب کوئری را با یک سلکت می نویسیم
sqlite> SELECT *
FROM COMPANY
WHERE ID IN (SELECT ID
FROM COMPANY
WHERE SALARY > 45000) ;
و نتیجه :
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
Subqueries with the INSERT Statement
ساب کوئری ها همچنین می توانند با INSERT نیز بکار روند . INSERT از رکورد های اصل از سب کوئری برای INSERT در جدول استفاده میکند
INSERT INTO table_name [ (column1 [, column2 ]) ]
SELECT [ *|column1 [, column2 ]
FROM table1 [, table2 ]
[ WHERE VALUE OPERATOR ]
برای تست یک جدول با مشخصات جدول COMPANY بسازید و اسم آنرا COMPANY_BKP بگذارید:
sqlite> INSERT INTO COMPANY_BKP
SELECT * FROM COMPANY
WHERE ID IN (SELECT ID
FROM COMPANY) ;
Subqueries with the UPDATE Statement
ساب کوئری ها می توانند با UPDATE هم بکار روند
UPDATE table1
SET column_name = new_value
[ WHERE OPERATOR [ VALUE ]
(SELECT COLUMN_NAME
FROM TABLE_NAME)
[ WHERE) ]
فرض کنید جدول COMPANY_BKP را که قبلا ساخته ایم را داریم و می خواهیم بروز رسانی در آن انجام بدیم :
sqlite> UPDATE COMPANY
SET SALARY = SALARY * 0.50
WHERE AGE IN (SELECT AGE FROM COMPANY_BKP
WHERE AGE >= 27 );
و نتیجه :
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 10000.0
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 42500.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0
همانطور که مشاهده میشود UPDATE ما بروی دو رکورد که شرط AGE>=27 را دارا می باشند اعمال شده است.
Subqueries with the DELETE Statement
ساب کوئری ها در DELETE هم می توانند استفاده شوند
DELETE FROM TABLE_NAME
[ WHERE OPERATOR [ VALUE ]
(SELECT COLUMN_NAME
FROM TABLE_NAME)
[ WHERE) ]
مثال ذیل را ببینید
sqlite> DELETE FROM COMPANY
WHERE AGE IN (SELECT AGE FROM COMPANY_BKP
WHERE AGE > 27 );
که نتیجه آن :
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 42500.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0
مفاهیم و موضوعات این فصل عبارتند از :