MYSQL 中连接的使用
文章目录
- 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 中连接的使用相关推荐
- mysql中连接运算符_MySQL的运算符
1.算术运算 运算符 作用 + 加法 - 减法 * 乘法 / (div) 除法 (整除) % (mod) 求余 运算代码 结果 运算代码 结果 select -4/-3; //1.3333 selec ...
- mysql中连接和断开数据库_robot framework——连接和断开mysql数据库
按照命令:pip install -U robotframework-databaselibrary 来进行按照. 按照完成后,在使用databaselibrary库时,需要预先在测试套件中导入 ...
- MySql中连接出现 1130-Host ‘LAPTOP-AKP8DH1F’ is not allowed to connect to this MySQL server 的解决方法
一.错误 在用Navicat配置远程连接Mysql数据库时遇到如下报错信息,这是由于Mysql配置了不支持远程连接引起的. 二.在安装Mysql数据库的主机上登录root用户. mysql -u ro ...
- 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 ...
- mysql表连接算法_如何在MySQL中连接多个表
我需要FULL OUTER JOIN多个表.我知道如何从 here开始加入两个表.但我有几个表,我不能将它们应用于它们.我怎样才能实现它? 我的SQL代码,如下: INSERT INTO table ...
- mysql中分层查询_在mysql中连接任意数量的字符串行(分层查询)
完全没有经过测试,打出了我的头顶... DECLARE @FOLDER VARCHAR(200) DECLARE @TOPID AS INT DECLARE @MYID As int CREATE T ...
- dirver时区_JDBD连接MySQL中的驱动与时区问题
1.在进行jdbc与mysql连接的时候应注意,加载驱动的方式根据MySQL版本内容来说 有变化 5.7版本之前: String driver= "com.mysql.jdbc.Driver ...
- MySQL中的外连接
MySQL中的外连接 外连接是指查询出符合连接条件的数据同时还包含孤儿数据. 一.孤儿数据 孤儿数据是指被连接的列的值为空的数据. 二.左外连接(left outer join) 左外连接包含左表的孤 ...
- MySQL中的多表连接
MySQL中的多表连接 当查询的数据并不是来源一个表时,需要使用多表链接操作完成查询.根据不同表中的数据之间的关系查询相关联的数据. 一.语法结构 使用一个表在多个表中查询数据: Where子句中写连 ...
最新文章
- 最新的GAN方法——PGGAN揭秘
- MYSQL事务隔离级别详解附加实验
- 高并发,分布式系统要点
- oracle查看用户路径,oracle 查看用户的表空间,表空间路径,角色,权限
- Junit5新功能一览
- VMware 下Linux无法上网 新增支持WIFI方式 无线连接
- numpy方法读取加载mnist数据集
- 律师坚称技术无罪:“钉钉打卡神器”开发者二审被改判四年
- 实践练习四:迁移 MySQL 数据到 OceanBase 集群
- 王者荣耀专区系统服务器繁忙,王者荣耀跨系统转区开放!详细问答汇总,解决全部转区疑惑!...
- 女员工采购电影票抽中黄金 老板:必须上交 不上交就开除
- mysql的配置以及后端数据库的连接
- python与java前景-Java和Python现在都很热门,哪个更有前途?
- Docker--docker ps 命令与结果解析
- 物联网核心技术射频识别技术,传感技术,网络通信技术、嵌入式系统技术和云计算的基本介绍
- service常驻后台
- 百度关闭快照删除更新入口
- 终于搞清前端和后端的区别啦!原来是这样的
- 快手挂小黄车和快手小店有什么区别?如何开通快手小店?
- centos下rabbitmq启动失败: