MySQL表的增刪改查(CRUD)

MySQL表的增刪改查(CRUD)

文章目錄

  • MySQL表的增刪改查(CRUD)
    • 1. Create
      • 1.1 單行數據 + 全列插入
      • 1.2 多行數據 + 指定列插入
      • 1.3 插入否則更新
      • 1.4 替換
    • 2. Retrieve
      • 2.1 SELECT 列
        • 2.1.1 全列查詢
        • 2.1.2 指定列查詢
        • 2.1.3 查詢字段為表達式
        • 2.1.4 為查詢指定別名
        • 2.1.5 結果去重
      • 2.2 WHERE 條件
        • 2.2.1 英語不及格的同學(英語成績<60)及英語成績
        • 2.2.2 語文成績在 [80, 90] 分的同學及語文成績
        • 2.2.3 數學成績是 58 或者 59 或者 98 或者 99 分的同學及數學成績
        • 2.2.4 姓孫的同學 及 孫某同學
        • 2.2.5 語文成績好于英語成績的同學
        • 2.2.6 總分在 200 分以下的同學
        • 2.2.7 語文成績 > 80 并且不姓孫的同學
        • 2.2.8 孫某同學,否則要求總成績 > 200 并且 語文成績 < 數學成績 并且 英語成績 > 80
        • 2.2.9 NULL 的查詢
      • 2.3 結果排序
        • 2.3.1 同學及數學成績,按數學成績升序顯示
        • 2.3.2 同學及 qq 號,按 qq 號排序顯示
        • 2.3.3 查詢同學各門成績,依次按 數學降序,英語升序,語文升序的方式顯示
        • 2.3.4 查詢同學及總分,由高到低
        • 2.3.5 查詢姓孫的同學或者姓曹的同學數學成績,結果按數學成績由高到低顯示
      • 2.4 篩選分頁結果
    • 3. Update
      • 3.1 單列變更
      • 3.2 一次更新多個列
      • 3.3 更新值為原值基礎上進行變更
      • 3.4 將所有同學的語文成績更新為原來的 2 倍
    • 4. Delete
      • 4.1 刪除數據
        • 4.1.1 刪除孫悟空同學的考試成績
        • 4.1.2 刪除整張表數據
      • 4.2 截斷表
    • 5. 插入查詢結果(insert into... select...)
    • 6. 聚合函數
      • 6.1 統計班級共有多少同學
      • 6.2 統計班級收集的 qq 號有多少
      • 6.3 統計本次考試的數學成績分數個數
      • 6.4 統計數學成績總分
      • 6.5 統計平均總分
      • 6.6 返回英語最高分
      • 6.7 返回 > 70 分以上的數學最低分
      • 7. group by子句的使用

SQL查詢中各個關鍵字的執行先后順序 from > on > join > where > group by > with > having > select > distinct > order by > limit

1. Create

語法:

INSERT [INTO] table_name
[(column [, column] ...)]
VALUES (value_list) [, (value_list)] ...
value_list: value, [, value] ...

案例:

# 創建一張學生表
CREATE TABLE students (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
sn INT NOT NULL UNIQUE COMMENT '學號',
name VARCHAR(20) NOT NULL,
qq VARCHAR(20)
);

1.1 單行數據 + 全列插入

插入兩條記錄,value_list 數量必須和定義表的列的數量及順序一致。

mysql> INSERT INTO students VALUES (100, 10000, '唐三藏', NULL);
Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO students VALUES (101, 10001, '孫悟空', '11111');
Query OK, 1 row affected (0.01 sec)mysql> SELECT * FROM students;
+-----+-------+-----------+-------+
| id  | sn    | name      | qq    |
+-----+-------+-----------+-------+
| 100 | 10000 | 唐三藏    | NULL  |
| 101 | 10001 | 孫悟空    | 11111 |
+-----+-------+-----------+-------+
2 rows in set (0.00 sec)

注意,這里在插入的時候,也可以不用指定id(當然,那時候就需要明確插入數據到那些列了),那么mysql會使用默認的值進行自增。

1.2 多行數據 + 指定列插入

插入兩條記錄,value_list 數量必須和指定列數量及順序一致

mysql> INSERT INTO students (id, sn, name) VALUES-> (102, 20001, '曹孟德'),-> (103, 20002, '孫仲謀');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0mysql> SELECT * FROM students;
+-----+-------+-----------+-------+
| id  | sn    | name      | qq    |
+-----+-------+-----------+-------+
| 100 | 10000 | 唐三藏    | NULL  |
| 101 | 10001 | 孫悟空    | 11111 |
| 102 | 20001 | 曹孟德    | NULL  |
| 103 | 20002 | 孫仲謀    | NULL  |
+-----+-------+-----------+-------+
4 rows in set (0.00 sec)

1.3 插入否則更新

由于 主鍵 或者 唯一鍵 對應的值已經存在而導致插入失敗

# 主鍵沖突
mysql> INSERT INTO students (id, sn, name) VALUES (100, 10010, '唐大師');
ERROR 1062 (23000): Duplicate entry '100' for key 'students.PRIMARY'
# 唯一鍵沖突
mysql> INSERT INTO students (sn, name) VALUES (20001, '曹阿瞞');
ERROR 1062 (23000): Duplicate entry '20001' for key 'students.sn'

可以選擇性的進行同步更新操作

語法:

INSERT ... ON DUPLICATE KEY UPDATE
column = value [, column = value] ...

ON DUPLICATE KEY 當發生重復key的時候

示例:

mysql> INSERT INTO students (id, sn, name) VALUES (100, 10010, '唐大師')
ON DUPLICATE KEY UPDATE sn = 10010, name = '唐大師';
Query OK, 2 rows affected (0.47 sec)
-- 0 row affected: 表中有沖突數據,但沖突數據的值和 update 的值相等
-- 1 row affected: 表中沒有沖突數據,數據被插入
-- 2 row affected: 表中有沖突數據,并且數據已經被更新mysql> SELECT ROW_COUNT();
+-------------+
| ROW_COUNT() |
+-------------+
|          -1 |
+-------------+
1 row in set (0.00 sec)

1.4 替換

