1、插入数据

INSERT INTO 表名 VALUES(val_list);
或
INSERT INTO 表名(col_list) VALUES(val_list);

可以插入多条记录

INSERT INTO 表名(col_list) VALUES(val_list1),(val_list2),(val_list3),(val_list4);

备份数据表

如果表不存在,此时

CREATE TABLE emp_bak AS SELECT * FROM emp;

如果表存在,此时

INSERT INTO emp_bak SELECT * FROM emp;

2、更新数据

UPDATE table_name SET col=val,col=val [WHERE <condition>];
UPDATE emp SET empname='jerry',empaddr='延安',empphone='118' WHERE empid=1;

3、删除数据

DELETE FROM table_name [WHERE <condition>];

如果删除语句没where,此时会将数据表中的记录全部删除,类似TRUNCATE TABLE.

TRUNCATE将直接删除原来的表,并重新创建一个表,其语法结构为 TRUNCATE TABLE table_name。

TRUNCATE直接删除表而不是删除记录,因此执行速度比DELETE快。而且不能用在有主外键关系的主表中。

mysql为什么不建议delete数据?
delete对性能会有影响,一般不建议硬性delete数据,而是标记deleted = 1这种软删除
为啥呢?
根据之前了解的mysql底层存储原理 小存储单元page页,无论是非叶子节点page存的是索引key和指针,还是叶子节点存的是行数据.
1.当删除大量数据时
MySQL内部不会真正删除空间,而且做标记删除,即将delflag:N修改为delflag:Y,commit之后会会被purge进入删除链表,如果下一次insert更大的记录,delete之后的空间不会被重用,如果插入的记录小于等于delete的记录空会被重用
2.当少量删除中间数据时
你在中间删了某些个值,实际上只是找到那个page页找到对应的数据做删除标记,并不会实际影响page 页已经占的大小,这块空间可能也永远不会被利用,产生了内存碎片导致索引频繁分裂,影响SQL执行计划的稳定性
正确姿势:
使用deleted = 1 字段来软删除,保证索引连续性,
必要时,可将deleted = 0的字段完整迁移到新表,解决碎片问题

4、查询数据

MySQL从数据表中查询数据的基本语句为SELECT语句。SELECT语句的基本格式是:

1 SELECT  字段列表   FROM  表1,表2... WHERE 表达式   GROUP BY  字段   HAVING 条件
ORDER BY 字段 LIMIT   [<offset>,] <row count>]

{* | <字段列表>}包含星号通配符和字段列表,表示查询的字段。其中,字段列表至少包含一个字段名称,如果要查询多个字段,多个字段之间用逗号隔开, 后一个字段后不加逗号。 FROM <表1>,<表2>...,表1和表2表示查询数据的来源,可以是单个或者多个。 WHERE子句是可选项,如果选择该项,将限定查询行必须满足的查询条件。 GROUP BY <字段>,该子句告诉MySQL如何显示查询出来的数据,并按照指定的字段分组。 [ORDER BY <字段>],该子句告诉MySQL按什么样的顺序显示查询出来的数据,可以进行的排序有升序 (ASC)、降序(DESC)。 [LIMIT [,] ],该子句告诉MySQL每次显示查询 出来的数据条数。

单表查询:

1> 查询所有字段

 SELECT * FROM 表名;

2> 查询指定字段

SELECT 列名 FROM 表名;

3> 查询多个字段

SELECT 字段名1,字段名2,…,字段名n FROM 表名;
SELECT empid,empname,empsex,empaddr,empbirth,empphone,deptid FROM emp;

查询的时候可以起别名

SELECT e.`empid` AS 员工编号 ,e.`empname` AS 员工名字 FROM emp e;

4> 查询指定记录 数据库中包含大量的数据,根据特殊要求,可能只需要查询表中的指定数据,即对数据进行过滤。在 SELECT语句中,通过WHERE子句可以对数 据进行过滤,语法格式为:

