MySQL的JOIN

join的含义跟英文单词"join"一样,连接连接两张表。分为

  内连接:inner join

  外连接

    (1)左外连接(左边的表不加限制):left join

    (2)右外连接(右边的表不加限制):right join

    (3)全外连接(左右表都不加限制):full join(MySQL不支持)

  自连接(同一张表内的连接,可以理解为自己连接自己)

on字句用于指定连接条件

如下图:

表结构:

create table t_blog
(
 id int primary key auto_increment,
 title varchar (50),
 typeid int
);
 
 
create table t_type
(
 id int primary key auto_increment,
 name varchar (20)
);
 

要理解各种JOIN首先要理解笛卡尔积。笛卡尔积就是将A表的每一条记录与B表的每一条记录强行拼在一起。所以,如果A表有n条记录,B表有m条记录,笛卡尔积产生的结果就会产生n*m条记录。上面的例子,t_blog有10条记录,t_type有5条记录,所以笛卡尔积有50条记录。

内连接(inner join)

内连接inner join是最常用的连接操作。从笛卡尔积的角度讲就是从笛卡尔积中挑出ON子句条件成立的记录。有inner join、join(省略inner)、where(等值连接)、straight_join四种写法。

select * from t_blog a inner join t_type b on a.typeid=b.id  
select * from t_blog a join t_type b on a.typeid=b.id
select * from t_blog a, t_type b where a.typeid=b.id 
select * from t_blog a STRAIGHT_JOIN t_type b on a.typeid=b.id

左连接:LEFT JOIN

左连接left join的含义从笛卡尔积的角度讲,就是先从笛卡尔积中挑出ON子句条件成立的记录,然后加上左表中剩余的记录。

右连接:RIGHT JOIN

同理右连接right join的含义从笛卡尔积的角度描述,右连接就是从笛卡尔积中挑出ON子句条件成立的记录,然后加上右表中剩余的记录。

外连接:OUTER JOIN

外连接就的含义从笛卡尔积的角度讲就是从笛卡尔积中挑出ON子句条件成立的记录,然后加上左表中剩余的记录,最后加上右表中剩余的记录。另外MySQL不支持OUTER JOIN,但是我们可以对左连接和右连接的结果做UNION操作来实现。

USING子句

MySQL中连接SQL语句中,ON子句的语法格式为:table1.column_name = table2.column_name。当模式设计对联接表的列采用了相同的命名样式时,就可以使用 USING 语法来简化 ON 语法,格式为:USING(column_name)。所以,USING的功能相当于ON,区别在于USING指定一个属性名用于连接两个表,而ON指定一个条件。另外,SELECT *时,USING会去除USING指定的列,而ON不会。

最新文章

  1. java并发编程-读写锁
  2. 数据库知识整理<八>
  3. Navi.Soft30.产品.代码生成器.操作手册
  4. 转 Citrix XenCenter安装VM之挂载ISO详解
  5. Axure轮播图
  6. POJ 1236 Network of Schools 有向图强连通分量
  7. javascript 基础1第11节
  8. VS2013/2012 下无法打开 源 文件“stdafx.h”的解决方法
  9. 【模拟】Codeforces 711A Bus to Udayland
  10. 做ppt经常使用站点
  11. Spring boot 学习笔记 1 - 自定义错误
  12. [strongswan] strongswan是如何实现与xfrm之间的trap机制的
  13. 如何设计一个"好的"测试用例?
  14. linux内存源码分析 - 内存池
  15. java的String的乱码浅析
  16. GlusterFS分布式存储集群部署记录-相关补充
  17. confirm("确定要删除吗?") _详解
  18. AnimCheckBox按钮点击动画效果《IT蓝豹》
  19. linux 升级python2.7
  20. 回去看linux的指令2

热门文章

  1. plv8 中使用 eval 函数执行表达式计算
  2. ESA2GJK1DH1K升级篇: 移植远程更新程序到STM32F103RET6型号的单片机,基于(GPRS模块AT指令TCP透传方式)
  3. Codeforces Global Round 3 题解
  4. [HNOI2015]亚瑟王(概率期望,DP)
  5. Spring Security教程之基于表达式的权限控制(九)
  6. 微服务异步架构---MQ之RocketMQ
  7. scala 项目pom示例
  8. redux本来是同步的为什么它能执行异步代码(chunk)实现原理是什么 中间件的实现原理是什么
  9. inode是什么?
  10. AtCoder-arc059 (题解)