SQLite左连接

类似于INNER JOIN子句,LEFT JOIN子句是SELECT语句的可选子句。可以使用LEFT JOIN子句来查询来自多个相关表的数据。

假设有两个表:AB

  • A表有mf字段。
  • B表有nf字段。

要使用LEFT JOIN子句执行AB之间的连接,请使用以下语句:

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子句,黄色部分为最终查询结果集 -

假设有两个表:classstudent,分别表示班级和学生。其数据如下 -

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>

上一篇:SQLite交叉连接(Cross Join)

下一篇:SQLite日期和时间

关注微信小程序
程序员编程王-随时随地学编程

扫描二维码
程序员编程王

扫一扫关注最新编程教程