MySQL教程(十四)—— 连接

1  连接的语法结构

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

语法结构:

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

数据表参照:

11 table_reference//表的参照 22 tbl_name [[AS] alias | table_subquery [AS] alias]//加别名 33 //数据表可以使用tbl_name AS alias_name或tbl_name alias_name赋予别名 44 //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为父类的子类)

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

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

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

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

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Python3:sqlalchemy对mysql数据库操作,非sql语句

Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''