MySQL基础-DML语句

来源:互联网 发布:音速启动同类软件 编辑:程序博客网 时间:2024/05/17 23:43

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

1.插入记录

这里我们已经创建好了员工表emp和部门表dept;
这里写图片描述
表建好了,我们就可以向表里插入数据了

插入命令 INSERT INTO tablename (field1,field2,….,fieldn) VALUES(value1,value2,…..,valuen);

这里写图片描述

也可以不用指定字段名,但是values后面的顺序应该和字段的排列顺序一一对应。

这里写图片描述

在一条记录中,在插入时根据业务需求我们可以不用管可以为NULL,或者设置默认值的字段,只需要values后面的参数和前面的字段名一一对应即可,这里就不演示了。

这里我再多说一个我在开发中遇到的关于insert的问题:在插入时,如果一个字段可以为空,且类型不是字符类型,那么可以向这个字段插入null值,但不可以插入”这样的空串。因为空串也属于字符型。

也可以一次插入多条记录
命令:
INSERT INTO tablename (field1,field2,….,fieldn) VALUES(record1_value1,record1_value2,…..,record1_valuen),
VALUES(record2_value1,record2_value2,…..,record2_valuen),
…….
VALUES(recordn_value1,recordn_value2,…..,recordn_valuen);

这里写图片描述

我们来看一下插入操作过后的emp表
这里写图片描述

2.更新操作

命令:
UPDATE tablename SET field=value1,field=value2,……fieldn=value[WHERE CONDITION]
接下来我们把Lisa的薪水改成4000

这里写图片描述

update命令还可以更新多个表中的数据

我们先来看没有更新前emp,dept的数据

这里写图片描述

我们来同时更新emp中sal字段和dept的deptname字段

这里写图片描述

我们再来看更新后的两个表

这里写图片描述

多表更新多用于根据一个表的字段来动态更新另外一个表的字段。

3.删除操作

命令:DELETE FROM tablename [WHERE CONDITION]

我们先来删除名字为lisa的员工

这里写图片描述

在MySQL中可以一次删除多个表的数据

命令:DELETE t1,t2,…..,tn FROM t1,t2,…..,tn [WHERE CONDITION]
如果from后面用的是表的别名,则delete后面也需要用相应的别名,否则会报语法错误。

同时删除emp,dept表中deptno为2的记录

这里写图片描述

删除后的emp,dept的表数据:

这里写图片描述

不管是多表删除还是多表删除,不加where条件会把表所有的记录都删除,一定要小心,update操作也一样,在更新时考虑清楚where条件。

4.查询操作

为了下面的训练展开,我们把刚才delete和update的操作还原一下。

这里写图片描述
如上图所示 SELECT * FROM tablename 就是一个最简单的查询语句。

查询不重复的记录,可以用distinct关键词

这里写图片描述

条件查询,使用关键词where,这里我们查询部门号为1的员工

这里写图片描述

在日常业务中,我们常常需要按照某个列来排序显示。这里我们使用关键字 ORDER BY

命令:SELECT * FROM tablename [WHERE CONDITION] [ORDER BY field1[DESC|ASC],field2[DESC|ASC],….,fieldn[DESC|ASC]]

desc表示降序排序,asc是升序排序,默认为asc。多个field表示,首先按照field1来排序,如果field1的值相同,则按照field2的规则来排序,以此类推。

下面我们按照部门号来排序,如果部门号相同,我们按照薪水降序排序。

这里写图片描述

显示部分数据,可以用limit关键词,在项目中我们常用limit做分页

命令:SELECT * FROM tablename [LIMIT offset_start,row_count];

offset_start表示起始位置的偏移量,也就是从第几条记录开始

row_count表示要显示记录的个数

下面我们从第二条记录开始,显示两条记录。

这里写图片描述

聚合,很多时候我们需要进行汇总操作,例如每个部门的人数,那么我们就需要分组。

聚合操作的命令:
SELECT [field1,field2,…,fieldn] fun_name
FROM tablename
[WHERE where_contition]
[GROUP BY field1,field2,…,fieldn]
[WITH ROLLUP]
[HAVING where_contition]

fun_name表示聚合操作,具体的也就是聚合函数,常用的有,sum,count,max,min。

group by 关键词表示按照后面的field字段,来进行分组,或者说聚合。

with rollup是用来在分组统计数据的基础上再进行统计汇总。

HAVING表示对分类后的结果再进行条件过滤。

having和where的区别在于having是分类后过滤,where是分类前,如果逻辑允许,我们尽可能使用where先过滤,这样因为结果集减少,对聚合的效率会大大提高。

下面我们首先统计一下公司的总人数

这里写图片描述

统计各个部门的人数
这里写图片描述

既要统计部门数,又要统计总人数

这里写图片描述

统计部门人数大于1的部门

这里写图片描述

统计全公司薪水总和,以及最高薪水和最低薪水

这里写图片描述

连接:

当需要同时显示多个表中的字段时,就可以用表连接来实现这样的功能。连接从大体上可以分为内连接和外连接,区别是,内连接显示的是两个表中相互匹配的数据,外连接会选出其他不匹配的记录

我们先来查看一下,每个人对应的部门名称。

这里写图片描述

外连接又分为左外连接和右外连接
左外连接:包含所有左边表中的记录甚至是右边表中没有和它匹配的记录
右外连接:包含所有右边表中的记录甚至是左边表中没有和它匹配的记录

为了下面的业务开展,我们在emp中新加了一个员工:

这里写图片描述

用左外连接选出员工对应的部门名称

这里写图片描述

子查询

某些情况下,我们进行查询时需要的条件是另一个查询的结果。 这时候应该要用到子查询。用于子查询的关键字包括:in,not in,=,!=,exists,not exists等。

这里为了演示 ,我们向dept表中加了一条记录

这里写图片描述

我们在emp表中查询出所有部门在dept中的所有记录

这里写图片描述

如果子查询的记录是唯一的,也可以=代替in

这里写图片描述

某些情况下表连接是可以代替子查询的,表连接在很多情况下用于优化子查询。

记录联合,我们经常碰到将两个表按照一定的条件查询出来后,将结果合在一起,这时候就需要用到关键字union和union all来实现了。union all是把结果集直接合在一起,union是将union all后的结果再做一次distinct,去除重复。

这里写图片描述

这里写图片描述

原创粉丝点击