专栏首页java小白MySQL基础之DML语句

MySQL基础之DML语句

DML语句

DML操作是指对数据库中表记录的操作,主要包括表记录的插入(insert),更新(update),删除(delete)和查询(select),是开发人员日常使用最频繁的操作。

插入记录

表创建好后,就可以往里插入记录了,插入记录的基本语法如下

INSERT INTO tablename (field1,field2,.....,fieldn) VALUES (value1,value2,.....valuen);

向表emp中插入记录,ename为zhangsan,hiredate为now(),sal为2000,deptno为1

也可以不用指定字段名称,但是values后面的顺序应该和字段的排列顺序一致。如果想把其中的某个字段不设置值,需要把那个字段的名称重新填上去,那么这个字段会自动设置为NULL或者默认值或者自增的下一个数字

INSERT 语句还有一个很好的特性,可以一次性插入多条记录

INSERT INTO tablename (field1,field2,......,fieldn)
VALUES
(record1_value1,record1_value2,....,record1_valuesn),
(record2_value1,record2_value2,....,record2_valuesn),
(record3_value1,record3_value2,....,record3_valuesn),
......
(recordn_value1,recordn_value2,....,recordn_valuesn)
;

这个特性可以使得MySQL在插入大量记录时,节省很多的网络开销,大大提高插入效率

更新记录

表里的记录值可以通过update命令进行更改,语法如下:

UPDATE tablename SET FIELD1=value1,field2=value2,...fieldn=valuen [WHERE CONDITION]

将表emp中ename为“zhaosi”的薪水从2000改为4000

在MySQL中,update命令可以同时更新多个表中数据,语法如下:

UPDATE tablename1,tablename2,....tablenamen SET tablename1.field1=expr1,tablenamen.exprn [WHERE CONDTION];

注意:多表更新的语法更多地用在根据一个表的字段来动态地更新另外一个表的字段。

删除记录

如果记录不在需要,可以用delete命令删除,语法如下

DELETE FROM tablename [WHERE CONDITION]

在emp中将ename为”zhaosi”的记录删除

在MySQL中可以一次删除多个表的数据,语法如下 DELETE tablename1,tablename2,……,tablenamen FROM tablename1,tablename2,….,tablenamen[WHERE CONDTION] 注意:如果from后面的表名用别名,则delete后面也要用相应的别名,否则会提示语法错误。

查询记录

数据插入到数据库中后,就可以用SELECT命令进行各种各样的查询,使得输出的结果符合用户的要求。SELECT的语法很复杂,

SELECT * FROM tablename [WHERE CONDITION]

其中“*”表示将所有的记录都选出来,也可以用逗号分隔的所有字段来代替,以下两个查询都是等价的

查询不重复的记录

有时需要将表中的记录去掉重复后显示出来,可以用distinct关键字来实现

条件查询

WHERE 后面的条件可以使用 >,<,>=,<=,!=,=等比较运算符,多个条件之间还可以使用 or,and等逻辑运算符进行多条件联合查询。 下面的例子是多字段条件查询

排序和限制

取出按照某个字段进行排序后的记录结果集,这就用到了数据库的排序操作,用关键字ORDER BY 来实现

SELECT * FROM tablename [WHERE CONDITION] [ORDER BY field1 [DESC\ASC],field2 [DESC\ASC],...,fieldn[DESC\ASC]]

DESC和ASC是排序顺序关键字,DESC表示按照字段进行降序排序,ASC则表示升序排列,如果不写此关键字默认是升序排序。RODER BY后面可以跟多个不同的排序字段,并且每个排序字段可以用不用的排序顺序。


如果排序字段的值一样,则值相同的字段按照第二个排序字段进行排序,依次类推。如果只有一个排序字段,则这些字段相同的记录将会无序排序。

如果希望显示一部分数据,而不是全部,可以使用LIMIT关键字来实现,LIMIT语法如下

SELECT...[LIMIT offset_start,row_count]