# 主鍵 或者 唯一鍵 沒有沖突,則直接插入;
# 主鍵 或者 唯一鍵 如果沖突,則刪除后再插入REPLACE INTO students (sn, name) VALUES (20001, '曹阿瞞');
Query OK, 2 rows affected (0.00 sec)
-- 1 row affected: 表中沒有沖突數據,數據被插入
-- 2 row affected: 表中有沖突數據,刪除后重新插入

2. Retrieve

語法:

SELECT
[DISTINCT] {* | {column [, column] ...}
[FROM table_name]
[WHERE ...]
[ORDER BY column [ASC | DESC], ...]
LIMIT ...

案例前置數據導入:

mysql> CREATE TABLE exam_result (-> id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,-> name VARCHAR(20) NOT NULL COMMENT '同學姓名',-> chinese float DEFAULT 0.0 COMMENT '語文成績',-> math float DEFAULT 0.0 COMMENT '數學成績',-> english float DEFAULT 0.0 COMMENT '英語成績'-> );
Query OK, 0 rows affected (0.02 sec)mysql> INSERT INTO exam_result (name, chinese, math, english) VALUES-> ('唐三藏', 67, 98, 56),-> ('孫悟空', 87, 78, 77),-> ('豬悟能', 88, 98, 90),-> ('曹孟德', 82, 84, 67),-> ('劉玄德', 55, 85, 45),-> ('孫權', 70, 73, 78),-> ('宋公明', 75, 65, 30);
Query OK, 7 rows affected (0.01 sec)
Records: 7  Duplicates: 0  Warnings: 0

2.1 SELECT 列

2.1.1 全列查詢

語法:

SELECT * FROM 表名;

通常情況下不建議使用 * 進行全列查詢

  1. 查詢的列越多,意味著需要傳輸的數據量越大;

  2. 可能會影響到索引的使用。

案例:

mysql> SELECT * FROM exam_result;
+----+-----------+---------+------+---------+
| id | name      | chinese | math | english |
+----+-----------+---------+------+---------+
|  1 | 唐三藏    |      67 |   98 |      56 |
|  2 | 孫悟空    |      87 |   78 |      77 |
|  3 | 豬悟能    |      88 |   98 |      90 |
|  4 | 曹孟德    |      82 |   84 |      67 |
|  5 | 劉玄德    |      55 |   85 |      45 |
|  6 | 孫權      |      70 |   73 |      78 |
|  7 | 宋公明    |      75 |   65 |      30 |
+----+-----------+---------+------+---------+
7 rows in set (0.00 sec)
2.1.2 指定列查詢

指定列的順序不需要按定義表的順序

mysql> SELECT id, name, english FROM exam_result;
+----+-----------+---------+
| id | name      | english |
+----+-----------+---------+
|  1 | 唐三藏    |      56 |
|  2 | 孫悟空    |      77 |
|  3 | 豬悟能    |      90 |
|  4 | 曹孟德    |      67 |
|  5 | 劉玄德    |      45 |
|  6 | 孫權      |      78 |
|  7 | 宋公明    |      30 |
+----+-----------+---------+
7 rows in set (0.00 sec)mysql> SELECT id, math, name FROM exam_result;
+----+------+-----------+
| id | math | name      |
+----+------+-----------+
|  1 |   98 | 唐三藏    |
|  2 |   78 | 孫悟空    |
|  3 |   98 | 豬悟能    |
|  4 |   84 | 曹孟德    |
|  5 |   85 | 劉玄德    |
|  6 |   73 | 孫權      |
|  7 |   65 | 宋公明    |
+----+------+-----------+
7 rows in set (0.00 sec)
2.1.3 查詢字段為表達式
  • 表達式不包含字段
mysql> SELECT id, name, 10 FROM exam_result;
+----+-----------+----+
| id | name      | 10 |
+----+-----------+----+
|  1 | 唐三藏    | 10 |
|  2 | 孫悟空    | 10 |
|  3 | 豬悟能    | 10 |
|  4 | 曹孟德    | 10 |
|  5 | 劉玄德    | 10 |
|  6 | 孫權      | 10 |
|  7 | 宋公明    | 10 |
+----+-----------+----+
7 rows in set (0.01 sec)
  • 表達式包含一個字段
mysql> SELECT id, name, english + 10 FROM exam_result;
+----+-----------+--------------+
| id | name      | english + 10 |
+----+-----------+--------------+
|  1 | 唐三藏    |           66 |
|  2 | 孫悟空    |           87 |
|  3 | 豬悟能    |          100 |
|  4 | 曹孟德    |           77 |
|  5 | 劉玄德    |           55 |
|  6 | 孫權      |           88 |
|  7 | 宋公明    |           40 |
+----+-----------+--------------+
7 rows in set (0.01 sec)
  • 表達式包含多個字段
mysql> SELECT id, name, chinese + math + english FROM exam_result;
+----+-----------+--------------------------+
| id | name      | chinese + math + english |
+----+-----------+--------------------------+
|  1 | 唐三藏    |                      221 |
|  2 | 孫悟空    |                      242 |
|  3 | 豬悟能    |                      276 |
|  4 | 曹孟德    |                      233 |
|  5 | 劉玄德    |                      185 |
|  6 | 孫權      |                      221 |
|  7 | 宋公明    |                      170 |
+----+-----------+--------------------------+
7 rows in set (0.01 sec)
2.1.4 為查詢指定別名

語法:

SELECT column [AS] alias_name [...] FROM table_name;

案例:

mysql> SELECT id, name, chinese + math + english 總分 FROM exam_result;
+----+-----------+--------+
| id | name      | 總分   |
+----+-----------+--------+
|  1 | 唐三藏    |    221 |
|  2 | 孫悟空    |    242 |
|  3 | 豬悟能    |    276 |
|  4 | 曹孟德    |    233 |
|  5 | 劉玄德    |    185 |
|  6 | 孫權      |    221 |
|  7 | 宋公明    |    170 |
+----+-----------+--------+
7 rows in set (0.00 sec)
2.1.5 結果去重
# 查詢發現數學成績有重復的
mysql> SELECT math FROM exam_result;
+------+
| math |
+------+
|   98 |
|   78 |
|   98 |
|   84 |
|   85 |
|   73 |
|   65 |
+------+
7 rows in set (0.00 sec)# 利用DISTINCT關鍵字去重
mysql> SELECT DISTINCT math FROM exam_result;
+------+
| math |
+------+
|   98 |
|   78 |
|   84 |
|   85 |
|   73 |
|   65 |
+------+
6 rows in set (0.03 sec)

2.2 WHERE 條件

比較運算符:

在這里插入圖片描述

邏輯運算符:

在這里插入圖片描述

案例:

2.2.1 英語不及格的同學(英語成績<60)及英語成績
mysql> SELECT name, english FROM exam_result WHERE english < 60;
+-----------+---------+
| name      | english |
+-----------+---------+
| 唐三藏    |      56 |
| 劉玄德    |      45 |
| 宋公明    |      30 |
+-----------+---------+
3 rows in set (0.01 sec)
2.2.2 語文成績在 [80, 90] 分的同學及語文成績
# 使用 and 條件連接語句
mysql> SELECT name, chinese FROM exam_result WHERE chinese >= 80 AND chinese <= 90;
+-----------+---------+
| name      | chinese |
+-----------+---------+
| 孫悟空    |      87 |
| 豬悟能    |      88 |
| 曹孟德    |      82 |
+-----------+---------+
3 rows in set (0.00 sec)# 使用 between...and... 語句
mysql> SELECT name, chinese FROM exam_result WHERE chinese BETWEEN 80 AND 90;
+-----------+---------+
| name      | chinese |
+-----------+---------+
| 孫悟空    |      87 |
| 豬悟能    |      88 |
| 曹孟德    |      82 |
+-----------+---------+
3 rows in set (0.02 sec)
2.2.3 數學成績是 58 或者 59 或者 98 或者 99 分的同學及數學成績
# 使用 or 條件連接語句
mysql> SELECT name, math FROM exam_result-> WHERE math = 58-> OR math = 59-> OR math = 98-> OR math = 99;
+-----------+------+
| name      | math |
+-----------+------+
| 唐三藏    |   98 |
| 豬悟能    |   98 |
+-----------+------+
2 rows in set (0.00 sec)# 使用 in 語句
mysql> SELECT name, math FROM exam_result WHERE math IN (58, 59, 98, 99);
+-----------+------+
| name      | math |
+-----------+------+
| 唐三藏    |   98 |
| 豬悟能    |   98 |
+-----------+------+
2 rows in set (0.00 sec)
2.2.4 姓孫的同學 及 孫某同學
  • % 匹配任意多個(包括 0 個)任意字符
mysql> SELECT name FROM exam_result WHERE name LIKE '孫%';
+-----------+
| name      |
+-----------+
| 孫悟空    |
| 孫權      |
+-----------+
2 rows in set (0.01 sec)
  • _ 匹配嚴格的一個任意字符
mysql> SELECT name FROM exam_result WHERE name LIKE '孫_';
+--------+
| name   |
+--------+
| 孫權   |
+--------+
1 row in set (0.00 sec)
2.2.5 語文成績好于英語成績的同學

WHERE 條件中比較運算符兩側都是字段

mysql> SELECT name, chinese, english FROM exam_result WHERE chinese > english;
+-----------+---------+---------+
| name      | chinese | english |
+-----------+---------+---------+
| 唐三藏    |      67 |      56 |
| 孫悟空    |      87 |      77 |
| 曹孟德    |      82 |      67 |
| 劉玄德    |      55 |      45 |
| 宋公明    |      75 |      30 |
+-----------+---------+---------+
5 rows in set (0.00 sec)
2.2.6 總分在 200 分以下的同學

WHERE 條件中使用表達式

# 別名不能用在 WHERE 條件中
mysql> SELECT name, chinese + math + english 總分 FROM exam_result-> WHERE chinese + math + english < 200;
+-----------+--------+
| name      | 總分   |
+-----------+--------+
| 劉玄德    |    185 |
| 宋公明    |    170 |
+-----------+--------+
2 rows in set (0.00 sec)
2.2.7 語文成績 > 80 并且不姓孫的同學
# and 與 not 的使用
mysql> SELECT name, chinese FROM exam_result-> WHERE chinese > 80 AND name NOT LIKE '孫%';
+-----------+---------+
| name      | chinese |
+-----------+---------+
| 豬悟能    |      88 |
| 曹孟德    |      82 |
+-----------+---------+
2 rows in set (0.00 sec)
2.2.8 孫某同學,否則要求總成績 > 200 并且 語文成績 < 數學成績 并且 英語成績 > 80
# 綜合查詢
mysql> select name, chinese, math, english, chinese+math+english total-> from exam_result where-> (name like '孫%') or-> (chinese+math+english > 200 and chinese < math and english > 80);
+-----------+---------+------+---------+-------+
| name      | chinese | math | english | total |
+-----------+---------+------+---------+-------+
| 孫悟空    |      87 |   78 |      77 |   242 |
| 豬悟能    |      88 |   98 |      90 |   276 |
| 孫權      |      70 |   73 |      78 |   221 |
+-----------+---------+------+---------+-------+
3 rows in set (0.00 sec)
2.2.9 NULL 的查詢
# 查詢所有學生
mysql> select * from students;
+-----+-------+-----------+-------+
| id  | sn    | name      | qq    |
+-----+-------+-----------+-------+
| 100 | 10010 | 唐大師    | NULL  |
| 101 | 10001 | 孫悟空    | 11111 |
| 103 | 20002 | 孫仲謀    | NULL  |
| 105 | 20001 | 曹阿瞞    | NULL  |
+-----+-------+-----------+-------+
4 rows in set (0.01 sec)# 查詢 qq 非空的學生
mysql> SELECT name, qq FROM students WHERE qq IS NOT NULL;
+-----------+-------+
| name      | qq    |
+-----------+-------+
| 孫悟空    | 11111 |
+-----------+-------+
1 row in set (0.00 sec)# = 和 <=> 對NULL查詢的影響
mysql> SELECT NULL = NULL, NULL = 1, NULL = 0;
+-------------+----------+----------+
| NULL = NULL | NULL = 1 | NULL = 0 |
+-------------+----------+----------+
|        NULL |     NULL |     NULL |
+-------------+----------+----------+
1 row in set (0.00 sec)mysql> SELECT NULL <=> NULL, NULL <=> 1, NULL <=> 0;
+---------------+------------+------------+
| NULL <=> NULL | NULL <=> 1 | NULL <=> 0 |
+---------------+------------+------------+
|             1 |          0 |          0 |
+---------------+------------+------------+
1 row in set (0.00 sec)

2.3 結果排序

  • ASC 為升序(從小到大)
  • DESC 為降序(從大到小)
  • 默認為 ASC

語法:

SELECT ... FROM table_name [WHERE ...]
ORDER BY column [ASC|DESC], [...];

注意:沒有 ORDER BY 子句的查詢,返回的順序是未定義的,永遠不要依賴這個順序

案例:

2.3.1 同學及數學成績,按數學成績升序顯示
mysql> SELECT name, math FROM exam_result ORDER BY math;
+-----------+------+
| name      | math |
+-----------+------+
| 宋公明    |   65 |
| 孫權      |   73 |
| 孫悟空    |   78 |
| 曹孟德    |   84 |
| 劉玄德    |   85 |
| 唐三藏    |   98 |
| 豬悟能    |   98 |
+-----------+------+
7 rows in set (0.00 sec)
2.3.2 同學及 qq 號,按 qq 號排序顯示
# NULL 視為比任何值都小,升序出現在最上面
mysql> SELECT name, qq FROM students ORDER BY qq;
+-----------+-------+
| name      | qq    |
+-----------+-------+
| 唐大師    | NULL  |
| 孫仲謀    | NULL  |
| 曹阿瞞    | NULL  |
| 孫悟空    | 11111 |
+-----------+-------+
4 rows in set (0.00 sec)# NULL 視為比任何值都小,降序出現在最下面
mysql> SELECT name, qq FROM students ORDER BY qq DESC;
+-----------+-------+
| name      | qq    |
+-----------+-------+
| 孫悟空    | 11111 |
| 唐大師    | NULL  |
| 孫仲謀    | NULL  |
| 曹阿瞞    | NULL  |
+-----------+-------+
4 rows in set (0.00 sec)
2.3.3 查詢同學各門成績,依次按 數學降序,英語升序,語文升序的方式顯示

多字段排序,排序優先級隨書寫順序

# 優先數學降序,數學字段對應值相同時,英語升序...
mysql> SELECT name, math, english, chinese FROM exam_result-> ORDER BY math DESC, english, chinese;
+-----------+------+---------+---------+
| name      | math | english | chinese |
+-----------+------+---------+---------+
| 唐三藏    |   98 |      56 |      67 |
| 豬悟能    |   98 |      90 |      88 |
| 劉玄德    |   85 |      45 |      55 |
| 曹孟德    |   84 |      67 |      82 |
| 孫悟空    |   78 |      77 |      87 |
| 孫權      |   73 |      78 |      70 |
| 宋公明    |   65 |      30 |      75 |
+-----------+------+---------+---------+
7 rows in set (0.00 sec)
2.3.4 查詢同學及總分,由高到低
# order by 中可以使用表達式
mysql> SELECT name, chinese + english + math FROM exam_result-> ORDER BY chinese + english + math DESC;
+-----------+--------------------------+
| name      | chinese + english + math |
+-----------+--------------------------+
| 豬悟能    |                      276 |
| 孫悟空    |                      242 |
| 曹孟德    |                      233 |
| 唐三藏    |                      221 |
| 孫權      |                      221 |
| 劉玄德    |                      185 |
| 宋公明    |                      170 |
+-----------+--------------------------+
7 rows in set (0.00 sec)# ORDER BY 子句中可以使用列別名
mysql> SELECT name, chinese + english + math 總分 FROM exam_result ORDER BY 總分 DESC;
+-----------+--------+
| name      | 總分   |
+-----------+--------+
| 豬悟能    |    276 |
| 孫悟空    |    242 |
| 曹孟德    |    233 |
| 唐三藏    |    221 |
| 孫權      |    221 |
| 劉玄德    |    185 |
| 宋公明    |    170 |
+-----------+--------+
7 rows in set (0.00 sec)
2.3.5 查詢姓孫的同學或者姓曹的同學數學成績,結果按數學成績由高到低顯示
# 結合 WHERE 子句和 ORDER BY 子句
mysql> SELECT name, math FROM exam_result-> WHERE name LIKE '孫%' OR name LIKE '曹%'-> ORDER BY math DESC;
+-----------+------+
| name      | math |
+-----------+------+
| 曹孟德    |   84 |
| 孫悟空    |   78 |
| 孫權      |   73 |
+-----------+------+
3 rows in set (0.00 sec)

2.4 篩選分頁結果

語法:

-- 起始下標為 0
-- 從 s 開始,篩選 n 條結果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n
-- 從0 開始,篩選n 條結果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
;
-- 從 s 開始,篩選 n 條結果,比第二種用法更明確,建議使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;

建議:對未知表進行查詢時,最好加一條 LIMIT 1,避免因為表中數據過大,查詢全表數據導致數據庫卡死

案例:

按 id 進行分頁,每頁 3 條記錄,分別顯示 第 1、2、3 頁

# 第一頁
mysql> SELECT id, name, math, english, chinese FROM exam_result-> ORDER BY id LIMIT 3 OFFSET 0;
+----+-----------+------+---------+---------+
| id | name      | math | english | chinese |
+----+-----------+------+---------+---------+
|  1 | 唐三藏    |   98 |      56 |      67 |
|  2 | 孫悟空    |   78 |      77 |      87 |
|  3 | 豬悟能    |   98 |      90 |      88 |
+----+-----------+------+---------+---------+
3 rows in set (0.01 sec)# 第二頁
mysql> SELECT id, name, math, english, chinese FROM exam_result ORDER BY id LIMIT 3 OFFSET 3;
+----+-----------+------+---------+---------+
| id | name      | math | english | chinese |
+----+-----------+------+---------+---------+
|  4 | 曹孟德    |   84 |      67 |      82 |
|  5 | 劉玄德    |   85 |      45 |      55 |
|  6 | 孫權      |   73 |      78 |      70 |
+----+-----------+------+---------+---------+
3 rows in set (0.00 sec)# 第三頁
mysql> SELECT id, name, math, english, chinese FROM exam_result ORDER BY id LIMIT 3 OFFSET 6;
+----+-----------+------+---------+---------+
| id | name      | math | english | chinese |
+----+-----------+------+---------+---------+
|  7 | 宋公明    |   65 |      30 |      75 |
+----+-----------+------+---------+---------+
1 row in set (0.00 sec)

3. Update

語法:

UPDATE table_name SET column = expr [, column = expr ...]
[WHERE ...] [ORDER BY ...] [LIMIT ...]

對查詢到的結果進行列值更新

案例:

3.1 單列變更

將孫悟空同學的數學成績變更為 80 分

# 查看原數據
mysql> SELECT name, math FROM exam_result WHERE name = '孫悟空';
+-----------+------+
| name      | math |
+-----------+------+
| 孫悟空    |   78 |
+-----------+------+
1 row in set (0.01 sec)# 數據更新
mysql> UPDATE exam_result SET math = 80 WHERE name = '孫悟空';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0# 查看更新后數據
mysql> SELECT name, math FROM exam_result WHERE name = '孫悟空';
+-----------+------+
| name      | math |
+-----------+------+
| 孫悟空    |   80 |
+-----------+------+
1 row in set (0.00 sec)

3.2 一次更新多個列

將曹孟德同學的數學成績變更為 60 分,語文成績變更為 70 分

# 查看原數據
mysql> SELECT name, math, chinese FROM exam_result WHERE name = '曹孟德';
+-----------+------+---------+
| name      | math | chinese |
+-----------+------+---------+
| 曹孟德    |   84 |      82 |
+-----------+------+---------+
1 row in set (0.00 sec)# 數據更新
mysql> UPDATE exam_result SET math = 60, chinese = 70 WHERE name = '曹孟德';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0# 查看更新后數據
mysql> SELECT name, math, chinese FROM exam_result WHERE name = '曹孟德';
+-----------+------+---------+
| name      | math | chinese |
+-----------+------+---------+
| 曹孟德    |   60 |      70 |
+-----------+------+---------+
1 row in set (0.00 sec)

3.3 更新值為原值基礎上進行變更

將總成績倒數前三的 3 位同學的數學成績加上 30 分

# 查看原數據,別名可以在 ORDER BY 中使用
mysql> SELECT name, math, chinese + math + english 總分 FROM exam_result-> ORDER BY 總分 LIMIT 3;
+-----------+------+--------+
| name      | math | 總分   |
+-----------+------+--------+
| 宋公明    |   65 |    170 |
| 劉玄德    |   85 |    185 |
| 曹孟德    |   60 |    197 |
+-----------+------+--------+
3 rows in set (0.00 sec)# 數據更新
mysql> UPDATE exam_result SET math = math + 30-> ORDER BY chinese + math + english LIMIT 3;
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3  Changed: 3  Warnings: 0# 查詢更新后的信息
mysql> SELECT name, math, chinese + math + english 總分 FROM exam_result-> WHERE name IN ('宋公明', '劉玄德', '曹孟德');
+-----------+------+--------+
| name      | math | 總分   |
+-----------+------+--------+
| 曹孟德    |   90 |    227 |
| 劉玄德    |  115 |    215 |
| 宋公明    |   95 |    200 |
+-----------+------+--------+
3 rows in set (0.00 sec)# 
mysql> SELECT name, math, chinese + math + english 總分 FROM exam_result-> ORDER BY 總分 LIMIT 3;
+-----------+------+--------+
| name      | math | 總分   |
+-----------+------+--------+
| 宋公明    |   95 |    200 |
| 劉玄德    |  115 |    215 |
| 唐三藏    |   98 |    221 |
+-----------+------+--------+
3 rows in set (0.00 sec)mysql> SELECT name, math, chinese + math + english 總分 FROM exam_result-> WHERE name IN ('宋公明', '劉玄德', '曹孟德') ORDER BY 總分 desc;
+-----------+------+--------+
| name      | math | 總分   |
+-----------+------+--------+
| 曹孟德    |   90 |    227 |
| 劉玄德    |  115 |    215 |
| 宋公明    |   95 |    200 |
+-----------+------+--------+
3 rows in set (0.00 sec)

3.4 將所有同學的語文成績更新為原來的 2 倍

注意:更新全表語句慎用

  • 沒有 WHERE 子句,更新全表
# 查看原數據
mysql> SELECT * FROM exam_result;
+----+-----------+---------+------+---------+
| id | name      | chinese | math | english |
+----+-----------+---------+------+---------+
|  1 | 唐三藏    |      67 |   98 |      56 |
|  2 | 孫悟空    |      87 |   80 |      77 |
|  3 | 豬悟能    |      88 |   98 |      90 |
|  4 | 曹孟德    |      70 |   90 |      67 |
|  5 | 劉玄德    |      55 |  115 |      45 |
|  6 | 孫權      |      70 |   73 |      78 |
|  7 | 宋公明    |      75 |   95 |      30 |
+----+-----------+---------+------+---------+
7 rows in set (0.01 sec)# 全表數據更新
mysql> UPDATE exam_result SET chinese = chinese * 2;
Query OK, 7 rows affected (0.06 sec)
Rows matched: 7  Changed: 7  Warnings: 0# 查看更新后數據
mysql> SELECT * FROM exam_result;
+----+-----------+---------+------+---------+
| id | name      | chinese | math | english |
+----+-----------+---------+------+---------+
|  1 | 唐三藏    |     134 |   98 |      56 |
|  2 | 孫悟空    |     174 |   80 |      77 |
|  3 | 豬悟能    |     176 |   98 |      90 |
|  4 | 曹孟德    |     140 |   90 |      67 |
|  5 | 劉玄德    |     110 |  115 |      45 |
|  6 | 孫權      |     140 |   73 |      78 |
|  7 | 宋公明    |     150 |   95 |      30 |
+----+-----------+---------+------+---------+
7 rows in set (0.00 sec)

4. Delete

4.1 刪除數據

語法:

DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]

