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;

posted @   红烧鲈鱼  阅读(126)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示