mysql数据库(五)多表查询

news2024/11/14 10:52:50

多表查询

文章目录

  • 多表查询
  • 一、链表查询
    • 1.1交叉连接
    • 1.2 内连接
    • 1.3 左连接
    • 1.4 右连接
    • 1.5 全连接
    • 1.6 例子
  • 二、子查询
    • 2.1 in与not in
    • 2.2 any/some
    • 2.3 all
    • 2.4 比较运算符
    • 2.5 exists
  • 三、例子

查询中使用的表如下所示


+----+--------+
| id | name   |
+----+--------+
|  1 | IT     |
|  2 | 销售   |
|  3 | 运营   |
|  4 | 安保   |
+----+--------+

+----+--------+------+--------+
| id | name   | age  | dep_id |
+----+--------+------+--------+
|  1 | 张三   |   20 |      1 |
|  2 | 李四   |   25 |      3 |
|  3 | 王五   |   30 |      2 |
|  4 | 赵六   |   31 |      2 |
|  5 | 阿七   |   18 |   NULL |
+----+--------+------+--------+

一、链表查询

链表查询的本质是将多张表拼接在一块形成一张新表,再对新表进行查询。
SELECT 字段 FROM 表1 INNER|LEFT|RIGHT JOIN 表2 ON 表1.字段 = 表2.字段;

1.1交叉连接

#交叉连接不能加任何的匹配条件,生成的结果是两张表的笛卡尔积
select * from employee,department;
+----+--------+------+--------+----+--------+
| id | name   | age  | dep_id | id | name   |
+----+--------+------+--------+----+--------+
|  1 | 张三   |   20 |      1 |  4 | 安保   |
|  1 | 张三   |   20 |      1 |  3 | 运营   |
|  1 | 张三   |   20 |      1 |  2 | 销售   |
|  1 | 张三   |   20 |      1 |  1 | IT     |
|  2 | 李四   |   25 |      3 |  4 | 安保   |
|  2 | 李四   |   25 |      3 |  3 | 运营   |
|  2 | 李四   |   25 |      3 |  2 | 销售   |
|  2 | 李四   |   25 |      3 |  1 | IT     |
|  3 | 王五   |   30 |      2 |  4 | 安保   |
|  3 | 王五   |   30 |      2 |  3 | 运营   |
|  3 | 王五   |   30 |      2 |  2 | 销售   |
|  3 | 王五   |   30 |      2 |  1 | IT     |
|  4 | 赵六   |   31 |      2 |  4 | 安保   |
|  4 | 赵六   |   31 |      2 |  3 | 运营   |
|  4 | 赵六   |   31 |      2 |  2 | 销售   |
|  4 | 赵六   |   31 |      2 |  1 | IT     |
|  5 | 阿七   |   18 |   NULL |  4 | 安保   |
|  5 | 阿七   |   18 |   NULL |  3 | 运营   |
|  5 | 阿七   |   18 |   NULL |  2 | 销售   |
|  5 | 阿七   |   18 |   NULL |  1 | IT     |
+----+--------+------+--------+----+--------+

1.2 内连接

#内连接是根据匹配条件将两张表的公共部分连接起来
select * from employee inner join department on employee.dep_id=department.id;
+----+--------+------+--------+----+--------+
| id | name   | age  | dep_id | id | name   |
+----+--------+------+--------+----+--------+
|  1 | 张三   |   20 |      1 |  1 | IT     |
|  2 | 李四   |   25 |      3 |  3 | 运营   |
|  3 | 王五   |   30 |      2 |  2 | 销售   |
|  4 | 赵六   |   31 |      2 |  2 | 销售   |
+----+--------+------+--------+----+--------+

1.3 左连接

