mysql 增删改查

增

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 表名 where1-列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之间
取出商品价格在20003000之间的商品

例: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(03),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(分数) fromwhere 姓名 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 * from1 union select * from2select * from1  where id=2  union  select from2 where id=3;

#sum.group求和

select id,sum(num) from (select * from1 union select* from2) as tmp group by id;


如果不同的语句中取出的行,有完全相同(每个列的值都相同,那么相同的行将会合并)
如果不要重复  可以加all

select * from1 union all select * from2#取第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);






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值