`
退役的龙弟弟
  • 浏览: 445995 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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`);

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics