1 mysql连接查询
在介绍join查询之前,先定义两招表,并插入数据.
- user表:
- account表:
1.1 join内连接
join查询就是集合运算中的笛卡尔积 集合a和b的笛卡尔积 a = (i,j,k) b = (l, m ,n) 所以a和b的笛卡尔积就是 = (il,im,in,jl,jm,jn,kl,km,kn). 对于a集合大小为m,b 集合大小为n,那么最终的笛卡尔积的结果数为 m * n;
join写法
对于user表,account表执行join查询:
SELECT a.id, a.account, u.id as uid, u.username from account a join user u;
查询的结果如下:
共3 * 4 = 12条记录.
另外我们可以集合on语句,筛选出满足特定条件的记录.
SELECT a.id, a.account, u.id, u.username from account a join user u on a.id = u.id;
此时查询结果:
共2条记录满足account的id等于user表的id.
inner join写法
// cross实现内连接 SELECT a.id, a.account, u.id as uid, u.username from user u CROSS join account a; // cross结合on刷选指定条件的记录 SELECT a.id, a.account, u.id as uid, u.username from user u CROSS join account a ON u.id = a.id;
cross join写法
// inner join写法 SELECT a.id, a.account, u.id as uid, u.username from account a inner join user u ; // inner join 结合 on 筛选指定条件的记录 SELECT a.id, a.account, u.id as uid, u.username from user u inner join account a on u.id = a.id;
注: 以上三种写法是等价的.都是属于内连接的
1.2 外连接
1.2.1 左连接
左外连接,语法是left outer join或者left join,两种写法相同, 可以结合on条件筛选特定条件的记录.其中左连接也叫作左外连接.
比如a left (outer) join b,此含义就是以a表为标准,查询的结果中包含所有的a的记录以及和a中的记录匹配的b的记录,即使在b中没有找到和a表中某些记录相匹配的记录,那么a这些记录也要输出,且未匹配的a表中的记录对应的b表中的记录的列显示为空NULL
在左连接中,left左边的表称作左表,left右边的表称作由表, 此时输出的结果按照左表中的所有的数据记录作为标准. 其对应的b中未匹配的记录的列显示为NULL.
// a左外连接b SELECT a.id, a.account, u.id as uid, u.username from account a left OUTER join user u on a.id = u.id;
显示的结果:
1.2.2 右连接
右外连接,语法是 right outer join 或者right join,两种写法相同, 可以结合on语句筛选指定条件的记录,其中右连接又叫做右外连接.
右外连接的意思就是,a right join b。那么输出的结果中会包含了b表的所有的记录以及a表中满足on之后的条件的记录,即使在a表中没有找到满足on之后的条件的记录,那么会输出的a表中的记录的列都为NULL.
right 左边的表a称作左表,right右边的表b称作右表.那么在右连接操作中,输出的结果中按照right关键字右的表b为基准输出结果集.无论a表中是否有满足条件的记录,b表都会全部输出.
// a右连接u,输出的结果以u结果作为输出的结果集标准 SELECT a.id, a.account, u.id, u.username from account a right join user u on a.id = u.id
输出结果:
on语句下的多条件匹配:
// on语句的多条件查询 SELECT a.id, a.account, u.id as uid, u.username from account a right join user u on a.id = u.id or a.account = u.username;
输出结果如下:
1.3 左连接和右连接查询的注意事项
- left join和righ join必须on结合一块使用,如果没有on语句,那么mysql报语法错误,这点和内连接不同.
- on指定条件可以指定多个筛选条件,不仅仅只能指定一个筛选条件.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。