星星博客 »  > 

摸鱼笔记-SQL-表内增删改查

之前常用的和之后可能会用到的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)

语法:

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语句一定要先查一下修改内容的条件,否则容易把符合条件的所有信息都给改掉,所以一定要谨慎一波。

相关文章