案例:

4.1.1 刪除孫悟空同學的考試成績
# 查看原數據
mysql> SELECT * FROM exam_result WHERE name = '孫悟空';
+----+-----------+---------+------+---------+
| id | name      | chinese | math | english |
+----+-----------+---------+------+---------+
|  2 | 孫悟空    |     174 |   80 |      77 |
+----+-----------+---------+------+---------+
1 row in set (0.00 sec)# 刪除數據
mysql> DELETE FROM exam_result WHERE name = '孫悟空';
Query OK, 1 row affected (0.00 sec)# 查看刪除結果
mysql> SELECT * FROM exam_result WHERE name = '孫悟空';
Empty set (0.00 sec)
4.1.2 刪除整張表數據

注意:刪除整表操作要慎用!

前置準備:

mysql> CREATE TABLE for_delete ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20) );
Query OK, 0 rows affected (0.00 sec)mysql> INSERT INTO for_delete (name) VALUES ('A'), ('B'), ('C');
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0mysql> SELECT * FROM for_delete;
+----+------+
| id | name |
+----+------+
|  1 | A    |
|  2 | B    |
|  3 | C    |
+----+------+
3 rows in set (0.00 sec)

刪除操作:

mysql> DELETE FROM for_delete;
Query OK, 3 rows affected (0.00 sec)mysql> SELECT * FROM for_delete;
Empty set (0.00 sec)

