首页 > 数据库 >数据库的操作:DML数据操纵语言:增删修改查(insert/delete/update/select)

数据库的操作:DML数据操纵语言:增删修改查(insert/delete/update/select)

时间:2024-09-13 16:53:24浏览次数:12  
标签:classroom insert DML update 员工 emp where class select

一.概论

对表中的数据进行操纵的语言

二.语法:

1.增加数据:insert

2.删除数据:delete

3.修改数据:update

4.查找数据:select

三.案例insert/delete/update/select

1.查找商品数量:select

语法:

select 字段|表达式 from 表名|视图|结果集

[where 条件]

[group by 分组]

[having 分组之后进行检索]

[order by 排序]

[limit 限制结果]

select count(*) from 商品表 where name = '耳机' 
-- 查看所有信息
select * from classroom
-- 查看部分信息
SELECT class_id,class_name FROM classroom
-- 员工表与部门表
# emp员工表:员工姓名,员工编号,上级领导员工编号,所在部门,薪资等等
# dept部门表:部门id,部门名称,部门地址
-- 查看所有员工的姓名和工资
select 员工姓名,工资 from emp
-- 员工工资提升5%之后员工的姓名和工资 ---算数运算
select 员工姓名,薪资+薪资*0.05 from emp
-- 查询工资大于2k的员工信息
select * from emp where 薪资>2k
-- 查询工资在1k-2k之间的员工信息
select * from emp where 薪资>=1k and 薪资<= 2k
select * from emp where 薪资 between 1k and 2k; # between包含边界类似于=
-- 查询员工编号为1,2,3的员工信息
select * from emp where 员工编号 in (1,2,3)

别名:字段,表达式,结果集,表都可以起别名 as

判断是否为空函数:isnull(字段,0):判断字段是否为null,是的话就赋值为0

# 给字段取别名
select 员工姓名,薪资+薪资*0.05 as '提升后的薪资' from emp;

# 1)去重 distinct:
# 每个人都有工作岗位,可能会重复,只查系统里有多少个岗位
select distinct 工作类型 from emp; 

# 2)模糊查询 like %:匹配字符,匹配0个多个长度的任意字符
# 查询名字以s开头的员工信息
select * from emp where ename like 's%'
# 查询名字包含s的员工信息
select * from emp where ename like '%s%'
# 查询第二个字符为L的所有员工信息:'_'可实现第几个字符
select * from emp where ename like '_L%'

#3)排序:asc升序(默认);desc降序
select * from emp order by 薪资 asc/desc;
# 根据员工的工资降序排,如果薪资一致,则按照员工编号降序排序
select * from emp order by 薪资 desc,员工编号 desc

4)限制结果集显示:limit m,n【m:开始位置,索引值从0开始;n:取值的长度(个数)】
# 查询在10号部门工资最高的员工信息(第一位)
select * from emp where 部门 = 10 order by 薪资 desc limit 0,1

# 5)为空/非空数据的查询
# 查询所有有奖金的员工信息
select * from emp where 奖金>0
# 查询所有奖金列为空的员工
select * from where 奖金 is null;
# 将奖金小于500的员工奖金加100元
select * from where 奖金<500 or 奖金 is null
# 方法一:首先先把空值设置为0
update emp set 奖金=0 where 奖金 is null # 没有这一步操作的话,以下更新语句遇见null则不再执行接下来的更新
update emp set 奖金 = 奖金+100 where 奖金<500 or 奖金 is null
# 方法二:函数:ifnull(字段,0) 判断字段是否为null,是的话就赋值为0
update emp set 奖金 = ifnull(奖金,0)+100 where 奖金<500 or 奖金 is null

2.插入数据:instert

insert into 表名[{(字段名...)}]values(值....)

# 给所有字段添加值,和表中字段顺序一致
insert into classroom VALUES(1,'高中一班')
# 给某个字段单独添加值,和指定字段的顺序一致
insert into classroom(class_id,class_name) VALUES(2,'高中二班')
# 批量插入:添加3条记录
INSERT INTO classroom VALUES(3,'高中三班'),(4,'高中4班'),(5,'高中5班')

复制另外一张表的内容

前提:两个表的结构必须一致!!!!

语法:insert into <新表> SELECT * from <被复制的表>

# 整表复制:将classroom的内容复制到classroom
-- 1)创建classroom1
create table classroom1(
	class_id int,
	class_name VARCHAR(20)
)
-- 2)查看classroom的所有数据
select * from classroom;
-- 3)复制
insert into classroom1 SELECT * from classroom

3.删除数据:delete

①语法1:delete 删除后没有改变表的结构,自增性会继续

(删除一条或所有数据)delete from 表名 [where 条件]

②语法:truncate 删除后,自增性会重置

(清空表的数据)truncate table 表名