SELECT 字段名1,字段名2,…,字段名n FROM 表名 WHERE 查询条件

如:查询性别为女的员工信息

SELECT * FROM emp WHERE empsex='女';

5>带IN关键字的查询 N操作符用来查询满足指定范围内的条件的记录,使用IN操作符,将所有检索条件用括号括起来,检索条件之间用逗号分隔开,只要满足条件范围内的一个值即为匹配项。 在IN关键字前面加上了NOT关键字,这使得查询的结果与前面一个的结果正好相反,

如:查询编号为 1 4 8 10 的员工信息

SELECT * FROM emp WHERE empid=1 OR empid=4 OR empid=8 OR empid=10;
SELECT * FROM emp WHERE empid IN (1,4,8,10);
SELECT * FROM emp WHERE empid NOT IN (1,4,8,10);

6>带BETWEEN AND的范围查询 BETWEEN AND用来查询某个范围内的值,该操作符需要两个参数,即范围的开始值和结束值,如果字段值满足指定的范围查询条件,则这些记录被返回。 BETWEEN AND操作符前可以加关键字NOT,表示指定范围之外的 值,如果字段值不满足指定的范围内的值,则这些记录被返回。

SELECT * FROM emp WHERE empid>=6 AND empid<=10;
SELECT * FROM emp WHERE empid BETWEEN 6 AND 10;

7>带LIKE的字符匹配查询 通配符是一种在SQL的WHERE条件子句中拥有特殊意思的字符。SQL 语句中支持多种通配符,可以和 LIKE一起使用的通配符有‘%’和‘_’。

  1. 百分号通配符‘%’,匹配任意长度的字符,甚至包括零字符

  2. 下划线通配符‘_’,一次只能匹配任意一个字符

    SELECT * FROM emp WHERE empname LIKE 'a%'; -- 以a开头
    SELECT * FROM emp WHERE empname LIKE '%a'; -- 以a结尾
    SELECT * FROM emp WHERE empname LIKE '%a%'; -- 包含a

名字是两个字母的而且是a开头的

SELECT * FROM emp WHERE empname LIKE 'a_';
SELECT * FROM emp WHERE empaddr IN ('西安','武当山');
SELECT * FROM emp WHERE empaddr ='西安' OR empaddr = '武当山';
SELECT * FROM emp WHERE empaddr LIKE '西安%';

8>查询空值 数据表创建的时候,设计者可以指定某列中是否包含空值(NULL)在SELECT语句中使用IS NULL子句,可以查询某字段内容为空记录。与IS NULL相反的是NOT NULL,该关键字查找字段不为空的记录。

空的查询 查询地址为空的员工信息

SELECT * FROM emp WHERE empaddr IS NULL;
SELECT * FROM emp WHERE empaddr ='';
SELECT * FROM emp WHERE empaddr IS NULL OR empaddr='';

非空查询

SELECT * FROM emp WHERE empaddr IS NOT NULL;
SELECT * FROM emp WHERE empaddr !='';
SELECT * FROM emp WHERE empaddr IS NOT NULL AND empaddr!='';

9>带AND的多条件查询 MySQL在WHERE子句中使用AND操作符限定只有满足所有查询条件的记录才会被返回。可以使用AND 连接两个甚至多个查询条件,多个条件表达式之间用AND分开

如:查询性别为男同时地址是西安锦业路

SELECT * FROM emp WHERE empsex='男' AND empaddr='西安锦业路';

10>带OR的多条件查询 与AND相反,在WHERE声明中使用OR操作符,表示只需要满足其中一个条件的记录即可返回。OR也可以连接两个甚至多个查询条件,多个条件表达式之间用OR分开

11>查询结果不重复

在SELECT语句中,可以使用DISTINCT关键字指示MySQL消除重复的记录值。

SELECT DISTINCT empid,empname,empsex FROM emp;

