MySQL多表查询连接

** MySQL多表查询连接**

<1>交叉连接(笛卡尔积)

SELECT * FROM studentinfo,scoreinfo;

注意:了解交叉连接结果集生成过程。

       studentinfo表
id	 name	  sex	    age	    birthday
1    张三	  男	     20 	2018/5/15
2 	 李四	  女	    null       null
3 	 王五	  男	     19 	2019/5/21

       scoreinfo表
id	chinese	math	english
1	70	80	90
2	56	48	98

交叉连接

id	name	sex	age	birthday	id	chinese	math english
1 	张三	男	20 	2018/5/15	1	   70	 80	   90
1 	张三	男	20 	2018/5/15	2	   56	 48	   98
2 	李四	女	 	 	        1	   70	 80	   90
2 	李四	女	 	 	        2	   56	 48	   98
3 	王五	男	19 	2019/5/21	1	   70	 80	   90
3 	王五	男	19 	2019/5/21	2	   56	 48	   98

<2>内连接

SELECT * FROM studentinfo,scoreinfo WHERE studentinfo.id = scoreinfo.id;
#等价于
SELECT * FROM studentinfo INNER JOIN scoreinfo ON studentinfo.id = scoreinfo.id;
SELECT name,chinese,math,english FROM studentinfo,scoreinfo WHERE studentinfo.id = scoreinfo.id;

内连接(根据where条件过滤掉不符合的记录)

id	name	sex	age	birthday	id	chinese	math english
1 	张三	男	20 	2018/5/15	1	  70	80	   90
1 	张三	男	20 	2018/5/15	2	  56	48	   98
2 	李四	女	 	 	        1	  70	80	   90
2 	李四	女	 	 	        2	  56	48	   98
3 	王五	男	19 	2019/5/21	1	  70	80	   90
3 	王五	男	19 	2019/5/21	2	  56	48	   98

最终结果集如下:
内连接

id	name	sex	age	birthday	id	chinese	math english
1 	张三	男	20 	2018/5/15	1	   70	 80	  90
2 	李四	女	 	 	        2	   56	 48	  98

<3>外连接
① 左外连接/左连接

SELECT * FROM studentinfo LEFT OUTER JOIN scoreinfo ON studentinfo.id = scoreinfo.id;
#OUTER可以省略
SELECT * FROM studentinfo LEFT JOIN scoreinfo ON studentinfo.id = scoreinfo.id;

左外连接

id	name	sex	age	birthday	id	chinese	math	english
1 	张三	男	20 	2018/5/15	1	   70	  80	  90
2 	李四	女	 	 	        2	   56	  48	  98
3 	王五	男	19 	2019/5/21	NULL   NULL   NULL	  NULL

② 右外连接/右连接

SELECT * FROM studentinfo RIGHT OUTER JOIN scoreinfo ON studentinfo.id = scoreinfo.id;
#OUTER可以省略
SELECT * FROM studentinfo RIGHT JOIN scoreinfo ON studentinfo.id = scoreinfo.id;

右外连接

id	name	sex	age	birthday	id	chinese	math	english
1 	张三	男	20 	2018/5/15	1	  70	 80	      90
2 	李四	女	 	 	        2	  56	 48	      98
NULL NULL	NULL NULL NULL	    4	  85	 25	      68

③ 全外连接
MySQL不支持全外连接,所以只能采取关键字UNION来联合左、右连接的方法:

SELECT * FROM studentinfo LEFT JOIN scoreinfo ON studentinfo.id = scoreinfo.id
UNION
SELECT * FROM studentinfo RIGHT JOIN scoreinfo ON studentinfo.id = scoreinfo.id;

全外连接

id	name	sex	age	birthday	id	chinese	math	english
1 	张三	男	20 	2018/5/15	1	   70	  80	  90
2 	李四	女	 	 	        2	   56	  48	  98
3 	王五	男	19 	2019/5/21	NULL   NULL   NULL    NULL
NULL NULL	NULL NULL NULL	    4	   85  	  25	  68
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值