MySQL的基本查询(附案例)

news2024/11/17 21:25:24

目录

前言

 Create(创建)

 单行数据+全列插入:

多行数据+指定列插入:

 插入否则更新:

替换:

Retrieve(读取) 

SELECT 列:

全列查询:

指定列查询:

 查询字段为表达式:

表达式包含一个字段:

 表达式包含多个字段:

为查询结果指定别名 :

结果去重:

WHRER条件: 

基本比较 :

 语文成绩在[80,90]分的同学及语文成绩:

 数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩:

性孙 的同学及孙某同学:

语文成绩好于英语成绩的同学:

 NULL的查询:

 结果排序:

同学及数学成绩,按数学成绩升序显示:

 同学及 qq 号,按 qq 号排序显示:

查询同学各门成绩,依次按 数学降序,英语升序,语文升序的方式显示: 

查询同学及总分,由高到低:

筛选分页结果:

按 id 进行分页,每页 3 条记录,分别显示 第 1、2、3 页:

Update(更新) 

 将孙悟空同学的数学成绩变更为 80 分:

 将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分:

 将总成绩倒数前三的 3 位同学的数学成绩加上 30 分:

Delete(删除) 

删除数据: 

删除孙悟空同学的考试成绩:

删除整张表数据:

截断表:

插入查询结果 

聚合函数


前言

 如果没看过对于表的操作可以看一下下面这篇博客-->https://mp.csdn.net/mp_blog/creation/editor/135658650icon-default.png?t=N7T8https://mp.csdn.net/mp_blog/creation/editor/135658650

本篇博客主要分享的是对于表的增删查改,也就是大名鼎鼎的CRUD:Create(创建)、Retrieve(读取)、Update(更新)、Delete(删除)


 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)
);

 单行数据+全列插入:

--插入的记录,要跟表的value_list 数量必须和定义表的数量和顺序一致 

INSERT INTO students VALUES (100, 10000, '唐三藏', NULL);
Query OK, 1 row affected (0.02 sec)

INSERT INTO students VALUES (101, 10001, '孙悟空', '11111');

Query OK, 1 row affected (0.02 sec)
-- 查看插入结果
SELECT * FROM students;
+-----+-------+-----------+-------+
| id | sn     | name      | qq    |
+-----+-------+-----------+-------+
| 100 | 10000 | 唐三藏     | NULL  |
| 101 | 10001 | 孙悟空     | 11111 |
+-----+-------+-----------+-------+
2 rows in set (0.00 sec)

多行数据+指定列插入:

这时候指定列的插入也要和value_list的数量、顺序保持一致

INSERT INTO students (id, sn, name) VALUES
    (102, 20001, '曹孟德'),
    (103, 20002, '孙仲谋');

Query OK, 2 rows affected (0.02 sec)
Records: 2 Duplicates: 0  Warnings: 0

查看插入结果:

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)

 插入否则更新:

由于主键 或者 唯一键对应的值已经存在而导致的插入失败 

-- 主键冲突
INSERT INTO students (id, sn, name) VALUES (100, 10010, '唐大师');
ERROR 1062 (23000): Duplicate entry '100' for key 'PRIMARY'
-- 唯一键冲突
INSERT INTO students (sn, name) VALUES (20001, '曹阿瞒');
ERROR 1062 (23000): Duplicate entry '20001' for key 'sn'

可以选择的进行同步更新操作语法:

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

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 affecter:表中有冲突,但重读数据的值和update的值相等(自己插入自己)
  • 1 row affected 表中没有冲突数据,数据被插入
  • 2 row affected 表中有冲突数据,并且数据已经被更新

0、1、2代表收到影响的行,代入进去很好理解

通过MySQL函数获取收到影响的数据行数:

SELECT ROW_COUNT();
+-------------+
| ROW_COUNT() |
+-------------+
|      2      |
+-------------+
1 row in set (0.00 sec)

-- ON DUPLICATE KEY 当发生重复key的时候

替换:

  • 主键 或者 唯一键 没有冲突,就直接插入
  • 主键 或者 唯一键 有冲突,就删除后再插入
REPLACE INTO students (sn, name) VALUES (20001, '曹阿瞒');
Query OK, 2 rows affected (0.00 sec)
  • 1 row affected 表中没有冲突数据,数据被插入
  • 2 row affected 表中有冲突数据,删除后重新插入

