SQLite左連接
類似於INNER JOIN子句,LEFT JOIN子句是SELECT語句的可選子句。可以使用LEFT JOIN子句來查詢來自多個相關表的數據。
假設有兩個表:A和B
-
A表有m和f字段。 -
B表有n和f字段。
要使用LEFT JOIN子句執行A和B之間的連接,請使用以下語句:
SELECT
m, n
FROM A
LEFT JOIN B ON A.f = B.f
WHERE search_condition;
表達式A.f = B.f是條件表達式。 除了等於(=)運算符之外,還可以使用大於(>),小於(<)等的其他比較運算符。
該語句返回一個結果集,其中包含:
-
A表中的行(左表)在B表中具有相應的行。 -
A表中的行存在,但在B表中不存的行使用NULL值填充。
換句話說,A表中的所有行都包含在結果集中,無論B表中是否有匹配的行,如果B表中不匹配則使用NULL值填充。
如果語句中有WHERE子句,那麼在LEFT JOIN子句的匹配完成之後,WHERE子句中的search_condition將被應用。
請參考A表和B表之間的LEFT JOIN子句,如下圖所示 -
A表中的所有行都包含在結果集中。
因爲第二行(a2,2)在B表中沒有相應的行,所以LEFT JOIN子句創建一個填充有NULL值的假行。
以下圖說明了LEFT JOIN子句,黃色部分爲最終查詢結果集 -
假設有兩個表:class 和 student,分別表示班級和學生。其數據如下 -
sqlite> select id,class_name,student_id from class;
1|網絡工程-001班|1
2|網絡工程-002班|2
3|網絡工程-003班|3
4|網絡工程-004班|4
sqlite>
sqlite> select id,name,age,address,fees from student;
1|Maxsu|27|Shengzhen|20000.0
2|Minsu|25|Beijing|15000.0
3|Avgsu|23|Shanghai|2000.0
4|Linsu|25|Guangzhou|65000.0
5|Sqlsu|26|Haikou|25000.0
6|Javasu|21|Shengzhen|18000.0
7|Linsu|27|Haikou|10000.0
8|Minsu|23|Guangzhou|5000.0
9|Maxsu|23|Shenzhen|9000.0
sqlite>
現在使用 left join查詢每個學生所在的班級信息 -
select name,age,address,fees,class_name from student left join class on student.id=class.student_id where student.id > 0;
執行上面語句,得到以下結果 -
sqlite> select student.id,name,age,address,fees,class_name from student left join class on student.id=class.student_id where student.id > 0;
1|Maxsu|27|Shengzhen|20000.0|網絡工程-001班
2|Minsu|25|Beijing|15000.0|網絡工程-002班
3|Avgsu|23|Shanghai|2000.0|網絡工程-003班
4|Linsu|25|Guangzhou|65000.0|網絡工程-004班
5|Sqlsu|26|Haikou|25000.0|
6|Javasu|21|Shengzhen|18000.0|
7|Linsu|27|Haikou|10000.0|
8|Minsu|23|Guangzhou|5000.0|
9|Maxsu|23|Shenzhen|9000.0|
sqlite>