MySQL命令(二)| 表的增删查改、聚合函数(复合函数)、联合查询

文章目录

  • 新增 (Create)
    • 全列插入
    • 指定列插入
  • 查询 (Retrieve)
    • 全列查询
    • 指定列查询
    • 条件查询
      • 关系元素运算符
      • 模糊查询
    • 分页查询
    • 去重:DISTINCT
    • 别名:AS
    • 升序 or 降序
  • 更新 (Update)
  • 删除 (Delete)
  • 分组(GROUP BY)
  • 联合查询
    • 内连接(inner join)
    • 自连接
    • 外连接
      • 左连接(left join)
      • 右连接(left join)
    • 子查询(嵌套查询)
    • 合并查询
      • UNION
      • UNION ALL
  • 聚合函数(复合函数)
    • 最大最小
    • 总数、总和、平均值、保留小数
  • 条件函数
    • IF
    • CASE
  • 日期函数
    • 时间戳和日期的转换
    • 年月日截取
    • 日期差计算
  • 文本函数


新增 (Create)

全列插入

语法

INSERT INTO [表名] VALUES(参数1, 参数2, 参数3......);

示例

INSERT INTO book VALUES(4, "C++Primer", 99.9, "2000-08-02", 103);mysql> SELECT * FROM book-> ;
+------+-----------+-------+------------+------+
| id   | name      | price | publish    | num  |
+------+-----------+-------+------------+------+
|    4 | C++Primer |   100 | 2000-08-02 |  103 |
+------+-----------+-------+------------+------+
1 rows in set (0.00 sec)

这里 price 的值为 100 而不是 99.9 是因为 默认decimal为(10,0) ,也就是 0 位小数,保存的时候将小数点后面的值四舍五入。
在这里插入图片描述


指定列插入

即只插入部分列内容

语法

INSERT INTO [表名](1,列2,列3.......) values(参数1, 参数2, 参数3......);

示例

mysql> INSERT INTO book(id,name,price)-> VALUES(8,"红楼梦",94.4);
Query OK, 1 row affected, 1 warning (0.01 sec)mysql> SELECT * FROM book;
+------+-----------+-------+------------+------+
| id   | name      | price | publish    | num  |
+------+-----------+-------+------------+------+
|    4 | C++Primer |   100 | 2000-08-02 |  103 |
|    8 | 红楼梦    |    94 | NULL       | NULL |
+------+-----------+-------+------------+------+
2 rows in set (0.00 sec)

查询 (Retrieve)

全列查询

语法

SELECT * FROM [表名];

示例

mysql> SELECT * FROM book;
+------+-----------+-------+------------+------+
| id   | name      | price | publish    | num  |
+------+-----------+-------+------------+------+
|    4 | C++Primer |   100 | 2000-08-02 |  103 |
|    8 | 红楼梦    |    94 | NULL       | NULL |
+------+-----------+-------+------------+------+
2 rows in set (0.00 sec)

指定列查询

语法

SELECT1,列2,列3..... FROM [表名];

示例

mysql> SELECT name, price FROM book;
+-----------+-------+
| name      | price |
+-----------+-------+
| C++Primer |   100 |
| 红楼梦    |    94 |
+-----------+-------+
2 rows in set (0.00 sec)

条件查询

关系元素运算符

在这里插入图片描述
语法

SELECT * FROM [表名] WHERE [条件];

示例

mysql> SELECT * FROM book WHERE id=8;
+------+-----------+-------+---------+------+
| id   | name      | price | publish | num  |
+------+-----------+-------+---------+------+
|    8 | 红楼梦    |    94 | NULL    | NULL |
+------+-----------+-------+---------+------+
1 row in set (0.00 sec)

模糊查询

语法

SELECT * FROM [表名] WHERE [列名] LIKE%XX%// 查询名字中带XX的数据
SELECT * FROM [表名] WHERE [列名] LIKE ”XX%// 查询名字中以XX开头的数据
SELECT * FROM [表名] WHERE [列名] LIKE%XX“
// 查询名字中以XX结尾的数据