Retrieve(读取) 

 语法:

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

案例:

-- 创建表结构
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 '英语成绩'
);
-- 插入测试数据
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.00 sec)
Records: 7 Duplicates: 0 Warnings: 0

SELECT 列:

全列查询:

  • 查询的列越多,意味着需要传输的数据量越大;
  • 可能会影响到索引的使用。
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)

指定列查询:

指定列的顺序不需要按定义表的顺序来

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)

 查询字段为表达式:

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.00 sec)

表达式包含一个字段:

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.00 sec)

 表达式包含多个字段:

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.00 sec)

为查询结果指定别名 :

语法:

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

例子:

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)

结果去重:

SELECT math FROM exam_result;
+--------+
| math |
+--------+
| 98 |
| 78 |
| 98 |
| 84 |
| 85 |
| 73 |
| 65 |
+--------+
7 rows in set (0.00 sec)

98分是重复的 

去重结果:

SELECT DISTINCT math FROM exam_result;
+--------+
| math |
+--------+
| 98 |
| 78 |
| 84 |
| 85 |
| 73 |
| 65 |
+--------+
6 rows in set (0.00 sec)

WHRER条件: 

比较运算符:

运算符 说明
>, >=, <, <= 大于,大于等于,小于,小于等于
=等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL
<=> 等于,NULL 安全,例如 NULL <=> NULL 的结果是TRUE(1)
BETWEEN a0 AND a1范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1)
IN (option, ...) 如果是 option 中的任意一个,返回 TRUE(1)
IS NULL是 NULL
IS NOT NULL 不是 NULL
LIKE 模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符
!=, <> 不等于

逻辑运算符:

运算符       说明
AND多个条件必须都为 TRUE(1),结果才是 TRUE(1)
OR任意一个条件为 TRUE(1), 结果为 TRUE(1)
NOT条件为 TRUE(1),结果为 FALSE(0)

案例:

基本比较 :

SELECT name, english FROM exam_result WHERE english < 60;
+-----------+--------+
| name | english |
+-----------+--------+
| 唐三藏 | 56 |
| 刘玄德 | 45 |
| 宋公明 | 30 |
+-----------+--------+
3 rows in set (0.01 sec)

 语文成绩在[80,90]分的同学及语文成绩:

可以使用AND 或 BETWEEN AND

-- 使用 AND 进行条件连接
SELECT name, chinese FROM exam_result WHERE chinese >= 80 AND chinese <= 90;
+-----------+-------+
| name | chinese |
+-----------+-------+
| 孙悟空 | 87 |
| 猪悟能 | 88 |
| 曹孟德 | 82 |
+-----------+-------+
3 rows in set (0.00 sec)

SELECT name, chinese FROM exam_result WHERE chinese BETWEEN 80 AND 90;
+-----------+-------+
| name | chinese |
+-----------+-------+
| 孙悟空 | 87 |
| 猪悟能 | 88 |
| 曹孟德 | 82 |
+-----------+-------+
3 rows in set (0.00 sec)

 数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩:

使用OR进行连接: 

-- 使用 OR 进行条件连接
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.01 sec)

 使用IN条件:

-- 使用 IN 条件
SELECT name, math FROM exam_result WHERE math IN (58, 59, 98, 99);
+-----------+--------+
| name | math |
+-----------+--------+
| 唐三藏 | 98 |
| 猪悟能 | 98 |
+-----------+--------+
2 rows in set (0.00 sec)

性孙 的同学及孙某同学:

%匹配任意多个字符(包括0)

SELECT name FROM exam_result WHERE name LIKE '孙%';
+-----------+
| name   |
+-----------+
| 孙悟空 |
| 孙权   |
+-----------+
2 rows in set (0.00 sec)

_严格匹配一个字符

SELECT name FROM exam_result WHERE name LIKE '孙_';
+--------+
| name |
+--------+
| 孙权 |
+--------+
1 row in set (0.00 sec)

语文成绩好于英语成绩的同学:

-- WHERE 条件中比较运算符两侧都是字段
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)

 NULL的查询:

-- 查询 students 表
+-----+-------+-----------+-------+
| id  | sn    | name  |  qq   |
+-----+-------+-----------+-------+
| 100 | 10010 | 唐大师 | NULL  |
| 101 | 10001 | 孙悟空 | 11111 |
| 103 | 20002 | 孙仲谋 | NULL  |
| 104 | 20001 | 曹阿瞒 | NULL  |
+-----+-------+-----------+-------+
4 rows in set (0.00 sec)