#左连接是以左表为基准将右表符合匹配条件的信息拼接到左表,左表中匹配不上的记录会被保留
select * from employee left join department on employee.dep_id=department.id;
+----+--------+------+--------+------+--------+
| id | name   | age  | dep_id | id   | name   |
+----+--------+------+--------+------+--------+
|  1 | 张三   |   20 |      1 |    1 | IT     |
|  2 | 李四   |   25 |      3 |    3 | 运营   |
|  3 | 王五   |   30 |      2 |    2 | 销售   |
|  4 | 赵六   |   31 |      2 |    2 | 销售   |
|  5 | 阿七   |   18 |   NULL | NULL | NULL   |
+----+--------+------+--------+------+--------+

1.4 右连接

#右连接是以右表为基准将左表符合匹配条件的信息拼接到右表,右表中匹配不上的记录会被保留
select * from employee right join department on employee.dep_id=department.id;
+------+--------+------+--------+----+--------+
| id   | name   | age  | dep_id | id | name   |
+------+--------+------+--------+----+--------+
|    1 | 张三   |   20 |      1 |  1 | IT     |
|    4 | 赵六   |   31 |      2 |  2 | 销售   |
|    3 | 王五   |   30 |      2 |  2 | 销售   |
|    2 | 李四   |   25 |      3 |  3 | 运营   |
| NULL | NULL   | NULL |   NULL |  4 | 安保   |
+------+--------+------+--------+----+--------+

1.5 全连接

#全连接是将两张表根据匹配条件拼接记录,同时保留两张表中匹配不到的记录。
#由于mysql不支持full join操作,所以使用union来模拟全连接操作
#union的作用是将两张表合并,这个关键字会自动完成去重、排序等操作。
select * from employee left join department on employee.dep_id=department.id 
union 
select * from employee right join department on employee.dep_id=department.id;
+------+--------+------+--------+------+--------+
| id   | name   | age  | dep_id | id   | name   |
+------+--------+------+--------+------+--------+
|    1 | 张三   |   20 |      1 |    1 | IT     |
|    2 | 李四   |   25 |      3 |    3 | 运营   |
|    3 | 王五   |   30 |      2 |    2 | 销售   |
|    4 | 赵六   |   31 |      2 |    2 | 销售   |
|    5 | 阿七   |   18 |   NULL | NULL | NULL   |
| NULL | NULL   | NULL |   NULL |    4 | 安保   |
+------+--------+------+--------+------+--------+

1.6 例子

#现在需要针对上面的表格查询出销售部门的员工信息并按年龄升序排序
#在链表操作中,如果字段只有某一张表含有,可以直接写字段不用写为表.字段的形式
#如下方order by后的age只有employee有,可以直接写age,不用写为employee.age
select * from employee inner join department on employee.dep_id=department.id 
where department.name='销售' order by age;
+----+--------+------+--------+----+--------+
| id | name   | age  | dep_id | id | name   |
+----+--------+------+--------+----+--------+
|  3 | 王五   |   30 |      2 |  2 | 销售   |
|  4 | 赵六   |   31 |      2 |  2 | 销售   |
+----+--------+------+--------+----+--------+


#查询IT部门的员工姓名、年龄信息
select employee.id,employee.name,age from employee inner join department 
on employee.dep_id=department.id where department.name='IT';
+----+--------+------+
| id | name   | age  |
+----+--------+------+
|  1 | 张三   |   20 |
+----+--------+------+

二、子查询

子查询是指先查询一张表的信息,将查询到的信息作为另一张表的查询条件继续查询,以此重复直到查询出结果。

2.1 in与not in

#查询销售部门的员工信息
#下面的查询语句中先查询department表销售部门的id,再查询dep_id与id一致的员工信息
#需要注意的是如果select后只有一个字段,查询结果返回的是一个集合可以使用in,如果select后是多个字段查询结果是一张表无法使用in
select * from employee where dep_id in (select id from department where name='销售');
+----+--------+------+--------+
| id | name   | age  | dep_id |
+----+--------+------+--------+
|  3 | 王五   |   30 |      2 |
|  4 | 赵六   |   31 |      2 |
+----+--------+------+--------+