分页查询

语法

SELECT * FROM [表名] LIMIT [每页条数] OFFSET [偏移条数];

示例

mysql> SELECT * FROM book;
+------+-----------+-------+------------+------+
| id   | name      | price | publish    | num  |
+------+-----------+-------+------------+------+
|    4 | C++Primer |   100 | NULL       |  103 |
|    4 | C++Primer |   100 | 2000-08-02 |  103 |
|    8 | 红楼梦    |    94 | NULL       | NULL |
+------+-----------+-------+------------+------+
3 rows in set (0.00 sec)// 限制显示条数
mysql> SELECT * FROM book LIMIT 1;
+------+-----------+-------+---------+------+
| id   | name      | price | publish | num  |
+------+-----------+-------+---------+------+
|    4 | C++Primer |   100 | NULL    |  103 |
+------+-----------+-------+---------+------+
1 row in set (0.00 sec)// 限制显示条数、规定偏移量
mysql> SELECT * FROM book LIMIT 1 OFFSET 1;
+------+-----------+-------+------------+------+
| id   | name      | price | publish    | num  |
+------+-----------+-------+------------+------+
|    4 | C++Primer |   100 | 2000-08-02 |  103 |
+------+-----------+-------+------------+------+
1 row in set (0.00 sec)// 剩余数据不足LIMIT限制时,不会报错,而是输出所有剩余的
mysql> SELECT * FROM book LIMIT 2 OFFSET 2;
+------+-----------+-------+---------+------+
| id   | name      | price | publish | num  |
+------+-----------+-------+---------+------+
|    8 | 红楼梦    |    94 | NULL    | NULL |
+------+-----------+-------+---------+------+
1 row in set (0.00 sec)

去重:DISTINCT

语法

SELECT DISTINCT * FROM [表名];

示例

mysql> SELECT * FROM book;
+------+-----------+-------+------------+------+
| id   | name      | price | publish    | num  |
+------+-----------+-------+------------+------+
|    4 | C++Primer |   100 | NULL       |  103 |
|    4 | C++Primer |   100 | 2000-08-02 |  103 |
|    8 | 红楼梦    |    94 | NULL       | NULL |
|    4 | C++Primer |   100 | 2000-08-02 |  103 |
+------+-----------+-------+------------+------+
4 rows in set (0.00 sec)mysql> SELECT DISTINCT * FROM book;
+------+-----------+-------+------------+------+
| id   | name      | price | publish    | num  |
+------+-----------+-------+------------+------+
|    4 | C++Primer |   100 | NULL       |  103 |
|    4 | C++Primer |   100 | 2000-08-02 |  103 |
|    8 | 红楼梦    |    94 | NULL       | NULL |
+------+-----------+-------+------------+------+
3 rows in set (0.00 sec)

别名:AS

语法

SELECT 列a,列b...... AS [别名] FROM [表名];

示例

mysql> SELECT name, price * num AS total FROM book;
+-----------+-------+
| name      | total |
+-----------+-------+
| C++Primer | 10300 |
| C++Primer | 10300 |
| 红楼梦    |  NULL |
| C++Primer | 10300 |
+-----------+-------+
4 rows in set (0.00 sec)

升序 or 降序

语法

SELECT * FROM [表名] ORDER BY [列名] DESC
// DESC为降序排序,ASC为升序排序,默认为ASC。

示例

mysql> SELECT name, price * num AS total FROM book ORDER BY total;
+-----------+-------+
| name      | total |
+-----------+-------+
| 红楼梦    |  NULL |
| C++Primer | 10300 |
| C++Primer | 10300 |
| C++Primer | 10300 |
+-----------+-------+
4 rows in set (0.00 sec)

更新 (Update)

语法

UPDATE [表名] SET [修改项] = [修改结果] 

示例

