MySQL的JOIN连接
MySQL的JOIN
join的含义跟英文单词"join"一样,连接连接两张表。分为
内连接:inner join
外连接
(1)左外连接(左边的表不加限制):left join
(2)右外连接(右边的表不加限制):right join
(3)全外连接(左右表都不加限制):full join(MySQL不支持)
自连接(同一张表内的连接,可以理解为自己连接自己)
on字句用于指定连接条件
如下图:
表结构:
(
id int primary key auto_increment,
title varchar (50),
typeid int
);
(
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不会。
最新文章
- java并发编程-读写锁
- 数据库知识整理<;八>;
- Navi.Soft30.产品.代码生成器.操作手册
- 转 Citrix XenCenter安装VM之挂载ISO详解
- Axure轮播图
- POJ 1236 Network of Schools 有向图强连通分量
- javascript 基础1第11节
- VS2013/2012 下无法打开 源 文件“stdafx.h”的解决方法
- 【模拟】Codeforces 711A Bus to Udayland
- 做ppt经常使用站点
- Spring boot 学习笔记 1 - 自定义错误
- [strongswan] strongswan是如何实现与xfrm之间的trap机制的
- 如何设计一个";好的";测试用例?
- linux内存源码分析 - 内存池
- java的String的乱码浅析
- GlusterFS分布式存储集群部署记录-相关补充
- confirm(";确定要删除吗?";) _详解
- AnimCheckBox按钮点击动画效果《IT蓝豹》
- linux 升级python2.7
- 回去看linux的指令2
热门文章
- plv8 中使用 eval 函数执行表达式计算
- ESA2GJK1DH1K升级篇: 移植远程更新程序到STM32F103RET6型号的单片机,基于(GPRS模块AT指令TCP透传方式)
- Codeforces Global Round 3 题解
- [HNOI2015]亚瑟王(概率期望,DP)
- Spring Security教程之基于表达式的权限控制(九)
- 微服务异步架构---MQ之RocketMQ
- scala 项目pom示例
- redux本来是同步的为什么它能执行异步代码(chunk)实现原理是什么 中间件的实现原理是什么
- inode是什么?
- AtCoder-arc059 (题解)