DML语句(表记录语句)
DML操作是指对数据库中表记录的操作, 主要包括表记录的插入( insert ) . 更新( update ) . 删除( delete ) . 查询( select ), 是开发人员频繁使用的操作. 下面将依次对它们进行介绍.
插入记录
含可空的字段 . 非空但是含有默认值以及自增字段, 可以不在insert后的字段列表里面出现, values后面只写对应字段名称的值.
-- 插入记录
insert into tablename (field1,field2,...,fieldn) VALUES (value1,value2,...,valuen);
-- 一次性插入很多记录
insert into tablename (field1,field2,...,fieldn)
VALUES
(value1,value2,...,valuen),
(value1,value2,...,valuen),
(value1,value2,...,valuen);
更新记录
表里的记录值可以通过update命令进行更改
update tablename set field1=value1,field2=value2,...,fieldn=valuen;
-- mysql中可以同时更新多个表中数据
update t1,t2,...,tn set t1.field=expr1,tn.field=exprn [WHERE CONDITION];
update emp a,dept b set a.sal=a.sal*b.deptno,b.deptname=a.ename where a.id=b.id;
删除记录
delete from tablename [where condition];
delete from emp where ename='dony';
-- mysql中可以一次删除多个表的数据
delete t1,t2,...,tn from t1,t2,...,tn [where condition];
delete a,b from emp a,dept b where a.deptno=b.deptno and a.deptno=3;
查询记录
-- 查询全部
select * from emp;
-- 查询不重复记录(DISTINCT关键字)
select DISTINCT deptno from emp;
-- 条件查询
select * from emp where deptno=1;
-- 排序与限制
select * from tablename [where condition] [order by field1 [DESC|ASC]],field2 [DESC|ASC],...,fieldn [DESC|ASC];
select * from emp order by sal;
-- 对于排序后记录,如果只是希望只显示一部分,则可以使用LIMIT命令
select ...[limit offset_start,row_count];
-- 显示按照sal排序后 前三条数据
select * from emp order by sal limit 3;
-- 显示按照sal排序后从第二条记录开始的3条数据
select * from emp order by sal limit 1,3;
-- limit 经常和order by使用来进行记录的分页显示
聚合
一般用户需要进行一些汇总操作的时候,就需要使用到SQL语句的聚合
select [field1,field2,...,fieldn]
from tablename
[where where_condition]
[group by field1,field2,...,fieldn
[with rollup]]
[having where_condition]
表连接
select ename,deptname from emp,dept where emp.deptno=dept.deptno;
左连接:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录
右连接:包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录
子查询
在某些情况下, 当进行查询的时候, 需要的条件是另外一个select语句的结果. 这个时候, 就要用到子查询
有的时候使用子查询, 查询的速度会快速增加
用于子查询的关键字主要包括in . not in . = . != . exits . not exits
select * from emp where depto in (select depto from dept);
-- 结果和连接一样
select emp.* from emp,dept where emp.deptno=dept.deptno;
记录联合
我们经常会碰到这样的应用, 将两个表的数据按照一定的查询条件查询出来之后, 将结果合并到一起显示出来
这个时候我们就需要使用union与union all关键字来实现这样的功能
select * from t1
UNION|UNION ALL
select * from t2
...
UNION|UNION ALL
select * from tn;
-
UNION与UNION ALL的主要区别
- UNION ALL是吧结果集直接合在一起
- UNION是将UNION ALL后的结果进行一次DISTINCT
create table emp( ename nvarchar(20), hiredate date, sal decimal(10,2), deptno int(11) )ENGINE=InnoDB DEFAULT CHARSET=utf8; insert into emp values ("zzx","2000-01-01",100.00,1), ("lisa","2003-02-01",400.00,2), ("bjguan","2004-04-02",100.00,1), ("dony","2005-02-05",2000.00,4); create table dept( deptno int(11), deptname nvarchar(20) )ENGINE=InnoDB DEFAULT CHARSET=utf8; select * from emp;
select deptno from emp
union all
select deptno from dept;
select deptno from emp
union
select deptno from dept;
热水有益于身体健康
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!