MySQL教程(十四)—— 连接

1  连接的语法结构

MySQL在SELECT语句、多表更新、多表删除语句中支持JOIN操作。

语法结构:

1 table_reference//第一张表
2 {[INNER | CROSS] JOIN | {LEFT | RIGHT} [OUTER] JOIN}//连接选择:内连接,左外、右外连接
3 table_reference//第二张表
4 ON conditional_expr//ON后面是连接条件

数据表参照:

1 table_reference//表的参照
2 tbl_name [[AS] alias | table_subquery [AS] alias]//加别名
3 //数据表可以使用tbl_name AS alias_name或tbl_name alias_name赋予别名
4 //table_subquery可以作为子查询使用在FROM子句中,这样的子查询必须为其赋予别名

连接类型:

  • INNER JOIN,内连接
  • 在MySQL中,JOIN,CROSS JOIN和INNER JOIN是等价的。
  • LEFT [OUTER] JOIN,左外连接
  • RIGHT [OUTER] JOIN,右外连接

连接条件:

  • 使用ON关键字来设定连接条件,也可以使用WHERE来代替。
  • 通常使用ON关键字来设定连接条件。
  • 使用WHERE关键字进行结果集记录的过滤。

2  内连接

内连接,即显示左表及右表符合连接条件的记录(A、B表交叉的部分)

(下例中,左表总共23条数据,但最后一条的cate_id并没有在右表中出现,所以运行下例程序得到22条数据)

(查询所有商品的详细信息(通过内连接实现))

3  外连接

3.1  左外连接

左外链接:显示左表的全部记录及右表符合连接条件的记录。

(下例中,左表总共23条数据,但最后一条的cate_id并没有在右表中出现,但是因为是左外查询,所以运行程序后会有23条数据)

(查询所有商品的详细信息(通过左外连接实现))

3.2  右外连接

右外连接:显示右表的全部记录及左表符合连接条件的记录。

(下例中,右表总共10条数据,但最后三条的cate_id并没有在左表中出现,但是因为是右外查询,所以运行程序后会有25条数据,即左表符合右表的22条(也就是内查询的结果)+右表最后三条)

(查询所有商品的详细信息(通过右外连接实现))

3.3  连接说明

1 A LEFT JOIN B join_condition
  • 数据表B的结果集依赖数据表A。
  • 数据表A的结果集根据左连接条件依赖所有数据表(B表除外)。
  • 左外连接条件决定如何检索数据表B(在没有指定WHERE条件的情况下)。
  • 如果数据表A的某条记录符合WHERE条件,但是在数据表B不存在符合连接条件的记录,将生成一个所有列为空的额外的B行。
  • 如果使用内连接查找的记录在连接数据表中不存在,并且在WHERE子句中尝试以下操作:col-namd IS NULL时,如果col_name被定义为NOT NULL,MySQL将在找到符合连执着条件的记录后停止搜索更多的行。

4  无限极分类表设计

(创建一张表)

(插入数据)

(0是顶级,后面的都是以数字相对应的type_id为父类的子类)

【注】自身连接:同一个数据表对其自身进行连接。

(自身连接,查找所有分类及其父类)

(自身连接,查找所有分类及其子类)

(查找所有分类及其子类的数目)

原文地址:https://www.cnblogs.com/qijunhui/p/8454357.html