增
insert into 表名(字段1,字段2) values(值1,值2); 添加一条数据
insert into 表名(字段1,字段2) values(值1,值2),
(字段1,字段2) values(值1,值2).... 添加N条数据
create table 新表 select * form 旧表; 复制表结构和数据
create table 新表 select * from 旧表 where (表达式); 复制指定数据
insert into 新表 select * from 旧表; 复制旧表数据(要求表结构一样)
----------
删
delect form 表名 where 查询条件(例:id=1或name='张三') 删除一条数据
truncate table 表名 删除所有数据
----------
改
update 表名 set 字段1 = '值1' where 查询条件(例:id=1或name='张三') 修改一条数据
----------
查
select * from 表名
select * from 表名 where 表达式
select id,name from 表名 where 表达式
select id,name form 表名 where 列1-列2>200;
----------
where查询
比较运算符
<小于 <=小于或等于 =等于 in在某集合内
!=或<>不等于 >=大于或等于 >大于 between在某范围内
逻辑运算符
not或! 逻辑非
or 或 || 逻辑或
and 或 && 逻辑与
#in (值1,值2.。。)等于值1->N任意一个都行
查询第4个栏目或第5个栏目的商品
例:select * from 表名 where uid in (4,5);
#between 值1 and 值2,表示在值1和值2之间
取出商品价格在2000和3000之间的商品
例:select * from 表名 where number(字段) between 2000 and 3000;
想买3000-5000的商品,或者500-1000的商品
select * from 表名 where number(字段) 3000<shop_num<5000 or 500<shop_num<1000;
#not 的用法
#取出不属于第4,5栏目的商品
select * from 表名 where number(字段) not in (4,5);
#模糊查询 %通配任意字符 _单个字符
select * from 表名 like '% %';
----------
group by 分组查询
常见于统计场合
max:求最大
min:求最小
sum:求总和
avg:求平均
count:求总行数
select max(字段) from good;
#查询统计每个栏目下面最贵的商品价格
select 栏目id,max(商品价格) from 表名 group by 栏目id;
查出最新添加的商品
select max(商品id) from 表名;
查询最便宜的商品价格
select min(商品价格num) from 表名;
查询最旧最小的商品编号
select min (商品id) from 表名;
查询所有的商品库存
select sum(商品库存number) from 表名;
查询所有商品的平均价格
select avg(商品价格) from 表名;
查询一共有多少商品
select count(*) from 表名;
查询每个栏目下的商品种类
select 商品id,count(商品种类) from 表名 group by 商品id;
#要把列当成变量来看
#查询本店商品比市场价格低多少钱?
select 市场价格-本店商品 from 表名;
#查询每个栏目下面积压的货款
select 商品id,sum(商品库存*商品价格) from 表名 group by 商品id;
#可以给列或计算结果取别名,用as
select 商品id,sum(商品库存*商品价格) as jiage from 表名 group by 商品id;
----------
#having
类似where 对查询得到的结果进行查询
#查询出本店价格比市场价低多少钱,并且把低*元的商品选出来
select 市场价格-本店价格 as shengqian from 表名 having 表达式;
#查询低1个栏目下笔市场价低200元以上的商品
select 商品栏目,市场价-本店价 as sheng from where 商品栏目 = 3 having sheng>200;
#查询积压货款超过2W元的栏目,以及该栏目挤压的货款
select 商品栏目,sum(商品价格*商品库存) as hk from 表名 group by 商品栏目 having hk>2000 ;
查询两门及两门以上不及格同学的平均分
select name,sum(fenshu<60) as gk ,avg(fenshu) as pj from chengji group by name having gk >=2;
----------
order by 排序功能
#排序可以根据字段排序,可以升序排序,也可以降序,默认升序;
#按照价格把第3个栏目下的商品由高到低排列(倒序 可用desc显示)
select * from chengji where lm=3 order by id desc;
#按照价格把第3个栏目下的商品由高到低排列(升序,可用asc显示)
select * from chengji where lm=3 order by id;
----------
limit[P][N]
分页 = (n-1)x每行
P:偏移量 从哪开始
N:条目 取几条数据
#取前三名
limit(0,3),limit(4);默认偏移量填0
#取出点击量前三名到第5名的商品
select click from 表名 order by click desc limit 2,3
#5个字句是有顺序要求的: where group having order by limit
select 栏目id,商品名,商品价格 from 表名 order by 栏目id asc ,商品价格 desc; 先按栏目升序排序,再按价格倒序排序;
select * from <select 商品id,栏目id,商品名,商品价格 from 表名 order by 栏目id asc ,商品价格 desc> as tmp group by 栏目id;
----------
子查询
wehre子查询:把内层查询的结果作为外层查询的比较条件
查询最大商品/最贵商品
#查询最新的商品<以id为最大为最新>
select 商品id,商品名字 from 表名 where 商品id = (select max(商品id) from 表名);
#用where型的子查询,查出每个栏目下最新的商品<以id为最大为最新>
select 商品id,栏目id,商品名称 from 表名 where 商品id in (select max(商品id) from 表名 group by 栏目id)
#每个栏目下最贵的商品(区别:如果有相同价格则会显示)
select 商品id,栏目id,商品名称,商品价格 from 表名 where 商品价格 in (select max(商品价格) from 表名 group by 栏目id)
----------
form子查询:把内层的查询结果当成临时表,共外层sql再次查询
查询每个栏目下的最贵/最新商品
#用from型的子查询查出每个栏目下最新的商品
select * from (select 商品id,栏目id,商品名字 from 表名 order by 栏目id asc,商品id desc) as tmp group by 栏目id;
#如何用子查询查出挂科两门及以上同学的平均分,where型,from型都可用
select 姓名,avg(分数) from 表 where 姓名 in (select 姓名 from (select 姓名,count(*) as gk from 表名 where 分数 < 60 group by name having gk > =2 ) as tmp ) group by name;
select name,avg(fenshu) from chengji where name in (select name from (select name,count(*) as gk from chengji where fenshu < 60 group by name having gk >=2) as tmp) group by name;
----------
exists子查询 把外层的查询结果,拿到内层,看内层的查询结果是否成立
查询有商品的栏目
#查有商品的栏目
select 栏目id,栏目名字, from 外表1 where exists (select * from 表名 where 外表.栏目id = 内表.商品id )
----------
union 联合
作用:把2次或多次查询结果合并起来
要求:两次查询的列数一致
推荐;查询的每一列,想对应的列类型也一样,可以来自多张表
#利用union简化为1条sql查询
可以来自于多张表
多次sql语句去除的列名可以不一致,以第一个sql的列名为准
select * from 表1 union select * from 表2;
select * from 表1 where id=2 union select from 表2 where id=3;
#sum.group求和
select id,sum(num) from (select * from 表1 union select* from 表2) as tmp group by id;
如果不同的语句中取出的行,有完全相同(每个列的值都相同,那么相同的行将会合并)
如果不要重复 可以加all
select * from 表1 union all select * from 表2;
#取第4栏目的商品,价格降序排列,还想取第5栏目的商品,价格也降序
如果字句中有 order by ,limit 要加(),推荐放到 所有字句之后,即对最终合并的结果来排序
在字句中,order by 配合 limit 使用才有意义
(select 商品id,栏目id,商品名,商品价格 form 表名 where 栏目=4 order by 商品价格 desc) union (select 商品id,栏目id,商品名,商品价格 form 表名 where 栏目=5 order by 商品价格 desc);
mysql 增删改查
最新推荐文章于 2023-06-25 19:56:20 发布