SQL里3个表的连接查询的语句怎么写

1、SQL语句

select u.*,r.*,r.id rid 

from user u left join sys_user_role sur  on u.id = sur.userid

left join sys_role r  on sur.roleid = r.id

 

图片:

  • 请点击输入图片描

请点击输入图片描述

  • 注1:user(用户表),sys_role(角色表),sys_user_role(关系表)。

表1:user(下图)

  • SQL里3个表的连接查询的语句怎么写_第1张图片

    请点击输入图片描述

  • 表2:sys_role(下图)

  • 请点击输入图片描述

  • 表3:sys_user_role(下图)

  • SQL里3个表的连接查询的语句怎么写_第2张图片

    请点击输入图片描述

请点击输入图片描述


算了,建表语句也给你们了,你们自己测试,这样更详细,(程序员)多动手,比什么都好。(下面代码区)

-- ----------------------------
-- Table structure for user(用户表)
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(50) DEFAULT NULL,
  `password` VARCHAR(50) DEFAULT NULL,
  `birthday` VARCHAR(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

SELECT * FROM USER;

INSERT INTO `user` VALUES ('1', 'lucy', '123', '2019-12-12');
INSERT INTO `user` VALUES ('2', 'tom','123', '2019-12-12');


-- ----------------------------
-- Table structure for sys_role(角色表)
-- ----------------------------
DROP TABLE IF EXISTS `sys_role`;
CREATE TABLE `sys_role` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `rolename` VARCHAR(255) DEFAULT NULL,
  `roleDesc` VARCHAR(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

SELECT * FROM sys_role;

-- ----------------------------
-- Records of sys_role
-- ----------------------------
INSERT INTO `sys_role` VALUES ('1', 'CTO', 'CTO');
INSERT INTO `sys_role` VALUES ('2', 'CEO', 'CEO');


-- ----------------------------
-- Table structure for sys_user_role
-- ----------------------------
DROP TABLE IF EXISTS `sys_user_role`;
CREATE TABLE `sys_user_role` (
  `userid` INT(11) NOT NULL,
  `roleid` INT(11) NOT NULL,
  PRIMARY KEY (`userid`,`roleid`),
  KEY `roleid` (`roleid`),
  CONSTRAINT `sys_user_role_ibfk_1` FOREIGN KEY (`userid`) REFERENCES `sys_role` (`id`),
  CONSTRAINT `sys_user_role_ibfk_2` FOREIGN KEY (`roleid`) REFERENCES `user` (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

SELECT * FROM sys_user_role;

-- ----------------------------
-- Records of sys_user_role
-- ----------------------------
INSERT INTO `sys_user_role` VALUES ('1', '1');
INSERT INTO `sys_user_role` VALUES ('2', '1');
INSERT INTO `sys_user_role` VALUES ('1', '2');
INSERT INTO `sys_user_role` VALUES ('2', '2');

 

2、SQL语句解释

select a.*,b.* 

from a表 a left join b表 b on a.id = b.aid 

left join c表 c on b.cid = c.id 

注2:此语句适合a表与c表连接b表是关系表的情况。

你可能感兴趣的:(SQL,SQL里的3个表的连接查询)