-- 查询 qq 号已知的同学姓名
SELECT name, qq FROM students WHERE qq IS NOT NULL;
+-----------+-------+
| name   | qq     |
+-----------+-------+
| 孙悟空 | 11111   |
+-----------+-------+
1 row in set (0.00 sec)

 NULL和NULL的比较,区别于 = 和<=> :

SELECT NULL = NULL, NULL = 1, NULL = 0;
+-------------+----------+----------+
| NULL = NULL | NULL = 1 | NULL = 0 |
+-------------+----------+----------+
|     NULL    | NULL     | NULL     |
+-------------+----------+----------+
1 row in set (0.00 sec)

SELECT NULL <=> NULL, NULL <=> 1, NULL <=> 0;
+---------------+------------+------------+
| NULL <=> NULL | NULL <=> 1 | NULL <=> 0 |
+---------------+------------+------------+
|     1         |     0      |     0      |
+---------------+------------+------------+
1 row in set (0.00 sec)

 结果排序:

 语法:
        -- ASC 为升序(从小到大)
        -- DESC 为降序(从大到小)
        -- 默认为 ASC

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

注意:没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序

同学及数学成绩,按数学成绩升序显示:

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)

 同学及 qq 号,按 qq 号排序显示:

-- NULL 视为比任何值都小,升序出现在最上面 


SELECT name, qq FROM students ORDER BY qq;
+-----------+-------+
| name   | qq   |
+-----------+-------+
| 唐大师 | NULL  |
| 孙仲谋 | NULL  |
| 曹阿瞒 | NULL  |
| 孙悟空 | 11111 |
+-----------+-------+
4 rows in set (0.00 sec)

 -- NULL 视为比任何值都小,升序出现在最下面 

SELECT name, qq FROM students ORDER BY qq DESC;
+-----------+-------+
| name   | qq   |
+-----------+-------+
| 孙悟空 | 11111 |
| 唐大师 | NULL  |
| 孙仲谋 | NULL  |
| 曹阿瞒 | NULL  |
+-----------+-------+
4 rows in set (0.00 sec)

查询同学各门成绩,依次按 数学降序,英语升序,语文升序的方式显示: 

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)

查询同学及总分,由高到低:

ORDER BY中可以使用表达式: 

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中可以使用别名:

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)

筛选分页结果:

语法:

-- 起始下标为 0
-- 从 0 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;

-- 从 s 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;

-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;

建议: 对未知表进行查询时,最好加一条 LIMIT 1,避免因为表中数据过大,查询全表数据导致数据库卡死

按 id 进行分页,每页 3 条记录,分别显示 第 1、2、3 页:

-- 第 1 页
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.02 sec)

-- 第 2 页
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)

-- 第 3 页,如果结果不足 3 个,不会有影响
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)

Update(更新) 

语法:

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

 将孙悟空同学的数学成绩变更为 80 分:

-- 数据更新
UPDATE exam_result SET math = 80 WHERE name = '孙悟空';
Query OK, 1 row affected (0.04 sec)
Rows matched: 1 Changed: 1 Warnings: 0

-- 查看更新后数据
SELECT name, math FROM exam_result WHERE name = '孙悟空';
+-----------+--------+
| name   | math |
+-----------+--------+
| 孙悟空 | 80 |
+-----------+--------+
1 row in set (0.00 sec)

 将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分:

UPDATE exam_result SET math = 60, chinese = 70 WHERE name = '曹孟德';
Query OK, 1 row affected (0.14 sec)
Rows matched: 1 Changed: 1 Warnings: 0
-- 查看更新后数据
SELECT name, math, chinese FROM exam_result WHERE name = '曹孟德';
+-----------+--------+-------+
| name  | math | chinese |
+-----------+--------+-------+
| 曹孟德 | 60   |  70     |
+-----------+--------+-------+
1 row in set (0.00 sec)

 将总成绩倒数前三的 3 位同学的数学成绩加上 30 分:

-- 数据更新,不支持 math += 30 这种语法
UPDATE exam_result SET math = math + 30
ORDER BY chinese + math + english LIMIT 3;
-- 查看更新后数据
-- 思考:这里还可以按总分升序排序取前 3 个么?
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)

