使用MySQL查询数据时,用户需要的数据并不在一个表中,可能涉及多张表,这时就要使用多表查询。多表查询就是将多个表连接在一起的查询,根据查询需要可以划分为内连接查询和外连接查询。
表结构为:
1.内连接
内连接查询是将表中的某些记录按照一定条件与其它表的记录连接在一起,连接条件就是表之间列的相等关系,使用内连接查询时只有满足条件的数据才能出现在结果集中。
l方式1:隐式内连接
n语法:select {表字段} from {表1},{表2} where {表1.列名=表2.列名}
[And 条件表达式]
nfrom子句指明进行连接的表名,表之间用逗号隔开;
nwhere子句指明连接的列名及其连接条件,列名若在表1和表2中都包含,则必须使用“表名.列名”的形式进行区分;
n连接条件即为各表之间的关联,形式为“表名1.主键=表名2.外键”;
n如果还有其他条件,则将条件表达式放在连接条件后面,使用and关键字展示。
l方式2:显示内连接
n语法:select {表字段} from {表1} inner join {表2} on {表名1.列名=表名2.列名} [where 条件表达式]
n“Inner join”关键字后面必须紧跟关键字“on”,on后面应该表名连接的条件,形式为“表名1.主键=表名2.外键”;
n关键字inner join 中的inner可以省略;
n执行语句select * from a_table a inner join b_table b on a.a_id = b.b_id,当两个表中的数据都符合on后面的条件才会被select出来。
2.外连接
外连接是以某一个表为主,两一个表根据条件进行关联,外连接分为左外连接、右外连接和全外连接。
l左外连接:在查询的时候,以left join 这个关键字左边的表为主表,会将这个表中的数据全部查询出来,如果右表中没有对应数据,则用NULL进行补充。
n语法:select {表字段} from {表1} left join {表2} on {表名1.列名=表名2.列名} [where 条件表达式]
n执行语句:select * from a_table a left join b_table b on a.a_id = b.b_id,查询结果集除了A表所有数据外,还包含满足条件的B表数据
l右外连接:在查询的时候,以right join 这个关键字右边的表为主,会将这个表中的数据全部查询出来,如果左表中没有对应数据,使用NULL进行补充。
n语法:select {表字段} from {表1} right join {表2} on {表名1.列名=表名2.列名} [where 条件表达式]
n执行语句:select * from a_table a right join b_table b on a.a_id = b.b_id,
查询结果集除了B表所有数据外,还包含满足条件的A表数据。