#需要注意not in无法处理null
#例如寻找没有员工的部门,由于括号中的查询结果返回集合含有null,not in无法处理以此结果为空
select * from department where id not in (select dep_id from employee);
Empty set (0.00 sec)

#对上述的问题可以这样改进
select * from department where id not in (select dep_id from employee where dep_id is not null);
+----+--------+
| id | name   |
+----+--------+
|  4 | 安保   |
+----+--------+

2.2 any/some

any表示某一个的意思,它与in的区别是any后面必须是查询的结果,不能直接是集合。
mysql中some的用法和any完全一致。
例如select * from t1 where id in (1,2);可以,但是select * from t1 where id=any (1,2);则不行。

#查询每个部门年龄最大的员工
#age=any和age in其实是等价的
#而>any的意思是比集合中某一个大,翻译一下就是比集合中最小的那个大就行,同样的<any的意思是比集合中某一个小,翻译一下就是比集合中最大的那个小就行
select * from employee where age=
any(select max(age) from employee where dep_id is not null group by dep_id);
+----+--------+------+--------+
| id | name   | age  | dep_id |
+----+--------+------+--------+
|  1 | 张三   |   20 |      1 |
|  2 | 李四   |   25 |      3 |
|  4 | 赵六   |   31 |      2 |
+----+--------+------+--------+

2.3 all

all表示所有的意思,all和any一样后面不能直接加集合,只能比较查询结果

#查询年龄比所有部门平均年龄高的员工信息
select * from employee where age>
all(select avg(age) from employee where dep_id is not null group by dep_id);
+----+--------+------+--------+
| id | name   | age  | dep_id |
+----+--------+------+--------+
|  4 | 赵六   |   31 |      2 |
+----+--------+------+--------+

#查询年龄比某一个部门平均年龄高的员工信息
select * from employee where age>
any(select avg(age) from employee where dep_id is not null group by dep_id);
+----+--------+------+--------+
| id | name   | age  | dep_id |
+----+--------+------+--------+
|  2 | 李四   |   25 |      3 |
|  3 | 王五   |   30 |      2 |
|  4 | 赵六   |   31 |      2 |
+----+--------+------+--------+

2.4 比较运算符

比较运算符有=、!=、>、>=、<、<=、<>

#查询年龄比所有员工平均年龄大的员工信息
select * from employee where age>(select avg(age) from employee);
+----+--------+------+--------+
| id | name   | age  | dep_id |
+----+--------+------+--------+
|  2 | 李四   |   25 |      3 |
|  3 | 王五   |   30 |      2 |
|  4 | 赵六   |   31 |      2 |
+----+--------+------+--------+

2.5 exists

exists关字键字表示存在。使用exists时,内层查询语句不返回查询的记录,而是返回一个真假值。当内存查询语句查询到记录时返回True,外层查询语句返回结果,反之则返回False,外层查询语句不返回结果。

exists的执行过程:

  • 依次执外部查询
  • 然后为外部查询返回的每一行分别执行一次子查询
  • 子查询如果返回记录,则exists条件成立,外部查询语句返回结果

下面拿exists和in的执行进行比较,in的子查询会先产生结果集,然后外部查询再去结果集里去找符合要求的字段返回结果。由此可以看出exists的查询效率是远不如in的。

#由于department中没有id=5的记录,使用exists返回False,以此外层的查询语句不执行
select * from employee where exists(select * from department where id=5);
Empty set (0.00 sec)

#查询有部门的员工的员工信息
select * from employee where 
exists(select * from department where employee.dep_id=department.id);
+----+--------+------+--------+
| id | name   | age  | dep_id |
+----+--------+------+--------+
|  1 | 张三   |   20 |      1 |
|  2 | 李四   |   25 |      3 |
|  3 | 王五   |   30 |      2 |
|  4 | 赵六   |   31 |      2 |
+----+--------+------+--------+