Delete(删除) 

删除数据: 

 语法:

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

删除孙悟空同学的考试成绩:

-- 查看原数据
SELECT * FROM exam_result WHERE name = '孙悟空';
+----+-----------+-------+--------+--------+
| id | name | chinese | math | english |
+----+-----------+-------+--------+--------+
| 2 | 孙悟空 |   174   |  80  |   77   |
+----+-----------+-------+--------+--------+
1 row in set (0.00 sec)

-- 删除数据
DELETE FROM exam_result WHERE name = '孙悟空';
Query OK, 1 row affected (0.17 sec)

-- 查看删除结果
SELECT * FROM exam_result WHERE name = '孙悟空';
Empty set (0.00 sec)

删除整张表数据:

慎用!慎用!慎用!

结构会被保留,数据会被清空

-- 准备测试表
CREATE TABLE for_delete (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(20)
);
Query OK, 0 rows affected (0.16 sec)

-- 插入测试数据
INSERT INTO for_delete (name) VALUES ('A'), ('B'), ('C');
Query OK, 3 rows affected (1.05 sec)
Records: 3 Duplicates: 0 Warnings: 0

-- 查看测试数据
SELECT * FROM for_delete;
+----+------+
| id | name |
+----+------+
| 1  |  A   |
| 2  |  B   |
| 3  |  C   |
+----+------+
3 rows in set (0.00 sec)

截断表:

语法:

TRUNCATE [TABLE] table_name

注意这个操作慎用:

  1.  只能对整表操作,不能像 DELETE 一样针对部分数据操作
  2. 实际上 MySQL 不对数据操作,所以比 DELETE 更快,但是TRUNCATE在删除数据的时候,并不经过真正的事物,所以无法回滚
  3. 会重置 AUTO_INCREMENT 项
-- 准备测试表
CREATE TABLE for_truncate (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(20)
);
Query OK, 0 rows affected (0.16 sec)

-- 插入测试数据
INSERT INTO for_truncate (name) VALUES ('A'), ('B'), ('C');
Query OK, 3 rows affected (1.05 sec)
Records: 3 Duplicates: 0 Warnings: 0

-- 查看测试数据
SELECT * FROM for_truncate;
+----+------+
| id | name |
+----+------+
| 1  |  A  |
| 2  |  B  |
| 3  |  C  |
+----+------+
3 rows in set (0.00 sec)


TRUNCATE for_truncate;
Query OK, 0 rows affected (0.10 sec) 
-- 截断整表数据,注意影响行数是 0,所以实际上没有对数据真正操作

-- 查看删除结果
SELECT * FROM for_truncate;
Empty set (0.00 sec)

-- 再插入一条数据,自增 id 在重新增长
INSERT INTO for_truncate (name) VALUES ('D');
Query OK, 1 row affected (0.00 sec)


-- 查看数据
SELECT * FROM for_truncate;
+----+------+
| id | name |
+----+------+
| 1  | D    |
+----+------+
1 row in set (0.00 sec)



插入查询结果 

 语法:

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

 案例:

CREATE TABLE duplicate_table (id int, name varchar(20));
Query OK, 0 rows affected (0.01 sec)
-- 插入测试数据

INSERT INTO duplicate_table VALUES
    (100, 'aaa'),
    (100, 'aaa'),
    (200, 'bbb'),
    (200, 'bbb'),
    (200, 'bbb'),
    (300, 'ccc');
Query OK, 6 rows affected (0.00 sec)
Records: 6 Duplicates: 0 Warnings: 0

思路: 创建一张空表 no_duplicate_table,结构和 duplicate_table 一样,然后对dumplicate_table中的数据去重后插入到no_duplicate_table中:

-- 创建一张空表 no_duplicate_table,结构和 duplicate_table 一样
CREATE TABLE no_duplicate_table LIKE duplicate_table;
Query OK, 0 rows affected (0.00 sec)

-- 将 duplicate_table 的去重数据插入到 no_duplicate_table
INSERT INTO no_duplicate_table SELECT DISTINCT * FROM duplicate_table;
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0

-- 通过重命名表,实现原子的去重操作
RENAME TABLE duplicate_table TO old_duplicate_table,
no_duplicate_table TO duplicate_table;
Query OK, 0 rows affected (0.00 sec)