再插入一條數據,自增 id 在原值上增長

# 插入數據
mysql> INSERT INTO for_delete (name) VALUES ('D');
Query OK, 1 row affected (0.00 sec)mysql> SELECT * FROM for_delete;
+----+------+
| id | name |
+----+------+
|  4 | D    |
+----+------+
1 row in set (0.00 sec)# 查看表結構,會有 AUTO_INCREMENT=n 項
mysql> SHOW CREATE TABLE for_delete\G;
*************************** 1. row ***************************Table: for_delete
Create Table: CREATE TABLE `for_delete` (`id` int NOT NULL AUTO_INCREMENT,`name` varchar(20) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)ERROR: 
No query specified

4.2 截斷表

語法:

TRUNCATE [TABLE] table_name

注意:這個操作慎用

  1. 只能對整表操作,不能像 DELETE 一樣針對部分數據操作;
  2. 實際上 MySQL 不對數據操作,所以比 DELETE 更快,但是TRUNCATE在刪除數據的時候,并不經過真正的事務,所以無法回滾
  3. 重置 AUTO_INCREMENT 項

前置準備:

mysql> CREATE TABLE for_truncate (-> id INT PRIMARY KEY AUTO_INCREMENT,-> name VARCHAR(20)-> );
Query OK, 0 rows affected (0.01 sec)mysql> INSERT INTO for_truncate (name) VALUES ('A'), ('B'), ('C');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0mysql> SELECT * FROM for_truncate;
+----+------+
| id | name |
+----+------+
|  1 | A    |
|  2 | B    |
|  3 | C    |
+----+------+
3 rows in set (0.00 sec)

