MySQL多表查询之连接查询

news2025/1/15 16:30:48

0. 数据源

/*
 Navicat Premium Data Transfer

 Source Server         : localhost_3306
 Source Server Type    : MySQL
 Source Server Version : 80016
 Source Host           : localhost:3306
 Source Schema         : tempdb

 Target Server Type    : MySQL
 Target Server Version : 80016
 File Encoding         : 65001

 Date: 08/05/2023 00:34:36
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for class
-- ----------------------------
DROP TABLE IF EXISTS `class`;
CREATE TABLE `class`  (
  `id` int(11) NOT NULL,
  `c_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of class
-- ----------------------------
INSERT INTO `class` VALUES (1, '高三 1 班');
INSERT INTO `class` VALUES (2, '高三 2 班');
INSERT INTO `class` VALUES (3, '高三 3 班');
INSERT INTO `class` VALUES (4, '高三 4 班');
INSERT INTO `class` VALUES (5, '高三 5 班');

-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`  (
  `num` int(11) NOT NULL,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `age` int(11) NULL DEFAULT NULL,
  `tel` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `c_id` int(11) NULL DEFAULT NULL,
  `g_id` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`num`) USING BTREE,
  INDEX `f_std_cls`(`c_id`) USING BTREE,
  CONSTRAINT `f_std_cls` FOREIGN KEY (`c_id`) REFERENCES `class` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (101, '张三', 23, '354456354', 1, NULL);
INSERT INTO `student` VALUES (102, '王五', 34, '4334', 1, 101);
INSERT INTO `student` VALUES (103, '李四', 32, '131434', 3, 101);
INSERT INTO `student` VALUES (104, '赵无极', 23, '4234', 2, NULL);
INSERT INTO `student` VALUES (105, '韩夫子', 34, '23', 2, 102);
INSERT INTO `student` VALUES (106, '高俅', 25, '42543', 4, 103);
INSERT INTO `student` VALUES (107, '范瑶', 26, '2345', NULL, 104);
INSERT INTO `student` VALUES (108, '斯巴达克斯', 27, '422156 ', NULL, 104);

SET FOREIGN_KEY_CHECKS = 1;

在这里插入图片描述

1. 多表查询概述

(1)定义:指从多张表中查询数据。
(2)笛卡尔积:在数学中,两个集合A和集合B的所有组合情况。在多表查询时,要消除笛卡尔积现象。

// 此时已经产生了笛卡尔现象, 一共返回了40条记录
mysql> select * from student, class;
+-----+------------+------+-----------+------+------+----+-----------+
| num | name       | age  | tel       | c_id | g_id | id | c_name    |
+-----+------------+------+-----------+------+------+----+-----------+
| 101 | 张三       |   23 | 354456354 |    1 | NULL |  1 | 高三 1|
| 101 | 张三       |   23 | 354456354 |    1 | NULL |  2 | 高三 2|
| 101 | 张三       |   23 | 354456354 |    1 | NULL |  3 | 高三 3|
| 101 | 张三       |   23 | 354456354 |    1 | NULL |  4 | 高三 4|
| 101 | 张三       |   23 | 354456354 |    1 | NULL |  5 | 高三 5|
| 102 | 王五       |   34 | 4334      |    1 |  101 |  1 | 高三 1|
| 102 | 王五       |   34 | 4334      |    1 |  101 |  2 | 高三 2|
| 102 | 王五       |   34 | 4334      |    1 |  101 |  3 | 高三 3|
| 102 | 王五       |   34 | 4334      |    1 |  101 |  4 | 高三 4|
| 102 | 王五       |   34 | 4334      |    1 |  101 |  5 | 高三 5|
| 103 | 李四       |   32 | 131434    |    3 |  101 |  1 | 高三 1|
| 103 | 李四       |   32 | 131434    |    3 |  101 |  2 | 高三 2|
| 103 | 李四       |   32 | 131434    |    3 |  101 |  3 | 高三 3|
| 103 | 李四       |   32 | 131434    |    3 |  101 |  4 | 高三 4|
| 103 | 李四       |   32 | 131434    |    3 |  101 |  5 | 高三 5|
| 104 | 赵无极     |   23 | 4234      |    2 | NULL |  1 | 高三 1|
| 104 | 赵无极     |   23 | 4234      |    2 | NULL |  2 | 高三 2|
| 104 | 赵无极     |   23 | 4234      |    2 | NULL |  3 | 高三 3|
| 104 | 赵无极     |   23 | 4234      |    2 | NULL |  4 | 高三 4|
| 104 | 赵无极     |   23 | 4234      |    2 | NULL |  5 | 高三 5|
| 105 | 韩夫子     |   34 | 23        |    2 |  102 |  1 | 高三 1|
| 105 | 韩夫子     |   34 | 23        |    2 |  102 |  2 | 高三 2|
| 105 | 韩夫子     |   34 | 23        |    2 |  102 |  3 | 高三 3|
| 105 | 韩夫子     |   34 | 23        |    2 |  102 |  4 | 高三 4|
| 105 | 韩夫子     |   34 | 23        |    2 |  102 |  5 | 高三 5|
| 106 | 高俅       |   25 | 42543     |    4 |  103 |  1 | 高三 1|
| 106 | 高俅       |   25 | 42543     |    4 |  103 |  2 | 高三 2|
| 106 | 高俅       |   25 | 42543     |    4 |  103 |  3 | 高三 3|
| 106 | 高俅       |   25 | 42543     |    4 |  103 |  4 | 高三 4|
| 106 | 高俅       |   25 | 42543     |    4 |  103 |  5 | 高三 5|
| 107 | 范瑶       |   26 | 2345      | NULL |  104 |  1 | 高三 1|
| 107 | 范瑶       |   26 | 2345      | NULL |  104 |  2 | 高三 2|
| 107 | 范瑶       |   26 | 2345      | NULL |  104 |  3 | 高三 3|
| 107 | 范瑶       |   26 | 2345      | NULL |  104 |  4 | 高三 4|
| 107 | 范瑶       |   26 | 2345      | NULL |  104 |  5 | 高三 5|
| 108 | 斯巴达克斯 |   27 | 422156    | NULL |  104 |  1 | 高三 1|
| 108 | 斯巴达克斯 |   27 | 422156    | NULL |  104 |  2 | 高三 2|
| 108 | 斯巴达克斯 |   27 | 422156    | NULL |  104 |  3 | 高三 3|
| 108 | 斯巴达克斯 |   27 | 422156    | NULL |  104 |  4 | 高三 4|
| 108 | 斯巴达克斯 |   27 | 422156    | NULL |  104 |  5 | 高三 5|
+-----+------------+------+-----------+------+------+----+-----------+

(3)消除笛卡尔现象
多表查询时,指定查询的匹配条件即可过滤掉多余的无效信息。
此处添加查询条件:where student.c_id=class.id,即可消除笛卡尔现象。

mysql> select * from student, class where student.c_id=class.id;
+-----+--------+------+-----------+------+------+----+-----------+
| num | name   | age  | tel       | c_id | g_id | id | c_name    |
+-----+--------+------+-----------+------+------+----+-----------+
| 101 | 张三   |   23 | 354456354 |    1 | NULL |  1 | 高三 1|
| 102 | 王五   |   34 | 4334      |    1 |  101 |  1 | 高三 1|
| 104 | 赵无极 |   23 | 4234      |    2 | NULL |  2 | 高三 2|
| 105 | 韩夫子 |   34 | 23        |    2 |  102 |  2 | 高三 2|
| 103 | 李四   |   32 | 131434    |    3 |  101 |  3 | 高三 3|
| 106 | 高俅   |   25 | 42543     |    4 |  103 |  4 | 高三 4|
+-----+--------+------+-----------+------+------+----+-----------+
6 rows in set (0.00 sec)

2. 内连接

在内连接查询中,只有满足条件的记录才能出现在结果关系中。
内连接查询的是两张表的交集部分。

// demo
// 查询每一个学生编号,姓名及其关联的班级名称;
// 下面分别用隐式内连接和显示内连接来实现;

2.1 隐式内连接
格式:SELECT 字段列表 FROM 表1, 表2 WHERE 条件...;

mysql> select student.num,student.name,class.c_name from student, class where student.c_id=class.id;
+-----+--------+-----------+
| num | name   | c_name    |
+-----+--------+-----------+
| 101 | 张三   | 高三 1|
| 102 | 王五   | 高三 1|
| 104 | 赵无极 | 高三 2|
| 105 | 韩夫子 | 高三 2|
| 103 | 李四   | 高三 3|
| 106 | 高俅   | 高三 4|
+-----+--------+-----------+
6 rows in set (0.00 sec)

2.2 显示内连接
格式:SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 条件...;
关键字 INNER 可以省略不写

mysql> select student.num,student.name,class.c_name from student INNER JOIN class on student.c_id=class.id;
+-----+--------+-----------+
| num | name   | c_name    |
+-----+--------+-----------+
| 101 | 张三   | 高三 1|
| 102 | 王五   | 高三 1|
| 104 | 赵无极 | 高三 2|
| 105 | 韩夫子 | 高三 2|
| 103 | 李四   | 高三 3|
| 106 | 高俅   | 高三 4|
+-----+--------+-----------+
6 rows in set (0.00 sec)

2.3 结果分析

从结果可以看出,两种方式都产生一样的结果。原本一共有8个学生,内连接查询后只是返回了其中 6个学生。很明显,因为107,108两个学生的c_id为null,不满足where条件,所以没有被查询出来,这也印证了内连接只会将满足条件的记录查询出来或返回两个表的交集部分这一说法。

3. 外连接

3.1 左外连接
返回包括左表中的所有记录和右表中连接字段相等的记录
格式:SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件...;
关键字 OUTER 可以省略不写
实际上,正式开发中通常都是直接省略了OUTER,直接LEFT JOIN或RIGHT JOIN。也习惯直接称其为左连接或右连接

(1)引子
通过2.3分析可知,内连接只是返回了2个表的交集部分。那假如我不但要获取两个表的交集部分,还要得到107,108两个学生的记录呢?该如何操作???
此时可以通过左连接办到。

(2)测试

mysql> select student.num,student.name,class.c_name from student LEFT JOIN class on student.c_id=class.id;
+-----+------------+-----------+
| num | name       | c_name    |
+-----+------------+-----------+
| 101 | 张三       | 高三 1|
| 102 | 王五       | 高三 1|
| 103 | 李四       | 高三 3|
| 104 | 赵无极     | 高三 2|
| 105 | 韩夫子     | 高三 2|
| 106 | 高俅       | 高三 4|
| 107 | 范瑶       | NULL      |
| 108 | 斯巴达克斯 | NULL      |
+-----+------------+-----------+
8 rows in set (0.00 sec)

(3)结论
因为左表中的107、108在右表中没有匹配行,所以返回的右表中的指定列都是null值。
左连接的结果包括指定的左表中的所有行,而不仅仅是连接列所匹配的行。
如果左表的某行在右表中没有匹配行,则在相关联的结果行中,右表的所有选择列均为null值

3.2 右外连接
返回包括右表中的所有记录和左表中连接字段相等的记录
格式:SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件...;
关键字 OUTER 可以省略不写

右连接是左连接的反向状态,将返回右表的所有行。如果右表的某行在左表中没有匹配行,左表将返回null值。

mysql> select student.num,student.name,class.c_name from student RIGHT JOIN class on student.c_id=class.id;
+------+--------+-----------+
| num  | name   | c_name    |
+------+--------+-----------+
|  101 | 张三   | 高三 1|
|  102 | 王五   | 高三 1|
|  104 | 赵无极 | 高三 2|
|  105 | 韩夫子 | 高三 2|
|  103 | 李四   | 高三 3|
|  106 | 高俅   | 高三 4|
| NULL | NULL   | 高三 5|
+------+--------+-----------+
7 rows in set (0.00 sec)

4. 自连接

在一个连接查询中,涉及的两个表都是同一张表,那么这种查询称之为自连接查询。
语法:SELECT 字段列表 FROM 表A 别名A JOIN 表B 别名B ON 条件...
自连接查询,可以是内连接查询,也可以是外连接查询


首先明确g_id字段的含义:

student中的g_id表示组长的意思,如果其值为null,表示对应的学生没有组长,否则就是该学生的组长。比如101,104的g_id为null,表示其没有组长。102,103的g_id都是101,表示102,103学生的组长都是101。


4.1 查询学生 及其 所属组长的名字

// 隐式内连接
mysql> select s1.name as 学生,s2.name as 所属组长 from student s1,student s2 where s1.g_id=s2.num;
+------------+----------+
| 学生       | 所属组长 |
+------------+----------+
| 王五       | 张三     |
| 李四       | 张三     |
| 韩夫子     | 王五     |
| 高俅       | 李四     |
| 范瑶       | 赵无极   |
| 斯巴达克斯 | 赵无极   |
+------------+----------+
6 rows in set (0.00 sec)
// 显式内连接
mysql> select s1.name as 学生,s2.name as 所属组长 from student s1 INNER JOIN student s2 on s1.g_id=s2.num;
+------------+----------+
| 学生       | 所属组长 |
+------------+----------+
| 王五       | 张三     |
| 李四       | 张三     |
| 韩夫子     | 王五     |
| 高俅       | 李四     |
| 范瑶       | 赵无极   |
| 斯巴达克斯 | 赵无极   |
+------------+----------+
6 rows in set (0.00 sec)

4.2 查询所有学生 及其 所属组长的名字,如果学生没有组长,也要查询出来

mysql> select s1.name as 学生,s2.name as 所属组长 from student s1 LEFT JOIN student s2 on s1.g_id=s2.num;
+------------+----------+
| 学生       | 所属组长 |
+------------+----------+
| 张三       | NULL     |
| 王五       | 张三     |
| 李四       | 张三     |
| 赵无极     | NULL     |
| 韩夫子     | 王五     |
| 高俅       | 李四     |
| 范瑶       | 赵无极   |
| 斯巴达克斯 | 赵无极   |
+------------+----------+
8 rows in set (0.00 sec)

5. 复合条件连接查询

复合条件连接查询是在连接查询的过程中,通过添加过滤条件,以此来限制查询的结果,使查询的结果更加准确。

// 以下使用了内连接
mysql> select student.num,student.name,class.c_name from student INNER JOIN class on student.c_id=class.id;
+-----+--------+-----------+
| num | name   | c_name    |
+-----+--------+-----------+
| 101 | 张三   | 高三 1|
| 102 | 王五   | 高三 1|
| 104 | 赵无极 | 高三 2|
| 105 | 韩夫子 | 高三 2|
| 103 | 李四   | 高三 3|
| 106 | 高俅   | 高三 4|
+-----+--------+-----------+
6 rows in set (0.00 sec)
// 需求:只返回num>=104的学生;
// 可以添加此条件来再次过滤: AND student.num>=104;
mysql> select student.num,student.name,class.c_name from student INNER JOIN class on student.c_id=class.id AND student.num>=104;
+-----+--------+-----------+
| num | name   | c_name    |
+-----+--------+-----------+
| 104 | 赵无极 | 高三 2|
| 105 | 韩夫子 | 高三 2|
| 106 | 高俅   | 高三 4|
+-----+--------+-----------+
3 rows in set (0.00 sec)

6. 表的别名机制

select student.num,student.name,class.c_name from student INNER JOIN class on student.c_id=class.id;

上述sql语句中, 多次使用了表名, 假如表名很长, 那这样的话就不利于sql语句的编写, 所以有比要为表名起一个别名来简化sql语句的编写。

格式:表名 [AS] 别名
注意:AS关键字可以省略

mysql> select s.num,s.name,c.c_name from student AS s INNER JOIN class AS c on s.c_id=c.id;
+-----+--------+-----------+
| num | name   | c_name    |
+-----+--------+-----------+
| 101 | 张三   | 高三 1|
| 102 | 王五   | 高三 1|
| 104 | 赵无极 | 高三 2|
| 105 | 韩夫子 | 高三 2|
| 103 | 李四   | 高三 3|
| 106 | 高俅   | 高三 4|
+-----+--------+-----------+
6 rows in set (0.00 sec)

需要注意的是:一旦起了别名,那么整条sql语句中就只能使用别名了,不能再使用表的原名了。否则报错。

// 已经为student表起了别名s, 但是student.c_id处却仍然使用了表名student, 所以报错。
mysql> select s.num,s.name,c.c_name from student AS s INNER JOIN class AS c on student.c_id=c.id;
ERROR 1054 (42S22): Unknown column 'student.c_id' in 'on clause'

7. 表的联合查询union

联合查询,就是把多次查询的结果合并起来,形成一个新的查询结果集。

格式:
SELECT 字段列表 FROM 表 A...
UNION [ALL]
SELECT 字段列表 FROM 表B...;

// 查询num<=104的学生;
mysql> select * from student where num <= 104;
+-----+--------+------+-----------+------+------+
| num | name   | age  | tel       | c_id | g_id |
+-----+--------+------+-----------+------+------+
| 101 | 张三   |   23 | 354456354 |    1 | NULL |
| 102 | 王五   |   34 | 4334      |    1 |  101 |
| 103 | 李四   |   32 | 131434    |    3 |  101 |
| 104 | 赵无极 |   23 | 4234      |    2 | NULL |
+-----+--------+------+-----------+------+------+
4 rows in set (0.00 sec)
// 查询age>=23的学生
mysql> select * from student where age >= 23;
+-----+------------+------+-----------+------+------+
| num | name       | age  | tel       | c_id | g_id |
+-----+------------+------+-----------+------+------+
| 101 | 张三       |   23 | 354456354 |    1 | NULL |
| 102 | 王五       |   34 | 4334      |    1 |  101 |
| 103 | 李四       |   32 | 131434    |    3 |  101 |
| 104 | 赵无极     |   23 | 4234      |    2 | NULL |
| 105 | 韩夫子     |   34 | 23        |    2 |  102 |
| 106 | 高俅       |   25 | 42543     |    4 |  103 |
| 107 | 范瑶       |   26 | 2345      | NULL |  104 |
| 108 | 斯巴达克斯 |   27 | 422156    | NULL |  104 |
+-----+------------+------+-----------+------+------+
8 rows in set (0.00 sec)

7.1 UNION ALL

// 使用UNION ALL将上述结果直接合并起来
mysql> select * from student where num<=104 UNION ALL select * from student where age>=23;
+-----+------------+------+-----------+------+------+
| num | name       | age  | tel       | c_id | g_id |
+-----+------------+------+-----------+------+------+
| 101 | 张三       |   23 | 354456354 |    1 | NULL |
| 102 | 王五       |   34 | 4334      |    1 |  101 |
| 103 | 李四       |   32 | 131434    |    3 |  101 |
| 104 | 赵无极     |   23 | 4234      |    2 | NULL |
| 101 | 张三       |   23 | 354456354 |    1 | NULL |
| 102 | 王五       |   34 | 4334      |    1 |  101 |
| 103 | 李四       |   32 | 131434    |    3 |  101 |
| 104 | 赵无极     |   23 | 4234      |    2 | NULL |
| 105 | 韩夫子     |   34 | 23        |    2 |  102 |
| 106 | 高俅       |   25 | 42543     |    4 |  103 |
| 107 | 范瑶       |   26 | 2345      | NULL |  104 |
| 108 | 斯巴达克斯 |   27 | 422156    | NULL |  104 |
+-----+------------+------+-----------+------+------+
12 rows in set (0.00 sec)

7.2 UNION

// 通过UNION ALL只是将结果给合并起来, 里面可能含有重复的;
// 通过UNION可以达到去重的效果; 
mysql> select * from student where num<=104 UNION select * from student where age>=23;
+-----+------------+------+-----------+------+------+
| num | name       | age  | tel       | c_id | g_id |
+-----+------------+------+-----------+------+------+
| 101 | 张三       |   23 | 354456354 |    1 | NULL |
| 102 | 王五       |   34 | 4334      |    1 |  101 |
| 103 | 李四       |   32 | 131434    |    3 |  101 |
| 104 | 赵无极     |   23 | 4234      |    2 | NULL |
| 105 | 韩夫子     |   34 | 23        |    2 |  102 |
| 106 | 高俅       |   25 | 42543     |    4 |  103 |
| 107 | 范瑶       |   26 | 2345      | NULL |  104 |
| 108 | 斯巴达克斯 |   27 | 422156    | NULL |  104 |
+-----+------------+------+-----------+------+------+

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/501224.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《走进对象村6》面向对象的第三大特性——多态

文章目录 &#x1f680;文章导读1.1 多态的概念1.2 多态的实现条件1.3 向上转型和向下转型1.4 重写 **面试问题&#xff1a;重写和重载的区别**多态的实现 &#x1f680;文章导读 在本篇文章中&#xff0c;将会有很多的干货和知识点掌握&#xff0c;希望读者慢慢耐心阅读 在本篇…

如何设定项目中的里程碑?

项目管理中非常重要的就是合理设置阶段性的里程碑&#xff0c;在项目实施过程中&#xff0c;根据里程碑来灵活控制项目进度和节奏。那么一个IT项目该如何合理地安排里程碑呢&#xff1f; 在IT项目管理中&#xff0c;里程碑是一种非常重要的工具&#xff0c;它能够帮助项目经理和…

谈谈架构分层

大家好&#xff0c;我是易安&#xff01; 在系统从0到1的阶段&#xff0c;为了让系统快速上线&#xff0c;我们通常是不考虑分层的。但是随着业务越来越复杂&#xff0c;大量的代码纠缠在一起&#xff0c;会出现逻辑不清晰、各模块相互依赖、代码扩展性差、改动一处就牵一发而动…

IIS6.0和网络管理软件SNMPc

一.IIS6.0 IIS 6.0提供了更为方便的安装/管理功能和增强的应用环境、基于标准的分布协议、改进的性能表现和扩展性&#xff0c;以及更好的稳定性和易用性。其服务组件包括&#xff1a; ①WWW服务。WWW是图形最为丰富的Internet服务。Web具有很强的链接能力&#xff0c;支持协…

软考中级——系统集成项目管理工程师(20天冲刺)

PV:计划价值(计划要成的价值) EV:挣值(实际做了的事儿的价值) AC:实际成本(实际花出去多少钱) SV:进度偏差EV-PV(项目提前或者落后的进度)>0项目进度超前<0项目进度落后 CV:成本偏差EV-AC(项目预算的号空成者盈利)>0成本节约<0成本超支 SPI:进度绩效指数EV/PV(挣值…

创建VUE2 前端以及后端的交互

创建vue2项目 1.javascript–>vue(不要勾选)–>安装element-ui(组件 | Element)–>执行指令&#xff08;npm i element-ui -S&#xff09;–>在main.js中引入&#xff08;import ElementUI from ‘element-ui’; ​ import ‘element-ui/lib/theme-chalk/index.c…

JavaWeb:Web 的基本概念、Tomcat 服务器、Http 详解、Maven 的下载安装步骤、模仿一个 Servlet

文章目录 JavaWeb - 01一、基本概念1、静态 Web2、动态 Web3、Web 应用程序4、三个技术 二、Web 服务器三、Tomcat 详解四、发布一个 Web 网站五、Http 详解1. Http 请求&#xff08;1&#xff09;请求行&#xff08;2&#xff09;消息头 2. Http 响应&#xff08;1&#xff09…

sourceTree离线环境部署

目录 1、下载sourceTree安装包&#xff0c;打开之后弹出注册界面&#xff08;需要去国外网站注册&#xff09;2、使用技术手段跳过注册步骤3、打开安装包进行安装 注&#xff1a;建议提前安装好git 1、下载sourceTree安装包&#xff0c;打开之后弹出注册界面&#xff08;需要去…

27 - 两数、三数、四数问题

文章目录 1. 两数之和2. 三数之和3. 最接近的三数之和4. 四数之和5. 四数相加 1. 两数之和 在遍历数组的时候只需要在map中去查询是否有个目前元素target - numbers[i]匹配的数值&#xff0c;如果有&#xff0c;就找到匹配对&#xff0c;如果没有就把目前遍历的元素放入map中&a…

融合有序,创造无限——解密力扣“合并两个有序数组”

本篇博客会讲解力扣“88. 合并两个有序数组”这道题&#xff0c;这是题目链接。 其实&#xff0c;有经验的朋友一看到这个题目的名字&#xff0c;应该就明白了&#xff0c;这玩意和归并排序脱不了干系。下面我们来审题&#xff1a; 输出示例如下&#xff1a; 以下是一些提…

3.是人就能学会的Spring源码教学-IOC容器的核心实现原理

是人就能学会的Spring源码教学-IOC容器的核心实现原理 我们学习Spring源码的动力&#xff0c;估计大部分人都是因为面试中会问到吧。 那么我们今天就以面试问Spring来开头。 关于Spring&#xff0c;在面试的时候一般会问到的两个最基础的问题。 第一个什么是IOC&#xff1f…

技术控,看这里,一款支持断点调试的数据科学工具

数据科学是一门利用统计学、机器学习、数据挖掘、数据可视化等技术和方法&#xff0c;从数据中提取知识和信息的交叉学科。自上世纪60年代&#xff0c;统计学家John W.Tukey首次提出“数据分析”&#xff08;Data Analysis&#xff09;的概念起&#xff0c;数据科学已历经了几十…

ASEMI代理ADUM131E1BRWZ-RL原装ADI车规级ADUM131E1BRWZ-RL

编辑&#xff1a;ll ASEMI代理ADUM131E1BRWZ-RL原装ADI车规级ADUM131E1BRWZ-RL 型号&#xff1a;ADUM131E1BRWZ-RL 品牌&#xff1a;ADI /亚德诺 封装&#xff1a;SOIC-16-300mil 批号&#xff1a;2023 安装类型&#xff1a;表面贴装型 引脚数量&#xff1a;16 工作温度…

基于springboot的“智慧食堂”设计与实现(源码等)

摘要 随着Internet的发展&#xff0c;人们的日常生活已经离不开网络。未来人们的生活与工作将变得越来越数字化&#xff0c;网络化和电子化。网上管理&#xff0c;它将是直接管理“智慧食堂”系统的最新形式。本xx是以构建“智慧食堂”系统为目标&#xff0c;使用java技术制作…

智能仿写软件-智能伪原创改写软件

智能仿写工具&#xff1a;营销创意的必备利器 在当今快节奏和不断发展的商业环境中&#xff0c;企业营销人员需要在短时间内产生大量有创意和高质量的内容。因此&#xff0c;智能仿写工具作为营销策略的一种创新方法而出现&#xff0c;可以帮助企业的写作团队更快速地生成文章…

【软考数据库】第八章 数据库SQL语言

目录 8.1 SQL语言概述 8.2 数据库定义 8.2.1 创建表(create table) 8.2.2 修改表 (alter table) 8.2.3 删除表 (drop table) 8.2.4 索引 8.2.5 视图 8.3 数据操作 8.3.1 查询语句格式 8.3.2 分组查询 8.3.3 其他操作 8.3.4 约束 8.4 数据授权 8.4.1 授权grant 8…

数据库索引的原理,为什么要用 B+树,为什么不用二 叉树?

1、B树和B树 一般来说&#xff0c;数据库的存储引擎都是采用B树或者B树来实现索引的存储。首先来看B树&#xff0c;如图所士 B树是一种多路平衡树&#xff0c;用这种存储结构来存储大量数据&#xff0c;它的整个高度会相比二叉树来说&#xff0c;会矮很多。 而对于数据库而言…

RFID系统在物流仓储中的应用

RFID系统是一种无线识别技术&#xff0c;最近成为物流仓储行业的热门话题。本文将介绍RFID系统在物流仓储中的应用&#xff0c;包括如何使用RFID标签进行物流管理&#xff0c;如何使用RFID技术提高仓库的安全性&#xff0c;并细述RFID技术在物流仓储中的优势。除此之外&#xf…

ArrayList快速失败机制

文章目录 一、什么是快速失败机制二、例子三、底层原理四、解决方法五、快速失败机制的一个小bug 一、什么是快速失败机制 ArrayList实现了一种称为快速失败(fail-fast)的机制,该机制在并发修改时会抛出ConcurrentModificationException异常。 这种机制的实现原理是:ArrayList…

机器学习案例 | 通过EBG学习概念cup

基于解释的学习(explanation-basedlearning)可简称为解释学习&#xff0c;是20世纪80年代中期开始兴起的一种机器学习方法。解释学习根据任务所在领域知识和正在学习的概念知识&#xff0c;对当前实例进行分析和求解&#xff0c;得出一个表征求解过程的因果解释树&#xff0c;以…