-- 查看最终结果
SELECT * FROM duplicate_table;
+------+------+
| id  | name |
+------+------+
| 100 | aaa |
| 200 | bbb |
| 300 | ccc |
+------+------+
3 rows in set (0.00 sec)

聚合函数

函数说明
COUNT([DISTINCT] expr) 返回查询到的数据的 数量
SUM([DISTINCT] expr)返回查询到的数据的 总和,不是数字没有意义
AVG([DISTINCT] expr)返回查询到的数据的 平均值,不是数字没有意义
MAX([DISTINCT] expr)返回查询到的数据的 最大值,不是数字没有意义
MIN([DISTINCT] expr)返回查询到的数据的 最小值,不是数字没有意义

 

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

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

相关文章

DETR 个人理解

DETR 个人理解 目录 DETR 个人理解 概念说明 transformer网络结构 整体流程 损失计算 整体理解 结果说明 论文 代码 参考链接 个人拙见&#xff0c;仅供参考&#xff0c;欢迎指正交流 这篇论文还是挺重要的&#xff0c;因为是transforms用于目标检测的第一篇论文&am…

LiveGBS流媒体平台GB/T28181常见问题-多个网段如何注册LiveGBS多网段设备收流多个专线不同地址网段收流内外网同时收流

LiveGBS常见问题多个网段如何注册LiveGBS多网段设备收流多个专线不同地址网段收流内外网同时收流 1、背景2、设备接入播放2.1、查看通道2.2、直播播放 3、默认收流地址配置4、其它网络设备收流配置5、搭建GB28181视频直播平台 1、背景 服务器部署的时候&#xff0c;可能有多个…

VIM工程的编译 / VI的快捷键记录

文章目录 VIM工程的编译 / VI的快捷键记录概述笔记工程的编译工程的编译 - 命令行vim工程的编译 - GUI版vim备注VIM的帮助文件位置VIM官方教程vim 常用快捷键启动vi时, 指定要编辑哪个文件正常模式光标的移动退出不保存 退出保存只保存不退出另存到指定文件移动到行首移动到行尾…

cmseasy业务逻辑漏洞

这个cmseasy靶场似乎感觉有点意思&#xff1f; 1.任意修改用户密码 首先肯定先是注册一个账号&#xff08;账号test&#xff0c;密码admin&#xff09;&#xff0c;去找到他的找回密码这里 随便填点数字&#xff08;这个用户名与他的邮箱还是要对应的&#xff09;&#…

基于Springboot+vue鲜花商城系统(前后端分离)

该项目完全免费 项目技术栈&#xff1a; 前端&#xff1a;vueelementUIecharts 后端&#xff1a;SpringbootmybatisMySQL 项目主要功能&#xff1a; 商品信息 商品分类 角色管理 公告管理 轮播图管理 订单管理 收货地址管理 日志管理 部分功能截图&#xff1a;

GaussDB与openGauss有什么相同和不同?

众所周知&#xff0c;GaussDB是华为自主创新研发的分布式关系型数据库&#xff0c;为企业提供功能全面、稳定可靠、扩展性强、性能优越的企业级数据库服务&#xff0c;openGauss是开源数据库&#xff0c;两者之间又是什么样的关系&#xff0c;有什么相同和不同&#xff0c;让我…

【unity学习笔记】语音驱动blendershape

1.导入插件 https://assetstore.unity.com/packages/tools/animation/salsa-lipsync-suite-148442 1.选择小人&#xff0c;点击添加组件 分别加入组件&#xff1a; SALSA EmoteR Eyes Queue Processor&#xff08;必须加此脚本&#xff09;&#xff1a;控制前三个组件的脚本。…

Win10下在Qt项目中配置SQlite3环境

资源下载 官网资源&#xff1a;SQLite Download Page 1、sqlite.h sqlite-amalgamation-3450000.zip (2.60 MiB) 2、sqlite3.def&#xff0c;sqlite3.dll sqlite-dll-win-x64-3450000.zip (1.25 MiB) 3、 win10下安装sqlite3所需要文件 sqlite-tools-win-x64-3450000.zipht…

2024年香港优才计划新政策变化!看清利弊再做申请!

2024年香港优才计划新政策变化&#xff01;看清利弊再做申请&#xff01; 2024年香港优才计划申请新政策变化如下&#xff1a; 变化一&#xff1a;高管加分条件更明确&#xff0c;但条件更严 以前&#xff1a;默认自己在公司处于中高层管理岗&#xff0c;给自己加高管分。 现在…

