MySQL记录相关操作
一、表相关操作介绍二、插入数据insert三、更新数据update四、删除数据五、单表查询1、语法:2、重点掌握优先级:3、简单查询3.1 简单查询3.2 使用distinct避免重复(针对的是记录)3.3 进行四则运算查询3.4 使用concat()拼接记录的内容
4、where约束4.1 单条件查询4.2 多条件查询4.3 关键字between and4.4 关键字is null4.5 关键字in集合查询4.6 关键字like模糊查询4.7 正则表达式查询
5、分组查询:group by6、having过滤7、order by (查询排序)8、limit(限制查询的记录数)
一、表相关操作介绍
-插入数据
-更新数据
-删除数据
-查询数据
二、插入数据insert
语法:
1、插入完整数据(顺序插入)
语法一:
insert into 表名
(字段
1,字段
2,字段
3…字段n
) values
(值
1,值
2,值
3…值n
);
语法二:
insert into 表名 values
(值
1,值
2,值
3…值n
);
2、指定字段插入数据
语法:
insert into 表名
(字段
1,字段
2,字段
3…
) values
(值
1,值
2,值
3…
);
3、插入多条数据
insert into 表名 values
(值
1,值
2,值
3…值n
),
(值
1,值
2,值
3…值n
),
(值
1,值
2,值
3…值n
);
4、插入查询结果
insert into 表名
(字段
1,字段
2,字段
3…字段n
)
select
(字段
1,字段
2,字段
3…字段n
) from 表
2;
where
...;
三、更新数据update
语法:
update 表名
set
字段
1=值
1,
字段
2=值
2,
where 条件
;
示例:
update mysql
.user
set password
=password
('123')
where user
='root' and host
='localhost';
四、删除数据
语法:
delete
from 表名 where 条件;
五、单表查询
1、语法:
select distinct 字段
1,字段
2,... from 表名
where 过滤条件
group by 分组的条件
having 筛选条件
order by 排序字段
limit n
;
2、重点掌握优先级:
关键字的执行优先级:
from
where
group by
having
select
distinct
order by
limit
即:
1.找到表
:from
2.拿着where指定的约束条件,去文件
/表中取出一条条记录
3.将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组
4.将分组的结果进行having过滤
5.执行select
6.去重
7.将结果按条件排序:order by
8.限制结果的显示条数
3、简单查询
3.1 简单查询
select name
,sex
from emp
;
select name
as 名字
,sex 性别
from emp
;
select
* from emp
;
3.2 使用distinct避免重复(针对的是记录)
select distinct post
from emp
;
3.3 进行四则运算查询
select name
as 名字
,salary
*12 as 年薪
from emp
;
3.4 使用concat()拼接记录的内容
select name
,concat
(salary
*12,'$') from emp
;
select name
,concat
("annual_salary",":",salary
*12,"$") as 年薪
from emp
;
select name
,concat_ws
(":","annual_salary",salary
*12,"$") as 年薪
from emp
;
select
(
case
when name
='cc' then
name
when name
='jason' then
concat
(name
,'_handsome')
else
concat
(name
,'_sb')
end
) as 名字
from emp
;
4、where约束
where语句中可以使用比较运算符、between、in、like 模糊匹配、逻辑运算符等
4.1 单条件查询
select name
from emp where post
='HR';
4.2 多条件查询
select name
,salary
from emp where post
='HR' and salary
>10000;
4.3 关键字between and
select name
,salary
from emp where salary butween
10000 and 20000;
select name
,salary
from emp where salary
not butween
10000 and 20000;
4.4 关键字is null
判断某个字段是否为null不能用等号,需要用is
ps:null与空字符串不是同一个概念
select name
,post_comment
from employee where post_comment
is null
;
4.5 关键字in集合查询
select name
,salary
from emp
where
id=3 or id=5 or id=7;
select name
,salary
from emp
where
id in (3,5,7);
select name
,salary
from emp
where
id not in (3,5,7);
4.6 关键字like模糊查询
select
* from emp where name like
'陈小%';
select
* from emp where name like
"ja__";
4.7 正则表达式查询
select
* from emp where name regexp
'^陈';
select
* from emp where name regexp
'明¥';
select
hex(name
) from emp where
hex(name
) regexp
'e[4-9][0-9a-f]{4}';
5、分组查询:group by
1、首先,分组是发生在where执行之后,也就是说分组是基于where之后得到的记而进行的
2、分组指的是,将所有的记录按照某个相同字段进行归类,比如针对员工信息表的职位分组或者按照性别进行分组
3、为何要分组?
比如取每个部门的最高薪资,如果不按部门分组的话,取每个部门的最高薪资就无从谈起
4、大前提:
可以按照任意字段分组,但是分组以后,比如group by post,只能查看post字段,
如果想查看组内信息,需要借助于聚合函数
5、聚合函数
max()
min()
avg
()
sum()
count
()
示例:
select depart_id
,count
(id),avg
(age
),max(salary
),min(salary
),sum(salary
)
from emp group by depart_id
;
查看每个职位上的男性的平均薪资
select post
,avg
(salary
) from emp where sex
="male" group by post
;
查看每个职位的男生姓名(使用concat拼接起来)
select post
,group_concat
(name
) from emp where sex
='male' group by post
;
6、having过滤
having与where不一样的地方在于:
执行优先级从高到低:where
> group
>having
1、where 执行在group by分组之前,所以where中可以有任意字段,但是不能使用聚合函数
2、having执行在group by分组之后,所以having中可以使用分组的字段,无法直接取到其他字段,可以使用聚合函数
示例:
select
max(salary
) from emp where
max(salary
) > 10000;
ERROR
1111 (HY000
): Invalid use of group function
select
max(salary
) from emp having
max(salary
) > 10000;
+-------------+
| max(salary
) |
+-------------+
| 1000000.31 |
+-------------+
1 row
in set (0.00 sec
)
select post
,avg
(salary
) from emp where sex
='male'
group by post having avg
(salary
) > 8000;
7、order by (查询排序)
按单列排序
select
* from emp order by salary
;
select
* from emp order by salary asc
;
select
* from emp order by salary desc
;
按多列排序:(比如:先按照age排序,如果年龄相同,则按照薪资排序)
select
* from emp
order by age
,
salary desc
;
8、limit(限制查询的记录数)
select
* from emp order by salary desc limit
3;
select
* from emp order by salary desc limit
1,5;
select
* from emp order by salary desc limit
5,5;