0


MySQL增删改查(基础)

一,增加(Create)

1.1 单行数据+全列插入

语法如下:

insert into 表名 values(数据);

其中,表名不区分大小写.

**注意:**在进行全列插入的时候,数据不能多,也不能少.必须和表中是一一对应的!

例子如下:

假如我有一个学生表,表里的数据有ID和name,我要插入两个数据.一个是1,张三还有一个是2,李四.

   insert into student values(1,'张三');
   insert into student values(2,'李四');

这样,我们就将 两条数据插入到我们的student表中去了.

注意:在数据库中," "和' '都可以接收字符串类型,所以不用太过于纠结,看自己的使用习惯.

1.2 多行数据插入

在MySQL中进行插入操作的时候,我们还可以在一次性插入多条数据.

语法如下:

insert into 表名 values(数据1),(数据2)......;

其中,我们使用 ","来将数据分隔开,表明这是两个不同的数据.

例子如下:

我要向student表中插入两个数据,分别是: 3,王五和4,赵六.

insert into student values(3,'王五'),(4,'赵六');

我们看见,这里就显示了2 rows affected.这就说明两条数据都被插入成功了.warnings就说明没有警告.

1.3 指定列插入

假如我们班里面转来一个新同学叫做小美,但是因为它是新转来的,她还没有自己的id,那么我们该如何插入呢?这时候需要涉及到了指定列插入!

语法:

insert into 表名 (列1,列2,列3.....)  values (数据);

我们看到了,指定列查询和前面查询不一样的是,在表名后面加了一个括号,这个扩号是用来说明你需要插入的列的名称,不需要插入的就不需要写咯.因此,在我们的数据里面,也就不需要按照表的列来写数据了,而是按照括号里的列来写.

例子如下:

我们需要插入一个只知道name为小美的同学的信息到student表中去.

insert into student(name) values('小美');

这样,我们就把小美的数据顺利插入进去了,等到小美有了id的时候,我们再去修改,这个是后面会讲到的update关键字了.

二,查询(Retrieve)

我们上面插入的数据,该如何去查看呢?接下来就是查询的相关操作了!

2.1 全列查询

全列查询就是将表中的所有列所有数据打印出来,

select * from 表名;

例子如下:

我们要查询student表的所有内容.

select * from student;

这就是student表中的内容了.同时也解释了我们的一个疑问:如果我们使用指定列插入,那么未插入的列的数据是什么呢?答案就是 NULL,如果你没有向这个列插入数据,那么默认值就是NULL.

**注意:**全列查询这个操作是非常危险的一个操作,因为当我们的数据量太大的时候,可能会把我们的内存吃满.因此要慎用此操作.

2.2 指定列查询

现在我们有一个exam_result表,数据如下:

现在我们只需要几列数据怎么来操作呢?

语法:

select 列1,列2,列3..... from 表名;

这样就可以实现指定列查询了.

例子如下:

需要查询exam_result表中所有人的Math成绩,要求有id,name和Math列.

select id,name,Math from exam_result;

这样,我们就可以查询出每个人的数学成绩了.还是很简单的.

2.3 表达式查询

有的时候,我们期望查询总分,或是查询有的列相加后的结果.那么这个时候,我们就需要使用表达式查询去完成这件事情.

语法如下:

select 表达式 from 表名;

这里需要注意的是,表达式里参加运算的列一定是列里的数据可以进行运算的.如果你用一个字母加上一个int类型的数据,那么肯定会出现报错的.

例子如下:

我们需要查询所有同学语文,数学,英语的总分.

select id,name,chinese+ math+ english from exam_result;

这样我们就可以很轻松的得到所有人的总分.出现了一列由表达式为名的数据.但是我们发现,chinese+math+english貌似不是特别美观.并且如果在实际工作中,我们的表达式可能会非常的长,因此我们可以给表达式设置别名.操作如下:

select 表达式 as 别名 from 表名;

只需要在表达式后面加上一个as,然后写上你的别名,这样我们就可以设置好别名.这样我们打印出来的数据也看的非常美观.

**注意:**设置别名的时候,as是可以省略的,但是不建议省略.因为去掉之后SQL的可读性就会下降.

2.4 去重操作

去重操作就是使用distinct关键词来进行操作.它可以帮助我们去除重复的数据.

语法如下:

select distinct 列名 from 表名;

例子如下:

语文老师想要得到语文成绩,但是要去掉重复的语文成绩数据.

没加distinct之前:

一共有八条数据,但是我们看见第一个和最后一个语文成绩重复了.

加了之后:

就只剩下了一个67分,数据也变成了7条了.

**注意:**如果想要使用distinct的时候查询多列数据,那么必须多个列都相同,那么才会进行去重,否则就不会去重.如下图: 虽然唐三藏的语文成绩和孙行者的语文成绩一样,但是因为名字不一样,所以没有进行去重.

2.5 排序(order by)

当我们需要得到从小到大的数据或者从大到小的数据,这个时候,我们可以使用order by来进行操作.

语法如下:

select 列名/表达式/别名 from exam_result from 表名 order by 列名 asc/desc;

例子如下:

我们需要将数学成绩从大到小进行排序

select name,math from exam_result order by math desc;

这样我们就进行了一个数学成绩的从大到小排序.

