Mysql数据库关联查询(左外连接,右外连接,内连接)

关联查询

开发应用时,多表关联查询的情况很多,mysql数据库支持哪些常用的关联查询语法,这是每一个程序员都应该掌握的基础能力。本文主要讲解mysql数据库支持的三种基本关联查询语法及案例。

数据库准备

安装mysql数据库

首先你要有一个mysql数据库,具体安装过程请自行百度。

数据准备

我把要用到的建表语句及数据贴出来:

DROP TABLE IF EXISTS `test_scope`;
CREATE TABLE `test_scope` (
  `r_id` bigint(20) DEFAULT NULL COMMENT '专业ID',
  `r_name` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of test_scope
-- ----------------------------
INSERT INTO `test_scope` VALUES ('1', 'java开发');
INSERT INTO `test_scope` VALUES ('2', '工商管理');
INSERT INTO `test_scope` VALUES ('3', '信息工程');

-- ----------------------------
-- Table structure for test_user
-- ----------------------------
DROP TABLE IF EXISTS `test_user`;
CREATE TABLE `test_user` (
  `l_id` bigint(20) DEFAULT NULL COMMENT '用户ID',
  `l_name` varchar(255) DEFAULT NULL,
  `l_age` int(255) DEFAULT NULL,
  `l_salary` bigint(10) DEFAULT NULL,
  `l_scope_id` bigint(20) DEFAULT NULL COMMENT '专业ID'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of test_user
-- ----------------------------
INSERT INTO `test_user` VALUES ('1', 'A', '20', '5000', '1');
INSERT INTO `test_user` VALUES ('2', 'B', '21', '6000', '1');
INSERT INTO `test_user` VALUES ('3', 'C', '22', '7000', '2');
INSERT INTO `test_user` VALUES ('4', 'D', '23', '8000', '2');
INSERT INTO `test_user` VALUES ('5', 'E', '24', '20000', null);

数据内容

-- 人员表
select * from `test_user`;

我们看到人员表中,E对应的l_scope_id字段为null,即这个人没有专业信息。

 

-- 专业表
select * from `test_scope`;

可以发现专业表中,信息工程这个专业,在人员表中没有对应的人员。

关联查询

mysql数据库常用的关联查询语句主要包括:外连接、内连接,外连接又分左外连接和右外连接,不支持全外连接。

左外连接

左外连接,以左表为主,会将左表的全部内容及右表满足条件的内容查询出来。

-- 左外连接查询所有人员的专业(人员表左表为主)
select l.*,r.r_name from `test_user` l LEFT JOIN `test_scope` r ON l.l_scope_id=r.r_id; 

E这个人没有对应的专业信息,依然可以查询出来,只是专业信息为null;

右外连接

右外连接,以右表为主,会将左表中的全部内容及左表中满足条件的记录查询出来。

-- 右外连接查询所有专业的人员(专业表右表为主)
select l.*,r.r_name from `test_user` l RIGHT JOIN `test_scope` r on l.l_scope_id = r.r_id;

信息工程这个专业对应的人员信息是null

全外连接

mysql数据库不支持。

-- Mysql不支持全连接 !!!
select l.*,r.r_name FROM `test_user` l FULL JOIN `test_scope` r on l.l_scope_id = r.r_id;

执行结果为:

[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FULL JOIN `test_scope` r on l.l_scope_id = r.r_id' at line 2

内连接

内连接,只查询出满足条件的记录。

-- 内连接,只查询满足条件的记录
select l.*,r.r_name from `test_user` l INNER JOIN `test_scope` r on l.l_scope_id = r.r_id;

可以看出,没有E这个人的信息,也没有信息工程这个专业的信息。

总结:

1、左外连接,左表为主;

2、右外连接,右表为主;

3、mysql不支持全外连接;

4、内连接,严格执行条件。

具体怎么区分左表还是右表,看该表是在join关键字的左边还是右边!

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值