×

Sub Queries در SQLite

فصل سی و چهارم :

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

                                          


مفاهیم و موضوعات این فصل عبارتند از :

  • Sub Queries در SQLite

vatantop
نظرات و سوالات درج سوال/ نظر