mysql> SELECT * FROM book;
+------+-----------+-------+------------+------+
| id   | name      | price | publish    | num  |
+------+-----------+-------+------------+------+
|    4 | C++Primer |   100 | NULL       |  103 |
|    4 | C++Primer |   100 | 2000-08-02 |  103 |
|    8 | 红楼梦    |    94 | NULL       | NULL |
|    4 | C++Primer |   100 | 2000-08-02 |  103 |
+------+-----------+-------+------------+------+
4 rows in set (0.00 sec)mysql> UPDATE book SET num=55 WHERE id=8;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0mysql> SELECT * FROM book;
+------+-----------+-------+------------+------+
| id   | name      | price | publish    | num  |
+------+-----------+-------+------------+------+
|    4 | C++Primer |   100 | NULL       |  103 |
|    4 | C++Primer |   100 | 2000-08-02 |  103 |
|    8 | 红楼梦    |    94 | NULL       |   55 |
|    4 | C++Primer |   100 | 2000-08-02 |  103 |
+------+-----------+-------+------------+------+
4 rows in set (0.00 sec)

删除 (Delete)

语法

DELETE FROM [表名];

示例

mysql> DELETE FROM book WHERE id=4;
Query OK, 3 rows affected (0.00 sec)mysql> SELECT * FROM book;
+------+-----------+-------+---------+------+
| id   | name      | price | publish | num  |
+------+-----------+-------+---------+------+
|    8 | 红楼梦    |    94 | NULL    |   55 |
+------+-----------+-------+---------+------+
1 row in set (0.00 sec)

分组(GROUP BY)

分组的意思是根据所选 列名 对数据进行分组,可以理解为作为分组依据的 不会变动,而对其余列按照要求进行相关操作,最后对照着 列中的项 展示对应的结果。

语法

SELECT * FROM [表名] WHERE [条件] GROUP BY [列名]
SELECT * FROM [表名] GROUP BY [列名] HAVING [过滤条件]
// WHERE 后跟的条件里不允许使用聚合函数,但 HAVING 后面的过滤条件可以。

示例
在这里插入图片描述

SELECT gender, university, count(device_id) AS user_num,
avg(active_days_within_30) AS avg_active_days,
avg(question_cnt) as avg_question_cnt
FROM user_profile GROUP BY university, gender;

在这里插入图片描述


联合查询

内连接(inner join)

内连接即查找两个表中的 交集 ,找到两个表中同时符合条件的数据,进行连接。

语法

select 字段 from1 别名1 [inner] join2 别名2 on 连接条件 and 其他条件; 
select 字段 from1 别名1,2 别名2 where 连接条件 and 其他条件; 

自连接

自连接是特殊的内连接,即与本表进行连接,需要对表名进行 别名显示

语法

select 字段 from 表名1 别名1 [inner] join 表名2 别名2 on 连接条件 and 其他条件; 

外连接

外连接又分左外连接和右外连接。简单来说就是,以左表的数据为基准就是左连接,以右表的数据为基准就是右连接


左连接(left join)

对于左连接,以左表的数据为基准,在右表中查找符合条件的数据,找不到的以 NULL 展示

语法

select 字段名 from 表名1 left join 表名2 on 连接条件; 
// 以 表1 为左基准,查询 表2 中的符合数据

右连接(left join)

对于右连接,以右表的数据为基准,在左表中查找符合条件的数据,找不到的以 NULL 展示

语法

select 字段 from 表名1 right join 表名2 on 连接条件; 
//  以 表1 为右基准,查询 表2 中的符合数据

子查询(嵌套查询)

子查询又叫做嵌套查询(窗口查询),其实就是嵌入 其他sql语句 中的 select语句 ,一般用于 查询的条件是另一条语句的结果 这一情况。

语法

select 字段 from 表名 where 查询条件=(select 列名 from 表名 where 查询条件);

示例

(题源牛客)找到每个学校gpa最低的同学来做调研,请你取出相应数据。

在这里插入图片描述
在这里插入图片描述

