之前常用的和之后可能会用到的SQL语句记录,脑子太小辣,一段时间不用就直接清空了,太难辣
其实我之前最常用也就是个查,乱搞其他的会给大伙加工作量,哪怕是测试环境
命令 | 意义 |
---|---|
insert | 插入(增) |
delete | 删 |
update | 改 |
select | 查 |
#一个完整的查询语句的执行顺序:
select 查询
from 从某张表中检索数据
where 经过某条件进行过滤
group by 分组
having 分组之后不满意再过滤
order by 排序输出
1.普通查询
语法:select <列名> from <表名> [where <查询条件表达试>] [order by <排序的列名>[asc或desc]];
例如:
select * from chitang;
#列出chitang这个表里所有的东西
select zl,cd,ys from chitang where pinzhong=liyu;
#列出chitang表了,pinzhong是liyu的zl,cd,ys这三列信息
select zl as 重量 from chitang where pinzhong=liyu;
#列出chitang表了,pinzhong是liyu的zl信息,把“zl”列名显示改为“重量”
select zl from chitang where pinzhong is null;
#列出pinzhong为空的所有行并显示zl这一列;
select zl from chitang where pinzhong is not null;
#列出pinzhong不为空的所有行并显示zl这一列;
#SQL语句中用is null或者is not null来判断是否为空行
select ys '红色' as '颜色' from chitang;
#列出chitang表中,ys列内值是红色的所有行,且把“ys”列名显示为“颜色”
select top 10 ys from chitang;
select * from chitang where rownum<10;
#列出chitang表的ys列前10行信息;oracle中没有top关键字用rownum代替
select pinzhong from chitang where zl>=2 order by desc;
#查询chitang表中zl大于等于2,列名为pinzhong的所有行,并以降序排列;升序:ASC,降序:DESC,默认为升序
2.模糊查询
①使用like进行模糊查询
select * from chitang where pinzhong like '鲤%';
#列出chitang表中pinzhong列第一个字是“鲤”的所有信息;鲤%代表是以鲤开头,%鲤代表以鲤结尾,%鲤%代表字段内包含鲤这种情况包含前两种
#like后可以加上binary可以区分大小写、对查询的数据做筛选
select * from chitang where pinzhong like '_鱼';
#列出chitang表中pinzhong列_鱼(两个字鱼)的所有信息;"_"代表的是一个字符,如胖头鱼就不会被显示出来
select * from chitang where sl like '[5-9]%';
#列出chitang表中sl列开头是5-9所有信息;同理[!5-9]就是开头不包含5-9的信息
②使用between在某个范围内进行查询
select * from chitang where zl between 10 and 15;
#列出chitang表中zl在10-15之间所有信息;not between就是不在这个范围的信息
③使用in在列举值内进行查询(in后是多个的数据)
select sl from chitang where pinzhong in('鲤鱼','草鱼','鲑鱼','鲢鱼');
#列出chitang表中pinzhong是鲤鱼,草鱼,鲑鱼,鲢鱼的sl列信息
3.分组查询
①使用group by进行分组查询
select pinzhong as 品种,avg(zl) as 重量 from chitang group by pinzhong;
#列出chitang表中按照品种分组后重量的平均值
#常见的聚合函数有:count计数,sum求和,avg求均值,max最大值,min最小值
②使用having子句进行分组筛选
select pinzhong as 品种,avg(zl) as 重量 from chitang group by pinzhong having avg(zl)>5;
#列出chitang表中按照品种分组后重量的平均值,且重量大于5
③distinct去重
select distinct 列 from 表 where 条件 ;
#数据多的情况下效率低下,不如group by
4.多表联查
①内联接(join或inner join)
select * from chitang inner join jiage on chitang.pinzhong=jiage.pinzhong;
select * from chitang,jiage where chitang.pinzhong=jiage.pinzhong;
#列出chitang表与jiage表的所有信息,比较条件是pinzhong;上述两个例子是一个意思
②外联接(左连接、右连接、完全外连接)
左连接left join或left outer join
select * from chitang left join jiage on chitang.ID=jiage.ID;
#左外连接包含left join左表所有行,如果左表中某行在右表没有匹配,则结果中对应行右表的部分全部为空(NULL)
右连接right join或right outer join
select * from chitang right join jiage on chitang.ID=jiage.ID;
#右外连接包含right join右表所有行,如果左表中某行在右表没有匹配,则结果中对应左表的部分全部为空(NULL)
完全外连接full join或full outer join
select * from chitang full join jiage on chitang.ID=jiage.ID;
#完全外连接包含full join左右两表中所有的行,如果右表中某行在左表中没有匹配,则结果中对应行右表的部分全部为空(NULL),如果左表中某行在右表中没有匹配,则结果中对应行左表的部分全部为空(NULL)
③交叉连接(cross join)
概念:没有where子句的交叉联接将产生连接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。
select * from chitang cross join jiage
如果给这条SQL语句加上where子句的时候,此时将返回符合条件的结果集,结果和inner join所示执行结果一样。
④一对多,多对一或多对多时的连接语句
select pinzhong,danjia from tongji left join student on chitang.CID=tongji.CID left join jiage on jiage.JID=tongji.JID;
语法:
insert into 表名 列(列1,列2,...) values('内容','内容'),('内容'),...,();
1.插入新的一行数据
insert into chitang values ('100','2','红色','鲤鱼');
2.在指定的列中插入数据
insert into chitang (ys,pinzhong) values ('黑色','草鱼');
语法:
delete from 表 where 条件 ;
delete from chitang where ys='绿色';
#删除chitang表中ys值为绿色的所有信息
删除速度drop>truncate >delete
如果整个表都不想要了就用drop;只是想清空数据还要保留表的格式用truncate;只是删除表内的部分数据用delete,若delete不加where条件效果与truncate一样
语法:
updata 表 set 列='内容',列='内容',... where 条件 ;
updata jiage set danjia='10',sl='50' where pinzhong='鲤鱼';
#把jiage表中鲤鱼的danjia改为10,数量改为50
updata jiage set danjia='15' where sl>40 and sl<=60;
#把数量大于40小于等于60的danjia都改为15
updata jiage set danjia=20+10 where danjia>=20;
#给单价大于20的在原有基础上在加10
执行updata语句一定要先查一下修改内容的条件,否则容易把符合条件的所有信息都给改掉,所以一定要谨慎一波。