截斷操作:

mysql> TRUNCATE for_truncate;
Query OK, 0 rows affected (0.03 sec)mysql> SELECT * FROM for_truncate;
Empty set (0.00 sec)

再插入一條數據,自增 id 在重新增長:

# 插入數據
mysql> INSERT INTO for_truncate (name) VALUES ('D');
Query OK, 1 row affected (0.00 sec)mysql> SELECT * FROM for_truncate;
+----+------+
| id | name |
+----+------+
|  1 | D    |
+----+------+
1 row in set (0.00 sec)# 查看表結構,會有 AUTO_INCREMENT=2 項
mysql> SHOW CREATE TABLE for_truncate\G;
*************************** 1. row ***************************Table: for_truncate
Create Table: CREATE TABLE `for_truncate` (`id` int NOT NULL AUTO_INCREMENT,`name` varchar(20) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)ERROR: 
No query specified

5. 插入查詢結果(insert into… select…)

語法:

INSERT INTO table_name [(column [, column ...])] SELECT ...

案例:

刪除表中的的重復復記錄,重復的數據只能有一份

mysql> CREATE TABLE duplicate_table (id int, name varchar(20));
Query OK, 0 rows affected (0.01 sec)mysql> INSERT INTO duplicate_table VALUES-> (100, 'aaa'),-> (100, 'aaa'),-> (200, 'bbb'),-> (200, 'bbb'),-> (200, 'bbb'),-> (300, 'ccc');
Query OK, 6 rows affected (0.02 sec)
Records: 6  Duplicates: 0  Warnings: 0

