MySQL关联查询

两个表:

name表

id	name
1	ru
2	ruge
3	ruye
4	rushen

 

 score表

 

id	score
1	120
2	130
4	150
5	110

 

1.内联

 

(1)不做限制

SELECT * FROM NAME AS NAME INNER JOIN score AS s ;

结果:
    id  name        id   score  
------  ------  ------  --------
     1  ru           1       120
     2  ruge         1       120
     3  ruye         1       120
     4  rushen       1       120
     1  ru           2       130
     2  ruge         2       130
     3  ruye         2       130
     4  rushen       2       130
     1  ru           4       150
     2  ruge         4       150
     3  ruye         4       150
     4  rushen       4       150
     1  ru           5       110
     2  ruge         5       110
     3  ruye         5       110
     4  rushen       5       110

 (2)id相等时

SELECT * FROM NAME AS n INNER JOIN score AS s ON n.`id`=s.`id`;

结果:
id	name	id	score
1	ru	1	120
2	ruge	2	130
4	ruye	4	150

 2、左外连接(left join 或者left outer join)

 

SELECT * FROM NAME AS n LEFT JOIN score AS s ON n.`id`=s.`id`;

结果:

    id  name        id   score  
------  ------  ------  --------
     1  ru           1       120
     2  ruge         2       130
     4  rushen       4       150
     3  ruye    (NULL)    (NULL)

 

 3、右外连接(right join或者right outer join)

SELECT * FROM NAME AS n RIGHT JOIN score AS s ON n.`id`=s.`id`;

结果:

id	name	id	score
1	ru	1	120
2	ruge	2	130
4	ruye	4	150
\N	\N	5	110

 注:外联必须有查询条件

 

 二、3表关联查询

 

没有限制条件时:

SELECT * FROM `stuname` nm INNER JOIN `stuaddress` address INNER JOIN `stuscore` score;

 

id	name	id	address	id	score
1	ru	1	hebei	1	120
1	ru	2	beijing	1	120
2	ruge	1	hebei	1	120
2	ruge	2	beijing	1	120
3	ruye	1	hebei	1	120
3	ruye	2	beijing	1	120
4	rushen	1	hebei	1	120
4	rushen	2	beijing	1	120
1	ru	1	hebei	2	130
1	ru	2	beijing	2	130
2	ruge	1	hebei	2	130
2	ruge	2	beijing	2	130
3	ruye	1	hebei	2	130
3	ruye	2	beijing	2	130
4	rushen	1	hebei	2	130
4	rushen	2	beijing	2	130
1	ru	1	hebei	4	150
1	ru	2	beijing	4	150
2	ruge	1	hebei	4	150
2	ruge	2	beijing	4	150
3	ruye	1	hebei	4	150
3	ruye	2	beijing	4	150
4	rushen	1	hebei	4	150
4	rushen	2	beijing	4	150
1	ru	1	hebei	5	160
1	ru	2	beijing	5	160
2	ruge	1	hebei	5	160
2	ruge	2	beijing	5	160
3	ruye	1	hebei	5	160
3	ruye	2	beijing	5	160
4	rushen	1	hebei	5	160
4	rushen	2	beijing	5	160

 

 

 

有限制条件时:

SELECT * FROM `stuname` nm INNER JOIN `stuaddress` address ON nm.`id`=address.`id` INNER JOIN `stuscore` score ON nm.`id`=score.`id`;

 

id	name	id	address	id	score
1	ru	1	hebei	1	120
2	ruge	2	beijing	2	130

 

 

 

三,另一个实例

SELECT permission_id,permission_name,permission_url,parent_id FROM tbpermissions WHERE permission_id>999999 AND permission_id<10000000 AND permission_id IN(
		SELECT permission_id FROM tbrole_permissions WHERE role_id=(
		SELECT role_id FROM tbuserinfo WHERE user_id='0'));

等价于下面的sql:

SELECT tm.* FROM tbpermissions tm INNER JOIN 
	(SELECT tpm.permission_id FROM tbrole_permissions tpm INNER JOIN  tbuserinfo tu ON tpm.`role_id`=tu.`role_id` AND tu.`user_id`='0') tp
	 ON tm.permission_id>999999 AND tm.permission_id<10000000 AND tm.permission_id IN(tp.`permission_id`);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值