MySQL表的增删改查(基础)


Posted in MySQL onApril 05, 2021

1. 新增(Create)

insert into [表名] (字段1, 字段2,....) value (value1, value2, ...);

insert into [表名] (字段1, 字段2, ....) values
(value1, ...),
(value2, ...),
(value3, ...);

实例:
创建一个学生成绩表

CREATE TABLE exam_result (
 id INT,
 name VARCHAR(20),
 chinese DECIMAL(3,1),
 math DECIMAL(3,1),
 english DECIMAL(3,1)
);

1.1 单行数据 + 全列插入

-- 插入两条记录,value_list 数量必须和定义表的列的数量及顺序一致
insert into exam_result value ( 1, 'tom', 68, 98, 56); 
insert into exam_result value ( 2, 'jum', 87.5, 78, 77);

每次插入数据, 为一条记录, 包含了若干个列~~
列的数目和数据类型要和表的结构对应~
value 前省略指定列默认为全列插入

1.2 多行数据 + 指定列

- 插入两条记录,value_list 数量必须和指定列数量及顺序一致
INSERT INTO exam_result (id,name, chinese, math, english) VALUES
 (1,'tom', 67, 98, 56),
 (2,'jum', 87.5, 78, 77),
 (3,'lim', 88, 98.5, 90),
 (4,'tim', 82, 84, 67),
 (5,'huy', 55.5, 85, 45),
 (6,'sun', 70, 73, 78.5),
 (7,'ming', 75, 65, 30);

2. 查询(Retrieve)

2.1 全列查询

select * from [表名];

MySQL表的增删改查(基础)
*表示通配符, 意思就是查找所有的列

2.2 指定列查询

select [指定查询列] from [表名];

MySQL表的增删改查(基础)

2.3 查询字段为表达式

select [字段表达式] from [表名];

MySQL表的增删改查(基础)

2.4 别名

select colum [as]  [列名] from [表名];

MySQL表的增删改查(基础)

2.5 去重: DISTINCT

使用 distinct 关键字对某列数据去重

--98 分重复了
select math from exam_result;
+------+
| math |
+------+
| 98.0 |
| 78.0 |
| 98.0 |
| 84.0 |
| 85.0 |
| 73.0 |
| 65.0 |
+------+

-- 去重结果
select distinct math from exam_result;
+------+
| math |
+------+
| 98.0 |
| 78.0 |
| 84.0 |
| 85.0 |
| 73.0 |
| 65.0 |
+------+

2.6 排序: ORDER BY

select * from [表名] order by [排序字段];

使用 order by 指定某一列进行排序, 默认按照升序排序.
显式加上 desc , 就是降序排序. 使用 asc 也是升序

select name, math from exam_result order by math desc;
+------+------+
| name | math |
+------+------+
| tom  | 98.0 |
| lim  | 98.0 |
| huy  | 85.0 |
| tim  | 84.0 |
| jum  | 78.0 |
| sun  | 73.0 |
| ming | 65.0 |
+------+------+

NULL 数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面
排序也可以指定多个列执行

select * from exam_result order by math desc, chinese desc;
+------+------+---------+------+---------+
| id   | name | chinese | math | english |
+------+------+---------+------+---------+
|    3 | lim  |    88.0 | 98.0 |    90.0 |
|    1 | tom  |    67.0 | 98.0 |    56.0 |
|    5 | huy  |    55.5 | 85.0 |    45.0 |
|    4 | tim  |    82.0 | 84.0 |    67.0 |
|    2 | jum  |    87.5 | 78.0 |    77.0 |
|    6 | sun  |    70.0 | 73.0 |    78.5 |
|    7 | ming |    75.0 | 65.0 |    30.0 |
+------+------+---------+------+---------+

多列排序时, 是在第一列区分不出来大小的时候, 再按第二列排序.

2.7 条件查询: WHERE

比较运算符

运算符 说明
>, >=, <, <= 大于,大于等于,小于,小于等于
= 等于,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)

注意:

  • 列的别名不能再 where 中使用~~
  • AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分

实例:

  • 基本查询:
-- 查询英语不及格的同学及英语成绩 ( < 60 )
select name, english from exam_result where english < 60;

-- 查询语文成绩好于英语成绩的同学
select name, chinese, english from exam_result where chinese > english;

-- 查询总分在 200 分以下的同学
select name, chinese + math + english as total from exam_result where chinese + math + english < 200;
  • AND 与 OR:
-- 查询语文成绩大于80分,且英语成绩大于80分的同学
select * from exam_result where chinese > 80 and english > 80;

-- 查询语文成绩大于80分,或英语成绩大于80分的同学
select * from exam_result where chinese > 80 or english > 80;

关于优先级问题, and 比 or 更优先,

  • 范围查询:
    1.BETWEEN … AND …
-- 查询语文成绩在 [80, 90] 分的同学及语文成绩
select name, chinese from exam_result where chinese BETWEEN 80 AND 90;

select name, chinese, from exam_result where chinese >= 80 and chinese <= 90;
  1. IN
-- 查询数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩
select name, math from exam_result where math in (58, 59, 98, 99);
  • 模糊查询: LIKE
select name from exam_result where name like 't%';
+------+
| name |
+------+
| tom  |
| tim  |
+------+

% 是一个通配符, 可以用来代替任意多个字符
t% 找出以 t 开头的字符串
%t 找出以 t 结尾的字符串
%t% 找出包含 t 的

除了 % 之外, 还有 _ ,(_ 只能代表一个字符~)

select name from exam_result where name like 't__';
+------+
| name |
+------+
| tom  |
| tim  |
+------+

通配符也能针对数字进行模糊查询

select name, chinese from exam_result where chinese like '%8%';
+------+---------+
| name | chinese |
+------+---------+
| jum  |    87.5 |
| lim  |    88.0 |
| tim  |    82.0 |
+------+---------+

注意:
模糊查询看起来比较好用, 实际执行效率低下

  • NULL 的查询: IS [NOT] NULL
select name from exam_result where id id not null;

2.8 分页查询: LIMIT

-- 最初数据表
select * from exam_result;
+------+------+---------+------+---------+
| id   | name | chinese | math | english |
+------+------+---------+------+---------+
|    1 | tom  |    67.0 | 98.0 |    56.0 |
|    2 | jum  |    87.5 | 78.0 |    77.0 |
|    3 | lim  |    88.0 | 98.0 |    90.0 |
|    4 | tim  |    82.0 | 84.0 |    67.0 |
|    5 | huy  |    55.5 | 85.0 |    45.0 |
|    6 | sun  |    70.0 | 73.0 |    78.5 |
|    7 | ming |    75.0 | 65.0 |    30.0 |
+------+------+---------+------+---------+

-- 前三条记录
select * from exam_result limit 3;
+------+------+---------+------+---------+
| id   | name | chinese | math | english |
+------+------+---------+------+---------+
|    1 | tom  |    67.0 | 98.0 |    56.0 |
|    2 | jum  |    87.5 | 78.0 |    77.0 |
|    3 | lim  |    88.0 | 98.0 |    90.0 |
+------+------+---------+------+---------+

-- 从第三条开始的三条记录
select * from exam_result limit 3 offset 3;
+------+------+---------+------+---------+
| id   | name | chinese | math | english |
+------+------+---------+------+---------+
|    4 | tim  |    82.0 | 84.0 |    67.0 |
|    5 | huy  |    55.5 | 85.0 |    45.0 |
|    6 | sun  |    70.0 | 73.0 |    78.5 |
+------+------+---------+------+---------+

offset 表示从第几条开始查找, offset 可以省略

select * from exam_result limit 3 , 4;
+------+------+---------+------+---------+
| id   | name | chinese | math | english |
+------+------+---------+------+---------+
|    4 | tim  |    82.0 | 84.0 |    67.0 |
|    5 | huy  |    55.5 | 85.0 |    45.0 |
|    6 | sun  |    70.0 | 73.0 |    78.5 |
|    7 | ming |    75.0 | 65.0 |    30.0 |
+------+------+---------+------+---------+

3. 修改(Update)

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

update exam_result set math = math + 30 order by chinese + math + english limit 3;

update 不加条件, 就可以针对所有

4. 删除(Delete)

delete from [表名];
-- 删除 ming 同学的考试成绩
delete from exam_result where name = 'ming';

-- 删除整张表
delete from exam_result;

如果不指定条件, 此时就把整个表删除掉了, (与 drop 删除表还有不同)

delete 删除后表为 null, drop 删除后表就不存在了

5. 常用

  • 新增
-- 单行插入
insert into [表名] (字段1, ..., 字段N) values (value1, ...,value N);
-- 多行插入
insert into [表名](字段1, ..., 字段N) values
(value1, ...),
(value2, ...),
(value3, ...);
  • 查询