其实offset代表的意思是记录的其实偏移量(self:从第一行开始),row_count代表显示的行数(self:一共显示几条记录) 未填写offset_start默认为0,只需要填写显示的行数即可,实际显示的就是前n条记录

聚合

很多情况下,用户都需要进行一些汇总操作,比如统计整个公司的人数或者统计每个部门的人数,这时就要用到SQL的聚合操作。 聚合操作的语法如下:

SELECT [field,field2,....,fieldn] fun_name
FROM tablename
[WHERE where_contition]
[GROUP BY field1,field2,...,fieldn
[WITH ROLLUP]]
[HAVING where_contition]
]

参数说明

1.

  1. fun_name 表示要做的聚合操作,也就是聚合函数,常用的有sum(求和),count(*)记录数,max(最大值),min(最小值)。
  2. GROUP BY关键字表示要进行分类聚合的字段,比如要按照部门分类统计员工数量,部门就应该写在group by后面
  3. WITH ROLLUP是可选语法,表明 是否对分类聚合后的结果进行再汇总
  4. HAVING关键字表示对分类后的结果再进行条件的过滤 注意:having和where的区别在于,having是对聚合后的结果进行条件的过滤,而where是在聚合前就对记录进行了过滤,如果逻辑允许,我们尽可能用where先过滤记录,这样因为结果集减小,将对聚合的效率大大提高,最后再根据逻辑看是否用having进行过滤。

例子:统计emp表中的总人数

统计各个部门的人数

统计各个部门的人数,又要统计总人数

统计人数大于1人的部门

统计所有员工的薪水总额,最高和最低薪水

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JAVA链式编程

    但我之前个弊端,使用dbUtils的时候,从数据库中查出来的数据进行,set的时候,赋值不进去,可能是dbUtils的版本比较低吧! 知道的同学们希望可以多...

    秋白
  • MySQL基础篇之DDL语句

    在以上的命令行中,mysql代表客户端命令,“-u”后面跟链接的数据库用户,“-p”表示需要输入密码

    秋白
  • maven 手动安装本地jar包

    秋白
  • Confluence 6.15 附件宏参数

    Sort Order (sortOrder) ascending使用组合的排序( Sort By )参数进行排序,来对附件按照升序或者降序进行排序。Allow ...

    HoneyMoose
  • Confluence 6.15 附件宏参数

    Sort Order (sortOrder) ascending 使用组合的排序( Sort By )参数进行排序,来对附件按照升序或者降序进行排序...

    HoneyMoose
  • ​2019年最新华为、BAT、美团、头条、滴滴面试题目及答案汇总

    【导语】最近 GitHub 上一个库火了,总结了 阿里、腾讯、百度、美团、头条等国内主流大厂的技术面试题目,目前 Star 2000+,还在持续更新中,预计会火...

    AI科技大本营
  • 在DataGrid中创建一个弹出式Details窗口

    在DataGrid中创建一个弹出式Details窗口 这篇文章来自DotNetJunkie的提议。他最初写信要求我们提供一个关于如何创建在DataGrid 中...

    阿新
  • MVC分部视图@Html.Partial

      加载分布视图的方式: //1、以视图名使用当前文件夹下的视图(如果没有找到,则搜索 Shared 文件夹) @Html.Partial("_...

    纯粹是糖
  • Web Services---初级篇1

    1前言 通过使用 Web Services,您的应用程序可以向全世界发布信息,或提供某项功能。Web Services 脚本平台需支持 XML + HTTP。 ...

    码神联盟
  • 一个超简单的 RestFUL API 接口 Mock 工具,建议各位前端同学来使用哦!

    在我们前端的开发工作中,如果与后端做好了前后端并行开发的安排,那么我们肯定是少不了使用 Mock 工具的。作为前端同学对于网上流行的各种 Mock 工具应该都有...

    FungLeo

扫码关注云+社区

领取腾讯云代金券