MySQL连接查询
一、内连接查询
-
关键字:INNER JOIN
-
语句:语句:SELECT 查询列表 FROM 表1 别名 INNER JOIN 表2 别名 ON 连接条件;
-
说明:组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集部分。
-
案例:使用内连接关联线路表与车辆表
-
线路表:
-
车辆表:
-
查询结果如下:
二、自然连接
- 关键字:NATURAL JOIN
- 语句:SELECT 查询列表 FROM 表1 NATURAL JOIN 表2;
- 说明:自然连接是一种特殊的等值连接,要求两个关系表中进行连接的必须是相同的属性列(名字相同),无须添加连接条件,并且在结果中消除重复的属性列。
- 案例:使用自然连接获取公交六公司的线路和车辆信息
- 线路表:
- 车辆表:
- 查询结果如下:
三、多表连接查询
1.多表连接查询方法
- 语句:SELECT 查询列表 FROM 表名1 JOIN 表名2 ON 表名1.字段名1=表名2.字段名2_1 JOIN 表名3 ON 表名2.字段名2_2=表名3.字段3
- 案例:使用多表连接查询获取公交二公司所有司机信息。要求输出司机姓名、身份证、性别和电话
- 线路表:
- 车辆表:
- 司机表:
- 查询结果如下:
2.简单多表连接查询
- 语句:SELECT 查询列表 FROM 表名1,表名2 WHERE 表名1.字段名1=表名2.字段名2【AND 其他条件】;
- 案例:使用简单多表连接查询获取订单 ID 为 4 的订购明细信息,要求输出商品名、单价和件数。
- 订单表:
- 订单明细表:
- 商品表:
- 查询结果如下:
四、外连接查询
1.外连接
- 语句:SELECT 字段名称 FROM 表名1 LEFT | RIGHT | FULL JOIN 表名2 ON 表名1.字段名1=表名2.字段名2;
- 应用场景:用于查询一个表中有,另一个表没有的记录
- 特点:外连接的查询结果为主表中的所有记录,如果从表中有和它匹配的,则显示匹配的值,如果从表中没有和它匹配的,则显示null,外连接查询结果=内连接结果+主表中有而从表没有的记录
2.左连接
- 关键字:LEFT JOIN ON
- 语句:SELECT * FROM 表1 LEFT JOIN 表2 ON 表名1.字段名1=表名2.字段名2;
- 说明:left join 是left outer join的简写,它的全称是左外连接,是外连接中的一种。 左(外)连接,左表(表名1)的记录将会全部表示出来,而右表(表名2)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。
- 案例:使用左外连接查询所有非空调车的车牌号、型号、线路号、起点站和终点站
- 车辆表
- 线路表
- 查询结果如下:
3.右链接
- 关键字:RIGHT JOIN ON
- 语句:SELECT * FROM 表1 RIGHT JOIN 表2 ON 表名1.字段名1=表名2.字段名2;
- 说明:right join是right outer join的简写,它的全称是右外连接,是外连接中的一种。与左(外)连接相反,右(外)连接,左表(a_table)只会显示符合搜索条件的记录,而右表(b_table)的记录将会全部表示出来。左表记录不足的地方均为NULL。
- 案例:使用右外连接获取所有客户的基本信息以及订购信息,要求输出客户姓名、电话、订单 ID 和下单时间。
- 订单表:
- 客户表:
- 查询结果如下: