Linux云计算 |【第四阶段】RDBMS1-DAY3
主要内容:
子查询(单行单列、多行单列、单行多列、多行多列)、分页查询limit、联合查询union、插入语句、修改语句、删除语句
一、子查询
子查询就是指的在一个完整的查询语句之中,嵌套若干个不同功能的小查询,从而一起完成复杂查询的一种编写形式;
1)子查询返回的数据分类
- 单行单列:返回的是一个具体列的内容,可以理解为一个单值数据
- 单行多列:返回一行数据中多个列的内容
- 多行单列:返回多行记录之中同一列的内容,相当于给出了一个操作范围
- 多行多列:查询返回的结果是一张临时表
2)子查询常出现的位置
- select之后:仅支持单行单列
- from之后:支持多行多列
- where或having之后:支持单行单列、单行多列、多行单列
子查询应用实例
1)单行单列
例如:查询运维部所有员工信息
① 分析:首先从departments部门表中查出运维部的编号
mysql> select dept_id from departments where dept_name='运维部';
+---------+
| dept_id |
+---------+
|       3 |
+---------+
1 row in set (0.00 sec)② 组合:再从employees员工表中查找该部门编号和运维部编号相同的员工;
mysql> select * from employees -> where dept_id=(select dept_id from departments where dept_name='运维部');
+-------------+-----------+------------+------------+--------------------+--------------+---------+
| employee_id | name      | hire_date  | birth_date | email              | phone_number | dept_id |
+-------------+-----------+------------+------------+--------------------+--------------+---------+
|          14 | 廖娜      | 2012-05-20 | 1982-06-22 | liaona@tarena.com  | 15827928192  |       3 |
|          15 | 窦红梅    | 2018-03-16 | 1971-09-09 | douhongmei@tedu.cn | 15004739483  |       3 |
|          16 | 聂想      | 2018-09-09 | 1999-06-05 | niexiang@tedu.cn   | 15501892446  |       3 |
|          17 | 陈阳      | 2004-09-16 | 1991-04-10 | chenyang@tedu.cn   | 15565662056  |       3 |
|          18 | 戴璐      | 2001-11-30 | 1975-05-16 | dailu@tedu.cn      | 13465236095  |       3 |
|          19 | 陈斌      | 2019-07-04 | 2000-01-22 | chenbin@tarena.com | 13621656037  |       3 |
+-------------+-----------+------------+------------+--------------------+--------------+---------+
6 rows in set (0.00 sec)例如:查询2018年12月所有比100号员工基本工资高的工资信息
① 分析:首先查询2018年12月100号员工的基本工资
mysql> select basic from salary-> WHERE YEAR(date)=2018 and MONTH(date)=12 and employee_id=100;
+-------+
| basic |
+-------+
| 14585 |
+-------+
1 row in set (0.00 sec)② 组合:再查询2018年12月所有比100号员工基本工资高的工资信息
mysql> select employee_id,date,basic from salary-> where YEAR(date)=2018 and MONTH(date)=12-> and basic>(select basic from salary WHERE YEAR(date)=2018 and MONTH(date)=12 and employee_id=100);
+-------------+------------+-------+
| employee_id | date       | basic |
+-------------+------------+-------+
|           1 | 2018-12-10 | 17016 |
|           2 | 2018-12-10 | 20662 |
|           4 | 2018-12-10 | 17016 |
|         127 | 2018-12-10 | 17016 |
+-------------+------------+-------+
65 rows in set (0.00 sec)③ 扩展:通过内连接,查询2018年12月所有比100号员工基本工资高的工资信息
mysql> select s.employee_id,date,basic,name from salary s-> inner join employees e-> on s.employee_id = e.employee_id-> where year(date)=2018 and month(date)=12 and basic > (-> select basic from salary where year(date)=2018 and month(date)=12 and employee_id=100);
+-------------+------------+-------+-----------+
| employee_id | date       | basic | name      |
+-------------+------------+-------+-----------+
|           1 | 2018-12-10 | 17016 | 梁伟      |
|           2 | 2018-12-10 | 20662 | 郭岩      |
|           4 | 2018-12-10 | 17016 | 张健      |
|         127 | 2018-12-10 | 17016 | 李瑞      |
+-------------+------------+-------+-----------+
65 rows in set (0.00 sec)例如:查询部门员工人数比开发部人数少的部门
① 分析1:首先从departments表中查询开发部的编号
mysql> select dept_id from departments where dept_name='开发部';
+---------+
| dept_id |
+---------+
|       4 |
+---------+
1 row in set (0.00 sec)② 组合:再从employees表中查询并统计开发部的员工人数
mysql> select count(*) from employees where dept_id=(-> select dept_id from departments where dept_name='开发部');
+----------+
| count(*) |
+----------+
|       55 |
+----------+
1 row in set (0.00 sec)③ 分析2:分组查询各部门人数
mysql> select dept_id,count(*) from employees group by dept_id;
+---------+----------+
| dept_id | count(*) |
+---------+----------+
|       1 |        8 |
|       2 |        5 |
|       3 |        6 |
|       4 |       55 |
|       5 |       12 |
|       6 |        9 |
|       7 |       35 |
|       8 |        3 |
|       9 |        3 |
+---------+----------+
9 rows in set (0.00 sec)④ 组合:查询部门员工人数比开发部人数少的部门
mysql> select dept_id,COUNT(*) from employees group by dept_id-> having count(*) < (select count(*) from employees -> WHERE dept_id=(select dept_id from departments where dept_name='开发部'));
+---------+----------+
| dept_id | COUNT(*) |
+---------+----------+
|       1 |        8 |
|       2 |        5 |
|       3 |        6 |
|       5 |       12 |
|       6 |        9 |
|       7 |       35 |
|       8 |        3 |
+---------+----------+
7 rows in set (0.00 sec)例如:查询每个部门的人数,显示部门ID,部门名字,及人数总数(别名amount)
① 分析:查询所有部门的信息
mysql> select d.* from departments as d;
+---------+-----------+
| dept_id | dept_name |
+---------+-----------+
|       1 | 人事部    |
|       2 | 财务部    |
|       3 | 运维部    |
|       4 | 开发部    |
|       5 | 测试部    |
|       6 | 市场部    |
|       7 | 销售部    |
|       8 | 法务部    |
|       9 | NULL      |
+---------+-----------+
9 rows in set (0.00 sec)② 组合:查询每个部门的人数
mysql> select d.*, (->  select count(*) from employees as e->  where d.dept_id=e.dept_id-> ) as amount-> from departments as d;
+---------+-----------+--------+
| dept_id | dept_name | amount |
+---------+-----------+--------+
|       1 | 人事部    |      8 |
|       2 | 财务部    |      5 |
|       3 | 运维部    |      6 |
|       4 | 开发部    |     55 |
|       5 | 测试部    |     12 |
|       6 | 市场部    |      9 |
|       7 | 销售部    |     35 |
|       8 | 法务部    |      3 |
|       9 | NULL      |      0 |
+---------+-----------+--------+
9 rows in set (0.00 sec)扩展:通过内连接,实现查询每个部门的人数(结果相同)
mysql> select d.dept_id,d.dept_name,count(*) from employees e-> inner join departments d-> on e.dept_id = d.dept_id-> group by dept_id ;2)多行多列
例如:查询人事部和财务部员工信息
方法1:
① 分析:查询人事部和财务部部门编号
mysql> select dept_id from departments where dept_name='人事部';
mysql> select dept_id from departments where dept_name='财务部';② 组合:查询部门编号是两个部门编号的员工信息
mysql> select employee_id,name from employees-> where dept_id=(select dept_id from departments where dept_name='人事部') or-> dept_id=(select dept_id from departments where dept_name='财务部');- 方法2:
① 分析:查询人事部和财务部部门编号
mysql> select dept_id from departments where dept_name in ('人事部','财务部');
+---------+
| dept_id |
+---------+
|       1 |
|       2 |
+---------+
2 rows in set (0.00 sec)② 组合:查询部门编号是两个部门编号的员工信息
mysql> select employee_id,name from employees-> where dept_id in (select dept_id from departments where dept_name in ('人事部','财务部'));
+-------------+-----------+
| employee_id | name      |
+-------------+-----------+
|           1 | 梁伟      |
|           2 | 郭岩      |
|           3 | 李玉英    |
|           4 | 张健      |
|           5 | 郑静      |
|           6 | 牛建军    |
|           7 | 刘斌      |
|           8 | 汪云      |
|           9 | 张建平    |
|          10 | 郭娟      |
|          11 | 郭兰英    |
|          12 | 王英      |
|          13 | 王楠      |
+-------------+-----------+
13 rows in set (0.00 sec)例如:查询人事部2018年12月所有员工工资
① 分析:查询人事部部门编号
mysql> select dept_id from departments where dept_name='人事部';
+---------+
| dept_id |
+---------+
|       1 |
+---------+
1 row in set (0.00 sec)② 分析:查询人事部人员的编号
mysql> select employee_id from employees-> where dept_id=(select dept_id from departments where dept_name='人事部');
+-------------+
| employee_id |
+-------------+
|           1 |
|           2 |
|           3 |
|           4 |
|           5 |
|           6 |
|           7 |
|           8 |
+-------------+
8 rows in set (0.00 sec)③ 组合:查询人事部所有员工2018年12月的工资
mysql> select * from salary-> where year(date)=2018 and month(date)=12 and employee_id in (-> select employee_id from employees-> where dept_id=(select dept_id from departments where dept_name='人事部')-> );
+------+------------+-------------+-------+-------+
| id   | date       | employee_id | basic | bonus |
+------+------------+-------------+-------+-------+
| 6252 | 2018-12-10 |           1 | 17016 |  7000 |
| 6253 | 2018-12-10 |           2 | 20662 |  9000 |
| 6254 | 2018-12-10 |           3 |  9724 |  8000 |
| 6255 | 2018-12-10 |           4 | 17016 |  2000 |
| 6256 | 2018-12-10 |           5 | 17016 |  3000 |
| 6257 | 2018-12-10 |           6 | 17016 |  1000 |
| 6258 | 2018-12-10 |           7 | 23093 |  4000 |
| 6259 | 2018-12-10 |           8 | 23093 |  2000 |
+------+------------+-------------+-------+-------+
8 rows in set (0.00 sec)扩展:通过内连接,查询人事部2018年12月所有员工工资
mysql> select date,name,basic from salary as s-> inner join employees as e-> on s.employee_id = e.employee_id-> WHERE year(date)=2018 AND MONTH(date)=12 AND s.employee_id in(-> select employee_id from employees where dept_id=(select dept_id from departments where dept_name='人事部')-> );
+------------+-----------+-------+
| date       | name      | basic |
+------------+-----------+-------+
| 2018-12-10 | 梁伟      | 17016 |
| 2018-12-10 | 郭岩      | 20662 |
| 2018-12-10 | 李玉英    |  9724 |
| 2018-12-10 | 张健      | 17016 |
| 2018-12-10 | 郑静      | 17016 |
| 2018-12-10 | 牛建军    | 17016 |
| 2018-12-10 | 刘斌      | 23093 |
| 2018-12-10 | 汪云      | 23093 |
+------------+-----------+-------+
8 rows in set (0.00 sec)3)单行多列
例如:查找2018年12月基本工资和奖金都是最高的工资信息
① 分析:查询2018年12月最高的基本工资
mysql> select max(basic) from salary-> where year(date)=2018 and month(date)=12;
+------------+
| max(basic) |
+------------+
|      25524 |
+------------+
1 row in set (0.00 sec)② 分析:查询2018年12月最高的奖金
mysql> select max(bonus) from salary-> where year(date)=2018 and month(date)=12;
+------------+
| max(bonus) |
+------------+
|      11000 |
+------------+
1 row in set (0.00 sec)③ 组合:查找2018年12月基本工资和奖金都是最高的工资信息
mysql> select * from salary-> where year(date)=2018 and month(date)=12-> and basic = (select max(basic) from salary where year(date)=2018 and month(date)=12)-> and bonus = (select max(bonus) from salary where year(date)=2018 and month(date)=12);
+------+------------+-------------+-------+-------+
| id   | date       | employee_id | basic | bonus |
+------+------------+-------------+-------+-------+
| 6368 | 2018-12-10 |         117 | 25524 | 11000 |
+------+------------+-------------+-------+-------+
1 row in set (0.01 sec)4)多行多列
例如:查询3号部门及其部门内员工的编号、名字和email
① 分析:使用内连接,查询3号部门和员工的所有信息
mysql> select d.dept_name, e.* from departments as d-> inner join employees as e-> on d.dept_id=e.dept_id;② 分析:将上述结果当成一张临时表,必须为其起别名。再从该临时表中查询
mysql> select dept_id, dept_name, employee_id, name, email-> from (-> select d.dept_name, e.* from departments as d-> inner join employees as e-> on d.dept_id=e.dept_id ) as tmp_table-> where dept_id=3;
+---------+-----------+-------------+-----------+--------------------+
| dept_id | dept_name | employee_id | name      | email              |
+---------+-----------+-------------+-----------+--------------------+
|       3 | 运维部    |          14 | 廖娜      | liaona@tarena.com  |
|       3 | 运维部    |          15 | 窦红梅    | douhongmei@tedu.cn |
|       3 | 运维部    |          16 | 聂想      | niexiang@tedu.cn   |
|       3 | 运维部    |          17 | 陈阳      | chenyang@tedu.cn   |
|       3 | 运维部    |          18 | 戴璐      | dailu@tedu.cn      |
|       3 | 运维部    |          19 | 陈斌      | chenbin@tarena.com |
+---------+-----------+-------------+-----------+--------------------+
6 rows in set (0.00 sec)扩展:直接使用内连接,增加where条件判断实现如上案例
mysql> select employee_id,name,email,dept_name from employees e-> inner join departments d-> on e.dept_id = d.dept_id-> where e.dept_id=3;
+-------------+-----------+--------------------+-----------+
| employee_id | name      | email              | dept_name |
+-------------+-----------+--------------------+-----------+
|          14 | 廖娜      | liaona@tarena.com  | 运维部    |
|          15 | 窦红梅    | douhongmei@tedu.cn | 运维部    |
|          16 | 聂想      | niexiang@tedu.cn   | 运维部    |
|          17 | 陈阳      | chenyang@tedu.cn   | 运维部    |
|          18 | 戴璐      | dailu@tedu.cn      | 运维部    |
|          19 | 陈斌      | chenbin@tarena.com | 运维部    |
+-------------+-----------+--------------------+-----------+
6 rows in set (0.00 sec)二、分页查询
使用SELECT查询时,当结果集数据量很大,比如几万行数据,放在一个页面显示的话数据量太大,若通过分页显示,每次显示100条,可减缓阅读数据压力;要实现分页功能,实际上就是从结果集中显示第1至100条记录作为第1页,显示第101至200条记录作为第2页,以此类推;
- 分页:从结果集中“截取”出第M至N条记录。这个查询可以通过`LIMIT , 子句实现;
- 起始索引从0开始;
- 每页显示内容速算:`LIMIT (PAGE-1)*SIZE, SIZE`;
例如:按employee_id升序排序,取出前5位员姓名
mysql> select employee_id,name from employees-> order by employee_id-> LIMIT 0,5;
+-------------+-----------+
| employee_id | name      |
+-------------+-----------+
|           1 | 梁伟      |
|           2 | 郭岩      |
|           3 | 李玉英    |
|           4 | 张健      |
|           5 | 郑静      |
+-------------+-----------+
5 rows in set (0.00 sec)例如:按employee_id升序排序,取出6号至8号员姓名
mysql> select employee_id,name from employees-> order by employee_id-> LIMIT 5,3;
+-------------+-----------+
| employee_id | name      |
+-------------+-----------+
|           6 | 牛建军    |
|           7 | 刘斌      |
|           8 | 汪云      |
+-------------+-----------+
3 rows in set (0.00 sec)三、联合查询UNION(相当于全外连接)
作用:将多条select语句的结果,合并到一起,称之为联合操作。
语法:( ) UNION ( );
要求查询时,多个select语句的检索到的字段数量必须一致
每一条记录的各字段类型和顺序最好是一致的
UNION关键字默认去重,可以使用UNION ALL包含重复项
例如:
mysql> (select 'yes') union (select 'yes');
+-----+
| yes |
+-----+
| yes |
+-----+
1 row in set (0.00 sec)mysql> (select 'yes') union all (select 'yes');
+-----+
| yes |
+-----+
| yes |
| yes |
+-----+
2 rows in set (0.00 sec)例如:查询1972年前或2000年出生的员工(两种方法,查询结果数量相同)
- 普通方法:(过滤)
mysql> select name,birth_date from employees
-> where year(birth_date)<1972 or year(birth_date)=2000;- 联合查询方法:(拼接)
mysql> (select name,birth_date from employees where year(birth_date)<1972) UNION
-> (select name,birth_date from employees where year(birth_date)=2000);四、插入语句
1、不指定字段名的插入
- 格式:INSERT INTO VALUES (值1, 值2,....);
- 格式:INSERT INTO VALUES (值1, 值2,....) , (值1, 值2,....) ...;
- 支持多行VALUES插入
注意事项:
① 需要为所有的字段指定值;
② 值的顺序必须与表中字段的顺序一致;
③ 字符类型的字段,要用引号 “ ” 括起来;
例如:给departments表中插入VALUES值(dept_id,dept_name)
mysql> insert into departments values(10, '行政部');
Query OK, 1 row affected (0.01 sec)常见报错:表中已有dept_id为1号部门,再插入则出错(dept_id是主键,不允许重复)
mysql> insert into departments values(1, '行政部');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'例如:给employees表中插入VALUES值(employee_id,name,hire_date,birth_date,email,phone_number,dept_id)
mysql> insert into employees values-> (134, '张三', '2019-5-10', '2000-10-12', 'zhangsan@tedu.cn', '15088772354', 9),-> (135, '李四', '2020-8-20', '1999-6-23', 'lisi@tedu.cn', '13323458734', 9);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 02、指定字段名的插入
- 格式:INSERT INTO (字段1,字段2,...) VALUES (值1,值2,....);
- 格式:INSERT INTO (字段1,字段2,...) VALUES (值1,值2,....) , (值1,值2,....);
- 若设置主键是自动增长的,可以不指定主键的值
- 支持子查询插入
注意事项:
① 字段和值的顺序要一致(字段1,字段2)-->(值1,值2)
② 字段名先后顺序不重要
③ 没有赋值的字段使用默认值或自增长赋值
例如:给departments表中插入VALUES值(dept_id,dept_name),字段先后顺序不重要
mysql> insert into departments (dept_name, dept_id) values ('售后部', 11);
Query OK, 1 row affected (0.00 sec)例如:主键由于是自动增长的【auto_increment】,可以不指定主键的值
mysql> desc departments;
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| dept_id   | int(4)      | NO   | PRI | NULL    | auto_increment |
| dept_name | varchar(10) | YES  |     | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)mysql> insert into departments (dept_name) values ('咨询部');
Query OK, 1 row affected (0.00 sec)例如:支持子查询插入
mysql> insert into employees-> (name,hire_date,birth_date,email,phone_number,dept_id)-> (-> select name,hire_date,birth_date,email,phone_number,dept_id from employees-> where name='张三'-> );
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0
3、使用Set语句
- 格式:INSERT INTO SET 字段名1=字段值1, 字段名2=字段值2, ...;
例如:
mysql> insert into departments set dept_name='采购部';   //dept_id自动递增
Query OK, 1 row affected (0.00 sec)
mysql> select * from departments;
+---------+-----------+
| dept_id | dept_name |
+---------+-----------+
|       1 | 人事部    |
|       2 | 财务部    |
|       3 | 运维部    |
|       4 | 开发部    |
|       5 | 测试部    |
|       6 | 市场部    |
|       7 | 销售部    |
|       8 | 法务部    |
|       9 | Null     |
|      10 | 行政部    |
|      11 | 售后部    |
|      12 | 咨询部    |
|      13 | 采购部    |
+---------+-----------+
13 rows in set (0.00 sec)五、修改语句
1、修改单表记录
- 格式:UPDATE SET 字段名1=字段值1, 字段名2=字段值2, ... WHERE 筛选条件;
注意事项:
- 字段值要与字段类型相匹配;
- 对于字符类型的字段,值要用双引号“”括起来;
- 若不使用where限定条件,会更新所有记录字段值;
- 限定条件时,只更新匹配条件的记录的字段值;
例如:修改人事部的名称为人力资源部
mysql> update departments set dept_name='人力资源部'-> where dept_name='人事部';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 02、修改多表连接记录
- 格式:
UPDATE 表1 AS 表1别名
INNER | LEFT | RIGHT JOIN 表2 AS 表2别名
ON 连接条件
SET 字段名1=字段值1, 字段名2=字段值2, ...
WHERE 连接条件;
例如:修改李四所在部门为企划部
mysql> update departments as d-> inner join employees as e-> on d.dept_id=e.dept_id-> set d.dept_name='企划部'-> where e.name='李四';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> select * from departments;
+---------+-----------+
| dept_id | dept_name |
+---------+-----------+
|       1 | 人事部    |
|       2 | 财务部    |
|       3 | 运维部    |
|       4 | 开发部    |
|       5 | 测试部    |
|       6 | 市场部    |
|       7 | 销售部    |
|       8 | 法务部    |
|       9 | 企划部    |
|      10 | 行政部    |
|      11 | 售后部    |
|      12 | 咨询部    |
|      13 | 采购部    |
+---------+-----------+
13 rows in set (0.00 sec)六、删除记录
1、删除单表记录
- 格式:DELETE FROM WHERE 筛选条件;
删除的是满足条件的整行记录,而不是某个字段;
注意事项:不加条件删除表中的所有行;
例如:删除重复的员工张三,只保留一个张三的信息
mysql> select * from employees where name='张三';
+-------------+--------+------------+------------+------------------+--------------+---------+
| employee_id | name   | hire_date  | birth_date | email            | phone_number | dept_id |
+-------------+--------+------------+------------+------------------+--------------+---------+
|         134 | 张三   | 2019-05-10 | 2000-10-12 | zhangsan@tedu.cn | 15088772354  |       9 |
|         136 | 张三   | 2019-05-10 | 2000-10-12 | zhangsan@tedu.cn | 15088772354  |       9 |
+-------------+--------+------------+------------+------------------+--------------+---------+
2 rows in set (0.00 sec)
mysql> delete from employees where employee_id=136;
Query OK, 1 row affected (0.00 sec)2、删除多表记录
- 格式:
DELETE 表1别名, 表2别名
FROM 表1 AS 表1别名
INNER | LEFT | RIGHT JOIN 表2 AS 表2别名
ON 连接条件
WHERE 筛选条件;
例如:删除9号部门中所有的员工
mysql> delete e-> from employees as e-> inner join departments as d-> on e.dept_id = d.dept_id-> where d.dept_id = 9;
Query OK, 2 rows affected (0.00 sec)3、清空表的表记录
- 格式:TRUNCATE TABLE 表名;
- TRUNCATE不支持WHERE条件
- 自增长列,TRUNCATE后从1开始;DELETE继续编号
- TRUNCATE不能回滚,DELETE可以
- 效率略高于DELETE
例如:清空wage_grade表
mysql> truncate table wage_grade;
Query OK, 0 rows affected (0.01 sec)补充:drop,delete 与 truncate 的区别?
1.TRUNCATE 和 DELETE 只删除数据,而 DROP 则删除整个表(结构和数据)。
2. DELETE 删除操作作为事务记录在日志中保存以便进行进行回滚操作。
3. TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。
4. 表和索引所占空间。当表被 TRUNCATE 后,这个表和索引所占用的空间会恢复到初始大小,而 DELETE 操作不会减少表或索引所占用的空间。drop 语句将表所占用的空间全释放掉。
思维导图:

小结:
本篇章节为【第四阶段】RDBMS1-DAY3 的学习笔记,这篇笔记可以初步了解到 子查询(单行单列、多行单列、单行多列、多行多列)、分页查询limit、联合查询union、插入语句、修改语句、删除语句。
Tip:毕竟两个人的智慧大于一个人的智慧,如果你不理解本章节的内容或需要相关笔记、视频,可私信小安,请不要害羞和回避,可以向他人请教,花点时间直到你真正的理解。
相关文章:
 
Linux云计算 |【第四阶段】RDBMS1-DAY3
主要内容: 子查询(单行单列、多行单列、单行多列、多行多列)、分页查询limit、联合查询union、插入语句、修改语句、删除语句 一、子查询 子查询就是指的在一个完整的查询语句之中,嵌套若干个不同功能的小查询,从而一…...
 
初始MYSQL数据库(8)—— JDBC编程
找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏: MYSQL 目录 JDBC的概念 JDBC的使用 加载驱动包 建立连接 创建 statement 对象 定义并执行SQL语句 处理结果集 关闭资源 SQL注入 …...
 
Vue $router.push打开新窗口
Vue $router.push打开新窗口 最近有粉丝小伙伴问我:$router.push方法用于在当前窗口中跳转路由,但有时候我们需要在新的窗口或标签页中打开一个路由改怎么实现呢? 那么这里就介绍下实现逻辑和代码案例! 文章目录 Vue $router.pus…...
 
SQL进阶技巧:如何利用if语句简化where或join中的条件 | if条件语句的优雅使用方法
目录 0 问题场景 1 数据准备 2 问题分析 2.1 需求一 2.2需求二 3 小结 0 问题场景 有两张表,一张用户下单表user_purchase(用户ID粒度)包含用户ID、订单ID和下单消耗金额和一张用户维表user_info包含用户ID、用户年龄和用户是否实名认证。 user_purchase user_info 需…...
 
SpringCloud-Alibaba第二代微服务快速入门
1.简介 Spring Cloud Alibaba其实是阿里的微服务解决方案,是阿里巴巴结合自身微服务实践,开源的微服务全家桶,在Spring Cloud项目中孵化成为Spring Cloud的子项目。第一代的Spring Cloud标准中很多组件已经停更,如:Eureak,zuul等。所以Sprin…...
JSON字符串转换成对象
在Java中,将JSON字符串转换成对象是一个常见的操作,特别是在处理Web服务或API时。这通常通过使用第三方库来实现,因为Java标准库(Java SE)本身并不直接支持JSON的序列化和反序列化。最常用的库之一是Jackson和Gson。下…...
第三十五章 结合加密和签名
文章目录 第三十五章 结合加密和签名使用非对称密钥签名并加密使用非对称密钥加密并签名 第三十五章 结合加密和签名 可以在同一条消息中加密和签名。在大多数情况下,只需组合前面主题中给出的方法即可。本主题讨论了多种场景。 使用非对称密钥签名并加密 要签名…...
FastAPI 第八课 -- 路径操作依赖项
目录 一. 前言 二. 依赖项(Dependencies) 2.1. 依赖注入 2.2. 依赖项的使用 三. 路径操作依赖项的基本使用 3.1. 预处理(Before) 3.2. 后处理(After) 四. 多个依赖项的组合 五. 异步依赖项 一. 前…...
 
大厂面试真题-说一下Mybatis的缓存
首先看一下原理图 Mybatis提供了两种缓存机制:一级缓存(L1 Cache)和二级缓存(L2 Cache),旨在提高数据库查询的性能,减少数据库的访问次数。注意查询的顺序是先二级缓存,再一级缓存。…...
jQuery UI 工作原理
jQuery UI 工作原理 引言 jQuery UI 是建立在 jQuery 库之上的一个开源 JavaScript 库,它提供了一系列用户界面交互、特效、小部件和主题。它旨在简化 HTML 用户界面的开发,使开发者能够轻松地创建具有丰富交互性和视觉吸引力的网页。本文将深入探讨 jQuery UI 的工作原理,…...
 
CS 工作笔记:SmartEdit 里创建的是 CMS Component
下图是在 SmartEdit 里创建的 cms Component,在 Back-Office 里的截图: SAP Commerce Cloud 的 CMS Component 是其内容管理系统 (CMS) 的核心组成部分,它提供了对在线商店或平台内容的灵活管理。通过这些组件,用户能够在不涉及复…...
Java面试经验总结之SSM框架+springboot
一、spring 1.Spring 是什么? 答:spring 是一个轻量级的容器框架, ioc 和 aop 是他的核心。spring 将传统的代码以来形式,变为从容器中获取,提高了开发效率,非常的方便。spring 衍生出了很多生态&#x…...
 
Unity 热更新(HybridCLR+Addressable)-设置打包路径和加载路径、打开Hosting服务、打包
四、设置打包和加载路径 五、打开Hosting服务 六、打包 打包完成后路径在Assets同级目录下的ServerData 但是目前没有资源文件对比 修改上面设置后再次打包 里面多了哈希和JSON文件,这俩个就是用于资源对比...
享元(轻量级)模式
简介 享元模式(Flyweight Pattern)又叫作轻量级模式,是对象池的一种实现。类似线程池,线程池可以避免不停地创建和销毁多个对象,消耗性能。享元模式提供了减少对象数量从而改善应用所需的对象结构的方式。其宗旨是共享…...
 
基于php的幸运舞蹈课程工作室管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…...
NLP任务的详细原理与步骤的详细讲解
1. 文本分类 原理: 特征提取:文本分类首先将文本转化为数值特征,常用方法包括词袋模型、TF-IDF、Word Embeddings(如Word2Vec、GloVe)和BERT等预训练模型。模型训练:模型(如SVM、神经网络&…...
 
Kotlin 处理字符串和正则表达式(二十一)
导读大纲 1.1 处理字符串和正则表达式1.1.1 分割字符串1.1.2 正则表达式和三引号字符串1.1.3 多行三引号字符串IntelliJ IDEA 和 Android Studio 中三重引号字符串内部的语法高亮显示 1.1 处理字符串和正则表达式 Kotlin 字符串与 Java 字符串完全相同 可以将 Kotlin 代码中创建…...
 
一站式大语言模型API调用:快速上手教程
智匠MindCraft是一个强大的AI工具及开发平台,支持多种大语言模型和多模态AI模型。本文将详细介绍如何通过API调用智匠MindCraft中的大语言模型,帮助开发者快速上手。 注册与登录 访问智匠MindCraft官网,注册并登录账号。 进入开发者平台&…...
 
【TabBar嵌套Navigation案例-新特性页面-代码位置 Objective-C语言】
一、接下来,我们来说这个新特性页面 1.首先,看一下我们的示例程序,这里改一下,加一个叹号, command + R, 好,首先啊,这里边有一个新特性页面,当我这个程序是第一次安装、第一次运行、还有呢、就是当这个应用程序更新的时候,我应该去加载这个新特性页面, 然后呢,这…...
程序员如何提升并保持核心竞争力?——深入钻研、广泛学习与软技能的培养
一、引言 随着人工智能的不断发展,尤其是AIGC系列大语言模型的涌现,AI辅助编程工具正在日益普及,这对程序员的工作方式产生了深刻的影响。面对这一变革,程序员应如何应对?是专注于某个领域深耕细作,还是…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
 
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
 
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
 
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
 
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
 
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
 
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
 
计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
