目录
一,增加(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 表名 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语句等等,来限制我们的修改范围.
例子如下:
将孙悟空同学的数学修改成70分.
update exam_result set math = 70 where name = '孙悟空';
2. 将曹孟德同学的语文改成70分,数学改成60分.
update exam_result set chinese = 70,math = 60 where name = '曹孟德';
3. 将总成绩倒数前三名的数学成绩加\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;
例子如下:
删除唐三藏的成绩.
delete from exam_result where name = '唐三藏';
执行之后我们看见,exam_result表中已经没有了唐三藏同学了.
这就是所有的内容了,本人学识有限,肯定有没有说到或者说错的地方,请大家谅解!
来源地址:https://blog.csdn.net/weixin_64597430/article/details/127867278