با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، و کاربرانی که دوره آموزش SQLite را دنبال می کنند. در مثال های بخش های قبلی، ما داده ها را فقط از یک جدول استخراج کرده و یا دستکاری می کردیم. در حالت عادی و در یک دستور SQL فقط می توانیم روی داده های موجود در یک جدول کار کنیم، اما برای انتخاب و یا دستکاری همزمان داده های چند جدول در یک دستور SQL یک راهکار ساده و پرکاربرد وجود دارد و آن استفاده از دستور JOIN در SQLite است، این دستور به شما امکان تعریف چندین جدول در یک خط کد SQL را برای اعمال مختلف می دهد، که در ادامه ی مبحث به کار با دستور JOIN در SQLite آشنا خواهیم شد.
در این آموزش شما را با طرز کار و روش های استفاده از دستور JOIN در SQLite آشنا خواهیم کرد.
دستور JOIN در SQLite شامل سه نوع مختلف است :
قبل از شروع کار ، ما دو جدول COMPANY و DEPARTMENT را برای نمونه در نظر می گیریم.
ما قبلا چگونگی درج داده در جدول COMPANY را با دستورات INSERT مشاهده کرده ایم.
فرض می کنیم که جدول COMPANY شامل رکوردها ی زیر است :
1 2 3 4 5 6 7 8 9 | 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 |
تعریف جدول DEPARTMENT نیز به صورت زیر خواهد بود :
1 2 3 4 5 | CREATE TABLE DEPARTMENT( ID INT PRIMARY KEY NOT NULL, DEPT CHAR(50) NOT NULL, EMP_ID INT NOT NULL ); |
لیست دستورات INSERT برای درج مقادیر در جدول DEPARTMENT به صورت زیر است :
1 2 3 4 5 6 7 8 | INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID) VALUES (1, 'IT Billing', 1 ); INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID) VALUES (2, 'Engineering', 2 ); INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID) VALUES (3, 'Finance', 7 ); |
در نهایت لیست رکوردهای درج شده در DEPARTMENT به صورت زیر است:
1 2 3 4 5 | ID DEPT EMP_ID ---------- ---------- ---------- 1 IT Billing 1 2 Engineering 2 3 Finance 7 |
دستور CROSS JOIN هر سطر از جدول اول را با هر سطر از جدول دوم ارتباط می دهد.
اگر جداول ما شامل X و y سطر باشند، جدول خروجی از دستور CROSS JOIN شامل x*y سطر خواهد بود.
سینتکس CROSS JOIN به صورت زیر است :
1 | SELECT ... FROM table1 CROSS JOIN table2 ... |
برای جداول فوق می توانید دستور CROSS JOIN را به صورت زیر تعریف کنید :
1 | sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY CROSS JOIN DEPARTMENT; |
نتیجه ی query فوق به صورت زیر خواهد بود :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | EMP_ID NAME DEPT ---------- ---------- ---------- 1 Paul IT Billing 2 Paul Engineering 7 Paul Finance 1 Allen IT Billing 2 Allen Engineering 7 Allen Finance 1 Teddy IT Billing 2 Teddy Engineering 7 Teddy Finance 1 Mark IT Billing 2 Mark Engineering 7 Mark Finance 1 David IT Billing 2 David Engineering 7 David Finance 1 Kim IT Billing 2 Kim Engineering 7 Kim Finance 1 James IT Billing 2 James Engineering 7 James Finance |
INNER JOIN با ترکیب مقادیر دو جدول، جدول جدیدی را در خروجی ارائه خواهد کرد.
این دستور هر سطر از جدول اول را با جدول دوم مقایسه کرده و فقط سطرهایی که با هم مطابقت دارند را در جدول خروجی چاپ می کند.
دستور INNER JOIN پر کاربردترین حالت و پیش فرض JOIN می باشد.
سینتکس INNER JOIN به صورت زیر است:
1 | SELECT ... FROM table1 [INNER] JOIN table2 ON conditional_expression ... |
برای جلوگیری از افزونگی و حفظ عبارات کوتاه تر می توان از عبارت USING استفاده کرد.
این عبارت لیستی از یک یا چند ستون را مشخص می کند :
1 | SELECT ... FROM table1 JOIN table2 USING ( column1 ,... ) ... |
NATURAL JOIN نیز مشابه JOIN…USING بوده فقط به صورت خودکار برابر بودن مقادیر ستون ها را در هر دو جدول موجود بررسی می کند:
1 | SELECT ... FROM table1 NATURAL JOIN table2... |
ما می توانیم دستور INNER JOIN را برای جداولی که ایجاد کرده ایم به صورت زیر تعریف کنیم :
1 2 | sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT ON COMPANY.ID = DEPARTMENT.EMP_ID; |
نتیجه ی query فوق به صورت زیر خواهد بود :
1 2 3 4 5 | EMP_ID NAME DEPT ---------- ---------- ---------- 1 Paul IT Billing 2 Allen Engineering 7 James Finance |
این یک عبارات از INNER JOIN است، بنابراین استاندارد SQL سه نوع OUTER JOIN را تعریف می کند :
SQLite فقط از LEFT OUTER JOIN پشتیبانی می کند.
JOINES OUTER دارای یک شرط است که با INNER JOIN یکسان است و نتایج اولیه به همان روش محاسبه می شود.
هنگامی که محاسبه اولیه JOIN محاسبه می شود، OUTER JOIN هر ردیف غیر متصل از یک یا هر دو جداول را می گیرد.
سینتکس LEFT OUTER JOIN به صورت زیر است :
1 | SELECT ... FROM table1 LEFT OUTER JOIN table2 ON conditional_expression ... |
برای جلوگیری از افزونگی و حفظ عبارات کوتاه تر می توان از عبارت USING استفاده کرد.
این عبارت یک لیست یک یا چند ستون را مشخص می کند:
1 | SELECT ... FROM table1 LEFT OUTER JOIN table2 USING ( column1 ,... ) ... |
ما می توانیم دستور INNER JOIN را برای جداولی که ایجاد کرده ایم به صورت زیر تعریف کنیم :
1 2 | sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT ON COMPANY.ID = DEPARTMENT.EMP_ID; |
نتیجه ی query فوق به صورت زیر خواهد بود :
1 2 3 4 5 6 7 8 9 | EMP_ID NAME DEPT ---------- ---------- ---------- 1 Paul IT Billing 2 Allen Engineering Teddy Mark David Kim 7 James Finance |
در اغلب موارد که چندین جدول مرتبط در یک دیتابیس داریم ، اغلب پیش خواهد آمد که نیاز دارید از داده های دو یا چند جدول هزمان در یک خروجی استفاده کنید برای اینگونه موارد می توانیم از دستور JOIN در SQLite به صورتی که در مباحث فوق اشاره شد، استفاده کنیم.
آریانا
در دستور join آیا از دستور group by هم میشود استفاده کرد؟