12>对查询结果排序 使用ORDER BY子句对指定的列数据进行排序。 desc:倒叙 asc:默认值,升序

  1. 单列排序

    SELECT * FROM emp ORDER BY empid DESC;
  2. 多列排序

    SELECT * FROM emp ORDER BY empid DESC ,deptid DESC;

13>聚合函数 有时候并不需要返回实际表中的数据,而只是对数据进行总结。 MySQL提供一些查询功能,可以对获取的数据进行分析和报告。这些函数 的功能有:计算数据表中记录行数的总数、计算某个字段列下数据的 总和, 以及计算表中某个字段下的 大值、 小值或者平均值。常用的聚合函数 MAX()、MIN()、 COUNT()、SUM()、AVG()。

函数 作用
AVG() 返回某列的平均值
COUNT() 返回某列的行数
MAX() 返回某列的 大值
MIN() 返回某列的 小值
SUM() 返回某列值的和

1) COUNT()函数统计数据表中包含的记录行的总数,或者根据查询结果 返回列中包含的数据行数。其使用方法有两种:

COUNT(*)计算表中总的行数,不管某列是否有数值或者为空值。

COUNT(字段名)计算指定列下总的行数,计算时将忽略空值的行。 2) SUM()是一个求总和的函数,返回指定列值的总和。 SUM()函数在计算时,忽略列值为NULL的行。 3) AVG()函数通过计算返回的行数和每一行数据的和,求得指定列数据的平均值。 4) MAX()函数返回指定列中的 大值。 MAX()函数除了用来找出 大的列值或日期值之外,还可以返回任意列 中的 大值,包括返回字符类型 的 大值。在对字符类型数据进行比较 时,按照字符的ASCII码值大小进行比较,从a~z,a的ASCII码小,z的 大。在比较时,先比较第一个字母,如果相等,继续比较下一个字符,一直到两个字符不相等或者字符结束为止。例如,‘b’与‘t’比较时,‘t’为 大值;“bcd”与“bca”比较时,“bcd”为 大值。 5) MIN()函数与MAX()函数类似,不仅适用于查找数值类型,也可应用于字符类型。 14>分组查询 GROUP BY关键字通常和集合函数一起使用

查询每个部门的人数

SELECT deptid,COUNT(1) FROM emp GROUP BY deptid;

统计每个部门的男女人数

SELECT deptid,empsex,COUNT(1) FROM emp GROUP BY deptid,empsex;

分组后再排序

SELECT deptid,empsex,COUNT(1) FROM emp GROUP BY deptid,empsex ORDER BY
deptid DESC,COUNT(1) DESC;

15>使用HAVING过滤分组 GROUP BY可以和HAVING一起限定显示记录所需满足的条件,只有满 足条件的分组才会被显示对于统计的每个部门的男女人数只要大于等于3的信息

SELECT deptid,empsex,COUNT(1) FROM emp GROUP BY deptid,empsex HAVING
COUNT(1)>=3 ORDER BY COUNT(1) DESC,deptid DESC;

16>LIMIT SELECT返回所有匹配的行,有可能是表中所有的行,若仅仅需要返回 第一行或者前几行,可使用LIMIT 关键字。