思路:

# 創建一張空表 no_duplicate_table,結構和 duplicate_table 一樣
mysql> CREATE TABLE no_duplicate_table LIKE duplicate_table;
Query OK, 0 rows affected (0.00 sec)# 將 duplicate_table 的去重數據插入到 no_duplicate_table
mysql> INSERT INTO no_duplicate_table SELECT DISTINCT * FROM duplicate_table;
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0# 通過重命名表,實現原子的去重操作
mysql> RENAME TABLE duplicate_table TO old_duplicate_table,-> no_duplicate_table TO duplicate_table;
Query OK, 0 rows affected (0.04 sec)# 查看最終結果
mysql> SELECT * FROM duplicate_table;
+------+------+
| id   | name |
+------+------+
|  100 | aaa  |
|  200 | bbb  |
|  300 | ccc  |
+------+------+
3 rows in set (0.00 sec)

6. 聚合函數

在這里插入圖片描述

案例:

6.1 統計班級共有多少同學

# 使用 * 做統計,不受 NULL 影響
mysql> SELECT COUNT(*) FROM students;
+----------+
| COUNT(*) |
+----------+
|        4 |
+----------+
1 row in set (0.01 sec)# 使用表達式做統計
mysql> SELECT COUNT(1) FROM students;
+----------+
| COUNT(1) |
+----------+
|        4 |
+----------+
1 row in set (0.00 sec)

6.2 統計班級收集的 qq 號有多少

# NULL 不會計入結果
mysql> SELECT COUNT(qq) FROM students;
+-----------+
| COUNT(qq) |
+-----------+
|         1 |
+-----------+
1 row in set (0.02 sec)

6.3 統計本次考試的數學成績分數個數