三、例子

使用到的表生成代码如下:

/*
 数据导入:
 Navicat Premium Data Transfer

 Source Server         : localhost
 Source Server Type    : MySQL
 Source Server Version : 50624
 Source Host           : localhost
 Source Database       : sqlexam

 Target Server Type    : MySQL
 Target Server Version : 50624
 File Encoding         : utf-8

 Date: 10/21/2016 06:46:46 AM
*/

SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
--  Table structure for `class`
-- ----------------------------
DROP TABLE IF EXISTS `class`;
CREATE TABLE `class` (
  `cid` int(11) NOT NULL AUTO_INCREMENT,
  `caption` varchar(32) NOT NULL,
  PRIMARY KEY (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

-- ----------------------------
--  Records of `class`
-- ----------------------------
BEGIN;
INSERT INTO `class` VALUES ('1', '三年二班'), ('2', '三年三班'), ('3', '一年二班'), ('4', '二年九班');
COMMIT;

-- ----------------------------
--  Table structure for `course`
-- ----------------------------
DROP TABLE IF EXISTS `course`;
CREATE TABLE `course` (
  `cid` int(11) NOT NULL AUTO_INCREMENT,
  `cname` varchar(32) NOT NULL,
  `teacher_id` int(11) NOT NULL,
  PRIMARY KEY (`cid`),
  KEY `fk_course_teacher` (`teacher_id`),
  CONSTRAINT `fk_course_teacher` FOREIGN KEY (`teacher_id`) REFERENCES `teacher` (`tid`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

-- ----------------------------
--  Records of `course`
-- ----------------------------
BEGIN;
INSERT INTO `course` VALUES ('1', '生物', '1'), ('2', '物理', '2'), ('3', '体育', '3'), ('4', '美术', '2');
COMMIT;

-- ----------------------------
--  Table structure for `score`
-- ----------------------------
DROP TABLE IF EXISTS `score`;
CREATE TABLE `score` (
  `sid` int(11) NOT NULL AUTO_INCREMENT,
  `student_id` int(11) NOT NULL,
  `course_id` int(11) NOT NULL,
  `num` int(11) NOT NULL,
  PRIMARY KEY (`sid`),
  KEY `fk_score_student` (`student_id`),
  KEY `fk_score_course` (`course_id`),
  CONSTRAINT `fk_score_course` FOREIGN KEY (`course_id`) REFERENCES `course` (`cid`),
  CONSTRAINT `fk_score_student` FOREIGN KEY (`student_id`) REFERENCES `student` (`sid`)
) ENGINE=InnoDB AUTO_INCREMENT=53 DEFAULT CHARSET=utf8;

-- ----------------------------
--  Records of `score`
-- ----------------------------
BEGIN;
INSERT INTO `score` VALUES ('1', '1', '1', '10'), ('2', '1', '2', '9'), ('5', '1', '4', '66'), ('6', '2', '1', '8'), ('8', '2', '3', '68'), ('9', '2', '4', '99'), ('10', '3', '1', '77'), ('11', '3', '2', '66'), ('12', '3', '3', '87'), ('13', '3', '4', '99'), ('14', '4', '1', '79'), ('15', '4', '2', '11'), ('16', '4', '3', '67'), ('17', '4', '4', '100'), ('18', '5', '1', '79'), ('19', '5', '2', '11'), ('20', '5', '3', '67'), ('21', '5', '4', '100'), ('22', '6', '1', '9'), ('23', '6', '2', '100'), ('24', '6', '3', '67'), ('25', '6', '4', '100'), ('26', '7', '1', '9'), ('27', '7', '2', '100'), ('28', '7', '3', '67'), ('29', '7', '4', '88'), ('30', '8', '1', '9'), ('31', '8', '2', '100'), ('32', '8', '3', '67'), ('33', '8', '4', '88'), ('34', '9', '1', '91'), ('35', '9', '2', '88'), ('36', '9', '3', '67'), ('37', '9', '4', '22'), ('38', '10', '1', '90'), ('39', '10', '2', '77'), ('40', '10', '3', '43'), ('41', '10', '4', '87'), ('42', '11', '1', '90'), ('43', '11', '2', '77'), ('44', '11', '3', '43'), ('45', '11', '4', '87'), ('46', '12', '1', '90'), ('47', '12', '2', '77'), ('48', '12', '3', '43'), ('49', '12', '4', '87'), ('52', '13', '3', '87');
COMMIT;

-- ----------------------------
--  Table structure for `student`
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `sid` int(11) NOT NULL AUTO_INCREMENT,
  `gender` char(1) NOT NULL,
  `class_id` int(11) NOT NULL,
  `sname` varchar(32) NOT NULL,
  PRIMARY KEY (`sid`),
  KEY `fk_class` (`class_id`),
  CONSTRAINT `fk_class` FOREIGN KEY (`class_id`) REFERENCES `class` (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;

-- ----------------------------
--  Records of `student`
-- ----------------------------
BEGIN;
INSERT INTO `student` VALUES ('1', '男', '1', '理解'), ('2', '女', '1', '钢蛋'), ('3', '男', '1', '张三'), ('4', '男', '1', '张一'), ('5', '女', '1', '张二'), ('6', '男', '1', '张四'), ('7', '女', '2', '铁锤'), ('8', '男', '2', '李三'), ('9', '男', '2', '李一'), ('10', '女', '2', '李二'), ('11', '男', '2', '李四'), ('12', '女', '3', '如花'), ('13', '男', '3', '刘三'), ('14', '男', '3', '刘一'), ('15', '女', '3', '刘二'), ('16', '男', '3', '刘四');
COMMIT;

-- ----------------------------
--  Table structure for `teacher`
-- ----------------------------
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher` (
  `tid` int(11) NOT NULL AUTO_INCREMENT,
  `tname` varchar(32) NOT NULL,
  PRIMARY KEY (`tid`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

-- ----------------------------
--  Records of `teacher`
-- ----------------------------
BEGIN;
INSERT INTO `teacher` VALUES ('1', '张磊老师'), ('2', '李平老师'), ('3', '刘海燕老师'), ('4', '朱云海老师'), ('5', '李杰老师');
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;

例子中表的结构如下所示:
在这里插入图片描述
现在需要针对表中的数据进行如下的操作:

#查询物理课程比生物课程高的学生的学号
select b.student_id from 
(select student_id,num as biology from score where course_id in
(select cid from course where cname='生物')) as b 
inner join 
(select student_id,num as physcis from score where course_id in
(select cid from course where cname='物理')) as p 
on b.student_id=p.student_id 
where b.biology<p.physcis;
+------------+
| student_id |
+------------+
|          6 |
|          7 |
|          8 |
+------------+

#查询挂科超过两门(包括两门)的学生姓名和班级
select sname,caption from class inner join student on cid=sid where sid in
(select student_id from score where num<60 group by student_id having count(num)>=2);
+--------+--------------+
| sname  | caption      |
+--------+--------------+
| 理解   | 三年二班     |
+--------+--------------+

#查询所有选修了学号为1的同学选修过的一门或者多门课程的同学学号和姓名;
select distinct sname,student.sid from student inner join score on student_id=student.sid 
where course_id in(select course_id from score where student_id=1) and student_id!=1;
+--------+-----+
| sname  | sid |
+--------+-----+
| 钢蛋   |   2 |
| 张三   |   3 |
| 张一   |   4 |
| 张二   |   5 |
| 张四   |   6 |
| 铁锤   |   7 |
| 李三   |   8 |
| 李一   |   9 |
| 李二   |  10 |
| 李四   |  11 |
| 如花   |  12 |
+--------+-----+

#查询在所有选修了李平老师课程的学生中,这些课程(李平老师的课程,不是所有课程)平均成绩最高的学生姓名
select sname,avg(num) from student inner join score on student.sid=student_id where course_id 
in((select cid from course inner join teacher on tid=teacher_id where tname='李平老师')) 
group by sname order by avg(num) desc limit 1;
+--------+----------+
| sname  | avg(num) |
+--------+----------+
| 张四   | 100.0000 |
+--------+----------+

#查询不同课程但成绩相同的学号,课程号,成绩
select s1.student_id,s1.course_id,s1.num,s2.student_id,s2.course_id,s2.num 
from score as s1,score as s2 
where s1.num=s2.num and s1.course_id!=s2.course_id;
+------------+-----------+-----+------------+-----------+-----+
| student_id | course_id | num | student_id | course_id | num |
+------------+-----------+-----+------------+-----------+-----+
|          8 |         1 |   9 |          1 |         2 |   9 |
|          7 |         1 |   9 |          1 |         2 |   9 |
|          6 |         1 |   9 |          1 |         2 |   9 |
|          3 |         2 |  66 |          1 |         4 |  66 |
|         12 |         2 |  77 |          3 |         1 |  77 |
|         11 |         2 |  77 |          3 |         1 |  77 |
|         10 |         2 |  77 |          3 |         1 |  77 |
|          1 |         4 |  66 |          3 |         2 |  66 |
|         12 |         4 |  87 |          3 |         3 |  87 |
|         11 |         4 |  87 |          3 |         3 |  87 |
|         10 |         4 |  87 |          3 |         3 |  87 |
|          8 |         2 | 100 |          4 |         4 | 100 |
|          7 |         2 | 100 |          4 |         4 | 100 |
|          6 |         2 | 100 |          4 |         4 | 100 |
|          8 |         2 | 100 |          5 |         4 | 100 |
|          7 |         2 | 100 |          5 |         4 | 100 |
|          6 |         2 | 100 |          5 |         4 | 100 |
|          1 |         2 |   9 |          6 |         1 |   9 |
|          6 |         4 | 100 |          6 |         2 | 100 |
|          5 |         4 | 100 |          6 |         2 | 100 |
|          4 |         4 | 100 |          6 |         2 | 100 |
|          8 |         2 | 100 |          6 |         4 | 100 |
|          7 |         2 | 100 |          6 |         4 | 100 |
|          6 |         2 | 100 |          6 |         4 | 100 |
|          1 |         2 |   9 |          7 |         1 |   9 |
|          6 |         4 | 100 |          7 |         2 | 100 |
|          5 |         4 | 100 |          7 |         2 | 100 |
|          4 |         4 | 100 |          7 |         2 | 100 |
|          9 |         2 |  88 |          7 |         4 |  88 |
|          1 |         2 |   9 |          8 |         1 |   9 |
|          6 |         4 | 100 |          8 |         2 | 100 |
|          5 |         4 | 100 |          8 |         2 | 100 |
|          4 |         4 | 100 |          8 |         2 | 100 |
|          9 |         2 |  88 |          8 |         4 |  88 |
|          8 |         4 |  88 |          9 |         2 |  88 |
|          7 |         4 |  88 |          9 |         2 |  88 |
|          3 |         1 |  77 |         10 |         2 |  77 |
|         13 |         3 |  87 |         10 |         4 |  87 |
|          3 |         3 |  87 |         10 |         4 |  87 |
|          3 |         1 |  77 |         11 |         2 |  77 |
|         13 |         3 |  87 |         11 |         4 |  87 |
|          3 |         3 |  87 |         11 |         4 |  87 |
|          3 |         1 |  77 |         12 |         2 |  77 |
|         13 |         3 |  87 |         12 |         4 |  87 |
|          3 |         3 |  87 |         12 |         4 |  87 |
|         12 |         4 |  87 |         13 |         3 |  87 |
|         11 |         4 |  87 |         13 |         3 |  87 |
|         10 |         4 |  87 |         13 |         3 |  87 |
+------------+-----------+-----+------------+-----------+-----+

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

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

相关文章

06.VSCODE:备战大项目,CMake专项配置

娇小灵活的简捷配置不过是年轻人谈情说爱的玩具&#xff0c;帝国大厦的构建&#xff0c;终归要交给CMake去母仪天下。一个没有使用 CMake 的 C 项目&#xff0c;就像未来世界里的一台相声表演&#xff0c;有了德纲却无谦&#xff0c;观众笑着遗憾。—— 语出《双城记》作者&…

jmeter常用配置元件介绍总结之后置处理器

系列文章目录 安装jmeter jmeter常用配置元件介绍总结之后置处理器 8.后置处理器8.1.CSS/JQuery提取器8.2.JSON JMESPath Extractor8.3.JSON提取器8.4.正则表达式提取器8.5.边界提取器8.5.Debug PostProcessor8.6.XPath2 Extractor8.7.XPath提取器8.8.结果状态处理器 8.后置处理…

淘宝/天猫按图搜索商品:taobao.item_search_img API的奇幻之旅

在这个看脸的时代&#xff0c;我们不仅对人要看颜值&#xff0c;连买东西都要“看脸”了。没错&#xff0c;我说的就是淘宝/天猫的按图搜索商品功能——taobao.item_search_img API。这个功能就像是电商平台的“人脸识别”&#xff0c;只不过它认的是商品的颜值。下面&#xff…

豆包MarsCode算法题:数组元素之和最小化

数组元素之和最小化 问题描述思路分析分析思路解决方案 参考代码&#xff08;Python&#xff09;代码分析1. solution 函数2. 计算 1 2 3 ... n 的和3. 乘以 k 得到最终的数组元素之和4. 主程序&#xff08;if __name__ __main__:&#xff09;代码的时间复杂度分析&#x…

已有账号,重装系统激活office后发现没有ppt,word,excel等

有时候重装系统后&#xff0c;登录windows结果右键没有word,excel等 点击进入office 进入右边的账户 找到设备和订阅 直接下载office 安装后就会出现了

【数据结构与算法】第12课—数据结构之归并排序

文章目录 1. 归并排序2. 计数排序3. 排序算法复杂度及稳定性分析在这里插入图片描述 1. 归并排序 分治法&#xff08;Divide and Conquer&#xff09;是一种重要的算法设计策略&#xff0c;其核心思想是将一个复杂的大问题分解为若干个小规模的子问题&#xff0c;递归地解决这些…

shell 100例

1、每天写一个文件 (题目要求&#xff09; 请按照这样的日期格式(xxxx-xx-xx每日生成一个文件 例如生成的文件为2017-12-20.log&#xff0c;并且把磁盘的使用情况写到到这个文件中不用考虑cron&#xff0c;仅仅写脚本即可 [核心要点] date命令用法 df命令 知识补充&#xff1…

微信公众平台申请(测试平台)

登录平台 微信公众平台 注册信息 回调路径不知道怎么填可以先不填&#xff0c;等写完项目就知道调用那个路径了 这样就注册好了

云原生-docker安装与基础操作

一、云原生 Docker 介绍 Docker 在云原生中的优势 二、docker的安装 三、docker的基础命令 1. docker pull&#xff08;拉取镜像&#xff09; 2. docker images&#xff08;查看本地镜像&#xff09; 3. docker run&#xff08;创建并启动容器&#xff09; 4. docker ps…

Qt 编写插件plugin,支持接口定义信号

https://blog.csdn.net/u014213012/article/details/122434193?spm1001.2014.3001.5506 本教程基于该链接的内容进行升级&#xff0c;在编写插件的基础上&#xff0c;支持接口类定义信号。 环境&#xff1a;Qt5.12.12 MSVC2017 一、创建项目 新建一个子项目便于程序管理【…

社会信任数据 NGO、CGSS、献血量(2000-2021)

非政府组织&#xff08;NGO&#xff09;是指在地方、国家或国际级别上组织起来的非营利性的、志愿性的公民组织。在中国&#xff0c;NGO通常被称为民间组织&#xff0c;包括社会团体、民办非企业单位和基金会。 2000年-2021年社会信任数据&#xff08;NGO、CGSS、献血量&#…

Odoo:免费开源的流程制造行业ERP管理系统

概述 聚焦流程制造连续性生产的特性&#xff0c;提供集成PLMERPMESBI的一体化解决方案&#xff0c;涵盖计划、生产、质量、配方、供销、库存、成本、设备、资金管理等业务领域的整体性解决方案 行业的最新洞察&行业典型痛点 一、生产过程需要精细化控制 需要在各种制约…

D3的竞品有哪些,D3的优势,D3和echarts的对比

D3 的竞品 ECharts: 简介: ECharts 是由百度公司开发的一款开源的 JavaScript 图表库&#xff0c;提供了丰富的图表类型和高度定制化的配置选项。特点: 易于使用&#xff0c;文档详尽&#xff0c;社区活跃&#xff0c;支持多种图表类型&#xff08;如折线图、柱状图、饼图、散点…

使用nossl模式连接MySQL数据库详解

使用nossl模式连接MySQL数据库详解 摘要一、引言二、nossl模式概述2.1 SSL与nossl模式的区别2.2 选择nossl模式的场景三、在nossl模式下连接MySQL数据库3.1 准备工作3.2 C++代码示例3.3 代码详解3.3.1 初始化MySQL连接对象3.3.2 连接到MySQL数据库3.3.3 执行查询操作3.3.4 处理…

C/C++内存管理 | new的机制 | 重载自己的operator new

一、C/C内存分布 1. 内存分区 栈又叫堆栈–非静态局部变量/函数参数/返回值等等&#xff0c;栈是向下增长的。内存映射段是高效的I/O映射方式&#xff0c;用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存&#xff0c;做进程间通信 .堆用于程序运行时动态内…

小面馆叫号取餐流程 佳易王面馆米线店点餐叫号管理系统操作教程

一、概述 【软件资源文件下载在文章最后】 小面馆叫号取餐流程 佳易王面馆米线店点餐叫号管理系统操作教程 点餐软件以其实用的功能和简便的操作&#xff0c;为小型餐饮店提供了高效的点餐管理解决方案&#xff0c;提高了工作效率和服务质量 ‌点餐管理‌&#xff1a;支持电…

单体架构 IM 系统之 Server 节点状态化分析

基于 http 短轮询模式的单体架构的 IM 系统见下图&#xff0c;即客户端通过 http 周期性地轮询访问 server 实现消息的即时通讯&#xff0c;也就是我们前面提到的 “信箱模型”。“信箱模型” 虽然实现非常容易&#xff0c;但是消息的实时性不高。 我们在上一篇文章&#xff08…

大语言模型理论基础

文章目录 前言大语言模型必需知识概述大语言模型目标模型上下文神经网络的神经元常见激活函数SigmoidTanhRelusoftmax 通用近似定理多层感知机&#xff08;MLP&#xff09;拟合最后 前言 你好&#xff0c;我是醉墨居士&#xff0c;我们接下来对大语言模型一探究竟&#xff0c;…

37.安卓逆向-壳-smali语法1

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;图灵Python学院 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要盲目相信。第一…

Arduino IDE Windows 系统 离线安装 esp32 开发板 亲测好用。

1、前提条件需要具备特殊网络。 2、官方文档地址&#xff1a;Installing - - — Arduino ESP32 latest documentation 3、系统&#xff1a;Windows10 Arduino IDE 版本2.3.3 之前安装的esp32开发板的版本是2.0.13&#xff0c;由于之前没有接触过esp32开发&#xff0c;也没…