mysql 记录操作_MySQL 关于记录详细操作

#[] 表示可选的#{}表示必选的#增#insert [into] 表名[字段名] value|values(字段值....);#into 可省略#[字段名] 可选#如果写了 你后面的值 必须与 写的字段匹配#不写 后面的值 必须和表的结构完全匹配#value 插入一条记录#values 插入多条记录# #改#update 表名 set 字段名 = 新的值[,字段n = 新值n] [where 条件]#可以同时修改多个字段 用逗号隔开 注意最后一个字段不能加逗号#where 可选#有就 修改满足条件的记录#没有就全部修改#删#delete from 表名 [where 条件]#where 可选#有就 删除满足条件的记录#没有就全部删除#如果你需要全部删除 请使用truncate table 表名#delete 是逐行比对 删除 效率低#delete删除的行号会保留# #查询#完整的查询语句#select [distinct] {* | 字段名 | 聚合函数 | 表达式} from 表名#[where 条件#group by 字段名#having 条件#order by 字段名#limit 显示的条数]# #注意: 关键字的顺序必须与上述语法一致# # #简单查询 ******# #1.* 表示所有列 都显示#2.也可以手动指定要显示的列 可以是多个#3.distinct 用于去除重复的记录#只取出完全相同的记录#当然 你也可以手动指定要显示的列 从而来去重#4.表达式 支持四则运算

#执行顺序

defselect()from() 打开文件#where() 读取每一行并判断是否满足条件

#group() 对数据进行分组

#having() 再分组之后进行过滤 having不单独出现 仅用于分组之后进行过滤

#distinct() 去重

#order() 用于对筛选后的数据 进行排序

#limit() 限制显示的条数

#最后根据select后制定的字段来显示数据

#准备数据:

create table stu(id int primary key auto_increment,name char(10),math float,english float); insert into stu values(null,"赵云",90,30); insert into stu values(null,"小乔",90,60); insert into stu values(null,"小乔",90,60); insert into stu values(null,"大乔",10,70); insert into stu values(null,"李清照",100,100); insert into stu values(null,"铁拐李",20,55); insert into stu values(null,"小李子",20,55);#查询所有人的总成绩

select name,english+math 总分 fromstu;

select name,english+10 英语 fromstu;#需要 在字段的数据前加上字段名:#name:赵云 english:90 math:30#需要使用字符串拼接函数#concat(字符串)

#案列:

select

concat("name:",name),

concat("english:",english),

concat("math:",math)fromstu;#观光代码

select

(case

when english+ math < 150then

concat(name,"shit")

when english+ math >= 150then

concat(name,"nice")

end) 评语fromstu;#对查询后的条件语句详解#一、where#从硬盘上读取数据时的一个过滤条件# #where支持的运算符见图1# #where 的筛选过程#在没有索引的情况下 挨个比较 效率低#所以我们应该给表添加索引# #二、group by#作用 用于给数据分组#为什么要分组? 思考生活为什么要分组#1.在生活中是为了方便管理#2.在数据库中是为了 方便统计

#准备数据

create table emp (id int,name char(10),sex char,dept char(10),job char(10),salary double);

insert into emp values (1,"刘备","男","市场","总监",5800),

(2,"张飞","男","市场","员工",3000),

(3,"关羽","男","市场","员工",4000),

(4,"孙权","男","行政","总监",6000),

(5,"周瑜","男","行政","员工",5000),

(6,"小乔","女","行政","员工",4000),

(7,"曹操","男","财务","总监",10000),

(8,"司马懿","男","财务","员工",6000);#按照部门给数据分组#错误;select *from emp group by dept;#正确;select dept from emp group by dept;#有两种情况#1.sql_mode中 没有设置 ONLY_FULL_GROUP_BY 显示每个组的第一条记录 没有意义 所以新版中 自带ONLY_FULL_GROUP_BY#2.sql_mode中有设置 ONLY_FULL_GROUP_BY 直接报错#原因是: * 表示所有字段都要显示 但是 分组后 记录的细节被隐藏 只留下了#这意味着:只有出现在group by 后面的字段才能被显示#分组是为了统计分组数据 如何统计?#需要使用到聚合函数# # #聚合函数:#将一堆数据经过计算,得到一个数据#sum() 求和#avg() 求平均数#max()/min() 求最大值 / 最小值#count() 个数

#2.查询每个部门有几个人

select dept,count(*) fromemp group by dept;#3.计算每个部门的平均工资

select avg(salary) fromemp group by dept;#总结 什么时候需要使用分组 只要你的需求中 带有 每个这样的字眼 就需要分组#每个岗位 每个部门 每个性别

#5.查询平均工资大于5000的部门

select avg(salary) from emp where avg(salary) > 5000group by dept;#where 语句后面 不能使用聚合函数

select avg(salary) fromemp;#总结where 条件不能用于筛选分组后的数据

#group_concat 用于分组后 将组中的某些字段拼接成字符串

select dept,group_concat(name) fromemp group by dept;#其实 没啥意义 为啥? 你为什么要分组?是为了统计数据 如果你不需要统计 就没有必要分组#三、having#用于对分组后的数据进行过滤#having不会单独出现 都是和group by 一起出现# #与where的区别#相同点: 都用于过滤数据#不同点:#1.where是最先执行 用于读取硬盘数据#having 要等到数据读取完之后 才能进过滤 比where晚执行#2.where中不能使用聚合函数#having中可以# #需求:#5.查询平均⼯工资⼤大于5000的部⻔

select dept,avg(salary) from emp group by dept h0aving avg(salary) > 500;#6.查询工资最高的人的姓名和他的工资

#需要用到子查询#四、order by [desc,asc]#用于对记录进行 排序# #desc为降序#asc为升序

#按照工资的从低到高顺序 显示所有的员工

select *fromemp order by salary;#默认为升序

#修改为降序

select *fromemp order by salary desc;#按照每个部门的平均工资 降序排序

select dept,avg(salary) fromemp group by dept order by avg(salary) desc;#limit#用于限制显示的条数#limit [start,]count

#看看表里前三条数据

select *from emp limit 3;#看看表里的3-5条

select * from emp limit 2,3;#查看工资最高的那个人的信息

select *from emp order by salary desc limit 1;

limit 常用于 数据的分页展示 比如腾讯新闻 的上拉加载新的而一页

select*from emp limit 0,10; #第一页 页数 减1 乘以条数 得到起始位置

select *from emp limit 10,10;#第2页

select *from emp limit 20,10;#第3页

#补充:关于拷贝的详解如下:#拷贝表

create table copy_table select*fromcustomer ;#拷贝结构 与数据

create table copy_table select *from customer where 0 > 1;#仅拷贝结构# #共同点: 索引 不能拷贝 描述不能拷贝(自增)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值