**注意: **1.order by 列名后面的desc代表的是从大到小排序,而asc是从小到大排序.而如果什么都不写的话,默认就是从小到大排序!

     2.当你没有使用order by的时候,你查询的时候返回的顺序是**没定义的,是不可预测的**.永远**不要依赖于这个顺序**!

     3.当数据中出现null的时候,null被视为最小值,比表里的任何数据都小.

2.6 使用表达式/别名进行排序

上面我们说了排序,那么我们现在就可以使用别名来进行排序.

语法如下:

select 表达式 as from 表名 order by 表达式;
select 表达式 as 别名 from 表名 order by 别名;

例子如下:

查询一下总分,并且从小到大排序.

select name,chinese+math+english from exam_result order by chinese+math+english;

也可以使用别名:

select name,chinese+math+english as total from exam_result order by total;

2.7 条件查询(Where)

2.7.1 基本查询

语法如下:

select 列名/*/表达式/别名 from 列名 where 条件; 

例子如下:

  1. 查询英语不及格的同学以及其英语成绩.
select name,english from exam_result where english<60;

  1. 查询总分在200分以上的同学及其成绩.
select name,chinese+math+english as total from exam_result where chinese+math+english>200;

  1. 查询数学比英语高的同学以及其成绩.
select name,math,english from exam_result where math>english;

注意: 在where里面,不可以使用别名来代替表达式.但是可以使用别名.

2.7.2 and和or

and和or就代表着&和|.他们的意思是一样的.

例子如下:

1.查询数学大于80并且英语小于60的人.

select name,math,english from exam_result where math>80 and english < 60;

在这个例子中,我们使用and连接两个条件,表示只有两个条件都满足的时候,才输出此条数据.

  1. 查询语文大于80 或者 数学小于80的人.
select name,chinese,math from exam_result where chinese > 80 or math < 80;

这个SQL语句中,我们就是使用or来连接条件的,这表示只要满足其中一个条件,就输出该数据.

**注意:**and和or同时使用的时候,and的优先级比or高,因此在使用and和or的时候,尽量使用()来表明优先级.

由这个图可知,当没加括号的时候,先执行后面的maht >70 and english > 70这个语句,然后执行chinese > 80.然后做or操作.

2.7.3 范围查询

  1. 查询数学成绩在[80,90]之间的同学及其数学成绩.
select name,math from exam_result where math between 80 and 90;

这个也可以使用and来实现.

select name,math from exam_result where math>=80 and math <= 90;

在这里我们使用了between and 这个关键词,它可以查找出在其范围内的数据.并且是左闭右闭.

**注意:**虽然between and 有时候可以使用and来实现,但是不建议这样做.因为在MySQL中有一个最左前缀匹配原则.这个在索引的时候会了解到.

  1. 查询语文成绩是87,70,56,55其中一个的人及其语文成绩.
select name,chinese from exam_result where chinese in (87,70,56,55);

在这里我们使用了in这个关键词,它可以筛选出在括号里面的数据.这个例子也可以使用or来实现,这里就不演示了.

  1. 模糊查询(Like)

3.1 查询姓孙的同学,并且名字是两个字.

select * from exam_result where name like '孙_';

在这个SQL语句中,我们使用了like关键词,并且使用了下划线. 其中一个下划线代表一个字符,而孙_就表示是姓孙,名字为两个字的人.

3.2 查询姓孙的同学,无论名字有几个字.

select * from exam_result where name like '孙%';

在上述SQL语句,跟上一个例子不同的是,' '里面是孙%而不是孙_,这是因为%代表后面是任意多个字符.而_是代表一个字符.

2.7.4 分页查询(Limit)

语法如下:

select */表达式/列/别名 from 表名 limit n offset m;

这个是最简单的分页查询.在表名后面还可以加上各种条件,并且还可以使用order by来进行排序.

例子如下:

查询总成绩在前三名的同学.

select name,chinese+math+english as total from exam_result order by total desc limit 3;

这个表中就是总分前三名了.

注意: 如果limit后面的数大于数据被筛选后的总数,不会受到影响,MySQL会打印出所有的数据.

三,修改(update)

在MySQL中,我们使用update关键词来修改.

语法如下:

update 表名 set 列名 = 数据; 

这个就是最简单的修改SQL语句,而在数据的后面我们还可以增加where语句,order by语句和limit语句等等,来限制我们的修改范围.

例子如下:

  1. 将孙悟空同学的数学修改成70分.
update exam_result set math = 70 where name = '孙悟空';

  1. 将曹孟德同学的语文改成70分,数学改成60分.
update exam_result set chinese = 70,math = 60 where name = '曹孟德';

  1. 将总成绩倒数前三名的数学成绩加\30分.
update exam_result set math = math+30 order by chinese+math+english limit 3;

这是修改前倒数前三名的成绩.

修改后:

可以看见宋公明,刘玄德,曹孟德的数学成绩都加上了30分.

四,删除(Delete)

当我们想要删除某个数据或者某些数据的时候,我们可以使用delete关键词来进行操作.

语法如下:

detele from 表名 where.../order by .../limit n;

例子如下:

  1. 删除唐三藏的成绩.
delete from exam_result where name = '唐三藏';

执行之后我们看见,exam_result表中已经没有了唐三藏同学了.

这就是所有的内容了,本人学识有限,肯定有没有说到或者说错的地方,请大家谅解!

标签: mysql 数据库

本文转载自: https://blog.csdn.net/weixin_64597430/article/details/127867278
版权归原作者 朱wwww 所有, 如有侵权,请联系我们删除。

“MySQL增删改查(基础)”的评论:

还没有评论