【我与Java的成长记】之多态,重载与重写详解

系列文章目录 能看懂文字就能明白系列 C语言笔记传送门 Java笔记传送门 &#x1f31f; 个人主页&#xff1a;古德猫宁- &#x1f308; 信念如阳光&#xff0c;照亮前行的每一步 文章目录 系列文章目录&#x1f308; *信念如阳光&#xff0c;照亮前行的每一步* 前言一、多态的概…

前端面试题(持续更新~~)

文章目录 一、基础1、数组常用的方法2、数组有哪几种循环方式&#xff1f;分别有什么作用&#xff1f;3、字符串常用的方法4、原型链5、闭包6、常见的继承7、cookie 、localstorage 、 sessionstrorage区别8、数组去重方法9、http 的请求方式10、数据类型的判断方法11、cookie …

基于改进蝙蝠算法的三维航线规划算法

matlab2020a可正常运行 基于改进蝙蝠算法的三维航线规划资源-CSDN文库

Java 8 简化代码(2)

Stream 操作详解 为了方便你理解 Stream 的各种操作&#xff0c;以及后面的案例&#xff0c;我先把这节课涉及的 Stream 操作汇总到了一张图中。你可以先熟悉一下。 在接下来的讲述中&#xff0c;我会围绕订单场景&#xff0c;给出如何使用 Stream 的各种 API 完成订单的统计、…

虚拟线程探索与实践

优质博文&#xff1a;IT-BLOG-CN 一、简介 虚拟线程是轻量级线程&#xff0c;极大地减少了编写、维护和观察高吞吐量并发应用的工作量。虚拟线程是由JEP 425提出的预览功能&#xff0c;并在JDK 19中发布&#xff0c;JDK 21中最终确定虚拟线程&#xff0c;以下是根据开发者反馈…

竞赛保研 大数据疫情分析及可视化系统

文章目录 0 前言2 开发简介3 数据集4 实现技术4.1 系统架构4.2 开发环境4.3 疫情地图4.3.1 填充图(Choropleth maps)4.3.2 气泡图 4.4 全国疫情实时追踪4.6 其他页面 5 关键代码最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 大数据疫…

[陇剑杯 2021]jwt

[陇剑杯 2021]jwt 题目做法及思路解析&#xff08;个人分享&#xff09; 问一&#xff1a;昨天&#xff0c;单位流量系统捕获了黑客攻击流量&#xff0c;请您分析流量后进行回答&#xff1a; 该网站使用了______认证方式。&#xff08;如有字母请全部使用小写&#xff09…

redis数据安全(二)数据持久化 RDB

目录 一、RDB快照持久化 原理 二、RDB快照持久化配置&#xff08;redis.conf&#xff09;&#xff1a; 三、触发RDB备份&#xff1a; 1、自动备份&#xff0c;需配置备份规则&#xff1a; 2、手动执行命令备份&#xff08;save | bgsave&#xff09;&#xff1a; 3、flus…

分销商城新零售商城门店商城小程序开发

用户注册&#xff1a;让用户用手机号或三方登录的方式轻松开启账号之旅。 商品探索&#xff1a;用户可以自由浏览琳琅满目的商品&#xff0c;还能通过关键词迅速锁定心仪之物。 商品分类与筛选&#xff1a;商品按类陈列&#xff0c;用户可根据价格、品牌等条件筛选&#xff…

【JS逆向学习】36kr登陆逆向案例(webpack)

在开始讲解实际案例之前&#xff0c;大家先了解下webpack的相关知识 WebPack打包 webpack是一个基于模块化的打包&#xff08;构建&#xff09;工具, 它把一切都视作模块 webpack数组形式&#xff0c;通过下标取值 !function(e) {var t {};// 加载器 所有的模块都是从这个…

《文科爱好者》是什么级别的期刊?是正规期刊吗?能评职称吗?

《文科爱好者》发展至今已有近四十年的历史。近四十年里无论最初由成都教育学院主办还是现在由成都大学主办&#xff0c;《爱好者》系列期刊一直坚持贴近学科教学实践&#xff0c;站在教育改革前沿&#xff0c;进行课程资源的深度开发&#xff0c;为基础教育课程改革提供全方位…