# 查看数据
SELECT* FROM classroom1
# 只删除classroom1表中class_id为1的数据
DELETE from classroom1 where class_id = 4
# 删除表的所有数据(逐行删除)
DELETE from classroom1
# 清空表(文件级别的清空)
truncate table classroom1

3.更改/修改数据:update

语法:(修改一条/所有数据) update 表名 set 字段= 新值...[where 条件]

SELECT * FROM classroom
# 优先以id(唯一键)进行查询可以优化查询速度
# 把class_id为4的班名改为高中肆班
update classroom set class_name = '高中肆班' where class_id = 4
# 把class_name为高中肆班的班名改为高中四班
update classroom set class_name = '高中四班' WHERE  class_name = '高中肆班' 
# 修改classroom 所有class_name的数据
UPDATE classroom set class_name = '批量修改班名'

标签:classroom,insert,DML,update,员工,emp,where,class,select
From: https://blog.csdn.net/m0_53780713/article/details/142096097

相关文章

  • 【编程基础知识】mysql中的insert into ... on DUPLICATE key和replace into的性能对
    一、概述在MySQL中,INSERTINTO...ONDUPLICATEKEYUPDATE和REPLACEINTO都是用来处理插入或更新数据的语句,但它们在性能和行为上有所不同。二、REPLACEINTOREPLACEINTO语句在遇到唯一键或主键冲突时,会先删除旧记录,然后插入新记录。这意味着它会执行两次操作:删除......
  • shardingJdbc分表执行批量update不支持的解决方式
    引言本次场景,公司通过shardingjdbc对mysql数据库进行分表,模糊匹配按照createTime,每季度一张表的方式,精确匹配按照creatTime的方式。关于模糊匹配、精确匹配,自行在shardingjdbc官网查看,分表策略等。由于是跟进createTime字段去作为分表的key,那么在执行select、update、delete......
  • BUG: pymysql executemany不支持insert on duplicate key update
    pymysql的executemany()方法支持传入单个SQL和一个sequenceofrecords(sequenceormapping)来同时写入多条数据。例如:sql="insertintot(c1,c2)values(%s,%s)"args=[(1,2),(3,4)]cursor.executemany(sql,args)#Ifargsisalistortuple,%scanbeusedas......
  • select...for update 到底是加了行锁,还是表锁?
    原文:select...forupdate到底是加了行锁,还是表锁?前言select...forupdate在MySQL中,是一种悲观锁的用法,一般情况下,会锁住一行数据,但如果没有使用正确的话,也会把整张表锁住。1.要什么要用行锁?假如现在有这样一种业务场景:用户A给你转账了2000元,用户B给你转账了3000......
  • MySQL数据库insert,delete,update,select语句
    MySQL数据库insert,delete,update,select语句是在做数据处理是的重要部分首先我们要先拥有一个表格,这里我建立了一个student表然后在这个表格中添加一些数据这里要使用insert的语句INSERTINTOstudent(NO,NAME,age)VALUES(1001,'张三',20);这里我创建到的表有三个属性......
  • Eclipse Check For Updates总是检查不到更新-解决方法
    最近想用流行的JavaIDE——Eclipse的Help->CheckForUpdates更新Eclipse,结果总是说未找到更新:1.检查是否有更新首先,访问Eclipse下载地址获得最新版本(目前为2020-06):再看看系统中的Eclipse版本(Help->AboutEclipseIDE):如果网上版本和当前版本相等(像图中),那就System.......
  • INSERT ... ON DUPLICATE KEY UPDATE 问题记录
    起因:需要新增复制数据并更新原数据状态,故采用INSERT...ONDUPLICATEKEYUPDATE的方式来插入和更新数据问题:数据插入及更新异常环境:MySQL5.7.32数据表结构:点击查看代码CREATETABLE`example_table`(`col_a`varchar(255)NOTNULL,`col_b`varchar(255)NOTN......
  • Hive DML(数据操作语言)操作指南
    目录DML(DataManipulationLanguage)数据操作 Load1)语法2)实操案例 Insert 将查询结果插入表中1)语法2)案例 将给定Values插入表中1)语法2)案例 将查询结果写入目标路径1)语法2)案例 Export&Import1)语法2)案例DML(DataManipulationLanguage)数据操作 Load......
  • 【题库】——文字处理软件 附append,substr,insert,find函数
    #include<bits/stdc++.h>usingnamespacestd;intmain(){ intn,opt,l,r; strings,a; cin>>n>>s; while(n--) { cin>>opt; if(opt==1) { cin>>a; s.append(a); cout<<s<<endl; } elseif(opt==2) {......
  • MySQL insert sql 返回自增id
    xml<insertid="addMain"useGeneratedKeys="true"keyColumn="id"keyProperty="id"parameterType="com.hopedove.coreserver.vo.vpm.ForeignTradeOutboundOrderVO">insertintoaps_foreign_trade_ex......