SELECT device_id, university, gpa
FROM user_profile
WHERE gpa IN( # IN 可替换为 = ANYSELECT min(gpa)FROM user_profileGROUP BY university
)
GROUP BY university # 保证学校名不重复
ORDER BY university; # 保证与题目要求输出顺序一致

合并查询

UNION

该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行

语法

select 字段 from 表名 where 查询条件
UNION
select 列名 from 表名 where 查询条件;

同样的结果也可以通过 or语句 来得到

select 字段 from 表名 where 查询条件1 or 查询条件2;

但是OR这个逻辑运算符会忽略索引、扫描全表,所以在海量数据查询中性能会下降很多。


UNION ALL

该操作符用于取得两个结果集的并集。当使用该操作符时,不自动去掉结果集中的重复行

语法

select 字段 from 表名 where 查询条件
UNION ALL
select 列名 from 表名 where 查询条件;

聚合函数(复合函数)

最大最小

  • MAX(): 返回查询到的数据的最大值
  • MIN(): 返回查询到的数据的最小值

语法

SELECT max([列名]) FROM [表名]
// 查询对应列中最大的数据
SELECT min([列名]) FROM [表名]
// 查询对应列中最小的数据

示例

mysql> SELECT * FROM class;
+------+------+-------+
| id   | num  | name  |
+------+------+-------+
| NULL | NULL | li    |
| NULL | NULL | chen  |
| NULL | NULL | zhang |
+------+------+-------+
3 rows in set (0.00 sec)mysql> SELECT max(name) FROM class-> ;
+-----------+
| max(name) |
+-----------+
| zhang     |
+-----------+
1 row in set (0.00 sec)

总数、总和、平均值、保留小数

  • COUNT(): 返回查询到的数据的数量
  • SUM(): 返回查询到的数据的总和
  • AVG(): 返回查询到的数据的平均值
  • ROUND(): 返回查询数据的保留小数结果,常与 sum、avg 搭配。

语法

SELECT count([列名]) FROM [表名]
// 查询对应列中数据的总数
SELECT sum([列名]) FROM [表名]
// 查询对应列中数据的和
SELECT avg([列名]) FROM [表名]
// 查询对应列中数据的平均值
SELECT round([数据], n) FROM [表名]
// 查询对应数据保留n位小数的结果,数据可以为count、avg的结果

条件函数

IF

条件函数 if(x,a,b)表示如果 x 成立、则返回 a;否则返回 b 。常用来划分查询结果的输出情况。

语法

SELECT IF(X, A, B) AS [列名] FROM [表名]

示例
(题源牛客)现在运营想要将用户划分为25岁以下和25岁及以上两个年龄段,分别查看这两个年龄段用户数量:
在这里插入图片描述
在这里插入图片描述

SELECT if(age>=25, '25岁以及上', '25岁以下') AS age_cut,
COUNT(device_id) AS Number FROM user_profile
GROUP BY age_cut;

CASE

数据库中的 case运算符 类似于 C语言 中的 switch语句WHEN 用来罗列情况,THEN 将情况与输出结果相对应,ELSE 总结未罗列的情况,END 标识语句结束。

语法

SELECT
CASEWHEN [条件] THEN [输出结果]WHEN [条件] THEN [输出结果]ELSE [输出结果]
END
AS [列名] FROM [表名]

示例
(题源牛客)现在运营想要将用户划分为20岁以下,20-24岁,25岁及以上三个年龄段,分别查看不同年龄段用户的明细情况,请取出相应数据。
在这里插入图片描述
在这里插入图片描述

SELECT device_id, gender,
CASEWHEN age>=25 THEN '25岁以上'WHEN age BETWEEN 20 AND 24 THEN "20-24岁"WHEN age<20  THEN '20岁以下'ELSE '其他'
END
AS age_cut FROM user_profile

日期函数

时间戳和日期的转换

时间戳是数据库中自动生成的唯一二进制数字,表明数据库中数据修改发生的相对顺序,其记录形式类似:1627963699 ,在实际工作环境中,对于用户行为发生的时间通常都是用时间戳进行记录。

