当前位置: 首页 > article >正文

Mysql-CRUD(增删查改)

CRUD : Create( 创建 ), Retrieve( 读取 ) Update( 更新 ) Delete (删除)

1.Create

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

 1.1 全列插入+单行数据

insert into book values('Java核心技术','Cay S.Horstman',56.43,'计算机技术');

 1.2 多行数据+指定列

insert into product(name,price,storage) values('学生书包',18.91,101),('铅笔',20.91,155);

以上插入了两行,指定name,price,storage三列插入数据。 

注意:当数据里有主键冲突或唯一键冲突时,可以使用on duplicate key来进行更新操作。

INSERT INTO product (name,price,storage ) VALUES ('学生书包',18.91,101 )
ON DUPLICATE KEY UPDATE price = 18.91 , name = '学生书包 ' ;
-- ON DUPLICATE KEY 当发生重复 key 的时候

1.3 替换

REPLACE INTO product (name,price,storage VALUES ('学生书包',18.91,101 );
  •  表中没有数据,数据被插入。
  • 表中有冲突数据,删除数据后重新插入。

1.4 插入查询结果 

语法: 

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

-- duplicate_table 的去重数据插入到 no_duplicate_table
INSERT INTO no_duplicate_table SELECT DISTINCT * FROM duplicate_table;

2.Retrieve 

语法:  

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

2.1 全列查询 

-- 通常情况下不建议使用 * 进行全列查询
-- 1. 查询的列越多,意味着需要传输的数据量越大;
-- 2. 可能会影响到索引的使用。

SELECT * FROM table_name;  

2.2 指定列查询 

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

SELECT id, name, english FROM exam_result; 

2.3 为指定列起别名 

语法: 

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

2.4 结果去重 

 distinct:对查询结果具有去重作用。

SELECT DISTINCT math FROM exam_result; 

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

2.6 结果排序 

语法:  

-- ASC 为升序(从小到大)
-- DESC 为降序(从大到小)
-- 默认为 ASC
SELECT ... FROM table_name [WHERE ...]
ORDER BY column [ASC|DESC], [...];

编写一个SQL查询,获取Employee表中第二高的薪水(Salary) 

select Salary as SecondHighestSalary
from Employee
order by Salary
desc
limit 1 
offset 1

2.7 筛选分页查询 

语法:

-- 起始下标为 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,避免因为表中数据过大,查询全表数据导致数据库卡死 

 3.Update

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

对查询到的结果进行列值更新 

update book set price=61 where name='Java核心技术'; 

4.Delete 

语法: 

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

delete from product where price>60 or storage<200; 

 4.1 删除整表数据

DELETE FROM table_name 

 注意:

  • 假如数据中有自增类型的数据,那么删除了整表的数据后,自增不会变为0,而是插入后继续增加。

4.2 截断表

语法:

TRUNCATE [TABLE] table_name  

1. 只能对整表操作,不能像 DELETE 一样针对部分数据操作;
2. 实际上 MySQL 不对数据操作,所以比 DELETE 更快,但是 TRUNCATE 在删除数据的时候,并不经过真正的事物,所以无法回滚
3. 会重置 AUTO_INCREMENT

 

5 聚合函数 

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

SELECT COUNT(*) FROM students;  --统计全班有多少学生

SELECT SUM(math) FROM exam_result;  --统计数学成绩总分
SELECT AVG(chinese + math + english) -- 平均总分 FROM exam_result;  --统计平均总分
SELECT MAX(english) FROM exam_result;  --返回英语最高分
SELECT MIN(math) FROM exam_result WHERE math > 70;  --返回数学大于70分的最低分

6.group by子句 

select中使用group by 子句可以对指定列进行分组查询 

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

select deptno,avg(sal),max(sal) from EMP group by deptno; --显示每个部门的平均工资和最高工资 

 7.各个关键词执行顺序

SQL查询中各个关键字的执行先后顺序 from > on> join > where > group by > with > having > select > distinct > order by > limit

 


http://www.kler.cn/a/133419.html

相关文章:

  • 【Qt聊天室客户端】消息功能--发布程序
  • 探索 Python HTTP 的瑞士军刀:Requests 库
  • UE5 UE4 播放视频没有声音解决
  • 在 CentOS 系统中,您可以使用多种工具来查看网络速度和流量
  • 城市轨道交通数据可视化的应用与优势
  • CTFHub每日练习
  • PS学习笔记——新建文档/修改文档
  • 【飞控调试】DJIF450机架+Pixhawk6c mini+v1.13.3固件+好盈Platinium 40A电调无人机调试
  • 竞赛选题 深度学习验证码识别 - 机器视觉 python opencv
  • 工厂自动化中DCS软件
  • 让你彻底学会HBase
  • 11.5MyBatis(进阶)
  • 若依前后端分离版,快速上手
  • 五、Linux目录结构
  • 大模型LLM 在线量化;GPTQ\AWQ量化
  • 记录将excel表无变形的弄进word里面来
  • 【Oracle 客户端连接数据库过程解析】
  • 云计算和跨境电商:数字化未来的基石
  • 科研小白成长记37——换档
  • 使用Pandas进行时间重采样,充分挖掘数据价值
  • 详细步骤记录:持续集成Jenkins自动化部署一个Maven项目
  • gittee启动器
  • 【网络奇遇记】那年我与计算机网络的浅相知
  • 数据结构及八种常用数据结构简介
  • 公共字段自动填充-@TableField的fill实现(2)
  • Qt/C++ 获取QProcess启动的第三方软件的窗体标题