MySQL数据库入门(六)数据增删改查及单表查询
wptr33 2024-11-11 16:08 56 浏览
数据的增删改查
数据库创建
create database day3; # 创建练习数据库3表创建
use day3; # 切换当前数据库为day3
create table t1(
id int unsigned primary key auto_increment, # id字段整数、无符号、自增、主键
name char(12) not null, # name名字字段固定长度12字符型、不能为空、可重复
gender enum('男','女') default '男', # gender性别字段单选“男”、“女”,默认“男”
hobby set('python','mysql','java') not null, # hobby爱好多选字段“python”、“mysql”、“java”
post char(10) not null, # post岗位字段固定长度10字符型,不能为空,可重复
salary int unsigned not null # salary月薪字段整数、无符号、不为空
);增
- 一次增加单条数据:
insert into t1 value
(1,'张三','男','python,mysql','运行部',8800);- 一次增加多条数据:
insert into t1 values
(2,'李四','男','python','技术部',8000),
(3,'王五','男','java','技术部',8000);- 指定字段添加数据:
insert into t1
(name,hobby,post,salary) values
('赵六','mysql','运行部',7800),
('钱大','java,mysql','技术部',9000),
('钱二','java,mysql','技术部',8900),
('钱三','java,mysql','技术部',8800);- 从其它表中导入数据:
create table t2(
id int,
name char(12)
); # 创建新表
insert into t2(id,name)
select id,username
from t1; # 把t1的数据导入t2删
- 清空表但保留自增offset(偏移量)值:
delete from t2;- 快速清空表且不保留自增offset值:
truncate table t2;- 删除指定记录:
delete from t1
where id=7; # 筛选id=2的记录删除指定数据必须带条件,delete from 表 where 条件;
建议先select查询数据,确认删除条件无误后再执行删除,切不可直接删除。
改
update t1
set salary=8888
where id=4; # 修改id为4的员工月薪为7888
update t1
set salary=8888,hobby='java,mysql'
where id=3; # 修改id为4的员工爱好为java和mysql,月薪为8888查
select * from 表名; # 查全部数据select id,name,gender
from t1; # 查指定字段字段重命名
方式一:
select id 序号,name 姓名
from t1; # 字段空格新名字即表示对该字段重命名
方式二:
select id as 序号,name as 姓名
from t1; # 字段空格新名字即表示对该字段重命名
查询去重
select distinct gender
from t1; # distinct关键字表示查询结果去重函数
select concat('ab','bc','cd'); # 字符串拼接函数,显示结果是abbccd
select concat(name,':',hobby)
from t1; # 拼接显示多个字段的内容
select concat_ws('|','张三','男','18岁'); # 指定|作为分隔符拼接多个字段四则运算
select name 姓名,salary*12 年薪
from t1; # 对salary月薪乘以12计算年薪条件判断
select(
case
when name = '张三' then
concat(name,'-副总监')
when name = '赵六' then
concat(name,'-总监')
else
concat(name, '-程序员')
end
) as new_name
from t1;case语句块内可以对内容进行判断处理。case是条件判断语句块开始,end是条件判断语句块结束;when 后面跟判断条件,then后面接处理内容;as是给字段重命名
查表练习
1 查出所有员工的名字,薪资,格式为
<名字:name> <薪资:3000>
select
concat('<名字:',name,'>') 名字,
concat('<薪资:',salary,'>') 薪资
from t1;2 查出所有的岗位(去掉重复)
select distinct post
from t1;3 查出所有员工名字,以及他们的年薪,年薪的字段名为“年薪”
select
name 名字,
salary*12 年薪
from t1;where条件
where可以使用的条件:
- 比较运算符<、>、=、<=、>=、!=查询薪资>8800的员工姓名
select name
from t1
where salary>8800; # 查询薪水大于8800的- 范围between and,范围包头包尾
select *
from t1
where salary between 8900 and 10000; # 查询薪水在8900和1万之间的(含)- in
select *
from t1
where salary in (8000,9000); # 查询薪水正好是8千和9千的- 模糊匹配like:%表示任意长度的任意内容,_表示一个字符长度的任意内容,%和_只有在like字句内才是通配符。
select *
from t1
where name like '钱%'; # 查询名字是钱开头的select *
from t1
where hobby like '%py%'; # 查询爱好包含py的select *
from t1
where salary like '%8'; # 查询薪资以8结尾的- regexp
注意:在sql中需要写双\转移符才生效,如想用\d匹配数字时必须写成\d才有效。
select *
from t1
where salary regexp '^9'; # 查询薪水是以数字9开头的select *
from t1
where salary regexp '0#39;; # 查询薪水是以数字0结尾的select *
from t1
where salary regexp '^88\\d\\d'; # 查询薪水是88开头的4位数的- 逻辑运算,not优先级最高,or优先级最低。
select *
from t1
where salary not in (8000,9000); # 查询薪水不是8000和9000的- and
select *
from t1
where salary not in (8000,9000) and post='技术部'; # 查询薪水不是8千和9千且部门是技术部的- or
select *
from t1
where salary=8888 or post='运行部'; # 查询薪资是8888或部门是运行部的group by分组
分组是查询表中指定字段不重复的值。例如:
select post
from t1
group by post; # 查看t1表post字段有几种值
输出:
运行部
技术部注意,下面的语句会报错:
select *
from t1
group by post; # 查看t1表post字段有几种值因为select的字段包含了group by里没有的字段。使用group by时select的字段只能是group by中有的字段。
再如,对hobby和post复合分组,此时group by包含hobby和post两个字段,那么select也可以使用hobby和post这两个字段:
select hobby,post
from t1
group by hobby,post; # 同时对hobby和post两个字段进行分组聚合函数
聚合是搭配分组使用的,常见聚合函数及使用方式如下:
- count,求个数
select post,count(id)
from t1
group by post; # 按post字段统计不同post分别有多少人- max,求最大值
select post,max(salary)
from t1
group by post; # 显示所有部门的最高工资- avg,求平均值
select post,avg(salary)
from t1
group by post; # 显示所有部门的平均工资- min,求最小值
select post,min(salary)
from t1
group by post; # 显示所有部门的最低工资- sum,求和
select post,sum(salary)
from t1
group by post; # 显示各部门的工资和- concat,聚合显示
select post,group_concat(name)
from t1
group by post; # 显示不同部门的所有人名注意:使用分组聚合统计时,group by根据指定字段分组,可以对该分组求个数、最大值、最小值、平均值、求和,但这个值只是和分组内容对应,和其它字段不对应。
having筛选
having中可以使用聚合函数,在where中不行。having适合筛选符合条件的一组数据,而不是某一行数据。
例如,找出平均工资大于8800的部门:
select post,avg(salary)
from t1
group by post
having avg(salary)>8800;order by排序
指定查询结果按指定字段排序,默认是升序asc,降序desc。
按工资从低到高排序,默认从小到大排序:
select *
from t1
order by salary;按工资从高到低排序,desc指定从大到小排:
select *
from t1
order by salary desc;limit限制
limit m,n:从m+1开始,取n个值。若只写1个数时该数被当成n且m默认为0。
limit n offsec m:从m项开始,取n个值。
找出工资最高的人:
select *
from t1
order by salary desc
limit 1;找出工资最高的前三人:
select *
from t1
order by salary desc
limit 3;找出工资第三高的那个人:
有两种写法:
select *
from t1
order by salary desc
limit 2,1; # 第一个数是表示从第三名开始取,第二个数表示次数select *
from t1
order by salary desc
limit 1 offset 2; # 1表示取一次,2表示从第三名开始取。相关推荐
- oracle数据导入导出_oracle数据导入导出工具
-
关于oracle的数据导入导出,这个功能的使用场景,一般是换服务环境,把原先的oracle数据导入到另外一台oracle数据库,或者导出备份使用。只不过oracle的导入导出命令不好记忆,稍稍有点复杂...
- 继续学习Python中的while true/break语句
-
上次讲到if语句的用法,大家在微信公众号问了小编很多问题,那么小编在这几种解决一下,1.else和elif是子模块,不能单独使用2.一个if语句中可以包括很多个elif语句,但结尾只能有一个...
- python continue和break的区别_python中break语句和continue语句的区别
-
python中循环语句经常会使用continue和break,那么这2者的区别是?continue是跳出本次循环,进行下一次循环;break是跳出整个循环;例如:...
- 简单学Python——关键字6——break和continue
-
Python退出循环,有break语句和continue语句两种实现方式。break语句和continue语句的区别:break语句作用是终止循环。continue语句作用是跳出本轮循环,继续下一次循...
- 2-1,0基础学Python之 break退出循环、 continue继续循环 多重循
-
用for循环或者while循环时,如果要在循环体内直接退出循环,可以使用break语句。比如计算1至100的整数和,我们用while来实现:sum=0x=1whileTrue...
- Python 中 break 和 continue 傻傻分不清
-
大家好啊,我是大田。...
- python中的流程控制语句:continue、break 和 return使用方法
-
Python中,continue、break和return是控制流程的关键语句,用于在循环或函数中提前退出或跳过某些操作。它们的用途和区别如下:1.continue(跳过当前循环的剩余部分,进...
- L017:continue和break - 教程文案
-
continue和break在Python中,continue和break是用于控制循环(如for和while)执行流程的关键字,它们的作用如下:1.continue:跳过当前迭代,...
- 作为前端开发者,你都经历过怎样的面试?
-
已经裸辞1个月了,最近开始投简历找工作,遇到各种各样的面试,今天分享一下。其实在职的时候也做过面试官,面试官时,感觉自己问的问题很难区分候选人的能力,最好的办法就是看看候选人的github上的代码仓库...
- 面试被问 const 是否不可变?这样回答才显功底
-
作为前端开发者,我在学习ES6特性时,总被const的"善变"搞得一头雾水——为什么用const声明的数组还能push元素?为什么基本类型赋值就会报错?直到翻遍MDN文档、对着内存图反...
- 2023金九银十必看前端面试题!2w字精品!
-
导文2023金九银十必看前端面试题!金九银十黄金期来了想要跳槽的小伙伴快来看啊CSS1.请解释CSS的盒模型是什么,并描述其组成部分。...
- 前端面试总结_前端面试题整理
-
记得当时大二的时候,看到实验室的学长学姐忙于各种春招,有些收获了大厂offer,有些还在苦苦面试,其实那时候的心里还蛮忐忑的,不知道自己大三的时候会是什么样的一个水平,所以从19年的寒假放完,大二下学...
- 由浅入深,66条JavaScript面试知识点(七)
-
作者:JakeZhang转发链接:https://juejin.im/post/5ef8377f6fb9a07e693a6061目录...
- 2024前端面试真题之—VUE篇_前端面试题vue2020及答案
-
添加图片注释,不超过140字(可选)...
- 今年最常见的前端面试题,你会做几道?
-
在面试或招聘前端开发人员时,期望、现实和需求之间总是存在着巨大差距。面试其实是一个交流想法的地方,挑战人们的思考方式,并客观地分析给定的问题。可以通过面试了解人们如何做出决策,了解一个人对技术和解决问...
- 一周热门
- 最近发表
-
- oracle数据导入导出_oracle数据导入导出工具
- 继续学习Python中的while true/break语句
- python continue和break的区别_python中break语句和continue语句的区别
- 简单学Python——关键字6——break和continue
- 2-1,0基础学Python之 break退出循环、 continue继续循环 多重循
- Python 中 break 和 continue 傻傻分不清
- python中的流程控制语句:continue、break 和 return使用方法
- L017:continue和break - 教程文案
- 作为前端开发者,你都经历过怎样的面试?
- 面试被问 const 是否不可变?这样回答才显功底
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)
