文章目录

  • 0 写在前面
  • 1 语法说明
  • 2 SQL准备
  • 3 举例说明
    • 3.1 内连接
    • 3.2 左连接
    • 3.3 右连接
  • 4 写在最后

0 写在前面

实际业务中,查询数据库大多都是多表链接查询,所以MYSQL的连接的使用非常重要。
连接有三种:
INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

1 语法说明

一般是设置查询字段+设置两张表的连接 + 连接条件。
例如:

SELECT'需要查询的字段'
FROM'表一''内连接/左连接/右连接' '表二'
ON'连接条件'

2 SQL准备

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for user_wages_information
-- ----------------------------
DROP TABLE IF EXISTS `user_wages_information`;
CREATE TABLE `user_wages_information`  (`id` int NOT NULL AUTO_INCREMENT COMMENT '自增主键',`user_wager_information_uuid` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户工资表主键',`user_information_uuid` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户信息主键',`year` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '年份',`month` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '月份',`base_salary` double UNSIGNED NULL DEFAULT NULL COMMENT '基本工资',`bonus` double NULL DEFAULT NULL COMMENT '奖金',`punish` double NULL DEFAULT NULL COMMENT '扣除',`remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '用户工资信息表' ROW_FORMAT = DYNAMIC;-- ----------------------------
-- Records of user_wages_information
-- ----------------------------
INSERT INTO `user_wages_information` VALUES (1, '92b639cf-c2ca-4fff-9fd8-4c8074e8109c', 'f76b7382-8fc5-4197-8d46-f9d6e3729089', '2022', '10', 3000, 1500, 100, '4400');
INSERT INTO `user_wages_information` VALUES (2, '4dcf10bd-2706-49c4-a505-41da5667cd08', 'f76b7382-8fc5-4197-8d46-f9d6e3729089', '2022', '9', 3000, 1500, 0, '4500');
INSERT INTO `user_wages_information` VALUES (3, '2a560bbf-c98e-4bd4-b8ed-4068d1c261ab', '197410ca-9dde-4850-9ff7-5153786db821', '2022', '10', 9000, 4000, 0, '13000');
INSERT INTO `user_wages_information` VALUES (4, '7eb42aa0-dbc3-4d88-a636-d3044ec6efdf', 'f76b7382-8fc5-4197-8d46-f9d6e3729089', '2022', '8', 3000, 1000, 500, '3500');
INSERT INTO `user_wages_information` VALUES (5, '37cb6240-a958-44db-8276-2f2af2156a32', '197410ca-9dde-4850-9ff7-5153786db821', '2022', '9', 8000, 3000, 0, '11000');
INSERT INTO `user_wages_information` VALUES (6, 'f2009698-8152-4045-b7a8-927994993af9', '01198488-a0b6-46ba-9311-9e64ba1d41ef', '2022', '10', 5000, 0, 0, '5000');
INSERT INTO `user_wages_information` VALUES (7, 'e3e45ce4-1db1-40ff-8efe-f7a0685972e2', '01198488-a0b6-46ba-9311-9e64ba1d41ef', '2022', '9', 5000, 0, 0, '5000');SET FOREIGN_KEY_CHECKS = 1;-- ----------------------------
-- Table structure for user_information
-- ----------------------------
DROP TABLE IF EXISTS `user_information`;
CREATE TABLE `user_information`  (`user_id` int NOT NULL AUTO_INCREMENT COMMENT '自增主键',`user_uuid` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户主键',`user_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '姓名',`user_sex` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '性别',`user_age` int NOT NULL COMMENT '年龄',`user_email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '邮箱',PRIMARY KEY (`user_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '用户基本信息表' ROW_FORMAT = DYNAMIC;-- ----------------------------
-- Records of user_information
-- ----------------------------
INSERT INTO `user_information` VALUES (1, 'f76b7382-8fc5-4197-8d46-f9d6e3729089', '张三', 'MALE', 50, 'xiaoming@xiaoming.com');
INSERT INTO `user_information` VALUES (2, '197410ca-9dde-4850-9ff7-5153786db821', '李四', 'FAMALE', 30, 'lisi@lisi.com');
INSERT INTO `user_information` VALUES (3, '01198488-a0b6-46ba-9311-9e64ba1d41ef', '小明', 'MALE', 21, 'xiaoming@xiaoming.com');
INSERT INTO `user_information` VALUES (4, 'bf68ca01-0b0e-7c82-5f15-d17bd23355d8', '小红', 'FAMALE', 24, 'xiaohong@xiaohong.com');
INSERT INTO `user_information` VALUES (5, '72236b56-8bb4-7f54-44d4-75594005ec54', '大鹅', 'MALE', 21, 'dae@dae.com');SET FOREIGN_KEY_CHECKS = 1;


如何插入SQL可以查看添加链接Navicat Premium导出数据库中的结构及数据及运行SQL文件
如果sql执行错误或者出现这个错误[Err] 1273 - Unknown collation: ‘utf8mb4_0900_ai_ci‘可以查看添加解决:[Err] 1273 - Unknown collation: ‘utf8mb4_0900_ai_ci‘
如果对于uuid不理解可以查看java中使用uuid(2)-处理数据库逻辑来进行比较学习。

3 举例说明

3.1 内连接

MySQL的INNER JOIN(也可以省略 INNER 使用 JOIN,效果一样)来连接两张表来读取数据。
sql:查询编号,姓名,性别,和十月份的工资

SELECTt1.user_id,t1.user_name,t1.user_sex,t2.remark
FROMuser_information t1INNER JOIN user_wages_information t2 ON t1.user_uuid = t2.user_information_uuid AND t2.YEAR = 2022 AND t2.MONTH = 10;


结果:

3.2 左连接

MySQL left join 与 join 有所不同。 MySQL LEFT JOIN 会读取左边数据表的全部数据,即使右边表无对应数据。
sql:

SELECTt1.user_id,t1.user_name,t1.user_sex,t2.remark
FROMuser_information t1LEFT JOIN user_wages_information t2 ON t1.user_uuid = t2.user_information_uuid AND t2.YEAR = 2022 AND t2.MONTH = 10;

3.3 右连接

与左连接相反,MySQL RIGHT JOIN 会读取右边数据表的全部数据,即使左边边表无对应数据。
sql

SELECTt1.user_id,t1.user_name,t1.user_sex,t2.remark
FROMuser_information t1RIGHT  JOIN user_wages_information t2 ON t1.user_uuid = t2.user_information_uuid AND t2.YEAR = 2022 AND t2.MONTH = 10;

4 写在最后

这一部分比较抽象,难以理解,不过经常使用会有很好的突破。
经常使用的是左连接,所以可以重点学习左连接的使用。

MYSQL 中连接的使用相关推荐

  1. mysql中连接运算符_MySQL的运算符

    1.算术运算 运算符 作用 + 加法 - 减法 * 乘法 / (div) 除法 (整除) % (mod) 求余 运算代码 结果 运算代码 结果 select -4/-3; //1.3333 selec ...

  2. mysql中连接和断开数据库_robot framework——连接和断开mysql数据库

    按照命令:pip  install  -U  robotframework-databaselibrary 来进行按照. 按照完成后,在使用databaselibrary库时,需要预先在测试套件中导入 ...

  3. MySql中连接出现 1130-Host ‘LAPTOP-AKP8DH1F’ is not allowed to connect to this MySQL server 的解决方法

    一.错误 在用Navicat配置远程连接Mysql数据库时遇到如下报错信息,这是由于Mysql配置了不支持远程连接引起的. 二.在安装Mysql数据库的主机上登录root用户. mysql -u ro ...

  4. gorm MySql中连接出现 1130 Host ‘LAPTOP-AKP8DH1F’ is not allowed to connect to this MySQL server 的解决方法

    依次执行如下命令. use mysql; select host from user where user='root'; update user set host='%' where user='r ...

  5. mysql表连接算法_如何在MySQL中连接多个表

    我需要FULL OUTER JOIN多个表.我知道如何从 here开始加入两个表.但我有几个表,我不能将它们应用于它们.我怎样才能实现它? 我的SQL代码,如下: INSERT INTO table ...

  6. mysql中分层查询_在mysql中连接任意数量的字符串行(分层查询)

    完全没有经过测试,打出了我的头顶... DECLARE @FOLDER VARCHAR(200) DECLARE @TOPID AS INT DECLARE @MYID As int CREATE T ...

  7. dirver时区_JDBD连接MySQL中的驱动与时区问题

    1.在进行jdbc与mysql连接的时候应注意,加载驱动的方式根据MySQL版本内容来说 有变化 5.7版本之前: String driver= "com.mysql.jdbc.Driver ...

  8. MySQL中的外连接

    MySQL中的外连接 外连接是指查询出符合连接条件的数据同时还包含孤儿数据. 一.孤儿数据 孤儿数据是指被连接的列的值为空的数据. 二.左外连接(left outer join) 左外连接包含左表的孤 ...

  9. MySQL中的多表连接

    MySQL中的多表连接 当查询的数据并不是来源一个表时,需要使用多表链接操作完成查询.根据不同表中的数据之间的关系查询相关联的数据. 一.语法结构 使用一个表在多个表中查询数据: Where子句中写连 ...

最新文章

  1. 最新的GAN方法——PGGAN揭秘
  2. MYSQL事务隔离级别详解附加实验
  3. 高并发,分布式系统要点
  4. oracle查看用户路径,oracle 查看用户的表空间,表空间路径,角色,权限
  5. Junit5新功能一览
  6. VMware 下Linux无法上网 新增支持WIFI方式 无线连接
  7. numpy方法读取加载mnist数据集
  8. 律师坚称技术无罪:“钉钉打卡神器”开发者二审被改判四年
  9. 实践练习四:迁移 MySQL 数据到 OceanBase 集群
  10. 王者荣耀专区系统服务器繁忙,王者荣耀跨系统转区开放!详细问答汇总,解决全部转区疑惑!...
  11. 女员工采购电影票抽中黄金 老板:必须上交 不上交就开除
  12. mysql的配置以及后端数据库的连接
  13. python与java前景-Java和Python现在都很热门,哪个更有前途?
  14. Docker--docker ps 命令与结果解析
  15. 物联网核心技术射频识别技术,传感技术,网络通信技术、嵌入式系统技术和云计算的基本介绍
  16. service常驻后台
  17. 百度关闭快照删除更新入口
  18. 终于搞清前端和后端的区别啦!原来是这样的
  19. 快手挂小黄车和快手小店有什么区别?如何开通快手小店?
  20. centos下rabbitmq启动失败:

热门文章

  1. linux能运行安卓模拟器吗,Android模拟器的使用方法(Linux)
  2. android 添加 iconv 支持
  3. adobe flash(转载)
  4. unsigned详讲(干货满满)
  5. Huggingface简介及BERT代码浅析
  6. 【如何开发小程序】自己如何开发小程序?
  7. 安卓键盘加上数字_安卓键盘键值对照表
  8. jquery slideToggle() 效果
  9. word表格的编辑 计算机应用基础(4)
  10. <artifactId>里面的字符串不能有空格