MySQL教程(十四)—— 连接

Wesley13
• 阅读 517

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条数据)

MySQL教程(十四)—— 连接 (查询所有商品的详细信息(通过内连接实现))

3  外连接

3.1  左外连接

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

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

MySQL教程(十四)—— 连接 (查询所有商品的详细信息(通过左外连接实现))

3.2  右外连接

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

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

MySQL教程(十四)—— 连接 (查询所有商品的详细信息(通过右外连接实现))

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  无限极分类表设计

MySQL教程(十四)—— 连接 (创建一张表)

MySQL教程(十四)—— 连接 (插入数据)

MySQL教程(十四)—— 连接 (0是顶级,后面的都是以数字相对应的type_id为父类的子类)

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

MySQL教程(十四)—— 连接 (自身连接,查找所有分类及其父类)

MySQL教程(十四)—— 连接 (自身连接,查找所有分类及其子类)

MySQL教程(十四)—— 连接 (查找所有分类及其子类的数目)

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
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
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Wesley13 Wesley13
2年前
MySQL数据库查询
MySQL数据库查询12、说明:使用外连接A、left(outer)join:左外连接(左连接):包含leftjoin左表所有行,如果左表中某行在右表没有匹配,则结果中对应行右表的部分全部为空(NULL).。SQL:select\fromstudent(表1)leftjoincourse(表2)onstude
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
2年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这