Mysql基本查询(上)

🏝️专栏:Mysql_猫咪-9527的博客-CSDN博客

🌅主页:猫咪-9527-CSDN博客

"欲穷千里目,更上一层楼。会当凌绝顶,一览众山小。"

目录

[1. 创建(create)](#1. 创建(create))

全列插入

省略into插入

插入单条记录

插入多条记录

处理重复键

[replace into](#replace into)

根据原表创建新表

将查找的内容添加至新表

[2. 读取(retrieve)](#2. 读取(retrieve))

查询所有列

去重查询

查询特定列

重命名查询

表达式查询

条件查询

排序查询

分页查询

聚合查询

随堂测试

|--------|----------|--------|--------|
| CRUD ||||
| create | retrieve | update | delete |


1. 创建(create)

create语句用于向数据库中插入新数据。理解如何高效地插入数据是数据库操作的基本技能。

语法:

这是MySQL中 INSERT 语句的基本语法,用于向数据库表中插入数据。它的结构如下:

基本语法

复制代码
INSERT [INTO] table_name
[(column1, column2, ...)]
VALUES (value1, value2, ...) [, (value1, value2, ...)] ...

各部分解释

  • INSERT INTO:表示插入数据到指定表。

  • table_name:指定要插入数据的表名。

  • (column1, column2, ...):可选部分,列出要插入数据的列名。如果省略列名,默认插入表中的所有列。

  • VALUES:后面跟随插入的值。每一组值对应表中的列。

  • value_list:插入的值,可以是单个值,也可以是多个值,多个值之间用逗号隔开。

小知识:

  • 插入大量数据时,使用批量插入可以提高效率,而不是一次插入一条记录。

  • 如果插入数据时,某些字段没有提供值,它们会使用默认值(例如 null 或字段定义时的默认值)。

  • 其中insert into 可以写为insert,into可以省略。

示例:

全列插入

全列插入:所要插入的列可以省略不写,但是必须插入表的全部列。

指定列插入:可以选择要插入列

省略into插入

下面两条语句达到的效果一样:

插入单条记录
复制代码
insert into students values (8, 130,'李明','123');
插入多条记录
复制代码
insert into students values
(9, 131,'刘亮','166'),
(10,132,'王强','124');
处理重复键

使用on duplicate key update来更新已有记录。

复制代码
insert into students  
values (200, 20010, '张伟','111111')
on duplicate key update name = 'zhangwe';

|----------------------------------------------------------------------------|----------------------------------------------------------------------------|
| 未加(修改失败) ||
| ||
| 添加(修改成功) ||
| ||
| 修改前 | 修改后 |
| | |

注:

|----------------------------------------------------------------------------|
| 1 rows affected(1行数据收到影响):当前表中无数据冲突,直接插入 |
| |
| 0 rows affected(0行数据收到影响):当前表中有数据冲突,但是插入值与原有值相同 |
| |
| 2rows affected(2行数据收到影响):当先列表数据冲突插入并修改 |
| |

replace into

当主键或唯一键冲突时,删除旧记录并插入新记录。

复制代码
replace into employees (emp_id, emp_name) values (30001, '陈晨');

|----------------------------------------------------------------------------|----------------------------------------------------------------------------|
| 数据冲突,直接修改成功(覆盖式插入,如果数据冲突,原数据会被删除,重新插入) ||
| ||
| 插入前 | 插入后 |
| | |

根据原表创建新表
复制代码
create table students_e like students; 

新表复制了原表的表结构,没有复制内容:

|----------------------------------------------------------------------------|----------------------------------------------------------------------------|
| 原表: | 创建原表副本: |
| | |
| 原表数据: | 原表副本数据: |
| | |

将查找的内容添加至新表
复制代码
insert into students_e select *from where name='张飞';

2. 读取(retrieve)

select语句用于查询数据库中的数据。可以通过过滤条件、排序和分页等操作,精确获取所需数据。

基本语法:

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

各部分解释:

  1. SELECT:用于选择查询的数据。

  2. DISTINCT (可选):如果指定了 DISTINCT,则只返回不同的(唯一的)结果。

  3. *:表示选择所有列。

  4. column [, column] ...:表示选择一个或多个特定列。

  5. FROM table_name:指定从哪个表中获取数据。

  6. WHERE ...(可选):可以指定查询的条件,筛选符合条件的记录。

  7. ORDER BY column [ASC | DESC] (可选):对结果进行排序,ASC 是升序,DESC 是降序。

  8. LIMIT ...(可选):限制返回的记录数。

小知识:

  • distinct关键字用于去重,查询结果中只返回唯一的记录。

  • 使用join可以将多个表的数据结合起来,特别适用于处理关系型数据。

示例:

复制代码
-- 创建表结构
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);
查询所有列
复制代码
select * from exam_result;
去重查询
复制代码
select distinct *from distinct_text;

|----------------------------------------------------------------------------|----------------------------------------------------------------------------|
| 普通查询: | 去重查询: |
| | |

查询特定列
复制代码
select id,name from exam_result;
重命名查询
复制代码
select id 学号 ,name 姓名 ,math+chinese+english 总分 from exam_result;
表达式查询

|----------------------------------------------------------------------------|----------------------------------------------------------------------------|
| select 1+1; | select 1>2; |
| | |
| select math+10 from exam_result; | select math from exam_result; |
| | |

条件查询
复制代码
select emp_name, salary from employee_details where salary < 5000;

比较运算符:

逻辑比较符:

排序查询
复制代码
select emp_name, department from employee_details order by department desc;

排序查询中通过:order by desc(降序)/asc(升序),来确定返回列表的顺序,默认为asc。

注意:未使用order返回的数据是未定义的,请不要依赖

分页查询
复制代码
select emp_id, emp_name from employee_details limit 5 offset 0;

分页查询两种方式:

方案一:

mysql使用 limitoffset 来控制分页。

复制代码
select * from table_name limit 10 offset 20;
  • limit 指定返回记录的数量。
  • offset 指定查询结果跳过的记录数。

方案二:

复制代码
select * from exam_result limit 20,10;
  • 逗号前面表示指定查询结果跳过的记录数
  • 逗号后面表示指定返回记录的数量
聚合查询
复制代码
select count(*) from employees;

随堂测试

学习到这里的小伙伴我为你们准备了配套练习题快来尝试一下吧

随堂测试链接

相关推荐
jiayou6421 小时前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
于眠牧北1 天前
MySQL的锁类型,表锁,行锁,MVCC中所使用的临键锁
mysql
李广坤2 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
Turnip12023 天前
深度解析:为什么简单的数据库"写操作"会在 MySQL 中卡住?
后端·mysql
爱可生开源社区3 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1773 天前
《从零搭建NestJS项目》
数据库·typescript
加号34 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏4 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐4 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
百锦再4 天前
Django实现接口token检测的实现方案
数据库·python·django·sqlite·flask·fastapi·pip