五、数据CRUD操作相关推荐

  1. 第二节 数据CRUD操作与连接查询和子查询(包含练习)

    笔记中的大部分例子都是通过部门和部门员工表中的数据进行的举例,表的相关数据创建放在文末,以便理解笔记中的部分语句. 一.数据CRUD操作 1. 插入数据 1.1 插入一条数据 INSERT INTO ...

  2. mvc 怎么把后台拼接好的div写到前台_五、controller层配置和前台数据crud操作的实现...

    这个系列专栏的完结可能比我想象要快一些.不过可能将来要完善这个项目的时候还会加以改进.我今天争取把最后一层:控制层的代码给写完.明天最后一篇博文将讲讲Session.cookie对用户登录的控制,并最 ...

  3. SSM框架CRUD操作批量删除批量追加数据(OracleMySQL数据库)

    SSM框架CRUD操作Demo 1.SSM开发环境搭建详见下一章微博 2.定义起始页,基本的超链接完成请求,详见如图 由于时间关系,本人将在本博客中陆续推出高级框架阶段的系列教程,现已经发布如下几篇, ...

  4. 访问其他程序中的数据(ContentResolver的CRUD操作)

    内容提供器的用法一般有两种: 1.使用现有的内容提供器来读取和操作相应程序中的数据 2.创建自己的内容提供器给我们程序的数据提供外部访问接口. 如果一个应用程序通过内容提供器对其数据提供了外部访问接口 ...

  5. 具有分页,排序,搜索和导出数据选项的ASP.NET Core CRUD操作

    目录 介绍 先决条件 我使用的技术 创建此项目的步骤 已安装的Nuget包 MSSQL表脚本 在MSSQL数据库中创建MOC数据 创建一个模型类 数据库连接:appsettings.json Star ...

  6. java代码对数据库数据的CRUD操作

    java代码对数据库数据的CRUD操作 前言 一.CRUD.JDBC是什么? 二.操作步骤 1.连接mqsql数据库.加载数据库驱动 2.对数据库中的表进行增.删.改.查 总结 前言 对于刚刚学习完J ...

  7. 十五、《大数据项目实战之用户行为分析》HBase数据表操作

    ​​​​​​HBase 为用户提供了一个非常方便的命令行操作方式,我们称之为HBase Shell. HBase Shell 提供了大多数的 HBase 命令,通过 HBase Shell 用户可以方 ...

  8. 实战 | 利用Delta Lake使Spark SQL支持跨表CRUD操作

    转载自  实战 | 利用Delta Lake使Spark SQL支持跨表CRUD操作 供稿 | eBay ADI-Carmel Team 作者 | 金澜涛 编辑 | 顾欣怡 本文7309字,预计阅读时 ...

  9. HBase学习之路(二):Java客户端的CRUD操作详讲

    内容简介 一.概述 二.操作前的准备 三.put操作 1.单行put方法 2.使用Put列表 四.get操作 1.单行get方法 2.使用Get列表 五.delete操作 1.单行delete方法 2 ...

最新文章

  1. 【ES6】Proxy对象
  2. 梦幻桌面wmv_【 梦幻桌面 】梦幻桌面(DreamScene桌面美化工具)新版下载 - U大师
  3. 双NameNode的同步机制
  4. linux下多种锁的比较
  5. final关键字与static对比
  6. 白领夫妇白手起家 6年赚得两房两车
  7. 1.2 - 列表练习题
  8. 水杉3D建模Metasequoia for Mac 4.8.3
  9. keil 函数最多可以传几个参数_Keil C51中如何让一个函数返回多个值?我把数组指针传入函数中,但发现编译后DATA区会随...
  10. 非线性优化:Ax=b求解的几种算法
  11. 添加proc文件,控制sctp的debug输出
  12. delphi第三方组件总述
  13. 【微信】公众号扫码点餐功能(附源码)
  14. win10装系统输入用户名就卡死
  15. PHP 核心技术与最佳实践
  16. 新iPhoneSE开卖市场预期不一?二手市场已降价转售
  17. 怎么压缩照片内存大小?网上如何压缩照片?
  18. 操作系统-期末知识点第一章
  19. ps 抽出工具 抠出头发等细致部分
  20. Linux 的各种 signal

热门文章

  1. 求解两圆相交的交点坐标
  2. freemarker(FTL)常见语法大全
  3. 2023年贵州大学文艺学专业考研上岸经验
  4. 移动最小二乘法(MLS)曲线曲面拟合C++代码实现
  5. 【源译】Optimizeit Profiler概览
  6. 20220518编译OpenHarmony-v3.1-Release出现genext2fs: command not found
  7. Linux ss命令使用
  8. 数据库备份与恢复,全备份、增量备份
  9. Android开发中的WMS详细解析
  10. C - Recursive sequence (矩阵ksm)