from_unixtime 可以将时间戳转换成日期,其使用语法如下:

# 时间戳所在列转换
SELECT
from_unixtime([时间戳所在列], 'yyyy-MM-dd’) AS [列名] # 日期格式有’yyyy-MM-dd’ 和 ‘yyyyMMdd’,这里选用前者
From [表名]
# 单个时间戳转换
SELECT from_unixtime([时间戳], [日期格式]) AS [列名]

unix_timestamp 可以将日期转换成时间戳,其使用语法如下:

  • 如果日期值格式满足yyyy-MM-dd HH:mm:ss,则无需指定日期格式:
SELECT unix_timestamp([日期值]) AS [列名]
  • 如果日期值格式不满足yyyy-MM-dd HH:mm:ss,则必须指定日期格式:
SELECT unix_timestamp(2021-09-02','yyyy-MM-dd’) AS [列名]

年月日截取

可以从完整日期格式中提取出年月日:

语法

SELECT year([日期值]), month([日期值]), day([日期值]) FROM [表名]
# 提取一列的年月日则可以将 日期值 改为 列名

示例

(题源牛客)计算出2021年8月每天用户练习题目的数量,请取出相应数据。
在这里插入图片描述
在这里插入图片描述

SELECT DAY(date) AS day, COUNT(question_id) AS question_cnt
FROM question_practice_detail
WHERE YEAR(date)='2021' AND MONTH(date)='08'
GROUP BY day;

日期差计算

datedff

datediff 的作用为计算两个日期之间的天数间隔。

语法

datediff(date1, date2)

返回起始时间 date1 和结束时间 date2 之间的天数,date1 大于 date2 的情况下,返回的天数为正数;date1 小于 date2 的情况下,返回的天数为负数。

date_sub

语法

date_sub (string startdate, interval int day) 

返回开始日期 startdate 减少 day 天后的日期。

date_add

语法

date_add(string startdate, interval int day) 

返回开始日期 startdate 增加 day 天后的日期。

示例

(题源牛客)查看用户在某天刷题后第二天还会再来刷题的平均概率。请取出相应数据。
在这里插入图片描述
在这里插入图片描述

SELECT COUNT(q2.device_id)/COUNT(q1.device_id) AS avg_ret
FROM(SELECT DISTINCT device_id, dateFROM question_practice_detail
) q1
LEFT JOIN(SELECT DISTINCT device_id,date_sub(date, INTERVAL 1 DAY) AS dateFROM question_practice_detail
) q2
USING(date, device_id);
# USING 等同于 ON q1.date=q2.date AND q1.device_id=q2.device_id;

文本函数

  1. LOCATE(substr, str) :返回子串 substr 在字符串 str 中第一次出现的位置,如不存在,则返回0;
  2. POSITION(substr IN str)LOCATE函数 作用相同;
  3. LEFT(str, length) :从左边开始截取 strlength 是截取的长度;
  4. RIGHT(str, length) :从右边开始截取 strlength 是截取的长度;
  5. SUBSTRING_INDEX(str, substr, n) :返回字符 substrstr 中第 n 次出现位置之前的字符串,n 若为负数,则表倒数;
  6. SUBSTRING(str , n, m) :返回字符串 str 从第 n 个字符截取长度为 m 个字符;
  7. REPLACE(str, n, m) :将字符串 str 中的 n 字符替换成 m 字符;
  8. LENGTH(str) :计算字符串 str 的长度。

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

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

相关文章

MySQL | 数据库的六种约束、表的关系、三大范式

文章目录数据库约束NOT NULL&#xff08;非空约束&#xff09;UNIQUE&#xff08;唯一约束&#xff09;DEFAULT&#xff08;缺省约束&#xff09;PRIMARY KEY&#xff08;主键约束&#xff09;AUTO_INCREMENT 自增FOREIGN KEY&#xff08;外键约束&#xff09;CHECK&#xff08…

哈希 :哈希冲突、负载因子、哈希函数、哈希表、哈希桶

文章目录哈希哈希&#xff08;散列&#xff09;函数常见的哈希函数字符串哈希函数哈希冲突闭散列&#xff08;开放地址法&#xff09;开散列&#xff08;链地址法/拉链法&#xff09;负载因子以及增容对于闭散列对于开散列结构具体实现哈希表&#xff08;闭散列&#xff09;创建…

C++ 泛型编程(一):模板基础:函数模板、类模板、模板推演成函数的机制、模板实例化、模板匹配规则

文章目录泛型编程函数模板函数模板实例化隐式实例化显式实例化函数模板的匹配规则类模板类模板的实例化泛型编程 泛型编程旨在削减重复工作&#xff0c;如&#xff1a; 将一个函数多次重载不如将他写成泛型。 void Swap(int& left, int& right) {int temp left;lef…

你真的了解静态变量、常量的存储位置吗?

文章目录引言C对内存的划分如何落实在Linux上自由存储区和堆之间的问题栈常量区静态存储区静态局部变量静态局部变量、静态全局变量、全局变量的异同macOS系统的测试结果总结引言 在动态内存的博客中&#xff0c;我提到&#xff1a; 在Linux 内存管理的博客中&#xff0c;我提…

C++ 泛型编程(二):非类型模板参数,模板特化,模板的分离编译

文章目录非类型模板参数函数模板的特化类模板的特化全特化偏特化部分参数特化参数修饰特化模板分离编译解决方法非类型模板参数 模板的参数分为两种&#xff1a; 类型参数&#xff1a; 则是我们通常使用的方式&#xff0c;就是在模板的参数列表中在 class 后面加上参数的类型…

数据结构 | B树、B+树、B*树

文章目录搜索结构B树B树的插入B树的遍历B树的性能B树B树的插入B树的遍历B*树B*树的插入总结搜索结构 如果我们有大量的数据需要永久存储&#xff0c;就需要存储到硬盘之中。但是硬盘的访问速度远远小于内存&#xff0c;并且由于数据量过大&#xff0c;无法一次性加载到内存中。…

MySQL 索引 :哈希索引、B+树索引、全文索引

文章目录索引引言常见的索引哈希索引自适应哈希索引B树索引聚集索引非聚集索引使用方法联合索引最左前缀匹配规则覆盖索引全文索引使用方法索引 引言 为什么需要索引&#xff1f; 倘若不使用索引&#xff0c;查找数据时&#xff0c;MySQL必须遍历整个表。而表越大&#xff0c;…

服装店怎么引流和吸引顾客 服装店铺收银系统来配合

实体店的同城引流和经营是实体经济的一个重要的一环&#xff0c;今天我们来分享服装行业的实体店铺怎么引流和吸引、留住顾客&#xff0c;并实现复购。大家点个收藏&#xff0c;不然划走就再也找不到了&#xff0c;另外可以点个关注&#xff0c;下次有新的更好的招&#xff0c;…

MySQL 锁的相关知识 | lock与latch、锁的类型、简谈MVCC、锁算法、死锁、锁升级

文章目录lock与latch锁的类型MVCC一致性非锁定读&#xff08;快照读&#xff09;一致性锁定读&#xff08;当前读&#xff09;锁算法死锁锁升级lock与latch 在了解数据库锁之前&#xff0c;首先就要区分开 lock 和 latch。在数据库中&#xff0c;lock 和 latch 虽然都是锁&…

MySQL 存储引擎 | MyISAM 与 InnoDB

文章目录概念innodb引擎的4大特性索引结构InnoDBMyISAM区别表级锁和行级锁概念 MyISAM 是 MySQL 的默认数据库引擎&#xff08;5.5版之前&#xff09;&#xff0c;但因为不支持事务处理而被 InnoDB 替代。 然而事物都是有两面性的&#xff0c;InnoDB 支持事务处理也会带来一些…

MySQL 事务 | ACID、四种隔离级别、并发带来的隔离问题、事务的使用与实现

文章目录事务ACID并发带来的隔离问题幻读&#xff08;虚读&#xff09;不可重复读脏读丢失更新隔离级别Read Uncommitted (读未提交)Read Committed (读已提交)Repeatable Read (可重复读)Serializable (可串行化)事务的使用事务的实现Redoundo事务 事务指逻辑上的一组操作。 …

MySQL 备份与主从复制

文章目录备份主从复制主从复制的作用备份 根据备份方法的不同&#xff0c;备份可划分为以下几种类型&#xff1a; 热备(Hot Backup) &#xff1a; 热备指的是在数据库运行的时候直接备份&#xff0c;并且对正在运行的数据库毫无影响&#xff0c;这种方法在 MySQL 官方手册中又…

C++ 流的操作 | 初识IO类、文件流、string流的使用

文章目录前言IO头文件iostreamfstreamsstream流的使用不能拷贝或对 IO对象 赋值条件状态与 iostate 类型输出缓冲区文件流fstream类型文件模式文件光标函数tellg() / tellp()seekg() / seekp()向文件存储内容/读取文件内容string流istringstreamostringstream前言 我们在使用 …

C++ 右值引用 | 左值、右值、move、移动语义、引用限定符

文章目录C11为什么引入右值&#xff1f;区分左值引用、右值引用move移动语义移动构造函数移动赋值运算符合成的移动操作小结引用限定符规定this是左值or右值引用限定符与重载C11为什么引入右值&#xff1f; C11引入了一个扩展内存的方法——移动而非拷贝&#xff0c;移动较之拷…

且谈关于最近软件测试的面试

前段时间有新的产品需要招人&#xff0c;安排和参加了好几次面试&#xff0c;下面就谈谈具体的面试问题&#xff0c;在面试他人的同时也面试自己。 面试问题是参与面试同事各自设计的&#xff0c;我也不清楚其他同事的题目&#xff0c;就谈谈自己设计的其中2道题。 过去面试总是…

C++ 多态 | 虚函数、抽象类、虚函数表

文章目录多态虚函数重写重定义&#xff08;参数不同&#xff09;协变&#xff08;返回值不同&#xff09;析构函数重写&#xff08;函数名不同&#xff09;final和override重载、重写、重定义抽象类多态的原理虚函数常见问题解析虚函数表多态 一种事物&#xff0c;多种形态。换…

C++ 运算符重载(一) | 输入/输出,相等/不等,复合赋值,下标,自增/自减,成员访问运算符

文章目录输出运算符<<输入运算符>>相等/不等运算符复合赋值运算符下标运算符自增/自减运算符成员访问运算符输出运算符<< 通常情况下&#xff0c;输出运算符的第一个形参是一个 非常量ostream对象的引用 。之所以 ostream 是非常量是因为向流写入内容会改变…

C++ 重载函数调用运算符 | 再探lambda,函数对象,可调用对象

文章目录重载函数调用运算符lambdalambda等价于函数对象lambda等价于类标准库函数对象可调用对象与function可调用对象function函数重载与function重载函数调用运算符 函数调用运算符必须是成员函数。 一个类可以定义多个不同版本的调用运算符&#xff0c;互相之间应该在参数数…

C++ 运算符重载(二) | 类型转换运算符,二义性问题

文章目录类型转换运算符概念避免过度使用类型转换函数解决上述问题的方法转换为 bool显式的类型转换运算符类型转换二义性重载函数与类型转换结合导致的二义性重载运算符与类型转换结合导致的二义性类型转换运算符 概念 类型转换运算符&#xff08;conversion operator&#…

分布式理论:CAP、BASE | 分布式存储与一致性哈希

文章目录分布式理论CAP定理BASE理论分布式存储与一致性哈希简单哈希一致性哈希虚拟节点分布式理论 CAP定理 一致性&#xff08;Consistency&#xff09;&#xff1a; 在分布式系统中的所有数据副本&#xff0c;在同一时刻是否一致&#xff08;所有节点访问同一份最新的数据副…