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

表的增删改查

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

目录

1.Create:

1.1 插入 insert:

1.1.1 单行数据 + 全列插入:

1.1.2 多行数据 + 指定列插入:

1.1.3 插入否则更新:

1.2 替换 replace:

2.Retrieve:

2.1 SELECT 列:

2.1.1 全列查询:

2.1.2 指定列查询:

2.1.3 查询字段为表达式:

2.1.4 为查询结果指定别名:

2.1.5 结果去重:

2.2 WHERE 条件:

2.3 结果排序:

2.4 筛选分页结果:

3 Update:

3.1 更新值为具体值:

3.2 一次更新多个列:

3.3 更新值为原值基础上变更:

3.4 更新全表(没有 WHERE 子句):

4 Delete:

4.1 删除数据:

4.1.1 删除指定行:

4.1.2 删除整张表数据(没有 WHERE 子句):

4.2 截断表:

5 插入查询结果:

5.1 创建一张空表 no_duplicate_table,结构和 duplicate_table 一样

5.2 将 duplicate_table 的去重数据插入到 no_duplicate_table

5.3 通过重命名表,实现原子的去重操作

6 聚合函数:

6.1 统计次数:

6.2 统计平均数:

7 group by子句的使用:

7.1 如何显示每个部门的平均工资和最高工资

7.2 显示每个部门的每种岗位的平均工资和最低工资

7.3 显示平均工资低于2000的部门和它的平均工资

1.Create:

1.1 插入 insert:

语法:

insert [into] table_name [column,....] values (value_list)

        [,(value_list,......)] ;

1.1.1 单行数据 + 全列插入:

INSERT INTO students VALUES (100, 10000, '唐三藏', NULL);

1.1.2 多行数据 + 指定列插入:

INSERT INTO students (id, sn, name) VALUES

        (102, 20001, '曹孟德'),

        (103, 20002, '孙仲谋');

1.1.3 插入否则更新:

若由于主键或者唯一键冲突,则更新此行数据。

INSERT INTO students (id, sn, name) VALUES (100, 10010, '唐大师')

        ON DUPLICATE KEY UPDATE sn = 10010, name = '唐大师';

1.2 替换 replace:

若由于主键或者唯一键冲突,则替换为新数据。

REPLACE INTO students (sn, name) VALUES (20001, '曹阿瞒');


2.Retrieve:

语法:

SELECT

        [DISTINCT] {* | {column [, column] ...}

        [FROM table_name]

        [WHERE ...]

        [ORDER BY column [ASC | DESC], ...]

        [LIMIT ...]   ;

2.1 SELECT 列:


2.1.1 全列查询:

SELECT * FROM exam_result;

2.1.2 指定列查询:

SELECT id, name, english FROM exam_result;

2.1.3 查询字段为表达式:

SELECT id, name, chinese + math + english FROM exam_result;

2.1.4 为查询结果指定别名:

语法:

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

案例:

SELECT id, name, chinese + math + english 总分 FROM exam_result;

2.1.5 结果去重:

SELECT DISTINCT math FROM exam_result;

2.2 WHERE 条件:

比较运算符:

逻辑运算符:

2.3 结果排序:

ASC 为升序(从小到大) DESC 为降序(从大到小) 默认为 ASC

语法:

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

案例:

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

SELECT name, math, english, chinese FROM exam_result

        ORDER BY math DESC, english, chinese;

2.4 筛选分页结果:


语法:

起始下标为 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;

3 Update:

语法:

UPDATE table_name SET column = expr [, column = expr ...]

        [WHERE ...] [ORDER BY ...] [LIMIT ...]

3.1 更新值为具体值:

UPDATE exam_result SET math = 80 WHERE name = '孙悟空';

3.2 一次更新多个列:

UPDATE exam_result SET math = 60, chinese = 70 WHERE name = '曹孟德';

3.3 更新值为原值基础上变更:

UPDATE exam_result SET math = math + 30

        ORDER BY chinese + math + english

        LIMIT 3;

3.4 更新全表(没有 WHERE 子句):

UPDATE exam_result SET chinese = chinese * 2;

4 Delete:

4.1 删除数据:

语法:

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

案例:

4.1.1 删除指定行:

DELETE FROM exam_result WHERE name = '孙悟空';

4.1.2 删除整张表数据(没有 WHERE 子句):

DELETE FROM for_delete;

4.2 截断表:

语法:

TRUNCATE [TABLE] table_name

注意:

1. 只能对整表操作,不能像 DELETE 一样针对部分数据操作;

2. 实际上 MySQL 不对数据操作,所以比 DELETE 更快,但是TRUNCATE在删除数据的时候,并不经过真正的事物,所以无法回滚

3. 会重置 AUTO_INCREMENT 项,DELETE不会重置。

5 插入查询结果:

语法:

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

案例:删除表中的的重复复记录,重复的数据只能有一份

5.1 创建一张空表 no_duplicate_table,结构和 duplicate_table 一样

CREATE TABLE no_duplicate_table LIKE duplicate_table;

5.2 将 duplicate_table 的去重数据插入到 no_duplicate_table

INSERT INTO no_duplicate_table SELECT DISTINCT * FROM duplicate_table;

5.3 通过重命名表,实现原子的去重操作

RENAME TABLE duplicate_table TO old_duplicate_table,

                              no_duplicate_table TO duplicate_table;

6 聚合函数:

函数:

案例:

6.1 统计次数:

SELECT COUNT(*) FROM students;

6.2 统计平均数:

SELECT AVG(math) FROM students;

7 group by子句的使用:

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

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

案例:

准备工作,创建一个雇员信息表

                EMP员工表

                DEPT部门表

                SALGRADE工资等级表

7.1 如何显示每个部门的平均工资和最高工资

select deptno,avg(sal),max(sal) from EMP group by deptno;

7.2 显示每个部门的每种岗位的平均工资和最低工资

select avg(sal),min(sal),job, deptno from EMP group by deptno, job;

7.3 显示平均工资低于2000的部门和它的平均工资

统计各个部门的平均工资

        select avg(sal) from EMP group by deptno

having和group by配合使用,对group by结果进行过滤

        select avg(sal) as myavg from EMP group by deptno having myavg<2000;

--having经常和group by搭配使用,作用是对分组进行筛选,作用有些像where。

*SQL查询中各个关键字的执行先后顺序:

from > on> join > where > group by > with > having > select > distinct > order by > limit

http://www.dtcms.com/a/576986.html

相关文章:

  • Git 工作区、暂存区和版本库
  • MIT-矩阵链相乘
  • Go语言实战:入门篇-5:函数、服务接口和Swagger UI
  • 国产化Excel处理控件Spire.XLS教程:使用Java将CSV转换为PDF(含格式设置)
  • 【Hot100|3 LeetCode 128. 最长连续序列】
  • 一键搭建 Coze 智能体对话页面:支持流式输出 + 图片直显,开发效率拉满!
  • 十大免费ae模板网站短视频素材下载网站
  • 那里做直播网站网页打不开是什么问题
  • 论文分享 | AirRoom:物体是关键!革新室内房间重识别的新范式
  • 游戏 IPA 如何防修改,面向开发者的多工具实战(IPA 加固/无源码混淆/Ipa Guard CLI)
  • 从0到1做一个“字母拼词”Unity小游戏(含源码/GIF)- 项目的创建及准备
  • 在扣子上搭建测试用例自动编写智能体
  • 2023年第二十届五一数学建模竞赛-A题 无人机定点投放问题-基于抛体运动的无人机定点投放问题研究
  • 影刀RPA一键生成销售日报!AI智能分析,效率提升1000%[特殊字符]
  • Rust开发实战之密码学基础——哈希计算与对称加密实战
  • 技术解析:清洗无人机在高空清洁中的应用与优势
  • Linux LVM NAT 模式部署实践
  • 使用 DVC(Data Version Control)进行数据版本管理
  • 网站建设选择哪种开发语言最好从哪里下载wordpress
  • 微服务之网关(Spring Cloud Gateway)
  • ES脚本语言Painless介绍
  • 基于MATLAB的雨流计数法疲劳计算GUI可视化系统
  • WiFi 协议精读:IEEE 802.11-2012,IEEE Std 802.11w™-2009: Protected Management Frames
  • RabbitMQ-Exporter 监控 TLS 加密的 RabbitMQ 集群
  • 重庆佳宇建设集团网站重庆网站自己推广
  • 品牌营销策划网站wordpress 会员开卡消费
  • iOS修改tabbar的背景图
  • 《uni-app跨平台开发完全指南》- 04 - 页面布局与样式基础
  • 【学习笔记更新中】Deeplearning.AI 大语言模型后训练:微调与强化学习导论
  • SQL之表的时间类内置函数详解