# 查看所有信息
mysql> SELECT * FROM exam_result;
+----+-----------+---------+------+---------+
| id | name      | chinese | math | english |
+----+-----------+---------+------+---------+
|  1 | 唐三藏    |     134 |   98 |      56 |
|  3 | 豬悟能    |     176 |   98 |      90 |
|  4 | 曹孟德    |     140 |   90 |      67 |
|  5 | 劉玄德    |     110 |  115 |      45 |
|  6 | 孫權      |     140 |   73 |      78 |
|  7 | 宋公明    |     150 |   95 |      30 |
+----+-----------+---------+------+---------+
6 rows in set (0.00 sec)# COUNT(math) 統計的是全部成績
mysql> SELECT COUNT(math) FROM exam_result;
+-------------+
| COUNT(math) |
+-------------+
|           6 |
+-------------+
1 row in set (0.00 sec)# COUNT(DISTINCT math) 統計的是去重成績數量
mysql> SELECT COUNT(DISTINCT math) FROM exam_result;
+----------------------+
| COUNT(DISTINCT math) |
+----------------------+
|                    5 |
+----------------------+
1 row in set (0.00 sec)

6.4 統計數學成績總分

mysql> SELECT SUM(math) FROM exam_result;
+-----------+
| SUM(math) |
+-----------+
|       569 |
+-----------+
1 row in set (0.00 sec)# 不及格 < 60 的總分,沒有結果,返回 NULL
mysql> SELECT SUM(math) FROM exam_result WHERE math < 60;
+-----------+
| SUM(math) |
+-----------+
|      NULL |
+-----------+
1 row in set (0.00 sec)

6.5 統計平均總分

mysql> SELECT AVG(chinese + math + english) 平均總分 FROM exam_result;
+--------------+
| 平均總分     |
+--------------+
|        297.5 |
+--------------+
1 row in set (0.00 sec)

6.6 返回英語最高分

mysql> SELECT MAX(english) FROM exam_result;
+--------------+
| MAX(english) |
+--------------+
|           90 |
+--------------+
1 row in set (0.00 sec)

6.7 返回 > 70 分以上的數學最低分

mysql> SELECT MIN(math) FROM exam_result WHERE math > 70;
+-----------+
| MIN(math) |
+-----------+
|        73 |
+-----------+
1 row in set (0.00 sec)

7. group by子句的使用

在 select 中使用 group by 子句可以對指定列進行分組查詢

select column1, column2, .. from table group by column;

案例:

  • 準備工作,創建一個雇員信息表(來自oracle 9i的經典測試表)

    • emp 員工表

    • dept 部門表

    • salgrade 工資等級表

  • 如何顯示每個部門的平均工資和最高工資

mysql> select deptno,avg(sal),max(sal) from emp group by deptno;
+--------+-------------+----------+
| deptno | avg(sal)    | max(sal) |
+--------+-------------+----------+
|     20 | 2175.000000 |  3000.00 |
|     30 | 1566.666667 |  2850.00 |
|     10 | 2916.666667 |  5000.00 |
+--------+-------------+----------+
3 rows in set (0.00 sec)
  • 顯示每個部門的每種崗位的平均工資和最低工資
mysql> select avg(sal),min(sal),job, deptno from emp group by deptno, job;
+-------------+----------+-----------+--------+
| avg(sal)    | min(sal) | job       | deptno |
+-------------+----------+-----------+--------+
|  950.000000 |   800.00 | CLERK     |     20 |
| 1400.000000 |  1250.00 | SALESMAN  |     30 |
| 2975.000000 |  2975.00 | MANAGER   |     20 |
| 2850.000000 |  2850.00 | MANAGER   |     30 |
| 2450.000000 |  2450.00 | MANAGER   |     10 |
| 3000.000000 |  3000.00 | ANALYST   |     20 |
| 5000.000000 |  5000.00 | PRESIDENT |     10 |
|  950.000000 |   950.00 | CLERK     |     30 |
| 1300.000000 |  1300.00 | CLERK     |     10 |
+-------------+----------+-----------+--------+
9 rows in set (0.00 sec)
  • 顯示平均工資低于2000的部門和它的平均工資
mysql> select deptno, avg(sal) as 平均工資 from emp group by deptno having (平均工資<2000);
+--------+--------------+
| deptno | 平均工資     |
+--------+--------------+
|     30 |  1566.666667 |
+--------+--------------+
1 row in set (0.00 sec)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/40967.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/40967.shtml
英文地址,請注明出處:http://en.pswp.cn/web/40967.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

中介子方程四十七

XXFXXaXnXaXXαXLXyXXWXuXeXKXXiXyXΣXXΣXXVXuXhXXWXηXWXXhXuXVXXΣXXΣXyXiXXKXeXuXWXXyXLXαXXaXnXaXXFXXaXnXaXXαXLXyXXWXuXeXKXXiXyXΣXXΣXXVXuXhXXWXηXWXXhXuXVXXΣXXΣXyXiXXKXeXuXWXXyXLXαXXaXnXaXXFXXuXXWXXuXXdXXrXXαXXuXpXXKXηXiXXnXXyXηXuXXrXXaXnXXαXLXy…

采用Java語言+開發工具 Idea+ scode數字化產科管理平臺源碼,產科管理新模式

采用Java語言開發工具 Idea scode數字化產科管理平臺源碼&#xff0c;產科管理新模式 數字化產科管理系統是現代醫療信息化建設的重要組成部分&#xff0c;它利用現代信息技術手段&#xff0c;對孕產婦的孕期管理、分娩過程及產后康復等各個環節進行數字化、智能化管理&#xf…

使用LoFTR模型進行圖像配準、重疊區提取

LoFTR模型源自2021年CVPR提出的一篇論文LoFTR: Detector-Free Local Feature Matching with Transformers&#xff0c;其基于pytorch實現圖像配準&#xff0c;與基于superpointsuperglue的方法不同&#xff0c; 是一個端到端的圖像配準方法。與LoFTR官方庫相關的有loftr2onnx庫…

面試專區|【52道微服務架構高頻題整理(附答案背誦版)】

簡述什么是微服務&#xff1f; 微服務是一種軟件架構風格&#xff0c;它將應用程序拆分成一系列小型、獨立的服務&#xff0c;每個服務都運行在其自己的進程中&#xff0c;通過輕量級通信機制進行通信。每個服務都具有明確的業務能力&#xff0c;并且可以獨立開發、測試、部署…

Android在framework層添加自定義服務的流程

環境說明 ubuntu16.04android4.1java version “1.6.0_45”GNU Make 3.81gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12) 可能有人會問&#xff0c;現在都2024了怎么還在用android4版本&#xff0c;早都過時了。確實&#xff0c;現在最新的都是Android13、And…