--全表查询
select * from [表名];
--指定列查询
select [列名1, 列名2,...] from [表名];
--查询表达式字段
select [表达式1, 表达式2,...] from [表名];
--别名
select 
--去重 DISTINCT
select distinct [字段] from [表名];
-- 排序ORDER BY
select * from [表名] order by [排序字段];
-- 条件查询WHERE
-- (1)比较运算符 (2)BETWEEN ... AND ... (3)IN (4)IS NULL (5)LIKE (6)AND (7)OR 
(8)NOT
select * from [表名] where [条件];
  • 修改
update [表] set [修改内容1, 修改内容2, ....] where  [条件];
  • 删除
delete from [表名] where [条件];
MySQL 相关文章推荐
详解Mysql 函数调用优化
Apr 07 MySQL
浅谈mysql执行过程以及顺序
May 12 MySQL
MySQL触发器的使用
May 24 MySQL
mysql连接查询中and与where的区别浅析
Jul 01 MySQL
Mysql数据库手动及定时备份步骤
Nov 07 MySQL
mysql 联合索引生效的条件及索引失效的条件
Nov 20 MySQL
SQL基础查询和LINQ集成化查询
Jan 18 MySQL
mysql使用instr达到in(字符串)的效果
Apr 03 MySQL
MySQL索引 高效获取数据的数据结构
May 02 MySQL
MySql数据库 查询时间序列间隔
May 11 MySQL
MySQL约束(创建表时的各种条件说明)
Jun 21 MySQL
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
May 08 MySQL
MySQL入门命令之函数-单行函数-流程控制函数
Apr 05 #MySQL
浅析InnoDB索引结构
Apr 05 #MySQL
mysql知识点整理
Apr 05 #MySQL
MySQL令人咋舌的隐式转换
Apr 05 #MySQL
MySQL锁机制
MySQL学习总结-基础架构概述
MySQL基础(二)
You might like
如何写php程序?
2006/12/08 PHP
DedeCMS 核心类TypeLink.class.php摘要笔记
2010/04/07 PHP
PHP的swoole扩展安装方法详细教程
2016/05/18 PHP
利用Laravel生成Gravatar头像地址的优雅方法
2017/12/30 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
2019/10/14 PHP
javascript 判断数组是否已包含了某个元素的函数
2010/05/30 Javascript
extjs tabpanel限制选项卡数量实现思路及代码
2013/04/02 Javascript
Express.JS使用详解
2014/07/17 Javascript
node.js中的events.EventEmitter.listenerCount方法使用说明
2014/12/08 Javascript
JavaScript插件化开发教程(六)
2015/02/01 Javascript
深入剖析javascript中的exec与match方法
2016/05/18 Javascript
基于jQuery实现Accordion手风琴自定义插件
2020/10/13 Javascript
vue2.0开发实践总结之入门篇
2016/12/06 Javascript
jquery插件treegrid树状表格的使用方法详解(.Net平台)
2017/01/03 Javascript
JS实现直接运行html代码的方法
2017/03/13 Javascript
详解用webpack2.0构建vue2.0超详细精简版
2017/04/05 Javascript
详解JavaScript中typeof与instanceof用法
2018/10/24 Javascript
Antd-vue Table组件添加Click事件,实现点击某行数据教程
2020/11/17 Javascript
举例讲解Python中的算数运算符的用法
2015/05/13 Python
python docx 中文字体设置的操作方法
2018/05/08 Python
Python实现FTP弱口令扫描器的方法示例
2019/01/31 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
2019/06/11 Python
python 搜索大文件的实例代码
2019/07/08 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
2019/10/14 Python
解决jupyter notebook 前面书写后面内容消失的问题
2020/04/13 Python
重写django的model下的objects模型管理器方式
2020/05/15 Python
非常漂亮的CSS3百叶窗焦点图动画
2016/02/24 HTML / CSS
HTML5 video标签(播放器)学习笔记(一):使用入门
2015/04/24 HTML / CSS
阿玛尼美妆英国官网:Giorgio Armani Beauty英国
2019/03/28 全球购物
通信工程专业毕业生推荐信
2013/12/25 职场文书
父母对孩子的寄语
2014/04/09 职场文书
乡镇个人对照检查材料
2014/08/22 职场文书
简单的个人租房协议书范本
2014/11/26 职场文书
谢师宴家长答谢词
2015/09/30 职场文书
详解Python+OpenCV绘制灰度直方图
2022/03/22 Python
python使用shell脚本创建kafka连接器
2022/04/29 Python