操作表内容
注册一个表
create table d1(id int ,name varchar(12));
insert into d1(id,name) values
(1,'小珊珊'),
(2,'小白白'),
(3,'小嘿嘿');
增删改
增加
普通版
insert into 表名 values (内容1,内容2),(内容1,内容2);
实列
insert into user values(2,'wusir'),(3,'太亮');
推荐版
insert into 表名 (字段1,字段2) values
(内容1,内容2);
实列
insert into staff_info (id,name,age,sex,phone,job) values (1,'Alex',83,'female',13651054608,'IT');
删除
delete from d1; # 清空表 不用 删除所有的数据,但是不会重置自增字段的数据号
delete from 表名 where 条件;
truncate 表名; 自增字段会重置
举例
delete from d1 where id = 3;
修改 #注意语法,可以同时来修改多个值,用逗号分隔
update 表名 set 修改内容; # 不用 修改所有
update 表名 set 修改内容 where 查找条件;
举 例
update d1 set name = 'alex',id = 2 where id = 1;
自定义显示格式 concat用法
相当拼接
select concat('姓名: ',name,' 年薪: ', salary*12) AS Annual_salary from employee;
查看表中内容
显示模式
四则运算:
SELECT salary*12 FROM employee;
自定义显示格式 concat用法
SELECT CONCAT('姓名: ',name,' 年薪: ', salary*12) AS Annual_salary FROM employee;
查表顺序
查看
select * from 表名;
举例
select * from d1;
查询全部表内容
select * from d1;
进阶版查询
1.找到表:
实列
select * from d1;
2.拿着 where 指定的约束条件,去文件/表中取出一条条记录
实列
select * from d1 where hoppy='玩';
3.将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组
# 实列 找到爱好是玩的 将年龄分组
select * from d1 where hoppy='玩' group by age ;
5.将分组的结果进行having过滤
实列 找到爱好是玩的 将年龄分组 且id>3
select * from d1 where hoppy='玩' group by age having count(id)>3;
6将结果排序asc(升序从小到大)desc(降序 从大到小)
实列
select * from d1 where hoppy='玩' group by age having count(id)>3 order by price;
7限制结果的显示条数
实列 去前6个
select * from d1 where hoppy='玩' group by age having count(id)>3 order by price limit 6;
having 对组过滤 必须先分组 在组的后面
就是一个对组进行筛选的条件
要部门人数大于3个人的部门 count(id)>3
select post from employee group by post having count(id)>3;
order by 排序
order by 字段 (默认升序)
order by 字段 asc(升序从小到大)
order by 字段 desc(降序 从大到小)
order by 字段1,字段2
order by 字段 asc,字段2 desc
order by 字段 desc,字段2 asc
order by 字段 desc,字段2 desc
limit 取一个区间
1.显示分页
limit m,n(耗内存)
表示从m+1开始,取n条
limit 0,6 表示从1开始取6条
limit 6,6 表示从7开始取6条
limit 12,6 表示从13开始取6条
limit 18,6 表示从19开始取6条
2.取前n名
limit n m默认为0
跟order by一起用
limit n offset m :从m+1开始,取n条
where 初级筛选
where:
范围
> < = <= >= !=/<>
between and 举例 between 80 and 100
in (a,b,c) not in
模糊查询
like
%任意长度任意内容 _一个长度任意内容
regexp 正则
放正则
身份运算符 -->null
is , is not
逻辑运算符
and or not
group by分组 与聚合
分组 group by 与聚合函数
select * from 表 group by 字段名
分组 group by(生成一个新表)
根据某个重复率比较高的字段进行的
这个字段有多少种可能就分成多少个组
根据性别分组 : 男的一组 女的一组
根据部门分组 : 销售一组 教学一组 ...
去重
一旦分组了就不能对具体某一条数据进行操作了
永远都是考虑 这组 xxx
group_concat : 只用来做最终的显示,不能结果操作其他数据(属于这个组的所有人)
与聚合 联系 聚合函数
99.99%的情况都是和分组一起用的
如果没有和分组一起用,默认一整张表是一组
count(id) / count(*) 计数 :每个组对应几条数据
max 求最大值: 这个组中某字段的最大值
min 求最大值: 这个组中某字段的最小值
avg 求平均值
sum 求和值
having对组过滤
# having 对组过滤 必须先分组 在组的后面
# 就是一个对组进行筛选的条件
# 要部门人数大于3个人的部门 count(id)>3
# select post from employee group by post having count(id)>3;
distinct 去重
示例:
select distinct post from employee;
注意问题:select的字段必须写在distinct的后面,并且如果写了多个字段,比如:
select distinct post,id from employee;这句话,意思就是post和id两个组合在一起同时重复的才算是重复数据
order by 排序
# order by 字段 (默认升序)
# order by 字段 asc(升序从小到大)
# order by 字段 desc(降序 从大到小)
#
# order by 字段1,字段2
# order by 字段 asc,字段2 desc
# order by 字段 desc,字段2 asc
# order by 字段 desc,字段2 desc
limit 取一个区间
limit 取一个区间
1.显示分页
limit m,n(耗内存)
表示从m+1开始,取n条
limit 0,6 表示从1开始取6条
limit 6,6 表示从7开始取6条
limit 12,6 表示从13开始取6条
limit 18,6 表示从19开始取6条
2.取前n名
limit n m默认为0
跟order by一起用
limit n offset m :从m+1开始,取n条
查询步骤
select distinct 字段1 as a,字段2... from 库名.表名 (如果没有use连接到某个库,需要写上库名)
where 条件
group by 分组依据字段
having 分组后再过滤
order by 排序 order by 字段 asc,字段 desc;
limit limit 3 limit 5,5 从索引为5的记录(第六条)开始算上这一条取5条