墨烯的C語言技術棧-C語言基礎-007

七.字符串 由雙引號引起的一串字符稱為字符串字面值,或者簡稱字符串 字符串的結束標志是"\0" int main() { //#qWer$ //char 字符類型 //a; //char ch "w"; //字符串 //C語言中沒有字符串類型 "abcdefg"; char arr1[] "abc…

柯橋職場英語學習商務英語口語生活英語培訓生活口語學習

辣妹用英語怎么說&#xff1f; 辣妹在英語中通常被翻譯為“hot girl”或“spicy girl”&#xff0c;但更常見和直接的是“hot chick”或簡單地使用“hot”來形容。 舉個例子: Shes a real hot girl with her trendy outfit and confident attitude. 她真是個辣妹&#xff0…

Redis---10---SpringBoot集成Redis

SpringBoot集成Redis 總體概述jedis-lettuce-RedisTemplate三者的聯系 本地Java連接Redis常見問題&#xff0c;注意 bind配置請注釋掉? 保護模式設置為no? Linux系統的防火墻設置? redis服務器的IP地址和密碼是否正確? 忘記寫訪問redis的服務端口號和auth密碼集成Jedis …

Docker:Docker網絡

Docker Network 是 Docker 平臺中的一項功能&#xff0c;允許容器相互通信以及與外界通信。它提供了一種在 Docker 環境中創建和管理虛擬網絡的方法。Docker 網絡使容器能夠連接到一個或多個網絡&#xff0c;從而使它們能夠安全地共享信息和資源。 預備知識 推薦先看視頻先有…

最長公共子序列求長度和輸出子序列C代碼

求兩個字符串的公共子序列我們都知道需要使用用動態規劃思想 用res[i][j]表示截止到字符串A的第i個字符串和截止到字符串B的第j個字符的最長公共子序列。如兩個字符串helloworld和loop&#xff0c;res[5][3]表示子串hello和子串loo的最長公共子序列&#xff0c;為lo&#xff0…

2024機器人科研/研發領域最新研究方向崗位職責與要求

具身智能工程師 從事具身智能領域的技術研究或產品開發&#xff0c;制定具身智能技術標準&#xff0c;利用大模型技術來提高機器人的智能化水平&#xff0c;研究端云協同的機器人系統框架&#xff0c;并賦能人形/復合等各類形態的機器人。具體內容包括不限于&#xff1a; 1、負…

maven項目使用netty,前端是vue2,實現通訊

引入的java包 <!-- 以下是即時通訊--><!-- Netty core modules --><dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.76.Final</version> <!-- 使用最新的穩定版本…

C++初學者指南-4.診斷---地址檢測器

C初學者指南-4.診斷—地址檢測器 幻燈片 地址檢測器&#xff08;ASan&#xff09; 適用編譯器g,clang檢測內存錯誤 內存泄露訪問已經釋放的內存訪問不正確的堆棧區域 用額外的指令檢測代碼 運行時間增加約70%內存使用量大約增加了3倍 示例&#xff1a;檢測空指針 使用地址…

中英雙語介紹百老匯著名歌劇:《貓》(Cats)和《劇院魅影》(The Phantom of the Opera)

中文版 百老匯著名歌劇 百老匯&#xff08;Broadway&#xff09;是世界著名的劇院區&#xff0c;位于美國紐約市曼哈頓。這里匯集了許多著名的音樂劇和歌劇&#xff0c;吸引了全球各地的觀眾。以下是兩部百老匯的經典音樂劇&#xff1a;《貓》和《劇院魅影》的詳細介紹。 1.…

CP AUTOSAR標準之RAMTest(AUTOSAR_CP_SWS_RAMTest)(更新中……)

1 簡介和功能概述 AUTOSAR基礎軟件模塊“RAM測試”的功能、API和配置。 ??RAM測試是對RAM單元的物理健康狀況的測試。它不是為了測試RAM的內容。用于寄存器的RAM也經過測試。 ??在本文檔中,RAM單元被理解為內存單位,可由處理器單獨尋址。因此,對于16位處理器,單元大小(…

拉普拉斯逆變換

https://www.bilibili.com/video/BV17i4y1475Y?p21&vd_source2e6b4ba548ec9462b2f9633ff700e9b9 CV 17 陳永平教授關于拉普拉斯逆變換的式子的推導 最關鍵的兩步 想到取一個合適的contour L R L_R LR?部分是實部 γ \gamma γ要大于所有極點的實部,這樣就可以搞一個大…

SCI二區TOP|麋鹿群優化算法: 一種新穎的受自然啟發的元啟發式算法

目錄 1.背景2.算法原理2.1算法思想2.2算法過程 3.結果展示4.參考文獻5.代碼獲取 1.背景 2024年&#xff0c;SO Oladejo受到麋鹿群的繁殖過程啟發&#xff0c;提出了麋鹿群優化算法&#xff08;Elk herd optimizer, EHO&#xff09;。 2.算法原理 2.1算法思想 EHO靈感來自麋鹿…

設計外包管理辦法和步驟之HMI

設計外包流程和步驟之人機界面HMI, Human-Machine Interface 1. 源由2. 流程&步驟2.1 明確需求2.2 尋找外包公司2.3 簽訂合同2.4 項目啟動2.5 設計過程2.6 迭代開發2.7 驗收和交付2.8 維護和支持 3. 工具和平臺推薦4. 總結5. 補充 - 需求、交付、驗收5.1 需求5.2 交付5.3 驗…

C語言編程與進階

1.0 C語言關鍵字 1-1C語言關鍵字-CSDN博客文章瀏覽閱讀831次&#xff0c;點贊13次&#xff0c;收藏24次。define使用define定義常量return 0;使用define定義宏// define 定義宏&#xff0c;名字是ADD(x,y),x y 是宏的參數int a 10;int b 20;return 0;宏定義的本質是替換&am…

pandas讀取CSV格式文件生成數據發生器iteration

背景 數據集標簽為csv文件格式&#xff0c;有三個字段column_hander [‘id’, ‘boneage’, ‘male’]&#xff0c;需要自己定義數據集。文件較大&#xff0c;做一個數據發生器迭代更新數據集。 實現模板 在Pandas中&#xff0c;可以使用pandas.read_csv函數讀取CSV文件&…